diff --git a/data_embed/index.html b/data_embed/index.html
index 02fd50d..4bae33d 100644
--- a/data_embed/index.html
+++ b/data_embed/index.html
@@ -553,8 +553,12 @@ III: Values above are referring to latitude; distance between two latitudes is a
-
-
+
+
+
+
+
+
diff --git a/src/TTGO_T-Beam_LoRa_APRS.ino b/src/TTGO_T-Beam_LoRa_APRS.ino
index 24ad7d9..8ccaee7 100644
--- a/src/TTGO_T-Beam_LoRa_APRS.ino
+++ b/src/TTGO_T-Beam_LoRa_APRS.ino
@@ -192,7 +192,8 @@ int position_ambiguity = 0; // 0: default, compressed. -1: uncompressed. -2: unc
String aprsPresetShown = "P";
//double lastTxdistance = 0;
-#if defined(T_BEAM_V1_2) || defined(T_BEAM_V1_0) || defined(T_BEAM_V0_7)
+#if defined(T_BEAM_V1_2) || defined(T_BEAM_V1_0) || defined(T_BEAM_V0_7) || defined(FORCE_ENABLE_GPS)
+ // ^ may used as compile time define
boolean gps_state = true;
#else
boolean gps_state = false;
@@ -449,8 +450,10 @@ bool acceptOwnPositionReportsViaKiss = true; // true: Switches off local beacon
boolean gps_allow_sleep_while_kiss = true; // user has a kiss device attached via kiss which sends positions with own call, we don't need our gps to be turned on -> We pause sending positions by ourself (neither fixed nor smart beaconing). Except: user has a display attached to this tracker, he'll will be able to see his position because our gps does not go to sleep (-> set this to false). Why sleep? Energy saving
boolean wifi_do_fallback_to_mode_AP = true; // Allow fallback to mode AP after once connected successfully connected (after boot) to configured remote AP. Disable for igates, where you don't need your tracker to be a hotspot. You like to enable, if you use your tracker portable and it should automatically be wifi client to your home network, and be AP if you are outside.
boolean send_status_message_to_aprsis = true; // Send reboot, wifi- or internet-loss as APPRS-status-message to APRS-IS
-uint8_t usb_serial_data_type = 0; // 0: KISS. 1: Display some debug messages on serial port. 2: Display lora-received packets in TNC trace format. 3: 1+2
+uint8_t usb_serial_data_type = 0; // 0: KISS. 1: Display some debug messages on serial port. 2: Display lora-received packets in TNC trace format. 3: 1+2. 4: Send GPS NMEA sentences.
// If >0 usb-serial KISS-send and KISS-receive are stoped.
+ // Unfortunately, 0 was pre-set for kiss. -> There's no real-off.
+ // Because we test on set bits, number 128 (binary 10000000) means "off".
#ifdef KISS_PROTOCOL
// do not configure
@@ -3374,8 +3377,6 @@ void setup_phase2_soft_reconfiguration(boolean runtime_reconfiguration) {
//#elif T_BEAM_V1_2
// axp.enableXXX(); // switch this on if you need it
//#endif
- #else
- gps_state = false;
#endif
gps_state_before_autochange = false;
@@ -4684,6 +4685,7 @@ void handle_usb_serial_input(void) {
Serial.println(" save_wifi_cfg (saves running wifi config to /wifi.cfg in filesystem)");
Serial.println(" dir (lists SPIFFS directory)");
#endif
+ Serial.println(" nmea ");
Serial.println(" trace ");
Serial.println(" reboot");
#if defined(T_BEAM_V1_0) || defined(T_BEAM_V1_2)
@@ -4739,12 +4741,12 @@ void handle_usb_serial_input(void) {
if (arg != "") {
if (arg_bool) {
usb_serial_data_type |= 1;
- usb_serial_data_type &= ~4;
+ usb_serial_data_type &= ~128;
} else {
// avoid going to kiss mode (!usb_serial_data_type)
usb_serial_data_type &= ~1;
if (!usb_serial_data_type)
- usb_serial_data_type = 4;
+ usb_serial_data_type = 128;
}
#ifdef ENABLE_PREFERENCES
preferences.putInt(PREF_DEV_USBSERIAL_DATA_TYPE, usb_serial_data_type);
@@ -4759,12 +4761,12 @@ void handle_usb_serial_input(void) {
if (arg != "") {
if (arg_bool) {
usb_serial_data_type |= 2;
- usb_serial_data_type &= ~4;
+ usb_serial_data_type &= ~128;
} else {
// avoid going to kiss mode (!usb_serial_data_type)
usb_serial_data_type &= ~2;
if (!usb_serial_data_type)
- usb_serial_data_type = 4;
+ usb_serial_data_type = 128;
}
#ifdef ENABLE_PREFERENCES
preferences.putInt(PREF_DEV_USBSERIAL_DATA_TYPE, usb_serial_data_type);
@@ -4772,9 +4774,29 @@ void handle_usb_serial_input(void) {
if (debug_verbose)
syslog_log(LOG_DEBUG, String("FlashWrite preferences: handle_usb_serial_input() 2"));
#endif
- #endif
- }
- Serial.println("*** " + cmd + " is " + ((usb_serial_data_type & 2) ? "on" : "off"));
+ #endif
+ }
+ Serial.println("*** " + cmd + " is " + ((usb_serial_data_type & 2) ? "on" : "off"));
+ } else if (cmd == "nmea") {
+ if (arg != "") {
+ if (arg_bool) {
+ usb_serial_data_type |= 4;
+ usb_serial_data_type &= ~128;
+ } else {
+ // avoid going to kiss mode (!usb_serial_data_type)
+ usb_serial_data_type &= ~4;
+ if (!usb_serial_data_type)
+ usb_serial_data_type = 128;
+ }
+ #ifdef ENABLE_PREFERENCES
+ preferences.putInt(PREF_DEV_USBSERIAL_DATA_TYPE, usb_serial_data_type);
+ #if defined(ENABLE_SYSLOG)
+ if (debug_verbose)
+ syslog_log(LOG_DEBUG, String("FlashWrite preferences: handle_usb_serial_input() 3"));
+ #endif
+ #endif
+ }
+ Serial.println("*** " + cmd + " is " + ((usb_serial_data_type & 4) ? "on" : "off"));
#ifdef ENABLE_WIFI
} else if (cmd == "aprsis") {
if (arg != "") {
@@ -4782,7 +4804,7 @@ void handle_usb_serial_input(void) {
preferences.putBool(PREF_APRSIS_EN, arg_bool);
#if defined(ENABLE_SYSLOG)
if (debug_verbose)
- syslog_log(LOG_DEBUG, String("FlashWrite preferences: handle_usb_serial_input() 3"));
+ syslog_log(LOG_DEBUG, String("FlashWrite preferences: handle_usb_serial_input() 4"));
#endif
}
Serial.println("*** " + cmd + " is " + (aprsis_enabled ? "on" : "off"));
@@ -4792,7 +4814,7 @@ void handle_usb_serial_input(void) {
preferences.putInt(PREF_WIFI_ENABLE, (arg_bool) ? 0 : 1);
#if defined(ENABLE_SYSLOG)
if (debug_verbose)
- syslog_log(LOG_DEBUG, String("FlashWrite preferences: handle_usb_serial_input() 4"));
+ syslog_log(LOG_DEBUG, String("FlashWrite preferences: handle_usb_serial_input() 5"));
#endif
#endif
if (arg_bool) {
@@ -5018,9 +5040,7 @@ debug_bestHdop = bestHdop;
}
uint32_t t_elapsed = millis() - t_interval_start;
- if (curr_hdop < bestHdop && curr_sats >= 4) {
- do_update = 1;
- } else if (t_elapsed > 15000L && ((curr_hdop < 1.5 && curr_sats >= 5) || no_gps_position_since_boot)) {
+ if (t_elapsed > 15000L && ((curr_hdop < 1.5 && curr_sats >= 5) || no_gps_position_since_boot)) {
// Approach to avoid gps inaccuracy (we observed bad gps positions in a range of 30m, or more):
// Resolution of GPS is +/- 3 to 5m. In 1s at 10m/s (= 36 km/h) we are in 'best' case still
// in behalf the resolution of GPS.
diff --git a/src/taskGPS.cpp b/src/taskGPS.cpp
index 8e6b615..ccc555c 100644
--- a/src/taskGPS.cpp
+++ b/src/taskGPS.cpp
@@ -17,10 +17,14 @@ extern uint8_t usb_serial_data_type;
// Pins for GPS
#if defined(T_BEAM_V1_0) || defined(T_BEAM_V1_2)
static const int RXPin = 12, TXPin = 34;
-#else
+#else /* i.e. T_BEAM_V0_7, or lora32-device-with-self-attached-GPS */
static const int RXPin = 15, TXPin = 12;
#endif
+#ifndef LORA32_21
static const uint32_t GPSBaud = 9600; //GPS
+#else /* one user played with self-attached GPS on his LORA32 device. TODO: gps speed choosable in Web-Interface */
+static const uint32_t GPSBaud = 57600; //GPS
+#endif
HardwareSerial gpsSerial(1); // TTGO has HW serial
TinyGPSPlus gps; // The TinyGPS++ object
bool gpsInitialized = false;
@@ -65,7 +69,7 @@ bool gpsInitialized = false;
gpsDataBuffer += String(gpsChar);
if (gpsChar == '\n') {
- if (usb_serial_data_type == 4)
+ if ((usb_serial_data_type & 4))
Serial.println(gpsDataBuffer);
#ifdef ENABLE_WIFI
iterateWifiClients([](WiFiClient *client, int clientIdx, const String *data){
diff --git a/src/taskWebServer.cpp b/src/taskWebServer.cpp
index 70bbe52..de64d40 100644
--- a/src/taskWebServer.cpp
+++ b/src/taskWebServer.cpp
@@ -1597,7 +1597,7 @@ int connect_to_aprsis(void) {
aprsis_client.print(String(buffer) + "\r\n");
t_start = millis();
- while (!aprsis_client.available() && (millis()-t_start) < 25000L) { vTaskDelay(100 / portTICK_PERIOD_MS); esp_task_wdt_reset(); }
+ while (!aprsis_client.available() && (millis()-t_start) < 5000L) { vTaskDelay(100 / portTICK_PERIOD_MS); esp_task_wdt_reset(); }
if (aprsis_client.available()) {
// check
String s = aprsis_client.readStringUntil('\n');