diff --git a/src/helpers/sensors/EnvironmentSensorManager.cpp b/src/helpers/sensors/EnvironmentSensorManager.cpp index 73842d9e..5441c226 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -165,16 +165,15 @@ static RAK12035_SoilMoisture RAK12035; #endif #ifdef RAK_WISBLOCK_GPS -static uint32_t gpsResetPin = 0; static bool i2cGPSFlag = false; static bool serialGPSFlag = false; #ifndef TELEM_RAK12500_ADDRESS -#define TELEM_RAK12500_ADDRESS 0x42 //RAK12500 Ublox GPS via i2c +#define TELEM_RAK12500_ADDRESS 0x42 // RAK12500 u-blox ZOE-M8Q GPS via i2c #endif #include -static SFE_UBLOX_GNSS ublox_GNSS; +static SFE_UBLOX_GNSS ublox_GNSS; // RAK12500 u-blox ZOE-M8Q GPS via UART -class RAK12500LocationProvider : public LocationProvider { +class RAKI2CLocationProvider : public LocationProvider { long _lat = 0; long _lng = 0; long _alt = 0; @@ -207,7 +206,7 @@ public: bool isEnabled() override { return true; } }; -static RAK12500LocationProvider RAK12500_provider; +static RAKI2CLocationProvider RAK12500_provider; #endif // ============================================================ @@ -775,8 +774,7 @@ void EnvironmentSensorManager::initBasicGPS() { // or make a new location provider ... #ifdef RAK_WISBLOCK_GPS void EnvironmentSensorManager::rakGPSInit(){ - - Serial1.setPins(PIN_GPS_TX, PIN_GPS_RX); + Serial1.setPins(PIN_GPS_RX, PIN_GPS_TX); #ifdef GPS_BAUD_RATE Serial1.begin(GPS_BAUD_RATE); @@ -784,14 +782,14 @@ void EnvironmentSensorManager::rakGPSInit(){ Serial1.begin(9600); #endif - //search for the correct IO standby pin depending on socket used - if(gpsIsAwake(WB_IO2)){ - } - else if(gpsIsAwake(WB_IO4)){ - } - else if(gpsIsAwake(WB_IO5)){ - } - else{ + #ifdef PIN_3V3_EN + digitalWrite(PIN_3V3_EN,LOW); + delay(1000); + digitalWrite(PIN_3V3_EN,HIGH); + delay(2000); + #endif + + if(!gpsIsAwake()){ MESH_DEBUG_PRINTLN("No GPS found"); gps_active = false; gps_detected = false; @@ -805,18 +803,10 @@ void EnvironmentSensorManager::rakGPSInit(){ #endif } -bool EnvironmentSensorManager::gpsIsAwake(uint8_t ioPin){ - - //set initial waking state - pinMode(ioPin,OUTPUT); - digitalWrite(ioPin,LOW); - delay(500); - digitalWrite(ioPin,HIGH); - delay(500); - +bool EnvironmentSensorManager::gpsIsAwake(){ //Try to init RAK12500 on I2C if (ublox_GNSS.begin(Wire) == true){ - MESH_DEBUG_PRINTLN("RAK12500 GPS init correctly with pin %i",ioPin); + MESH_DEBUG_PRINTLN("RAK12500 I2C GPS init"); ublox_GNSS.setI2COutput(COM_TYPE_UBX); ublox_GNSS.enableGNSS(true, SFE_UBLOX_GNSS_ID_GPS); ublox_GNSS.enableGNSS(true, SFE_UBLOX_GNSS_ID_GALILEO); @@ -827,7 +817,6 @@ bool EnvironmentSensorManager::gpsIsAwake(uint8_t ioPin){ ublox_GNSS.enableGNSS(true, SFE_UBLOX_GNSS_ID_QZSS); ublox_GNSS.setMeasurementRate(1000); ublox_GNSS.saveConfigSelective(VAL_CFG_SUBSEC_IOPORT); - gpsResetPin = ioPin; i2cGPSFlag = true; gps_active = true; gps_detected = true; @@ -835,20 +824,13 @@ bool EnvironmentSensorManager::gpsIsAwake(uint8_t ioPin){ _location = &RAK12500_provider; return true; } else if (Serial1.available()) { - MESH_DEBUG_PRINTLN("Serial GPS init correctly and is turned on"); -#ifdef PIN_GPS_EN - if(PIN_GPS_EN){ - gpsResetPin = PIN_GPS_EN; - } -#endif + MESH_DEBUG_PRINTLN("Serial GPS init correctly"); serialGPSFlag = true; gps_active = true; gps_detected = true; return true; } - pinMode(ioPin, INPUT); - MESH_DEBUG_PRINTLN("GPS did not init with this IO pin... try the next"); return false; } #endif @@ -856,8 +838,8 @@ bool EnvironmentSensorManager::gpsIsAwake(uint8_t ioPin){ void EnvironmentSensorManager::start_gps() { gps_active = true; #ifdef RAK_WISBLOCK_GPS - pinMode(gpsResetPin, OUTPUT); - digitalWrite(gpsResetPin, HIGH); + pinMode(PIN_3V3_EN, OUTPUT); + digitalWrite(PIN_3V3_EN, HIGH); return; #endif @@ -872,8 +854,12 @@ void EnvironmentSensorManager::start_gps() { void EnvironmentSensorManager::stop_gps() { gps_active = false; #ifdef RAK_WISBLOCK_GPS - pinMode(gpsResetPin, OUTPUT); - digitalWrite(gpsResetPin, LOW); + #ifdef SKY66122 + MESH_DEBUG_PRINTLN("GPS cannot be disabled as this would also disable SKY66122."); + return; + #endif + pinMode(PIN_3V3_EN, OUTPUT); + digitalWrite(PIN_3V3_EN, LOW); return; #endif diff --git a/src/helpers/sensors/EnvironmentSensorManager.h b/src/helpers/sensors/EnvironmentSensorManager.h index 29147c89..be1195dc 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.h +++ b/src/helpers/sensors/EnvironmentSensorManager.h @@ -30,7 +30,7 @@ protected: void initBasicGPS(); #ifdef RAK_BOARD void rakGPSInit(); - bool gpsIsAwake(uint8_t ioPin); + bool gpsIsAwake(); #endif #endif diff --git a/variants/gat562_30s_mesh_kit/variant.h b/variants/gat562_30s_mesh_kit/variant.h index 5672572b..df3a649d 100644 --- a/variants/gat562_30s_mesh_kit/variant.h +++ b/variants/gat562_30s_mesh_kit/variant.h @@ -38,15 +38,15 @@ extern "C" { #endif // __cplusplus - /* +/* * WisBlock Base GPIO definitions */ - static const uint8_t WB_IO1 = 17; // SLOT_A SLOT_B - static const uint8_t WB_IO2 = 34; // SLOT_A SLOT_B - static const uint8_t WB_IO3 = 21; // SLOT_C - static const uint8_t WB_IO4 = 4; // SLOT_C - static const uint8_t WB_IO5 = 9; // SLOT_D - static const uint8_t WB_IO6 = 10; // SLOT_D + static const uint8_t WB_IO1 = 17; // SLOT_A P.12 / SLOT_B P.10 + static const uint8_t WB_IO2 = 34; // SLOT_A P.10 / SLOT_B P.12 + static const uint8_t WB_IO3 = 21; // SLOT_C P.12 + static const uint8_t WB_IO4 = 4; // SLOT_C P.10 + static const uint8_t WB_IO5 = 9; // SLOT_D P.12 + static const uint8_t WB_IO6 = 10; // SLOT_D P.10 static const uint8_t WB_SW1 = 33; // IO_SLOT static const uint8_t WB_A0 = 5; // IO_SLOT static const uint8_t WB_A1 = 31; // IO_SLOT diff --git a/variants/gat562_mesh_evb_pro/variant.h b/variants/gat562_mesh_evb_pro/variant.h index b0e54a79..a9074445 100644 --- a/variants/gat562_mesh_evb_pro/variant.h +++ b/variants/gat562_mesh_evb_pro/variant.h @@ -38,15 +38,15 @@ extern "C" { #endif // __cplusplus - /* +/* * WisBlock Base GPIO definitions */ - static const uint8_t WB_IO1 = 17; // SLOT_A SLOT_B - static const uint8_t WB_IO2 = 34; // SLOT_A SLOT_B - static const uint8_t WB_IO3 = 21; // SLOT_C - static const uint8_t WB_IO4 = 4; // SLOT_C - static const uint8_t WB_IO5 = 9; // SLOT_D - static const uint8_t WB_IO6 = 10; // SLOT_D + static const uint8_t WB_IO1 = 17; // SLOT_A P.12 / SLOT_B P.10 + static const uint8_t WB_IO2 = 34; // SLOT_A P.10 / SLOT_B P.12 + static const uint8_t WB_IO3 = 21; // SLOT_C P.12 + static const uint8_t WB_IO4 = 4; // SLOT_C P.10 + static const uint8_t WB_IO5 = 9; // SLOT_D P.12 + static const uint8_t WB_IO6 = 10; // SLOT_D P.10 static const uint8_t WB_SW1 = 33; // IO_SLOT static const uint8_t WB_A0 = 5; // IO_SLOT static const uint8_t WB_A1 = 31; // IO_SLOT diff --git a/variants/gat562_mesh_tracker_pro/variant.h b/variants/gat562_mesh_tracker_pro/variant.h index 0a28a2a4..1342b0fb 100644 --- a/variants/gat562_mesh_tracker_pro/variant.h +++ b/variants/gat562_mesh_tracker_pro/variant.h @@ -38,15 +38,15 @@ extern "C" { #endif // __cplusplus - /* +/* * WisBlock Base GPIO definitions */ - static const uint8_t WB_IO1 = 17; // SLOT_A SLOT_B - static const uint8_t WB_IO2 = 34; // SLOT_A SLOT_B - static const uint8_t WB_IO3 = 21; // SLOT_C - static const uint8_t WB_IO4 = 4; // SLOT_C - static const uint8_t WB_IO5 = 9; // SLOT_D - static const uint8_t WB_IO6 = 10; // SLOT_D + static const uint8_t WB_IO1 = 17; // SLOT_A P.12 / SLOT_B P.10 + static const uint8_t WB_IO2 = 34; // SLOT_A P.10 / SLOT_B P.12 + static const uint8_t WB_IO3 = 21; // SLOT_C P.12 + static const uint8_t WB_IO4 = 4; // SLOT_C P.10 + static const uint8_t WB_IO5 = 9; // SLOT_D P.12 + static const uint8_t WB_IO6 = 10; // SLOT_D P.10 static const uint8_t WB_SW1 = 33; // IO_SLOT static const uint8_t WB_A0 = 5; // IO_SLOT static const uint8_t WB_A1 = 31; // IO_SLOT diff --git a/variants/gat562_mesh_watch13/variant.h b/variants/gat562_mesh_watch13/variant.h index f79c9970..679a6f24 100644 --- a/variants/gat562_mesh_watch13/variant.h +++ b/variants/gat562_mesh_watch13/variant.h @@ -38,15 +38,15 @@ extern "C" { #endif // __cplusplus - /* +/* * WisBlock Base GPIO definitions */ - static const uint8_t WB_IO1 = 17; // SLOT_A SLOT_B - static const uint8_t WB_IO2 = 34; // SLOT_A SLOT_B - static const uint8_t WB_IO3 = 21; // SLOT_C - static const uint8_t WB_IO4 = 4; // SLOT_C - static const uint8_t WB_IO5 = 9; // SLOT_D - static const uint8_t WB_IO6 = 10; // SLOT_D + static const uint8_t WB_IO1 = 17; // SLOT_A P.12 / SLOT_B P.10 + static const uint8_t WB_IO2 = 34; // SLOT_A P.10 / SLOT_B P.12 + static const uint8_t WB_IO3 = 21; // SLOT_C P.12 + static const uint8_t WB_IO4 = 4; // SLOT_C P.10 + static const uint8_t WB_IO5 = 9; // SLOT_D P.12 + static const uint8_t WB_IO6 = 10; // SLOT_D P.10 static const uint8_t WB_SW1 = 33; // IO_SLOT static const uint8_t WB_A0 = 5; // IO_SLOT static const uint8_t WB_A1 = 31; // IO_SLOT diff --git a/variants/rak3401/platformio.ini b/variants/rak3401/platformio.ini index 20a8a548..22024892 100644 --- a/variants/rak3401/platformio.ini +++ b/variants/rak3401/platformio.ini @@ -6,6 +6,7 @@ build_flags = ${nrf52_base.build_flags} ${sensor_base.build_flags} -I variants/rak3401 -D RAK_3401 + -D RAK_BOARD -D NRF52_POWER_MANAGEMENT -D RADIO_CLASS=CustomSX1262 -D WRAPPER_CLASS=CustomSX1262Wrapper diff --git a/variants/rak3401/variant.h b/variants/rak3401/variant.h index 98827886..5f49695c 100644 --- a/variants/rak3401/variant.h +++ b/variants/rak3401/variant.h @@ -38,6 +38,27 @@ extern "C" { #endif // __cplusplus +/* + * WisBlock Base GPIO definitions + */ + static const uint8_t WB_IO1 = 17; // SLOT_A P.12 / SLOT_B P.10 + static const uint8_t WB_IO2 = 34; // SLOT_A P.10 / SLOT_B P.12 + static const uint8_t WB_IO3 = 21; // SLOT_C P.12 + static const uint8_t WB_IO4 = 4; // SLOT_C P.10 + static const uint8_t WB_IO5 = 9; // SLOT_D P.12 + static const uint8_t WB_IO6 = 10; // SLOT_D P.10 + static const uint8_t WB_SW1 = 33; // IO_SLOT + static const uint8_t WB_A0 = 5; // IO_SLOT + static const uint8_t WB_A1 = 31; // IO_SLOT + static const uint8_t WB_I2C1_SDA = 13; // SENSOR_SLOT IO_SLOT + static const uint8_t WB_I2C1_SCL = 14; // SENSOR_SLOT IO_SLOT + static const uint8_t WB_I2C2_SDA = 24; // IO_SLOT + static const uint8_t WB_I2C2_SCL = 25; // IO_SLOT + static const uint8_t WB_SPI_CS = 26; // IO_SLOT + static const uint8_t WB_SPI_CLK = 3; // IO_SLOT + static const uint8_t WB_SPI_MISO = 29; // IO_SLOT + static const uint8_t WB_SPI_MOSI = 30; // IO_SLOT + // Number of pins defined in PinDescription array #define PINS_COUNT (48) #define NUM_DIGITAL_PINS (48) @@ -92,8 +113,6 @@ extern "C" #define PIN_AREF (2) #define PIN_NFC1 (9) -#define WB_IO5 PIN_NFC1 -#define WB_IO4 (4) #define PIN_NFC2 (10) static const uint8_t AREF = PIN_AREF; @@ -162,6 +181,7 @@ static const uint8_t AREF = PIN_AREF; // in hardware via SetDIO2AsRfSwitchCtrl (microsecond-accurate, no GPIO needed). // The 5V boost for the PA is enabled by WB_IO2 (P0.34 = PIN_3V3_EN). #define SX126X_POWER_EN (21) // P0.21 = IO3 -> SKY66122 CSD+CPS (FEM enable) +#define SKY66122 // CTX is driven by SX1262 DIO2, not a GPIO #define SX126X_DIO2_AS_RF_SWITCH @@ -175,23 +195,13 @@ static const uint8_t AREF = PIN_AREF; #define P_LORA_BUSY SX126X_BUSY #define P_LORA_RESET SX126X_RESET -// enables 3.3V periphery like GPS or IO Module -// Do not toggle this for GPS power savings +// enables 3.3V periphery like GPS, the IO Module, and the SKY66122 5V boost +// Do NOT use this for GPS power savings as this will interfere with LoRa functionality #define PIN_3V3_EN (34) -#define WB_IO2 PIN_3V3_EN - -// RAK1910 GPS module -// If using the wisblock GPS module and pluged into Port A on WisBlock base -// IO1 is hooked to PPS (pin 12 on header) = gpio 17 -// IO2 is hooked to GPS RESET = gpio 34, but it can not be used to this because IO2 is ALSO used to control 3V3_S power (1 is on). -// Therefore must be 1 to keep peripherals powered -// Power is on the controllable 3V3_S rail -#define PIN_GPS_PPS (17) // Pulse per second input from the GPS #define PIN_GPS_RX PIN_SERIAL1_RX #define PIN_GPS_TX PIN_SERIAL1_TX -#define PIN_GPS_1PPS PIN_GPS_PPS #define GPS_BAUD_RATE 9600 #define GPS_ADDRESS 0x42 //i2c address for GPS diff --git a/variants/rak4631/platformio.ini b/variants/rak4631/platformio.ini index 2bbba314..edb753bf 100644 --- a/variants/rak4631/platformio.ini +++ b/variants/rak4631/platformio.ini @@ -9,11 +9,10 @@ build_flags = ${nrf52_base.build_flags} -I variants/rak4631 -D RAK_4631 -D RAK_BOARD + -UENV_INCLUDE_GPS -D NRF52_POWER_MANAGEMENT -D PIN_BOARD_SCL=14 -D PIN_BOARD_SDA=13 - -D PIN_GPS_TX=PIN_SERIAL1_RX - -D PIN_GPS_RX=PIN_SERIAL1_TX -D PIN_GPS_EN=-1 -D PIN_OLED_RESET=-1 -D USE_SX1262 diff --git a/variants/rak4631/variant.h b/variants/rak4631/variant.h index 38cc8868..575d260a 100644 --- a/variants/rak4631/variant.h +++ b/variants/rak4631/variant.h @@ -41,12 +41,12 @@ extern "C" /* * WisBlock Base GPIO definitions */ - static const uint8_t WB_IO1 = 17; // SLOT_A SLOT_B - static const uint8_t WB_IO2 = 34; // SLOT_A SLOT_B - static const uint8_t WB_IO3 = 21; // SLOT_C - static const uint8_t WB_IO4 = 4; // SLOT_C - static const uint8_t WB_IO5 = 9; // SLOT_D - static const uint8_t WB_IO6 = 10; // SLOT_D + static const uint8_t WB_IO1 = 17; // SLOT_A P.12 / SLOT_B P.10 + static const uint8_t WB_IO2 = 34; // SLOT_A P.10 / SLOT_B P.12 + static const uint8_t WB_IO3 = 21; // SLOT_C P.12 + static const uint8_t WB_IO4 = 4; // SLOT_C P.10 + static const uint8_t WB_IO5 = 9; // SLOT_D P.12 + static const uint8_t WB_IO6 = 10; // SLOT_D P.10 static const uint8_t WB_SW1 = 33; // IO_SLOT static const uint8_t WB_A0 = 5; // IO_SLOT static const uint8_t WB_A1 = 31; // IO_SLOT @@ -182,7 +182,9 @@ extern "C" #define EXTERNAL_FLASH_DEVICES IS25LP080D #define EXTERNAL_FLASH_USE_QSPI -#define PIN_GPS_1PPS 17 //GPS PPS pin +#define PIN_GPS_RX PIN_SERIAL1_RX +#define PIN_GPS_TX PIN_SERIAL1_TX + #define GPS_BAUD_RATE 9600 #define GPS_ADDRESS 0x42 //i2c address for GPS