From 0a97f8a1e1353a1e5c023d2c6c2b1639398d9d07 Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Fri, 27 Jan 2023 15:38:59 +0100 Subject: [PATCH 1/3] added button Place a button switch between TEST pin (P1.0) and GND + capacitor in parallel). Pressing button wakes up the tag and sends a request to the AP, including button state. --- ap_fw/main.c | 1 + esp32_fw/include/commstructs.h | 1 + esp32_fw/src/newproto.cpp | 2 +- tag_fw/fw29.bin | Bin 31540 -> 31545 bytes tag_fw/syncedproto.c | 37 +++++++++++++++++++++++++++++++++ 5 files changed, 40 insertions(+), 1 deletion(-) diff --git a/ap_fw/main.c b/ap_fw/main.c index 573816c5..d5149570 100644 --- a/ap_fw/main.c +++ b/ap_fw/main.c @@ -60,6 +60,7 @@ struct AvailDataReq { uint8_t softVer; uint8_t hwType; uint8_t protoVer; + //uint8_t buttonState; } __packed; #define DATATYPE_NOUPDATE 0 diff --git a/esp32_fw/include/commstructs.h b/esp32_fw/include/commstructs.h index b9b6a5d6..8afb0a75 100644 --- a/esp32_fw/include/commstructs.h +++ b/esp32_fw/include/commstructs.h @@ -27,6 +27,7 @@ struct AvailDataReq { uint8_t softVer; uint8_t hwType; uint8_t protoVer; + //uint8_t buttonState; } __packed; struct espAvailDataReq { diff --git a/esp32_fw/src/newproto.cpp b/esp32_fw/src/newproto.cpp index 44900621..00f130f0 100644 --- a/esp32_fw/src/newproto.cpp +++ b/esp32_fw/src/newproto.cpp @@ -147,7 +147,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, "adr->protoVer); wsString((String)buffer); Serial.print(buffer); } diff --git a/tag_fw/fw29.bin b/tag_fw/fw29.bin index d90d2501e1c20a0f69cce0de86cdad32738caa62..60dda2ecc08db7bec02ac1ae751475ec272857df 100644 GIT binary patch delta 6918 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 diff --git a/tag_fw/syncedproto.c b/tag_fw/syncedproto.c index 10a43b93..0e571f88 100644 --- a/tag_fw/syncedproto.c +++ b/tag_fw/syncedproto.c @@ -68,6 +68,7 @@ struct AvailDataReq { uint8_t softVer; uint8_t hwType; uint8_t protoVer; + //uint8_t buttonState; } __packed; #define DATATYPE_NOUPDATE 0 @@ -252,8 +253,36 @@ void initAfterWake() { void doSleep(uint32_t __xdata t) { if(t>1000)pr("s=%lu\n ", t / 1000); powerPortsDownForSleep(); + + //Button setup on TEST pin 1.0 (input pullup) + uint8_t tmp_P1FUNC = P1FUNC; + uint8_t tmp_P1DIR = P1DIR; + uint8_t tmp_P1PULL = P1PULL; + uint8_t tmp_P1LVLSEL = P1LVLSEL; + + P1FUNC &=~ (1 << 0); + P1DIR |= (1 << 0); + P1PULL |= (1 << 0); + + P1LVLSEL |= (1 << 0); + P1CHSTA &=~ (1 << 0); + P0INTEN = 0; + P1INTEN = (1 << 0); + P2INTEN = 0; + P1CHSTA &=~ (1 << 0); + // sleepy sleepForMsec(t); + + P0INTEN = 0; + P1INTEN = 0; + P2INTEN = 0; + + P1FUNC = tmp_P1FUNC; + P1DIR = tmp_P1DIR; + P1PULL = tmp_P1PULL; + P1LVLSEL = tmp_P1LVLSEL; + initAfterWake(); } uint16_t getNextSleep() { @@ -295,6 +324,11 @@ void sendAvailDataReq() { txframe->srcPan = 0x4447; // TODO: send some meaningful data availreq->softVer = 1; + if (P1CHSTA && (1 << 0)) { + availreq->protoVer = 1; //buttonState + pr("button pressed\n"); + P1CHSTA &=~ (1 << 0); + } addCRC(availreq, sizeof(struct AvailDataReq)); commsTxNoCpy(outBuffer); } @@ -897,6 +931,9 @@ void mainProtocolLoop(void) { screenSleep(); eepromDeepPowerDown(); initRadio(); + + P1CHSTA &=~ (1 << 0); + // drawPartial(); // i2ctest(); // doSleep(10000); From 7211dcf19e3b2b8f01555607cefaf568916e6358 Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Fri, 27 Jan 2023 15:52:55 +0100 Subject: [PATCH 2/3] bugfix on added button --- esp32_fw/src/newproto.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/esp32_fw/src/newproto.cpp b/esp32_fw/src/newproto.cpp index 00f130f0..fb194825 100644 --- a/esp32_fw/src/newproto.cpp +++ b/esp32_fw/src/newproto.cpp @@ -145,9 +145,7 @@ void processXferComplete(struct espXferComplete* xfc) { void processDataReq(struct espAvailDataReq* eadr) { char buffer[64]; 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, "adr->protoVer); + 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], eadr->adr.protoVer); wsString((String)buffer); Serial.print(buffer); } From 5808fdd733908c7b23cb86af2844794507edc9d5 Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Fri, 27 Jan 2023 23:19:53 +0100 Subject: [PATCH 3/3] button fixes added buttonState in struct, #define HAS_BUTTON to enable listening to the button state. --- ap_fw/main.c | 2 +- esp32_fw/include/commstructs.h | 2 +- esp32_fw/src/newproto.cpp | 2 +- tag_fw/syncedproto.c | 27 +++++++++------------------ 4 files changed, 12 insertions(+), 21 deletions(-) diff --git a/ap_fw/main.c b/ap_fw/main.c index d5149570..2d3453c6 100644 --- a/ap_fw/main.c +++ b/ap_fw/main.c @@ -60,7 +60,7 @@ struct AvailDataReq { uint8_t softVer; uint8_t hwType; uint8_t protoVer; - //uint8_t buttonState; + uint8_t buttonState; } __packed; #define DATATYPE_NOUPDATE 0 diff --git a/esp32_fw/include/commstructs.h b/esp32_fw/include/commstructs.h index 8afb0a75..bf1f2a24 100644 --- a/esp32_fw/include/commstructs.h +++ b/esp32_fw/include/commstructs.h @@ -27,7 +27,7 @@ struct AvailDataReq { uint8_t softVer; uint8_t hwType; uint8_t protoVer; - //uint8_t buttonState; + uint8_t buttonState; } __packed; struct espAvailDataReq { diff --git a/esp32_fw/src/newproto.cpp b/esp32_fw/src/newproto.cpp index fb194825..a323b133 100644 --- a/esp32_fw/src/newproto.cpp +++ b/esp32_fw/src/newproto.cpp @@ -145,7 +145,7 @@ void processXferComplete(struct espXferComplete* xfc) { void processDataReq(struct espAvailDataReq* eadr) { char buffer[64]; uint8_t src[8]; - 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], eadr->adr.protoVer); + 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], eadr->adr.buttonState); wsString((String)buffer); Serial.print(buffer); } diff --git a/tag_fw/syncedproto.c b/tag_fw/syncedproto.c index 0e571f88..56e23fd1 100644 --- a/tag_fw/syncedproto.c +++ b/tag_fw/syncedproto.c @@ -68,7 +68,7 @@ struct AvailDataReq { uint8_t softVer; uint8_t hwType; uint8_t protoVer; - //uint8_t buttonState; + uint8_t buttonState; } __packed; #define DATATYPE_NOUPDATE 0 @@ -160,6 +160,9 @@ uint8_t __xdata seq = 0; #define DATA_REQ_MAX_ATTEMPTS 14 // How many attempts (at most) we should do to get something back from the AP #define POWER_SAVING_SMOOTHING 8 // How many samples we should use to smooth the data request interval #define MINIMUM_INTERVAL 45 // IMPORTANT: Minimum interval for check-in; this determines overal battery life! + +#define HAS_BUTTON // uncomment to enable reading a push button (connect between 'TEST' en 'GND' on the tag, along with a 100nF capacitor in parallel). + uint16_t __xdata dataReqAttemptArr[POWER_SAVING_SMOOTHING] = {0}; // Holds the amount of attempts required per data_req/check-in uint8_t __xdata dataReqAttemptArrayIndex = 0; uint8_t __xdata dataReqLastAttempt = 0; @@ -254,34 +257,22 @@ void doSleep(uint32_t __xdata t) { if(t>1000)pr("s=%lu\n ", t / 1000); powerPortsDownForSleep(); +#ifdef HAS_BUTTON //Button setup on TEST pin 1.0 (input pullup) - uint8_t tmp_P1FUNC = P1FUNC; - uint8_t tmp_P1DIR = P1DIR; - uint8_t tmp_P1PULL = P1PULL; - uint8_t tmp_P1LVLSEL = P1LVLSEL; - P1FUNC &=~ (1 << 0); P1DIR |= (1 << 0); P1PULL |= (1 << 0); - P1LVLSEL |= (1 << 0); - P1CHSTA &=~ (1 << 0); - P0INTEN = 0; P1INTEN = (1 << 0); - P2INTEN = 0; P1CHSTA &=~ (1 << 0); +#endif // sleepy sleepForMsec(t); - P0INTEN = 0; +#ifdef HAS_BUTTON P1INTEN = 0; - P2INTEN = 0; - - P1FUNC = tmp_P1FUNC; - P1DIR = tmp_P1DIR; - P1PULL = tmp_P1PULL; - P1LVLSEL = tmp_P1LVLSEL; +#endif initAfterWake(); } @@ -325,7 +316,7 @@ void sendAvailDataReq() { // TODO: send some meaningful data availreq->softVer = 1; if (P1CHSTA && (1 << 0)) { - availreq->protoVer = 1; //buttonState + availreq->buttonState = 1; pr("button pressed\n"); P1CHSTA &=~ (1 << 0); }