Browse Source

Merge adb93565e0 into 6e39cff8a1

pull/3068/merge
Ermanno Baschiera 2 days ago
committed by GitHub
parent
commit
ea81f816b8
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 36
      variants/thinknode_m3/ThinkNodeM3Board.cpp
  2. 11
      variants/thinknode_m3/ThinkNodeM3Board.h
  3. 8
      variants/thinknode_m3/variant.cpp
  4. 2
      variants/thinknode_m3/variant.h

36
variants/thinknode_m3/ThinkNodeM3Board.cpp

@ -13,6 +13,42 @@ void ThinkNodeM3Board::begin() {
delay(10); // give sx1262 some time to power up delay(10); // give sx1262 some time to power up
} }
void ThinkNodeM3Board::shutdownPeripherals() {
NRF52Board::shutdownPeripherals(); // display, LoRa radio and GNSS receiver
// GPIO output latches survive SYSTEMOFF, so every switched rail still enabled
// here keeps draining the battery while the board looks powered off
digitalWrite(PIN_GPS_POWER, !GPS_POWER_ACTIVE);
digitalWrite(LED_POWER, LOW); // RGB led supply
digitalWrite(EEPROM_POWER, LOW);
digitalWrite(BAT_POWER, LOW); // battery voltage divider
digitalWrite(PIN_EN1, LOW);
digitalWrite(PIN_EN2, LOW);
digitalWrite(PIN_PWR_EN, LOW);
}
void ThinkNodeM3Board::powerOff() {
// turn off all leds, sd_power_system_off will not do this for us
digitalWrite(PIN_LED_BLUE, !LED_STATE_ON);
digitalWrite(PIN_LED_GREEN, !LED_STATE_ON);
digitalWrite(PIN_LED_RED, !LED_STATE_ON);
// the button is what powers the board back on, and SENSE is level triggered:
// wait for the release, or the board wakes up as soon as it goes SYSTEMOFF
uint32_t started_at = millis();
while (digitalRead(BUTTON_PIN) == LOW) {
if (millis() - started_at > 10000) { // button held down for too long, or stuck:
reboot(); // SYSTEMOFF would wake up right away anyway
}
delay(10);
}
delay(50); // debounce the release
nrf_gpio_cfg_sense_input(g_ADigitalPinMap[BUTTON_PIN], NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW);
// power off board
NRF52Board::powerOff();
}
uint16_t ThinkNodeM3Board::getBattMilliVolts() { uint16_t ThinkNodeM3Board::getBattMilliVolts() {
int adcvalue = 0; int adcvalue = 0;

11
variants/thinknode_m3/ThinkNodeM3Board.h

@ -42,13 +42,6 @@ public:
return 0; return 0;
} }
void powerOff() override { void shutdownPeripherals() override;
// turn off all leds, sd_power_system_off will not do this for us void powerOff() override;
digitalWrite(PIN_LED_BLUE, !LED_STATE_ON);
digitalWrite(PIN_LED_GREEN, !LED_STATE_ON);
digitalWrite(PIN_LED_RED, !LED_STATE_ON);
// power off board
NRF52Board::powerOff();
}
}; };

8
variants/thinknode_m3/variant.cpp

@ -71,10 +71,10 @@ void initVariant()
pinMode(EEPROM_POWER, OUTPUT); pinMode(EEPROM_POWER, OUTPUT);
digitalWrite(EEPROM_POWER, HIGH); digitalWrite(EEPROM_POWER, HIGH);
pinMode(36, OUTPUT); pinMode(PIN_EN1, OUTPUT);
digitalWrite(36, HIGH); digitalWrite(PIN_EN1, HIGH);
pinMode(34, OUTPUT); pinMode(PIN_EN2, OUTPUT);
digitalWrite(34, HIGH); digitalWrite(PIN_EN2, HIGH);
pinMode(LED_POWER, OUTPUT); pinMode(LED_POWER, OUTPUT);
digitalWrite(LED_POWER, HIGH); digitalWrite(LED_POWER, HIGH);

2
variants/thinknode_m3/variant.h

@ -42,6 +42,8 @@
#define EEPROM_POWER (7) #define EEPROM_POWER (7)
#define BAT_POWER (17) #define BAT_POWER (17)
#define PIN_PWR_EN (16) #define PIN_PWR_EN (16)
#define PIN_EN1 (36) // P1.4, buzzer supply
#define PIN_EN2 (34) // P1.2
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

Loading…
Cancel
Save