diff --git a/bin/version.sh b/bin/version.sh
index 58db3c51..11037db3 100644
--- a/bin/version.sh
+++ b/bin/version.sh
@@ -1,3 +1,3 @@
-export VERSION=0.7.9
\ No newline at end of file
+export VERSION=0.7.10
\ No newline at end of file
diff --git a/docs/software/TODO.md b/docs/software/TODO.md
index b9ad6eae..e8355bcf 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.
-- implement first cut of router mode: preferentially handle flooding, and change sleep and GPS behaviors
+- implement first cut of router mode: preferentially handle flooding, and change sleep and GPS behaviors (plan for geofence mode and battery save mode)
- NRF52 BLE support
# Medium priority
diff --git a/docs/software/mesh-alg.md b/docs/software/mesh-alg.md
index 2a2e4dd2..f9427cd2 100644
--- a/docs/software/mesh-alg.md
+++ b/docs/software/mesh-alg.md
@@ -32,8 +32,8 @@ optimizations / low priority:
- read this [this](http://pages.cs.wisc.edu/~suman/pubs/nadv-mobihoc05.pdf) paper and others and make our naive flood routing less naive
- read @cyclomies long email with good ideas on optimizations and reply
-- Remove NodeNum assignment algorithm (now that we use 4 byte node nums)
-- make android app warn if firmware is too old or too new to talk to
+- DONE Remove NodeNum assignment algorithm (now that we use 4 byte node nums)
+- DONE make android app warn if firmware is too old or too new to talk to
- change nodenums and packetids in protobuf to be fixed32
- low priority: think more careful about reliable retransmit intervals
- make ReliableRouter.pending threadsafe
diff --git a/platformio.ini b/platformio.ini
index bad647bf..f54ab582 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -23,6 +23,8 @@ default_envs = tbeam ; Note: the github actions CI test build can't yet build NR
[env]
+framework = arduino
+
; customize the partition table
; http://docs.platformio.org/en/latest/platforms/espressif32.html#partition-tables
board_build.partitions = partition-table.csv
@@ -78,7 +80,6 @@ lib_deps =
; Common settings for ESP targes, mixin with extends = esp32_base
[esp32_base]
platform = espressif32
-framework = arduino
src_filter =
${env.src_filter} -
upload_speed = 921600
@@ -133,7 +134,6 @@ build_flags =
; For more details see my post in the forum.
[env:cubecellplus]
platform = https://github.com/HelTecAutomation/platform-asrmicro650x.git ; we use top-of-tree because stable version has too many bugs - asrmicro650x
-framework = arduino
board = cubecell_board_plus
; FIXME, bug in cubecell arduino - they are supposed to set ARDUINO
build_flags = ${env.build_flags} -DARDUINO=100 -Isrc/cubecell
@@ -143,7 +143,6 @@ src_filter =
; Common settings for NRF52 based targets
[nrf52_base]
platform = nordicnrf52
-framework = arduino
debug_tool = jlink
build_type = debug ; I'm debugging with ICE a lot now
; note: liboberon provides the AES256 implementation for NRF52 (though not using the hardware acceleration of the NRF52840 - FIXME)
diff --git a/src/main.cpp b/src/main.cpp
index 56856f6e..89704e6e 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -37,8 +37,8 @@
#include "main.h"
#include "screen.h"
#include "sleep.h"
-#include
#include
+#include
// #include
#ifndef NO_ESP32
@@ -134,15 +134,17 @@ Periodic ledPeriodic(ledBlinker);
// Prepare for button presses
#ifdef BUTTON_PIN
- OneButton userButton;
+OneButton userButton;
#endif
#ifdef BUTTON_PIN_ALT
- OneButton userButtonAlt;
+OneButton userButtonAlt;
#endif
-void userButtonPressed() {
+void userButtonPressed()
+{
powerFSM.trigger(EVENT_PRESS);
}
-void userButtonPressedLong(){
+void userButtonPressedLong()
+{
screen.adjustBrightness();
}
@@ -229,6 +231,10 @@ void setup()
ssd1306_found = false; // forget we even have the hardware
esp32Setup();
+#endif
+
+#ifdef TBEAM_V10
+ // Currently only the tbeam has a PMU
power = new Power();
power->setup();
power->setStatusHandler(powerStatus);
@@ -306,7 +312,6 @@ void setup()
// This must be _after_ service.init because we need our preferences loaded from flash to have proper timeout values
PowerFSM_setup(); // we will transition to ON in a couple of seconds, FIXME, only do this for cold boots, not waking from SDS
-
// setBluetoothEnable(false); we now don't start bluetooth until we enter the proper state
setCPUFast(false); // 80MHz is fine for our slow peripherals
}
@@ -352,6 +357,8 @@ void loop()
#ifndef NO_ESP32
esp32Loop();
+#endif
+#ifdef TBEAM_V10
power->loop();
#endif
@@ -379,7 +386,7 @@ void loop()
// Update the screen last, after we've figured out what to show.
screen.debug()->setChannelNameStatus(channelSettings.name);
- //screen.debug()->setPowerStatus(powerStatus);
+ // screen.debug()->setPowerStatus(powerStatus);
// No GPS lock yet, let the OS put the main CPU in low power mode for 100ms (or until another interrupt comes in)
// i.e. don't just keep spinning in loop as fast as we can.
diff --git a/src/screen.cpp b/src/screen.cpp
index 74f0065d..00c361b2 100644
--- a/src/screen.cpp
+++ b/src/screen.cpp
@@ -55,8 +55,13 @@ static FrameCallback normalFrames[MAX_NUM_NODES + NUM_EXTRA_FRAMES];
static uint32_t targetFramerate = IDLE_FRAMERATE;
static char btPIN[16] = "888888";
-uint8_t imgBattery[16] = { 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xE7, 0x3C };
+uint8_t imgBattery[16] = {0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xE7, 0x3C};
+
+// if defined a pixel will blink to show redraws
+// #define SHOW_REDRAWS
+#ifdef SHOW_REDRAWS
static bool heartbeat = false;
+#endif
static void drawBootScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
{
@@ -177,10 +182,10 @@ static void drawColumns(OLEDDisplay *display, int16_t x, int16_t y, const char *
#endif
// Draw power bars or a charging indicator on an image of a battery, determined by battery charge voltage or percentage.
-static void drawBattery(OLEDDisplay *display, int16_t x, int16_t y, uint8_t *imgBuffer, const PowerStatus *powerStatus)
+static void drawBattery(OLEDDisplay *display, int16_t x, int16_t y, uint8_t *imgBuffer, const PowerStatus *powerStatus)
{
- static const uint8_t powerBar[3] = { 0x81, 0xBD, 0xBD };
- static const uint8_t lightning[8] = { 0xA1, 0xA1, 0xA5, 0xAD, 0xB5, 0xA5, 0x85, 0x85 };
+ static const uint8_t powerBar[3] = {0x81, 0xBD, 0xBD};
+ static const uint8_t lightning[8] = {0xA1, 0xA1, 0xA5, 0xAD, 0xB5, 0xA5, 0x85, 0x85};
// Clear the bar area on the battery image
for (int i = 1; i < 14; i++) {
imgBuffer[i] = 0x81;
@@ -191,7 +196,7 @@ static void drawBattery(OLEDDisplay *display, int16_t x, int16_t y, uint8_t *img
// If not charging, Draw power bars
} else {
for (int i = 0; i < 4; i++) {
- if(powerStatus->getBatteryChargePercent() >= 25 * i)
+ if (powerStatus->getBatteryChargePercent() >= 25 * i)
memcpy(imgBuffer + 1 + (i * 3), powerBar, 3);
}
}
@@ -199,7 +204,7 @@ static void drawBattery(OLEDDisplay *display, int16_t x, int16_t y, uint8_t *img
}
// Draw nodes status
-static void drawNodes(OLEDDisplay *display, int16_t x, int16_t y, NodeStatus *nodeStatus)
+static void drawNodes(OLEDDisplay *display, int16_t x, int16_t y, NodeStatus *nodeStatus)
{
char usersString[20];
sprintf(usersString, "%d/%d", nodeStatus->getNumOnline(), nodeStatus->getNumTotal());
@@ -765,10 +770,12 @@ void DebugInfo::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16
display->drawLogBuffer(x, y + (FONT_HEIGHT * 2));
- /* Display a heartbeat pixel that blinks every time the frame is redrawn
- if(heartbeat) display->setPixel(0, 0);
+ /* Display a heartbeat pixel that blinks every time the frame is redrawn */
+#ifdef SHOW_REDRAWS
+ if (heartbeat)
+ display->setPixel(0, 0);
heartbeat = !heartbeat;
- */
+#endif
}
// adjust Brightness cycle trough 1 to 254 as long as attachDuringLongPress is true
@@ -786,13 +793,13 @@ void Screen::adjustBrightness()
dispdev.setBrightness(brightness);
}
-int Screen::handleStatusUpdate(const Status *arg) {
+int Screen::handleStatusUpdate(const Status *arg)
+{
DEBUG_MSG("Screen got status update %d\n", arg->getStatusType());
- switch(arg->getStatusType())
- {
- case STATUS_TYPE_NODE:
- setFrames();
- break;
+ switch (arg->getStatusType()) {
+ case STATUS_TYPE_NODE:
+ setFrames();
+ break;
}
setPeriod(1); // Update the screen right away
return 0;