Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/nrf52_power_management.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ Shutdown reason codes (stored in GPREGRET2):
| Seeed Studio XIAO nRF52840 (`xiao_nrf52`) | Yes | Yes | Yes |
| RAK4631 (`rak4631`) | Yes | Yes | Yes |
| Heltec T114 (`heltec_t114`) | Yes | Yes | Yes |
| GAT56 Mesh Watch13 | Yes | Yes | Yes |
| Promicro nRF52840 | No | No | No |
| RAK WisMesh Tag | No | No | No |
| Heltec Mesh Solar | No | No | No |
Expand Down
4 changes: 4 additions & 0 deletions variants/gat562_30s_mesh_kit/GAT56230SMeshKitBoard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ const PowerMgtConfig power_config = {


void GAT56230SMeshKitBoard::initiateShutdown(uint8_t reason) {
#if ENV_INCLUDE_GPS == 1
pinMode(PIN_GPS_EN, OUTPUT);
digitalWrite(PIN_GPS_EN, LOW);
#endif
// Disable LoRa module power before shutdown
digitalWrite(SX126X_POWER_EN, LOW);

Expand Down
5 changes: 1 addition & 4 deletions variants/gat562_30s_mesh_kit/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ build_flags = ${nrf52_base.build_flags}
-D RAK_4631
-D RAK_BOARD
-D NRF52_POWER_MANAGEMENT
-D ENV_INCLUDE_GPS=1
-D PIN_BOARD_SCL=14
-D PIN_BOARD_SDA=13
-D PIN_OLED_RESET=-1
Expand All @@ -30,7 +31,6 @@ lib_deps =
adafruit/Adafruit SSD1306 @ ^2.5.13
sparkfun/SparkFun u-blox GNSS Arduino Library@^2.2.27


[env:GAT562_30S_Mesh_Kit_repeater]
extends = GAT562_30S_Mesh_Kit
build_flags =
Expand All @@ -47,7 +47,6 @@ build_src_filter = ${GAT562_30S_Mesh_Kit.build_src_filter}
+<helpers/ui/SSD1306Display.cpp>
+<../examples/simple_repeater>


[env:GAT562_30S_Mesh_Kit_room_server]
extends = GAT562_30S_Mesh_Kit
build_flags =
Expand All @@ -64,7 +63,6 @@ build_src_filter = ${GAT562_30S_Mesh_Kit.build_src_filter}
+<helpers/ui/SSD1306Display.cpp>
+<../examples/simple_room_server>


[env:GAT562_30S_Mesh_Kit_companion_radio_usb]
extends = GAT562_30S_Mesh_Kit
board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld
Expand All @@ -86,7 +84,6 @@ lib_deps =
densaugeo/base64 @ ~1.4.0
end2endzone/NonBlockingRTTTL@^1.3.0


[env:GAT562_30S_Mesh_Kit_companion_radio_ble]
extends = GAT562_30S_Mesh_Kit
board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld
Expand Down
1 change: 0 additions & 1 deletion variants/gat562_30s_mesh_kit/variant.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,6 @@ extern "C"
#define ADC_MULTIPLIER (3 * 1.75 * 1.187 * 1000)



/*
* Analog pins
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ const PowerMgtConfig power_config = {


void GAT562MeshTrackerProBoard::initiateShutdown(uint8_t reason) {
#if ENV_INCLUDE_GPS == 1
pinMode(PIN_GPS_EN, OUTPUT);
digitalWrite(PIN_GPS_EN, LOW);
#endif
// Disable LoRa module power before shutdown
digitalWrite(SX126X_POWER_EN, LOW);

Expand Down
6 changes: 1 addition & 5 deletions variants/gat562_mesh_tracker_pro/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ build_flags = ${nrf52_base.build_flags}
${sensor_base.build_flags}
-I variants/gat562_mesh_tracker_pro
-D NRF52_POWER_MANAGEMENT
-D ENV_INCLUDE_GPS=1
-D PIN_BOARD_SCL=14
-D PIN_BOARD_SDA=13
-D PIN_OLED_RESET=-1
Expand All @@ -26,7 +27,6 @@ lib_deps =
adafruit/Adafruit SSD1306 @ ^2.5.13
sparkfun/SparkFun u-blox GNSS Arduino Library@^2.2.27


[env:GAT562_Mesh_Tracker_Pro_repeater]
extends = GAT562_Mesh_Tracker_Pro
build_flags =
Expand All @@ -43,7 +43,6 @@ build_src_filter = ${GAT562_Mesh_Tracker_Pro.build_src_filter}
+<helpers/ui/SSD1306Display.cpp>
+<../examples/simple_repeater>


[env:GAT562_Mesh_Tracker_Pro_room_server]
extends = GAT562_Mesh_Tracker_Pro
build_flags =
Expand All @@ -60,7 +59,6 @@ build_src_filter = ${GAT562_Mesh_Tracker_Pro.build_src_filter}
+<helpers/ui/SSD1306Display.cpp>
+<../examples/simple_room_server>


[env:GAT562_Mesh_Tracker_Pro_companion_radio_usb]
extends = GAT562_Mesh_Tracker_Pro
board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld
Expand All @@ -80,8 +78,6 @@ lib_deps =
${GAT562_Mesh_Tracker_Pro.lib_deps}
densaugeo/base64 @ ~1.4.0



[env:GAT562_Mesh_Tracker_Pro_companion_radio_ble]
extends = GAT562_Mesh_Tracker_Pro
board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld
Expand Down
2 changes: 1 addition & 1 deletion variants/gat562_mesh_tracker_pro/variant.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ extern "C"

#define LED_STATE_ON 1 // State when LED is litted

// #define P_LORA_TX_LED LED_GREEN
//#define P_LORA_TX_LED LED_GREEN


/*
Expand Down
46 changes: 46 additions & 0 deletions variants/gat562_mesh_watch13/GAT56MeshWatch13Board.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#include <Arduino.h>
#include <Wire.h>

#include "GAT56MeshWatch13Board.h"


#ifdef NRF52_POWER_MANAGEMENT
// Static configuration for power management
// Values set in variant.h defines
const PowerMgtConfig power_config = {
.lpcomp_ain_channel = PWRMGT_LPCOMP_AIN,
.lpcomp_refsel = PWRMGT_LPCOMP_REFSEL,
.voltage_bootlock = PWRMGT_VOLTAGE_BOOTLOCK
};


void GAT56MeshWatch13Board::initiateShutdown(uint8_t reason) {
if (reason == SHUTDOWN_REASON_LOW_VOLTAGE ||
reason == SHUTDOWN_REASON_BOOT_PROTECT) {
configureVoltageWake(power_config.lpcomp_ain_channel, power_config.lpcomp_refsel);
}
enterSystemOff(reason);
}
#endif // NRF52_POWER_MANAGEMENT


void GAT56MeshWatch13Board::begin() {
NRF52BoardDCDC::begin();
pinMode(PIN_VBAT_READ, INPUT);


#if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL)
Wire.setPins(PIN_BOARD_SDA, PIN_BOARD_SCL);
#endif

Wire.begin();

pinMode(SX126X_POWER_EN, OUTPUT);
#ifdef NRF52_POWER_MANAGEMENT
// Boot voltage protection check (may not return if voltage too low)
// We need to call this after we configure SX126X_POWER_EN as output but before we pull high
checkBootVoltage(&power_config);
#endif
digitalWrite(SX126X_POWER_EN, HIGH);
delay(10); // give sx1262 some time to power up
}
44 changes: 44 additions & 0 deletions variants/gat562_mesh_watch13/GAT56MeshWatch13Board.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#pragma once

#include <MeshCore.h>
#include <Arduino.h>
#include <helpers/NRF52Board.h>


class GAT56MeshWatch13Board : public NRF52BoardDCDC {
protected:
#ifdef NRF52_POWER_MANAGEMENT
void initiateShutdown(uint8_t reason) override;
#endif

public:
GAT56MeshWatch13Board() : NRF52Board("GAT562_OTA") {}
void begin();

#define BATTERY_SAMPLES 8

uint16_t getBattMilliVolts() override {
analogReadResolution(12);

uint32_t raw = 0;
for (int i = 0; i < BATTERY_SAMPLES; i++) {
raw += analogRead(PIN_VBAT_READ);
}
raw = raw / BATTERY_SAMPLES;

return (ADC_MULTIPLIER * raw) / 4096;
}

const char* getManufacturerName() const override {
return "GAT562 Mesh Watch 13";
}


void powerOff() override {
uint32_t button_pin = PIN_BUTTON2;
nrf_gpio_cfg_input(button_pin, NRF_GPIO_PIN_PULLUP);
nrf_gpio_cfg_sense_set(button_pin, NRF_GPIO_PIN_SENSE_LOW);
sd_power_system_off();
}

};
88 changes: 88 additions & 0 deletions variants/gat562_mesh_watch13/platformio.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
[GAT562_Mesh_Watch13]
extends = nrf52_base
board = rak4631
board_check = true
build_flags = ${nrf52_base.build_flags}
${sensor_base.build_flags}
-UENV_INCLUDE_GPS
-I variants/gat562_mesh_watch13
-D RAK_4631
-D RAK_BOARD
-D NRF52_POWER_MANAGEMENT
-D PIN_BOARD_SCL=14
-D PIN_BOARD_SDA=13
-D PIN_OLED_RESET=-1
-D RADIO_CLASS=CustomSX1262
-D WRAPPER_CLASS=CustomSX1262Wrapper
-D LORA_TX_POWER=19
-D SX126X_CURRENT_LIMIT=140
-D SX126X_RX_BOOSTED_GAIN=1
-D QSPIFLASH=1
build_src_filter = ${nrf52_base.build_src_filter}
+<../variants/gat562_mesh_watch13>
+<helpers/ui/SSD1306Display.cpp>
+<helpers/ui/MomentaryButton.cpp>
+<helpers/sensors>
lib_deps =
${nrf52_base.lib_deps}
${sensor_base.lib_deps}
adafruit/Adafruit SSD1306 @ ^2.5.13

[env:GAT562_Mesh_Watch13_repeater]
extends = GAT562_Mesh_Watch13
build_flags =
${GAT562_Mesh_Watch13.build_flags}
-D DISPLAY_CLASS=SSD1306Display
-D ADVERT_NAME='"GAT562 Repeater"'
-D ADVERT_LAT=0.0
-D ADVERT_LON=0.0
-D ADMIN_PASSWORD='"password"'
-D MAX_NEIGHBOURS=50
; -D MESH_PACKET_LOGGING=1
; -D MESH_DEBUG=1
build_src_filter = ${GAT562_Mesh_Watch13.build_src_filter}
+<helpers/ui/SSD1306Display.cpp>
+<../examples/simple_repeater>

[env:GAT562_Mesh_Watch13_room_server]
extends = GAT562_Mesh_Watch13
build_flags =
${GAT562_Mesh_Watch13.build_flags}
-D DISPLAY_CLASS=SSD1306Display
-D ADVERT_NAME='"GAT562 Room"'
-D ADVERT_LAT=0.0
-D ADVERT_LON=0.0
-D ADMIN_PASSWORD='"password"'
-D ROOM_PASSWORD='"hello"'
; -D MESH_PACKET_LOGGING=1
; -D MESH_DEBUG=1
build_src_filter = ${GAT562_Mesh_Watch13.build_src_filter}
+<helpers/ui/SSD1306Display.cpp>
+<../examples/simple_room_server>

[env:GAT562_Mesh_Watch13_companion_radio_ble]
extends = GAT562_Mesh_Watch13
board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld
board_upload.maximum_size = 712704
build_flags =
${GAT562_Mesh_Watch13.build_flags}
-I examples/companion_radio/ui-new
-D DISPLAY_CLASS=SSD1306Display
-D MAX_CONTACTS=350
-D MAX_GROUP_CHANNELS=40
-D BLE_PIN_CODE=123456
-D BLE_DEBUG_LOGGING=1
-D OFFLINE_QUEUE_SIZE=256
; -D PIN_VIBRATION=36
; -D MESH_PACKET_LOGGING=1
; -D MESH_DEBUG=1
build_src_filter = ${GAT562_Mesh_Watch13.build_src_filter}
+<helpers/nrf52/SerialBLEInterface.cpp>
+<helpers/ui/MomentaryButton.cpp>
+<helpers/ui/GenericVibration.cpp>
+<../examples/companion_radio/*.cpp>
+<../examples/companion_radio/ui-new/*.cpp>
lib_deps =
${GAT562_Mesh_Watch13.lib_deps}
densaugeo/base64 @ ~1.4.0

51 changes: 51 additions & 0 deletions variants/gat562_mesh_watch13/target.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#include <Arduino.h>
#include "target.h"
#include <helpers/ArduinoHelpers.h>

GAT56MeshWatch13Board board;

#ifndef PIN_USER_BTN
#define PIN_USER_BTN (-1)
#endif


#ifdef DISPLAY_CLASS
DISPLAY_CLASS display;
MomentaryButton user_btn(PIN_USER_BTN, 1000, true, false, false);
MomentaryButton back_btn(PIN_BACK_BTN, 1000, true, false, true);
#endif


RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI);

WRAPPER_CLASS radio_driver(radio, board);

VolatileRTCClock fallback_clock;
AutoDiscoverRTCClock rtc_clock(fallback_clock);
EnvironmentSensorManager sensors;


bool radio_init() {
rtc_clock.begin(Wire);
return radio.std_init(&SPI);
}

uint32_t radio_get_rng_seed() {
return radio.random(0x7FFFFFFF);
}

void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) {
radio.setFrequency(freq);
radio.setSpreadingFactor(sf);
radio.setBandwidth(bw);
radio.setCodingRate(cr);
}

void radio_set_tx_power(int8_t dbm) {
radio.setOutputPower(dbm);
}

mesh::LocalIdentity radio_new_identity() {
RadioNoiseListener rng(radio);
return mesh::LocalIdentity(&rng); // create new random identity
}
32 changes: 32 additions & 0 deletions variants/gat562_mesh_watch13/target.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#pragma once

#define RADIOLIB_STATIC_ONLY 1
#include <RadioLib.h>
#include <helpers/radiolib/RadioLibWrappers.h>
#include <GAT56MeshWatch13Board.h>
#include <helpers/radiolib/CustomSX1262Wrapper.h>
#include <helpers/AutoDiscoverRTCClock.h>
#include <helpers/sensors/EnvironmentSensorManager.h>

#ifdef DISPLAY_CLASS
#include <helpers/ui/SSD1306Display.h>
extern DISPLAY_CLASS display;
#include <helpers/ui/MomentaryButton.h>
extern MomentaryButton user_btn;
extern MomentaryButton back_btn;
#endif

#ifdef PIN_VIBRATION
#include <helpers/ui/GenericVibration.h>
#endif

extern GAT56MeshWatch13Board board;
extern WRAPPER_CLASS radio_driver;
extern AutoDiscoverRTCClock rtc_clock;
extern EnvironmentSensorManager sensors;

bool radio_init();
uint32_t radio_get_rng_seed();
void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr);
void radio_set_tx_power(int8_t dbm);
mesh::LocalIdentity radio_new_identity();
Loading
Loading