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..2c29b000a 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 - 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();
+ }
}
/*
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