From 046d08cd181e6a491607608ea86420ee9a2a992a Mon Sep 17 00:00:00 2001 From: Jelmer Date: Sat, 11 Mar 2023 15:24:13 +0100 Subject: [PATCH] added start/stop event mode --- ap_fw/main.c | 49 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/ap_fw/main.c b/ap_fw/main.c index 058c161a..aed84837 100644 --- a/ap_fw/main.c +++ b/ap_fw/main.c @@ -179,8 +179,9 @@ uint8_t seq = 0; // holds current sequence uint8_t __xdata blockbuffer[BLOCK_XFER_BUFFER_SIZE]; // block transfer buffer uint8_t lastAckMac[8] = {0}; -uint8_t* eventDataBuffer = blockbuffer+1024; -bool __xdata eventMode = true; +#define EVENT_PKT_SIZE 100 +uint8_t *eventDataBuffer = blockbuffer + 1024; +bool __xdata eventMode = false; // these variables hold the current mac were talking to #define CONCURRENT_REQUEST_DELAY 1200UL * TIMER_TICKS_PER_MS @@ -296,6 +297,7 @@ void deleteAllPendingDataForVer(const uint8_t *ver) { #define ZBS_RX_WAIT_HEADER 0 #define ZBS_RX_WAIT_SDA 1 #define ZBS_RX_WAIT_CANCEL 2 +#define ZBS_RX_WAIT_EVENTD 3 void processSerial(uint8_t lastchar) { // uartTx(lastchar); echo switch (RXState) { @@ -311,6 +313,28 @@ void processSerial(uint8_t lastchar) { serialbufferp = serialbuffer; break; } + + if (strncmp(cmdbuffer, "UED>", 4) == 0) { + RXState = ZBS_RX_WAIT_EVENTD; + bytesRemain = sizeof(struct eventData) + EVENT_PKT_SIZE; + serialbufferp = blockbuffer; + break; + } + + if (strncmp(cmdbuffer, "EEM>", 4) == 0) { + // enter event mode + eventMode = true; + pr("ACK>"); + break; + } + + if (strncmp(cmdbuffer, "SEM>", 4) == 0) { + // disable event mode + eventMode = false; + pr("ACK>"); + break; + } + if (strncmp(cmdbuffer, "CXD>", 4) == 0) { RXState = ZBS_RX_WAIT_CANCEL; bytesRemain = sizeof(struct pendingData); @@ -327,7 +351,20 @@ void processSerial(uint8_t lastchar) { wdtDeviceReset(); } break; - + case ZBS_RX_WAIT_EVENTD: + *serialbufferp = lastchar; + serialbufferp++; + bytesRemain--; + if (bytesRemain == 0) { + if (checkCRC(blockbuffer, sizeof(struct eventData) + EVENT_PKT_SIZE)) { + xMemCopyShort((void *)eventDataBuffer, blockbuffer, sizeof(struct eventData) + EVENT_PKT_SIZE); + pr("ACK>\n"); + } else { + pr("NOK>\n"); + } + RXState = ZBS_RX_WAIT_HEADER; + } + break; case ZBS_RX_WAIT_SDA: *serialbufferp = lastchar; serialbufferp++; @@ -671,8 +708,6 @@ void sendPong(void *__xdata buf) { radioTx(radiotxbuffer); } -#define EVENT_PKT_SIZE 100 - void sendEventData(void *__xdata buf) { struct MacFrameBcast *rxframe = (struct MacFrameBcast *)buf; struct MacFrameNormal *frameHeader = (struct MacFrameNormal *)(radiotxbuffer + 1); @@ -690,8 +725,6 @@ void sendEventData(void *__xdata buf) { radioTx(radiotxbuffer); } - - // main loop void main(void) { clockingAndIntsInit(); @@ -754,7 +787,7 @@ void main(void) { processXferComplete(radiorxbuffer); break; case PKT_EVENT_DATA_REQ: - sendEventData(radiorxbuffer); + if (eventMode == true) sendEventData(radiorxbuffer); break; case PKT_PING: sendPong(radiorxbuffer);