diff --git a/tag_fw/fw154.bin b/tag_fw/fw154.bin index 087570fb..d320a5e3 100644 Binary files a/tag_fw/fw154.bin and b/tag_fw/fw154.bin differ diff --git a/tag_fw/fw29.bin b/tag_fw/fw29.bin index 4d8d72c5..3b930cb0 100644 Binary files a/tag_fw/fw29.bin and b/tag_fw/fw29.bin differ diff --git a/tag_fw/fw42.bin b/tag_fw/fw42.bin index 30a13fba..b57cd1ba 100644 Binary files a/tag_fw/fw42.bin and b/tag_fw/fw42.bin differ diff --git a/tag_fw/main.c b/tag_fw/main.c index 6eef0fe3..fcc0623b 100644 --- a/tag_fw/main.c +++ b/tag_fw/main.c @@ -217,12 +217,16 @@ void mainProtocolLoop(void) { voltageCheckCounter++; // check if the battery level is below minimum, and force a redraw of the screen - if ((batteryVoltage < BATTERY_VOLTAGE_MINIMUM && !lowBatteryShown) || (noAPShown)) { + if ((lowBattery && !lowBatteryShown) || (noAPShown)) { + powerUp(INIT_EPD); // Check if we were already displaying an image if (curImgSlot != 0xFF) { + powerUp(INIT_EEPROM); drawImageFromEeprom(); + powerDown(INIT_EEPROM); } else { showAPFound(); + powerDown(INIT_EPD); } } @@ -280,18 +284,28 @@ void mainProtocolLoop(void) { } else { // not associated - powerUp(INIT_BASE | INIT_RADIO); // || INIT_GPIO | INIT_UART - + if (((scanAttempts != 0) && (scanAttempts % VOLTAGEREADING_DURING_SCAN_INTERVAL == 0)) || (scanAttempts > (INTERVAL_1_ATTEMPTS + INTERVAL_2_ATTEMPTS))) { + powerUp(INIT_BASE | INIT_EPD_VOLTREADING | INIT_RADIO); + } else { + powerUp(INIT_BASE | INIT_RADIO); // || INIT_GPIO | INIT_UART + } // try to find a working channel powerUp(INIT_RADIO); wdt30s(); currentChannel = channelSelect(); powerDown(INIT_RADIO); - if (!currentChannel && !noAPShown) { + if ((!currentChannel && !noAPShown) || (lowBattery && !lowBatteryShown) || (scanAttempts == (INTERVAL_1_ATTEMPTS + INTERVAL_2_ATTEMPTS-1))) { + powerUp(INIT_EPD); if (curImgSlot != 0xFF) { + powerUp(INIT_EEPROM); drawImageFromEeprom(); + powerDown(INIT_EEPROM); + } else if ((scanAttempts >= (INTERVAL_1_ATTEMPTS + INTERVAL_2_ATTEMPTS-1))) { + showLongTermSleep(); + powerDown(INIT_EPD); } else { - showAPFound(); + showNoAP(); + powerDown(INIT_EPD); } } diff --git a/tag_fw/powermgt.c b/tag_fw/powermgt.c index ab588160..37a8e9b1 100644 --- a/tag_fw/powermgt.c +++ b/tag_fw/powermgt.c @@ -34,6 +34,7 @@ uint8_t __xdata scanAttempts = 0; int8_t __xdata temperature = 0; uint16_t __xdata batteryVoltage = 0; +bool __xdata lowBattery = false; uint16_t __xdata longDataReqCounter = 0; uint16_t __xdata voltageCheckCounter = 0; @@ -70,6 +71,11 @@ void powerUp(uint8_t parts) { if (!(parts & INIT_GPIO)) boardInit(); batteryVoltage = epdGetBattery(); + if(batteryVoltage