277 lines
4.5 KiB
C++
277 lines
4.5 KiB
C++
void parserRead()
|
|
{
|
|
|
|
currentTime = millis()/1000.0-lastTime;
|
|
readSerial();
|
|
if(isAvailable)
|
|
{
|
|
unsigned char c = serialRead & 0xff;
|
|
if((c == 0x55) && (isStart == false))
|
|
{
|
|
if(prevc == 0xff)
|
|
{
|
|
index=1;
|
|
isStart = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
prevc = c;
|
|
if(isStart)
|
|
{
|
|
if(index == 2)
|
|
{
|
|
dataLen = c;
|
|
}
|
|
else if(index > 2)
|
|
{
|
|
dataLen--;
|
|
}
|
|
writeBuffer(index,c);
|
|
}
|
|
}
|
|
index++;
|
|
if(index > 51)
|
|
{
|
|
index=0;
|
|
isStart=false;
|
|
}
|
|
if(isStart && (dataLen == 0) && (index > 3))
|
|
{
|
|
isStart = false;
|
|
parseData();
|
|
index=0;
|
|
}
|
|
}
|
|
}
|
|
unsigned char readBuffer(int index)
|
|
{
|
|
if(BluetoothSource == DATA_SERIAL)
|
|
{
|
|
return buffer[index];
|
|
}
|
|
else if(BluetoothSource == DATA_SERIAL2)
|
|
{
|
|
return bufferBt1[index];
|
|
}
|
|
else if(BluetoothSource == DATA_SERIAL3)
|
|
{
|
|
return bufferBt2[index];
|
|
}
|
|
}
|
|
|
|
void writeBuffer(int index,unsigned char c)
|
|
{
|
|
if(BluetoothSource == DATA_SERIAL)
|
|
{
|
|
buffer[index]=c;
|
|
}
|
|
else if(BluetoothSource == DATA_SERIAL2)
|
|
{
|
|
bufferBt1[index]=c;
|
|
}
|
|
else if(BluetoothSource == DATA_SERIAL3)
|
|
{
|
|
bufferBt2[index]=c;
|
|
}
|
|
}
|
|
void writeSerial(unsigned char c)
|
|
{
|
|
Serial.write(c);
|
|
Serial2.write(c);
|
|
Serial3.write(c);
|
|
}
|
|
|
|
void readSerial(void)
|
|
{
|
|
isAvailable = false;
|
|
BluetoothSource = DATA_SERIAL;
|
|
if(Serial.available() > 0)
|
|
{
|
|
isAvailable = true;
|
|
BluetoothSource = DATA_SERIAL;
|
|
serialRead = Serial.read();
|
|
}
|
|
|
|
if(Serial2.available() > 0)
|
|
{
|
|
isAvailable = true;
|
|
BluetoothSource = DATA_SERIAL2;
|
|
serialRead = Serial2.read();
|
|
}
|
|
|
|
if(Serial3.available() > 0)
|
|
{
|
|
isAvailable = true;
|
|
BluetoothSource = DATA_SERIAL3;
|
|
serialRead = Serial3.read();
|
|
}
|
|
}
|
|
void writeHead(void)
|
|
{
|
|
writeSerial(0xff);
|
|
writeSerial(0x55);
|
|
}
|
|
|
|
void writeEnd(void)
|
|
{
|
|
Serial.println();
|
|
Serial2.println();
|
|
Serial3.println();
|
|
}
|
|
|
|
|
|
/*
|
|
ff 55 len idx action device port slot data a
|
|
0 1 2 3 4 5 6 7 8
|
|
*/
|
|
void parseData(void)
|
|
{
|
|
isStart = false;
|
|
int idx = readBuffer(3);
|
|
int action = readBuffer(4);
|
|
int device = readBuffer(5);
|
|
switch(action)
|
|
{
|
|
case GET:
|
|
{
|
|
writeHead();
|
|
writeSerial(idx);
|
|
readSensor(device);
|
|
writeEnd();
|
|
}
|
|
break;
|
|
case RUN:
|
|
{
|
|
runModule(device);
|
|
//callOK();
|
|
}
|
|
break;
|
|
case RESET:
|
|
{
|
|
//reset
|
|
resetAll();
|
|
}
|
|
break;
|
|
case START:
|
|
{
|
|
//start
|
|
callOK();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void callOK(void)
|
|
{
|
|
writeSerial(0xff);
|
|
writeSerial(0x55);
|
|
writeEnd();
|
|
}
|
|
|
|
void sendByte(char c)
|
|
{
|
|
writeSerial(1);
|
|
writeSerial(c);
|
|
}
|
|
|
|
void sendString(String s)
|
|
{
|
|
int l = s.length();
|
|
writeSerial(4);
|
|
writeSerial(l);
|
|
for(int i=0;i<l;i++)
|
|
{
|
|
writeSerial(s.charAt(i));
|
|
}
|
|
}
|
|
|
|
void sendFloat(float value)
|
|
{
|
|
writeSerial(2);
|
|
val.floatVal = value;
|
|
writeSerial(val.byteVal[0]);
|
|
writeSerial(val.byteVal[1]);
|
|
writeSerial(val.byteVal[2]);
|
|
writeSerial(val.byteVal[3]);
|
|
}
|
|
|
|
void sendLong(long value)
|
|
{
|
|
writeSerial(6);
|
|
val.longVal = value;
|
|
writeSerial(val.byteVal[0]);
|
|
writeSerial(val.byteVal[1]);
|
|
writeSerial(val.byteVal[2]);
|
|
writeSerial(val.byteVal[3]);
|
|
}
|
|
|
|
void sendShort(short value)
|
|
{
|
|
writeSerial(3);
|
|
valShort.shortVal = value;
|
|
writeSerial(valShort.byteVal[0]);
|
|
writeSerial(valShort.byteVal[1]);
|
|
}
|
|
|
|
void sendDouble(double value)
|
|
{
|
|
writeSerial(5);
|
|
valDouble.doubleVal = value;
|
|
writeSerial(valDouble.byteVal[0]);
|
|
writeSerial(valDouble.byteVal[1]);
|
|
writeSerial(valDouble.byteVal[2]);
|
|
writeSerial(valDouble.byteVal[3]);
|
|
}
|
|
|
|
short readShort(int idx)
|
|
{
|
|
valShort.byteVal[0] = readBuffer(idx);
|
|
valShort.byteVal[1] = readBuffer(idx+1);
|
|
return valShort.shortVal;
|
|
}
|
|
|
|
float readFloat(int idx)
|
|
{
|
|
val.byteVal[0] = readBuffer(idx);
|
|
val.byteVal[1] = readBuffer(idx+1);
|
|
val.byteVal[2] = readBuffer(idx+2);
|
|
val.byteVal[3] = readBuffer(idx+3);
|
|
return val.floatVal;
|
|
}
|
|
|
|
long readLong(int idx)
|
|
{
|
|
val.byteVal[0] = readBuffer(idx);
|
|
val.byteVal[1] = readBuffer(idx+1);
|
|
val.byteVal[2] = readBuffer(idx+2);
|
|
val.byteVal[3] = readBuffer(idx+3);
|
|
return val.longVal;
|
|
}
|
|
|
|
char _receiveStr[20] = {};
|
|
uint8_t _receiveUint8[16] = {};
|
|
|
|
char* readString(int idx,int len)
|
|
{
|
|
for(int i=0;i<len;i++)
|
|
{
|
|
_receiveStr[i]=readBuffer(idx+i);
|
|
}
|
|
_receiveStr[len] = '\0';
|
|
return _receiveStr;
|
|
}
|
|
|
|
uint8_t* readUint8(int idx,int len)
|
|
{
|
|
for(int i=0;i<len;i++)
|
|
{
|
|
if(i > 15)
|
|
{
|
|
break;
|
|
}
|
|
_receiveUint8[i] = readBuffer(idx+i);
|
|
}
|
|
return _receiveUint8;
|
|
}
|