diff --git a/esp32_fw/include/serial.h b/esp32_fw/include/serial.h index f5b600e9..d9476e6c 100644 --- a/esp32_fw/include/serial.h +++ b/esp32_fw/include/serial.h @@ -3,4 +3,5 @@ void zbsTx(uint8_t* packetdata, uint8_t len); void zbsRxTask(void* parameter); +void sendCancelPending(struct pendingData* pending); void sendDataAvail(struct pendingData* pending); \ No newline at end of file diff --git a/esp32_fw/src/newproto.cpp b/esp32_fw/src/newproto.cpp index 1b1585ce..1f28f6a8 100644 --- a/esp32_fw/src/newproto.cpp +++ b/esp32_fw/src/newproto.cpp @@ -41,6 +41,12 @@ uint8_t* getDataForFile(File* file) { return ret; } +void prepareCancelPending(uint64_t ver) { + struct pendingData pending = {0}; + pending.availdatainfo.dataVer = ver; + sendCancelPending(&pending); +} + bool prepareDataAvail(String* filename, uint8_t dataType, uint8_t* dst) { *filename = "/" + *filename; if (!LittleFS.exists(*filename)) return false; @@ -92,6 +98,7 @@ void processBlockRequest(struct espBlockRequest* br) { pendingdata* pd = pendingdata::findByVer(br->ver); if (pd == nullptr) { + prepareCancelPending(br->ver); Serial.printf("Couldn't find pendingdata info for ver %llu", br->ver); return; } else { @@ -139,7 +146,7 @@ void processDataReq(struct espAvailDataReq* eadr) { uint8_t src[8]; // *((uint64_t*)src) = swap64(*((uint64_t*)adr->)); sprintf(buffer, "src[7], eadr->src[6], eadr->src[5], eadr->src[4], eadr->src[3], eadr->src[2], eadr->src[1], eadr->src[0]); - //sprintf(buffer, "softVer, adr->batteryMv); + // sprintf(buffer, "softVer, adr->batteryMv); wsString((String)buffer); Serial.print(buffer); } diff --git a/esp32_fw/src/serial.cpp b/esp32_fw/src/serial.cpp index c3df2624..bb3839ad 100644 --- a/esp32_fw/src/serial.cpp +++ b/esp32_fw/src/serial.cpp @@ -70,6 +70,18 @@ void sendDataAvail(struct pendingData* pending) { Serial1.write(0x00); } +void sendCancelPending(struct pendingData* pending) { + addCRC(pending, sizeof(struct pendingData)); + Serial1.print("CXD>"); + for (uint8_t c = 0; c < sizeof(struct pendingData); c++) { + Serial1.write(((uint8_t*)pending)[c]); + } + Serial1.write(0x00); + Serial1.write(0x00); + Serial1.write(0x00); + Serial1.write(0x00); +} + uint8_t RXState = ZBS_RX_WAIT_HEADER; char cmdbuffer[4] = {0}; uint8_t* packetp = nullptr;