diff --git a/bin/version.sh b/bin/version.sh
index 388402b64..b71c5d64c 100644
--- a/bin/version.sh
+++ b/bin/version.sh
@@ -1,3 +1,3 @@
-export VERSION=0.9.5
\ No newline at end of file
+export VERSION=0.9.6
\ No newline at end of file
diff --git a/platformio.ini b/platformio.ini
index d805427f2..6ef76e7d1 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -92,7 +92,7 @@ build_flags =
# board_build.ldscript = linker/esp32.extram.bss.ld
lib_ignore = segger_rtt
platform_packages =
- framework-arduinoespressif32 @ https://github.com/meshtastic/arduino-esp32.git#1adba3f11ca8406ac0a704d151697b572058b53d
+ framework-arduinoespressif32@https://github.com/meshtastic/arduino-esp32.git#2814f110aa618429bdd9a0a2d6a93c55f29f87a6
; customize the partition table
; http://docs.platformio.org/en/latest/platforms/espressif32.html#partition-tables
@@ -105,7 +105,7 @@ board_build.partitions = partition-table.csv
; -DLOG_LOCAL_LEVEL=ESP_LOG_DEBUG -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG
-; The 1.0 release of the TBEAM board
+; The 1.0 release of the TBEAM board
[env:tbeam]
extends = esp32_base
board = ttgo-t-beam
diff --git a/proto b/proto
index 3caee2e5b..ce422b7c4 160000
--- a/proto
+++ b/proto
@@ -1 +1 @@
-Subproject commit 3caee2e5b92d4429c6cf47a4c88d4615001f300b
+Subproject commit ce422b7c448906c6fee3eef64bbd41adfbc990f0
diff --git a/src/configuration.h b/src/configuration.h
index b8f35c0e4..55464d6cd 100644
--- a/src/configuration.h
+++ b/src/configuration.h
@@ -258,6 +258,7 @@ along with this program. If not, see .
// #define VEXT_ENABLE 21 // active low, powers the oled display and the lora antenna boost
#define LED_PIN 2 // If defined we will blink this LED
#define BUTTON_PIN 0 // If defined, this will be used for user button presses
+#define BUTTON_NEED_PULLUP
#define USE_RF95
#define LORA_DIO0 26 // a No connect on the SX1262 module
@@ -284,6 +285,7 @@ along with this program. If not, see .
#define BUTTON_PIN \
0 // If defined, this will be used for user button presses, if your board doesn't have a physical switch, you can wire one
// between this pin and ground
+#define BUTTON_NEED_PULLUP
#define USE_RF95
#define LORA_DIO0 26 // a No connect on the SX1262 module
diff --git a/src/gps/UBloxGPS.cpp b/src/gps/UBloxGPS.cpp
index 80d7064bb..624ab77b8 100644
--- a/src/gps/UBloxGPS.cpp
+++ b/src/gps/UBloxGPS.cpp
@@ -46,8 +46,9 @@ bool UBloxGPS::setup()
// ublox.enableDebugging(Serial);
// try a second time, the ublox lib serial parsing is buggy?
- if (!tryConnect())
- tryConnect();
+ // see https://github.com/meshtastic/Meshtastic-device/issues/376
+ for (int i = 0; (i < 3) && !tryConnect(); i++)
+ delay(500);
if (isConnected) {
DEBUG_MSG("Connected to UBLOX GPS successfully\n");
@@ -81,8 +82,11 @@ bool UBloxGPS::setUBXMode()
// assert(ok);
// ok = ublox.setDynamicModel(DYN_MODEL_BIKE); // probably PEDESTRIAN but just in case assume bike speeds
// assert(ok);
- if (!ublox.powerSaveMode(true, 2000)) // use power save mode, the default timeout (1100ms seems a bit too tight)
- return false;
+
+ // per https://github.com/meshtastic/Meshtastic-device/issues/376 powerSaveMode might not work with the marginal
+ // TTGO antennas
+ // if (!ublox.powerSaveMode(true, 2000)) // use power save mode, the default timeout (1100ms seems a bit too tight)
+ // return false;
if (!ublox.saveConfiguration(3000))
return false;
@@ -106,8 +110,8 @@ bool UBloxGPS::factoryReset()
tryConnect(); // sets isConnected
// try a second time, the ublox lib serial parsing is buggy?
- if (!tryConnect())
- tryConnect();
+ for (int i = 0; (i < 3) && !tryConnect(); i++)
+ delay(500);
DEBUG_MSG("GPS Factory reset success=%d\n", isConnected);
if (isConnected)
@@ -165,7 +169,7 @@ void UBloxGPS::doTask()
latitude = ublox.getLatitude(0);
longitude = ublox.getLongitude(0);
- altitude = ublox.getAltitude(0) / 1000; // in mm convert to meters
+ altitude = ublox.getAltitudeMSL(0) / 1000; // in mm convert to meters
dop = ublox.getPDOP(0); // PDOP (an accuracy metric) is reported in 10^2 units so we have to scale down when we use it
heading = ublox.getHeading(0);
numSatellites = ublox.getSIV(0);
diff --git a/src/mesh/mesh.pb.h b/src/mesh/mesh.pb.h
index 27ff63f9b..64b2758c3 100644
--- a/src/mesh/mesh.pb.h
+++ b/src/mesh/mesh.pb.h
@@ -364,7 +364,7 @@ typedef struct _ToRadio {
#define DeviceState_version_tag 8
#define DeviceState_rx_text_message_tag 7
#define DeviceState_no_save_tag 9
-#define DeviceState_did_gps_reset_tag 10
+#define DeviceState_did_gps_reset_tag 11
#define FromRadio_packet_tag 2
#define FromRadio_my_info_tag 3
#define FromRadio_node_info_tag 4
@@ -519,7 +519,7 @@ X(a, STATIC, REPEATED, MESSAGE, receive_queue, 5) \
X(a, STATIC, OPTIONAL, MESSAGE, rx_text_message, 7) \
X(a, STATIC, SINGULAR, UINT32, version, 8) \
X(a, STATIC, SINGULAR, BOOL, no_save, 9) \
-X(a, STATIC, SINGULAR, BOOL, did_gps_reset, 10)
+X(a, STATIC, SINGULAR, BOOL, did_gps_reset, 11)
#define DeviceState_CALLBACK NULL
#define DeviceState_DEFAULT NULL
#define DeviceState_radio_MSGTYPE RadioConfig
diff --git a/src/sleep.cpp b/src/sleep.cpp
index a08707762..731273c9b 100644
--- a/src/sleep.cpp
+++ b/src/sleep.cpp
@@ -283,8 +283,10 @@ esp_sleep_wakeup_cause_t doLightSleep(uint64_t sleepMsec) // FIXME, use a more r
assert(esp_light_sleep_start() == ESP_OK);
esp_sleep_wakeup_cause_t cause = esp_sleep_get_wakeup_cause();
+#ifdef BUTTON_PIN
if (cause == ESP_SLEEP_WAKEUP_GPIO)
DEBUG_MSG("Exit light sleep gpio: btn=%d\n", !digitalRead(BUTTON_PIN));
+#endif
return cause;
}