diff --git a/RFM69_OTA.cpp b/RFM69_OTA.cpp index 729bf8a..3b57057 100644 --- a/RFM69_OTA.cpp +++ b/RFM69_OTA.cpp @@ -158,7 +158,7 @@ uint8_t HandleWirelessHEXData(RFM69& radio, uint16_t remoteID, SPIFlash& flash, { uint8_t index=3; tmp = 0; - + //read packet SEQ for (uint8_t i = 4; i<8; i++) //up to 4 characters for seq number { @@ -416,7 +416,7 @@ uint8_t HandleSerialHEXData(RFM69& radio, uint16_t targetID, uint16_t TIMEOUT, u } } } - + //abort FLASH sequence if no valid packet received for a long time timeoutcheck: if (millis()-now > TIMEOUT) @@ -547,6 +547,34 @@ void PrintHex83(uint8_t* data, uint8_t length) Serial.println(); } +//=================================================================================================================== +// bufferChecksum() - compute 1 byte checksum on a byte stream +//=================================================================================================================== +uint8_t bufferChecksum(uint8_t* buffer, uint8_t length) { + uint8_t checksum=0; + for (uint8_t i=0;i57 && hex[i]< 65) || hex[i]>70) return false; + return true; +} + //=================================================================================================================== // resetUsingWatchdog() - Use watchdog to reset the MCU //=================================================================================================================== diff --git a/RFM69_OTA.h b/RFM69_OTA.h index 938504c..f5e60be 100644 --- a/RFM69_OTA.h +++ b/RFM69_OTA.h @@ -78,5 +78,8 @@ uint8_t sendHEXPacket(RFM69& radio, uint16_t remoteID, uint8_t* sendBuf, uint8_t uint8_t BYTEfromHEX(char MSB, char LSB); uint8_t readSerialLine(char* input, char endOfLineChar=10, uint8_t maxLength=115, uint16_t timeout=1000); void PrintHex83(uint8_t* data, uint8_t length); +uint8_t bufferChecksum(uint8_t* buffer, uint8_t length); +uint8_t prepareStoreBuffer(char* hexdata, uint8_t*buf, uint8_t length); +uint8_t validHexString(char* hex, uint16_t expectedByteCount); #endif \ No newline at end of file