From 4b103ca0de7fdcad35ac7cf59f539e822e7a024d Mon Sep 17 00:00:00 2001 From: cod3doomy Date: Sun, 25 May 2025 21:23:31 -0700 Subject: [PATCH] t-beam supreme: fixes and consolidation Made changes requested by Scott Simplified gps init sequence and removed unnecessary code Reverted SensorManager change Updated PMU flow to enable header outputs --- src/helpers/SensorManager.h | 2 +- src/helpers/TBeamS3SupremeBoard.h | 4 +- .../lilygo_tbeam_supreme_SX1262/target.cpp | 139 +++++------------- variants/lilygo_tbeam_supreme_SX1262/target.h | 4 +- 4 files changed, 44 insertions(+), 105 deletions(-) diff --git a/src/helpers/SensorManager.h b/src/helpers/SensorManager.h index 41c34e55..0e4bc27d 100644 --- a/src/helpers/SensorManager.h +++ b/src/helpers/SensorManager.h @@ -13,7 +13,7 @@ public: double node_lat, node_lon; // modify these, if you want to affect Advert location double node_altitude; // altitude in meters - SensorManager() { node_lat = 0; node_lon = 0; node_altitude = 0;} + SensorManager() { node_lat = 0; node_lon = 0; node_altitude = 0; } virtual bool begin() { return false; } virtual bool querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) { return false; } virtual void loop() { } diff --git a/src/helpers/TBeamS3SupremeBoard.h b/src/helpers/TBeamS3SupremeBoard.h index 1ae6a230..ccb8e24c 100644 --- a/src/helpers/TBeamS3SupremeBoard.h +++ b/src/helpers/TBeamS3SupremeBoard.h @@ -61,10 +61,10 @@ public: void begin() { - power_init(); - ESP32Board::begin(); + power_init(); + esp_reset_reason_t reason = esp_reset_reason(); if (reason == ESP_RST_DEEPSLEEP) { long wakeup_source = esp_sleep_get_ext1_wakeup_status(); diff --git a/variants/lilygo_tbeam_supreme_SX1262/target.cpp b/variants/lilygo_tbeam_supreme_SX1262/target.cpp index dfe453ee..6a37f7c2 100644 --- a/variants/lilygo_tbeam_supreme_SX1262/target.cpp +++ b/variants/lilygo_tbeam_supreme_SX1262/target.cpp @@ -143,9 +143,9 @@ bool TBeamS3SupremeBoard::power_init() PMU.setChargingLedMode(XPOWERS_CHG_LED_CTRL_CHG); // Set up PMU interrupts - // MESH_DEBUG_PRINTLN("Setting up PMU interrupts"); - // pinMode(PIN_PMU_IRQ, INPUT_PULLUP); - // attachInterrupt(PIN_PMU_IRQ, setPMUIntFlag, FALLING); + MESH_DEBUG_PRINTLN("Setting up PMU interrupts"); + pinMode(PIN_PMU_IRQ, INPUT_PULLUP); + attachInterrupt(PIN_PMU_IRQ, setPMUIntFlag, FALLING); // GPS MESH_DEBUG_PRINTLN("Setting and enabling a-ldo4 for GPS"); @@ -188,22 +188,22 @@ bool TBeamS3SupremeBoard::power_init() PMU.enableBLDO1(); // Out to header pins - // MESH_DEBUG_PRINTLN("Setting and enabling b-ldo2 for output to header"); - // PMU.setBLDO2Voltage(3300); - // PMU.enableBLDO2(); + MESH_DEBUG_PRINTLN("Setting and enabling b-ldo2 for output to header"); + PMU.setBLDO2Voltage(3300); + PMU.enableBLDO2(); - // MESH_DEBUG_PRINTLN("Setting and enabling dcdc4 for output to header"); - // PMU.setDC4Voltage(XPOWERS_AXP2101_DCDC4_VOL2_MAX); // 1.8V - // PMU.enableDC4(); + MESH_DEBUG_PRINTLN("Setting and enabling dcdc4 for output to header"); + PMU.setDC4Voltage(XPOWERS_AXP2101_DCDC4_VOL2_MAX); // 1.8V + PMU.enableDC4(); - // MESH_DEBUG_PRINTLN("Setting and enabling dcdc5 for output to header"); - // PMU.setDC5Voltage(3300); - // PMU.enableDC5(); + MESH_DEBUG_PRINTLN("Setting and enabling dcdc5 for output to header"); + PMU.setDC5Voltage(3300); + PMU.enableDC5(); // Unused power rails - MESH_DEBUG_PRINTLN("Disabling unused supplies dcdc2, dldo1 and dldo2"); + MESH_DEBUG_PRINTLN("Disabling unused supplies dcdc2, dcdc5, dldo1 and dldo2"); PMU.disableDC2(); - PMU.disableDC5(); + //PMU.disableDC5(); PMU.disableDLDO1(); PMU.disableDLDO2(); @@ -223,18 +223,18 @@ bool TBeamS3SupremeBoard::power_init() PMU.enableVbusVoltageMeasure(); // Reset and re-enable PMU interrupts - // MESH_DEBUG_PRINTLN("Re-enable interrupts"); - // PMU.disableIRQ(XPOWERS_AXP2101_ALL_IRQ); - // PMU.clearIrqStatus(); - // PMU.enableIRQ( - // XPOWERS_AXP2101_BAT_INSERT_IRQ | XPOWERS_AXP2101_BAT_REMOVE_IRQ | // Battery interrupts - // XPOWERS_AXP2101_VBUS_INSERT_IRQ | XPOWERS_AXP2101_VBUS_REMOVE_IRQ | // VBUS interrupts - // XPOWERS_AXP2101_PKEY_SHORT_IRQ | XPOWERS_AXP2101_PKEY_LONG_IRQ | // Power Key interrupts - // XPOWERS_AXP2101_BAT_CHG_DONE_IRQ | XPOWERS_AXP2101_BAT_CHG_START_IRQ // Charging interrupts - // ); + MESH_DEBUG_PRINTLN("Re-enable interrupts"); + PMU.disableIRQ(XPOWERS_AXP2101_ALL_IRQ); + PMU.clearIrqStatus(); + PMU.enableIRQ( + XPOWERS_AXP2101_BAT_INSERT_IRQ | XPOWERS_AXP2101_BAT_REMOVE_IRQ | // Battery interrupts + XPOWERS_AXP2101_VBUS_INSERT_IRQ | XPOWERS_AXP2101_VBUS_REMOVE_IRQ | // VBUS interrupts + XPOWERS_AXP2101_PKEY_SHORT_IRQ | XPOWERS_AXP2101_PKEY_LONG_IRQ | // Power Key interrupts + XPOWERS_AXP2101_BAT_CHG_DONE_IRQ | XPOWERS_AXP2101_BAT_CHG_START_IRQ // Charging interrupts + ); #ifdef MESH_DEBUG - // scanDevices(&Wire); - // scanDevices(&Wire1); + scanDevices(&Wire); + scanDevices(&Wire1); printPMU(); #endif @@ -259,56 +259,6 @@ static bool readStringUntil(Stream& s, char dest[], size_t max_len, char term, u return millis() < timeout; // false, if timed out } -static bool l76kProbe() -{ - bool result = false; - uint32_t startTimeout ; - Serial1.write("$PCAS03,0,0,0,0,0,0,0,0,0,0,,,0,0*02\r\n"); - delay(5); - // Get version information - startTimeout = millis() + 3000; - MESH_DEBUG_PRINTLN("Trying to init L76K GPS"); - // Serial1.flush(); - while (Serial1.available()) { - int c = Serial1.read(); - // Serial.write(c); - // Serial.print("."); - // Serial.flush(); - // Serial1.flush(); - if (millis() > startTimeout) { - MESH_DEBUG_PRINTLN("L76K NMEA timeout!"); - return false; - } - }; - - Serial1.flush(); - delay(200); - - Serial1.write("$PCAS06,0*1B\r\n"); - - char ver[100]; - if (!readStringUntil(Serial1, ver, sizeof(ver), '\n', 500)) { - MESH_DEBUG_PRINTLN("Get L76K timeout!"); - return false; - } - - if (memcmp(ver, "$GPTXT,01,01,02", 15) == 0) { - MESH_DEBUG_PRINTLN("L76K GNSS init succeeded, using L76K GNSS Module\n"); - result = true; - } - delay(500); - - // Initialize the L76K Chip, use GPS + GLONASS - Serial1.write("$PCAS04,5*1C\r\n"); - delay(250); - // only ask for RMC and GGA - Serial1.write("$PCAS03,1,0,0,0,1,0,0,0,0,0,,,0,0*02\r\n"); - delay(250); - // Switch to Vehicle Mode, since SoftRF enables Aviation < 2g - Serial1.write("$PCAS11,3*1E\r\n"); - return result; -} - bool radio_init() { fallback_clock.begin(); @@ -380,25 +330,16 @@ bool TbeamSupSensorManager::begin() { // init GPS port Serial1.begin(GPS_BAUD_RATE, SERIAL_8N1, P_GPS_RX, P_GPS_TX); - bool gps_alive = false; - for ( int i = 0; i < 3; ++i) { - gps_alive = l76kProbe(); - if (gps_alive) { - MESH_DEBUG_PRINTLN("GPS is init and active. Shutting down for initial state."); - sleep_gps(); - return gps_alive; - } - } - gps_active = gps_alive; - MESH_DEBUG_PRINTLN("GPS init failed and GPS is not active"); - return gps_alive; + MESH_DEBUG_PRINTLN("Sleeping GPS for initial state"); + sleep_gps(); + return true; } bool TbeamSupSensorManager::querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) { if (requester_permissions & TELEM_PERM_LOCATION) { // does requester have permission? telemetry.addGPS(TELEM_CHANNEL_SELF, node_lat, node_lon, node_altitude); } - if (requester_permissions & TELEM_PERM_ENVIRONMENT) { // does requester have permission? + if (requester_permissions & TELEM_PERM_ENVIRONMENT && bme_active) { // does requester have permission? telemetry.addTemperature(TELEM_CHANNEL_SELF, node_temp); telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, node_hum); telemetry.addBarometricPressure(TELEM_CHANNEL_SELF, node_pres); @@ -413,20 +354,21 @@ void TbeamSupSensorManager::loop() { _nmea->loop(); if (millis() > next_update) { - if (_nmea->isValid()) { + if (_nmea->isValid() && gps_active) { node_lat = ((double)_nmea->getLatitude())/1000000.; node_lon = ((double)_nmea->getLongitude())/1000000.; node_altitude = ((double)_nmea->getAltitude()) / 1000.0; - //Serial.printf("lat %f lon %f\r\n", _lat, _lon); + MESH_DEBUG_PRINT("lat %f lon %f alt %f\r\n", node_lat, node_lon, node_altitude); } //read BME280 values - //node_alt = bme.readAltitude(SEALEVELPRESSURE_HPA); - node_temp = bme.readTemperature(); - node_hum = bme.readHumidity(); - node_pres = (bme.readPressure() / 100.0F); - - #ifdef MESH_DEBUG + if(bme_active){ + //node_alt = bme.readAltitude(SEALEVELPRESSURE_HPA); + node_temp = bme.readTemperature(); + node_hum = bme.readHumidity(); + node_pres = (bme.readPressure() / 100.0F); + + #ifdef MESH_DEBUG // Serial.print("Temperature = "); // Serial.print(node_temp); // Serial.println(" *C"); @@ -442,7 +384,8 @@ void TbeamSupSensorManager::loop() { // Serial.print("Approx. Altitude = "); // Serial.print(node_alt); // Serial.println(" m"); - #endif + #endif + } next_update = millis() + 1000; } @@ -455,7 +398,6 @@ int TbeamSupSensorManager::getNumSettings() const { const char* TbeamSupSensorManager::getSettingName(int i) const { switch(i){ case 0: return "gps"; - case 1: return "bme280"; default: NULL; } } @@ -463,7 +405,6 @@ const char* TbeamSupSensorManager::getSettingName(int i) const { const char* TbeamSupSensorManager::getSettingValue(int i) const { switch(i){ case 0: return gps_active == true ? "1" : "0"; - case 1: return bme_active == true ? "1" : "0"; default: NULL; } } diff --git a/variants/lilygo_tbeam_supreme_SX1262/target.h b/variants/lilygo_tbeam_supreme_SX1262/target.h index 6acf6cdf..293580ee 100644 --- a/variants/lilygo_tbeam_supreme_SX1262/target.h +++ b/variants/lilygo_tbeam_supreme_SX1262/target.h @@ -16,7 +16,7 @@ class TbeamSupSensorManager: public SensorManager { LocationProvider * _nmea; Adafruit_BME280 bme; double node_temp, node_hum, node_pres; - int sensorNum = 2; + int sensorNum = 1; #define SEALEVELPRESSURE_HPA (1013.25) @@ -65,8 +65,6 @@ enum { OSC32768_ONLINE = _BV(13), }; -void scanDevices(TwoWire *w); -static bool l76kProbe(); bool radio_init(); uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr);