Added a feedback mechanism for data available

This commit is contained in:
Jelmer
2023-01-22 00:07:47 +01:00
parent 20a240d904
commit 8240648b7d
3 changed files with 21 additions and 1 deletions

View File

@@ -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);

View File

@@ -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, "<ADR %02X%02X%02X%02X%02X%02X%02X%02X\n\0", eadr->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, "<DATA REQ - version=%d, voltage=%d\n", adr->softVer, adr->batteryMv);
// sprintf(buffer, "<DATA REQ - version=%d, voltage=%d\n", adr->softVer, adr->batteryMv);
wsString((String)buffer);
Serial.print(buffer);
}

View File

@@ -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;