diff --git a/Framing.h b/Framing.h index 92b0c99..74b81d9 100644 --- a/Framing.h +++ b/Framing.h @@ -106,6 +106,11 @@ #define ERROR_MEMORY_LOW 0x05 #define ERROR_MODEM_TIMEOUT 0x06 + #define CMD_GPS 0xA0 + + #define GPS_CMD_LAT 0x00 + #define GPS_CMD_LNG 0x01 + // Serial logging #define LOG_MSG 0x2F diff --git a/RNode_Firmware_CE.ino b/RNode_Firmware_CE.ino index 4f9a28a..b80b930 100644 --- a/RNode_Firmware_CE.ino +++ b/RNode_Firmware_CE.ino @@ -46,7 +46,7 @@ SPIClass interface_spi[1] = { // SX1262 SPIClass( - NRF_SPIM3, + NRF_SPIM1, interface_pins[0][3], interface_pins[0][1], interface_pins[0][2] @@ -132,8 +132,14 @@ void setup() { pinMode(PIN_LED_GREEN, OUTPUT); pinMode(PIN_LED_BLUE, OUTPUT); delay(200); + #elif BOARD_MODEL == BOARD_HELTEC_T114 + delay(200); + pinMode(PIN_VEXT_EN, OUTPUT); + digitalWrite(PIN_VEXT_EN, HIGH); + delay(100); #endif + if (!eeprom_begin()) { Serial.write("EEPROM initialisation failed.\r\n"); } #endif @@ -208,6 +214,11 @@ void setup() { fifo_init(&packet_rdy_interfaces, packet_rdy_interfaces_buf, MAX_INTERFACES); + #if HAS_GPS + // init GPS + gps_s.begin(GPS_BAUD_RATE); + #endif + // add call to init_channel_stats here? \todo // Create and configure interface objects @@ -1545,7 +1556,7 @@ void loop() { process_serial(); #if HAS_DISPLAY - #if DISPLAY == OLED + #if DISPLAY == OLED || DISPLAY == TFT || DISPLAY == ADAFRUIT_TFT if (disp_ready) update_display(); #elif DISPLAY == EINK_BW || DISPLAY == EINK_3C // Display refreshes take so long on e-paper displays that they can disrupt @@ -1577,6 +1588,20 @@ void loop() { input_read(); #endif + #if HAS_GPS + while (gps_s.available() > 0) { + if (gps.encode(gps_s.read()) && millis() - last_gps >= GPS_INTERVAL) { + kiss_indicate_location(); + last_gps = millis(); + } + } + if (millis() > 5000 && gps.charsProcessed() < 10) { + while (true) { + Serial.println(F("No GPS detected: check wiring.")); + } + } + #endif + if (memory_low) { #if PLATFORM == PLATFORM_ESP32 if (esp_get_free_heap_size() < 8192) { diff --git a/src/misc/gps.h b/src/misc/gps.h new file mode 100644 index 0000000..cdbdb65 --- /dev/null +++ b/src/misc/gps.h @@ -0,0 +1,8 @@ +#include +#include + +#define GPS_INTERVAL 5000 // ms + +unsigned long last_gps = 0; +TinyGPSPlus gps; +SoftwareSerial gps_s(PIN_GPS_RX, PIN_GPS_TX);