From 6a857b00db8e8dfa4be81f33110996c0fb5bbfc5 Mon Sep 17 00:00:00 2001 From: Professr Date: Mon, 22 Jun 2020 14:06:02 -0700 Subject: [PATCH 1/3] Add cpp clamp function to util.h, switched battery and signal strength percentage calcs to it #197 --- src/esp32/main-esp32.cpp | 4 ++-- src/screen.cpp | 3 ++- src/utils.h | 7 +++++++ 3 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 src/utils.h diff --git a/src/esp32/main-esp32.cpp b/src/esp32/main-esp32.cpp index 8b08118cb..e0d53eab1 100644 --- a/src/esp32/main-esp32.cpp +++ b/src/esp32/main-esp32.cpp @@ -5,6 +5,7 @@ #include "main.h" #include "power.h" #include "sleep.h" +#include "utils.h" #include "target_specific.h" bool bluetoothOn; @@ -81,8 +82,7 @@ void readPowerStatus() } else { // If the AXP192 returns a percentage less than 0, the feature is either not supported or there is an error // In that case, we compute an estimate of the charge percent based on maximum and minimum voltages defined in power.h - int calculatedPercentage = ((powerStatus.batteryVoltageMv - BAT_MILLIVOLTS_EMPTY) * 1e2) / (BAT_MILLIVOLTS_FULL - BAT_MILLIVOLTS_EMPTY); - powerStatus.batteryChargePercent = (calculatedPercentage < 0) ? 0 : (calculatedPercentage > 100) ? 100 : calculatedPercentage; + powerStatus.batteryChargePercent = clamp((int)(((powerStatus.batteryVoltageMv - BAT_MILLIVOLTS_EMPTY) * 1e2) / (BAT_MILLIVOLTS_FULL - BAT_MILLIVOLTS_EMPTY)), 0, 100); } DEBUG_MSG("Battery %dmV %d%%\n", powerStatus.batteryVoltageMv, powerStatus.batteryChargePercent); } diff --git a/src/screen.cpp b/src/screen.cpp index 9d43eda8f..707d52c11 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -31,6 +31,7 @@ along with this program. If not, see . #include "main.h" #include "mesh-pb-constants.h" #include "screen.h" +#include "utils.h" #define FONT_HEIGHT 14 // actually 13 for "ariel 10" but want a little extra space #define FONT_HEIGHT_16 (ArialMT_Plain_16[1] + 1) @@ -379,7 +380,7 @@ static void drawNodeInfo(OLEDDisplay *display, OLEDDisplayUiState *state, int16_ const char *username = node->has_user ? node->user.long_name : "Unknown Name"; static char signalStr[20]; - snprintf(signalStr, sizeof(signalStr), "Signal: %.0f", node->snr); + snprintf(signalStr, sizeof(signalStr), "Signal: %d%%", clamp((int)((node->snr + 10) * 5), 0, 100)); uint32_t agoSecs = sinceLastSeen(node); static char lastStr[20]; diff --git a/src/utils.h b/src/utils.h new file mode 100644 index 000000000..36f719ca7 --- /dev/null +++ b/src/utils.h @@ -0,0 +1,7 @@ +#pragma once + +/// C++ v17+ clamp function, limits a given value to a range defined by lo and hi +template +constexpr const T& clamp( const T& v, const T& lo, const T& hi ) { + return (v < lo) ? lo : (hi < v) ? hi : v; +} \ No newline at end of file From 64cf1890f2808b2cb464cbe09a7a79c0e4beb9f3 Mon Sep 17 00:00:00 2001 From: geeksville Date: Mon, 22 Jun 2020 17:10:18 -0700 Subject: [PATCH 2/3] prebump to 0.7.9 build number, though not doing a release yet... Because I want to pick a min build number for 'BLE OTA update allowed' --- bin/version.sh | 2 +- docs/software/TODO.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/version.sh b/bin/version.sh index 7cc716c14..58db3c516 100644 --- a/bin/version.sh +++ b/bin/version.sh @@ -1,3 +1,3 @@ -export VERSION=0.7.8 \ No newline at end of file +export VERSION=0.7.9 \ No newline at end of file diff --git a/docs/software/TODO.md b/docs/software/TODO.md index 1e42fa306..7ff5c5b78 100644 --- a/docs/software/TODO.md +++ b/docs/software/TODO.md @@ -2,6 +2,7 @@ You probably don't care about this section - skip to the next one. +- check BLE handle stability across sleep - stress test sleep/wake - test BLE software update again - @feh123 Sony Xperia Z1 C6903 running Android 5.1.1 - first message sent is still doubled for some people From 4e958c92300e28923a2cd749a07fb17b86d62339 Mon Sep 17 00:00:00 2001 From: geeksville Date: Mon, 22 Jun 2020 17:10:41 -0700 Subject: [PATCH 3/3] make software update keep device from sleeping --- docs/software/TODO.md | 2 +- src/esp32/BluetoothSoftwareUpdate.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/software/TODO.md b/docs/software/TODO.md index 7ff5c5b78..2c29b000a 100644 --- a/docs/software/TODO.md +++ b/docs/software/TODO.md @@ -2,7 +2,7 @@ You probably don't care about this section - skip to the next one. -- check BLE handle stability across sleep - stress test sleep/wake +- check BLE handle stability across sleep - stress test sleep/wake - btu_init_core calls gatt_init - which assigns handles global - test BLE software update again - @feh123 Sony Xperia Z1 C6903 running Android 5.1.1 - first message sent is still doubled for some people diff --git a/src/esp32/BluetoothSoftwareUpdate.cpp b/src/esp32/BluetoothSoftwareUpdate.cpp index f5f98a47f..fd4c06155 100644 --- a/src/esp32/BluetoothSoftwareUpdate.cpp +++ b/src/esp32/BluetoothSoftwareUpdate.cpp @@ -76,6 +76,7 @@ class DataCharacteristic : public CallbackCharacteristic crc.update(data, len); Update.write(data, len); updateActualSize += len; + powerFSM.trigger(EVENT_RECEIVED_TEXT_MSG); // Not exactly correct, but we want to force the device to not sleep now } }; @@ -123,8 +124,10 @@ class CRC32Characteristic : public CallbackCharacteristic void bluetoothRebootCheck() { - if (rebootAtMsec && millis() > rebootAtMsec) + if (rebootAtMsec && millis() > rebootAtMsec) { + DEBUG_MSG("Rebooting for update\n"); ESP.restart(); + } } /*