Update WirelessHEX.cpp
This commit is contained in:
parent
40d4b30094
commit
860fbfb9a0
|
|
@ -44,10 +44,9 @@ void CheckForWirelessHEX(RFM12B radio, SPIFlash flash, boolean DEBUG)
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean HandleWirelessHEXData(RFM12B radio, byte remoteID, SPIFlash flash, boolean DEBUG) {
|
boolean HandleWirelessHEXData(RFM12B radio, byte remoteID, SPIFlash flash, boolean DEBUG) {
|
||||||
int seq=0;
|
|
||||||
uint8_t c;
|
uint8_t c;
|
||||||
long now=0;
|
long now=0;
|
||||||
int tmp,len;
|
uint16_t tmp,seq=0,len;
|
||||||
char buffer[16];
|
char buffer[16];
|
||||||
int timeout = 3000; //3s for flash data
|
int timeout = 3000; //3s for flash data
|
||||||
uint16_t bytesFlashed=10;
|
uint16_t bytesFlashed=10;
|
||||||
|
|
@ -72,7 +71,7 @@ boolean HandleWirelessHEXData(RFM12B radio, byte remoteID, SPIFlash flash, boole
|
||||||
if (radio.Data[3]==':' && dataLen >= 7) //FLX:_:_
|
if (radio.Data[3]==':' && dataLen >= 7) //FLX:_:_
|
||||||
{
|
{
|
||||||
byte index=3;
|
byte index=3;
|
||||||
int tmp = 0;
|
tmp = 0;
|
||||||
|
|
||||||
//read packet SEQ
|
//read packet SEQ
|
||||||
for (byte i = 4; i<8; i++) //up to 4 characters for seq number
|
for (byte i = 4; i<8; i++) //up to 4 characters for seq number
|
||||||
|
|
@ -104,7 +103,7 @@ boolean HandleWirelessHEXData(RFM12B radio, byte remoteID, SPIFlash flash, boole
|
||||||
flash.writeByte(bytesFlashed++, radio.Data[i]);
|
flash.writeByte(bytesFlashed++, radio.Data[i]);
|
||||||
|
|
||||||
//send ACK
|
//send ACK
|
||||||
tmp = sprintf(buffer, "FLX:%d:OK", tmp);
|
tmp = sprintf(buffer, "FLX:%u:OK", tmp);
|
||||||
if (DEBUG) Serial.println((char*)buffer);
|
if (DEBUG) Serial.println((char*)buffer);
|
||||||
radio.SendACK(buffer, tmp);
|
radio.SendACK(buffer, tmp);
|
||||||
seq++;
|
seq++;
|
||||||
|
|
@ -149,23 +148,17 @@ boolean HandleWirelessHEXData(RFM12B radio, byte remoteID, SPIFlash flash, boole
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// reads a line feed (\n) terminated line from the serial stream
|
||||||
//returns # of bytes read, up to 64
|
// returns # of bytes read, up to 255
|
||||||
byte readSerialLine(void* input)
|
// timeout in ms, will timeout and return after so long
|
||||||
|
byte readSerialLine(char* input, char endOfLineChar, byte maxLength, uint16_t timeout)
|
||||||
{
|
{
|
||||||
//char c;
|
|
||||||
byte inputLen = 0;
|
byte inputLen = 0;
|
||||||
if (Serial.available())
|
Serial.setTimeout(timeout);
|
||||||
{
|
inputLen = Serial.readBytesUntil(endOfLineChar, input, maxLength);
|
||||||
do {
|
input[inputLen]=0;//null-terminate it
|
||||||
//c = Serial.read();
|
Serial.setTimeout(0);
|
||||||
//if (c>=32 && c<=126) //only human readable ASCII
|
//Serial.println();
|
||||||
((byte*)input)[inputLen++]=Serial.read();
|
|
||||||
delay(2); //need it otherwise serial stream can get truncated
|
|
||||||
}
|
|
||||||
while(Serial.available());
|
|
||||||
((byte*)input)[inputLen]=0;
|
|
||||||
}
|
|
||||||
return inputLen;
|
return inputLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -256,9 +249,9 @@ boolean HandleSerialHEXData(RFM12B radio, byte targetID, uint16_t TIMEOUT, uint1
|
||||||
//Serial.print("PREP ");Serial.print(sendBufLen); Serial.print(" > "); PrintHex83(sendBuf, sendBufLen);
|
//Serial.print("PREP ");Serial.print(sendBufLen); Serial.print(" > "); PrintHex83(sendBuf, sendBufLen);
|
||||||
|
|
||||||
//SEND RADIO DATA
|
//SEND RADIO DATA
|
||||||
if (sendHEXPacket(radio, remoteID, sendBuf, sendBufLen, seq, DEBUG))
|
if (sendHEXPacket(radio, remoteID, sendBuf, sendBufLen, seq, TIMEOUT, ACKTIMEOUT, DEBUG))
|
||||||
{
|
{
|
||||||
sprintf((char*)sendBuf, "FLX:%d:OK",seq);
|
sprintf((char*)sendBuf, "FLX:%u:OK",seq);
|
||||||
Serial.println((char*)sendBuf); //response to host (python?)
|
Serial.println((char*)sendBuf); //response to host (python?)
|
||||||
seq++;
|
seq++;
|
||||||
}
|
}
|
||||||
|
|
@ -326,7 +319,7 @@ byte validateHEXData(void* data, byte length)
|
||||||
//returns the final size of the buf
|
//returns the final size of the buf
|
||||||
byte prepareSendBuffer(char* hexdata, byte*buf, byte length, uint16_t seq)
|
byte prepareSendBuffer(char* hexdata, byte*buf, byte length, uint16_t seq)
|
||||||
{
|
{
|
||||||
byte seqLen = sprintf(((char*)buf), "FLX:%d:", seq);
|
byte seqLen = sprintf(((char*)buf), "FLX:%u:", seq);
|
||||||
for (byte i=0; i<length;i++)
|
for (byte i=0; i<length;i++)
|
||||||
buf[seqLen+i] = BYTEfromHEX(hexdata[i*2], hexdata[i*2+1]);
|
buf[seqLen+i] = BYTEfromHEX(hexdata[i*2], hexdata[i*2+1]);
|
||||||
return seqLen+length;
|
return seqLen+length;
|
||||||
|
|
@ -339,11 +332,11 @@ byte BYTEfromHEX(char MSB, char LSB)
|
||||||
}
|
}
|
||||||
|
|
||||||
//return the SEQ of the ACK received, or -1 if invalid
|
//return the SEQ of the ACK received, or -1 if invalid
|
||||||
boolean sendHEXPacket(RFM12B radio, byte targetID, byte* sendBuf, byte hexDataLen, byte seq, uint16_t TIMEOUT, uint16_t ACKTIMEOUT, boolean DEBUG)
|
boolean sendHEXPacket(RFM12B radio, byte targetID, byte* sendBuf, byte hexDataLen, uint16_t seq, uint16_t TIMEOUT, uint16_t ACKTIMEOUT, boolean DEBUG)
|
||||||
{
|
{
|
||||||
long now = millis();
|
long now = millis();
|
||||||
|
|
||||||
while(1){
|
while(1) {
|
||||||
if (DEBUG) { Serial.print("RFTX > "); PrintHex83(sendBuf, hexDataLen); }
|
if (DEBUG) { Serial.print("RFTX > "); PrintHex83(sendBuf, hexDataLen); }
|
||||||
radio.Send(targetID, sendBuf, hexDataLen, true);
|
radio.Send(targetID, sendBuf, hexDataLen, true);
|
||||||
|
|
||||||
|
|
@ -357,8 +350,8 @@ boolean sendHEXPacket(RFM12B radio, byte targetID, byte* sendBuf, byte hexDataLe
|
||||||
radio.Data[3]==':' && radio.Data[ackLen-3]==':' &&
|
radio.Data[3]==':' && radio.Data[ackLen-3]==':' &&
|
||||||
radio.Data[ackLen-2]=='O' && radio.Data[ackLen-1]=='K')
|
radio.Data[ackLen-2]=='O' && radio.Data[ackLen-1]=='K')
|
||||||
{
|
{
|
||||||
int tmp=0;
|
uint16_t tmp=0;
|
||||||
sscanf((const char*)radio.Data, "FLX:%d:OK", &tmp);
|
sscanf((const char*)radio.Data, "FLX:%u:OK", &tmp);
|
||||||
return tmp == seq;
|
return tmp == seq;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue