T1Board.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #include "T1Board.h"
  2. #include <Arduino.h>
  3. #include <Wire.h>
  4. #ifdef NRF52_POWER_MANAGEMENT
  5. const PowerMgtConfig power_config = {
  6. .lpcomp_ain_channel = PWRMGT_LPCOMP_AIN,
  7. .lpcomp_refsel = PWRMGT_LPCOMP_REFSEL,
  8. .voltage_bootlock = PWRMGT_VOLTAGE_BOOTLOCK
  9. };
  10. void T1Board::initiateShutdown(uint8_t reason) {
  11. variant_shutdown();
  12. bool enable_lpcomp = (reason == SHUTDOWN_REASON_LOW_VOLTAGE ||
  13. reason == SHUTDOWN_REASON_BOOT_PROTECT);
  14. pinMode(PIN_BAT_CTL, OUTPUT);
  15. digitalWrite(PIN_BAT_CTL, enable_lpcomp ? ADC_CTRL_ENABLED : !ADC_CTRL_ENABLED);
  16. if (enable_lpcomp) {
  17. configureVoltageWake(power_config.lpcomp_ain_channel, power_config.lpcomp_refsel);
  18. }
  19. enterSystemOff(reason);
  20. }
  21. #endif
  22. void T1Board::begin() {
  23. NRF52Board::begin();
  24. #ifdef NRF52_POWER_MANAGEMENT
  25. checkBootVoltage(&power_config);
  26. #endif
  27. #if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL)
  28. Wire.setPins(PIN_BOARD_SDA, PIN_BOARD_SCL);
  29. #endif
  30. Wire.begin();
  31. pinMode(P_LORA_TX_LED, OUTPUT);
  32. digitalWrite(P_LORA_TX_LED, !LED_STATE_ON);
  33. pinMode(PIN_GPS_EN, OUTPUT);
  34. digitalWrite(PIN_GPS_EN, !PIN_GPS_EN_ACTIVE);
  35. pinMode(PIN_SENSOR_EN, OUTPUT);
  36. digitalWrite(PIN_SENSOR_EN, PIN_SENSOR_EN_ACTIVE);
  37. pinMode(PIN_BUZZER, OUTPUT);
  38. digitalWrite(PIN_BUZZER, LOW);
  39. pinMode(PIN_BUZZER_VOLTAGE_MULTIPLIER_1, OUTPUT);
  40. pinMode(PIN_BUZZER_VOLTAGE_MULTIPLIER_2, OUTPUT);
  41. digitalWrite(PIN_BUZZER_VOLTAGE_MULTIPLIER_1, HIGH);
  42. digitalWrite(PIN_BUZZER_VOLTAGE_MULTIPLIER_2, HIGH);
  43. periph_power.begin();
  44. delay(1);
  45. }
  46. void T1Board::onBeforeTransmit() {
  47. digitalWrite(P_LORA_TX_LED, LED_STATE_ON);
  48. }
  49. void T1Board::onAfterTransmit() {
  50. digitalWrite(P_LORA_TX_LED, !LED_STATE_ON);
  51. }
  52. uint16_t T1Board::getBattMilliVolts() {
  53. analogReadResolution(12);
  54. analogReference(VBAT_AR_INTERNAL);
  55. pinMode(PIN_VBAT_READ, INPUT);
  56. pinMode(PIN_BAT_CTL, OUTPUT);
  57. digitalWrite(PIN_BAT_CTL, ADC_CTRL_ENABLED);
  58. delay(10);
  59. int adcvalue = analogRead(PIN_VBAT_READ);
  60. digitalWrite(PIN_BAT_CTL, !ADC_CTRL_ENABLED);
  61. return (uint16_t)((float)adcvalue * MV_LSB * ADC_MULTIPLIER);
  62. }
  63. void T1Board::variant_shutdown() {
  64. nrf_gpio_cfg_default(PIN_TFT_CS);
  65. nrf_gpio_cfg_default(PIN_TFT_DC);
  66. nrf_gpio_cfg_default(PIN_TFT_SDA);
  67. nrf_gpio_cfg_default(PIN_TFT_SCL);
  68. nrf_gpio_cfg_default(PIN_TFT_RST);
  69. nrf_gpio_cfg_default(PIN_TFT_LEDA_CTL);
  70. nrf_gpio_cfg_default(PIN_TFT_VDD_CTL);
  71. nrf_gpio_cfg_default(PIN_WIRE_SDA);
  72. nrf_gpio_cfg_default(PIN_WIRE_SCL);
  73. nrf_gpio_cfg_default(LORA_CS);
  74. nrf_gpio_cfg_default(SX126X_DIO1);
  75. nrf_gpio_cfg_default(SX126X_BUSY);
  76. nrf_gpio_cfg_default(SX126X_RESET);
  77. nrf_gpio_cfg_default(PIN_SPI_MISO);
  78. nrf_gpio_cfg_default(PIN_SPI_MOSI);
  79. nrf_gpio_cfg_default(PIN_SPI_SCK);
  80. nrf_gpio_cfg_default(PIN_SPI1_MOSI);
  81. nrf_gpio_cfg_default(PIN_SPI1_SCK);
  82. nrf_gpio_cfg_default(PIN_GPS_RESET);
  83. nrf_gpio_cfg_default(PIN_GPS_EN);
  84. nrf_gpio_cfg_default(PIN_GPS_PPS);
  85. nrf_gpio_cfg_default(PIN_GPS_RX);
  86. nrf_gpio_cfg_default(PIN_GPS_TX);
  87. nrf_gpio_cfg_default(PIN_BUZZER_VOLTAGE_MULTIPLIER_1);
  88. nrf_gpio_cfg_default(PIN_BUZZER_VOLTAGE_MULTIPLIER_2);
  89. pinMode(PIN_BUZZER, OUTPUT);
  90. digitalWrite(PIN_BUZZER, LOW);
  91. pinMode(PIN_SENSOR_EN, OUTPUT);
  92. digitalWrite(PIN_SENSOR_EN, !PIN_SENSOR_EN_ACTIVE);
  93. pinMode(PIN_LED1, OUTPUT);
  94. digitalWrite(PIN_LED1, !LED_STATE_ON);
  95. pinMode(PIN_BAT_CTL, OUTPUT);
  96. digitalWrite(PIN_BAT_CTL, !ADC_CTRL_ENABLED);
  97. }
  98. void T1Board::powerOff() {
  99. variant_shutdown();
  100. sd_power_system_off();
  101. }
  102. const char* T1Board::getManufacturerName() const {
  103. return "Heltec T1";
  104. }