TBeam1WBoard.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "TBeam1WBoard.h"
  2. void TBeam1WBoard::begin() {
  3. ESP32Board::begin();
  4. // Power on radio module (must be done before radio init)
  5. pinMode(SX126X_POWER_EN, OUTPUT);
  6. digitalWrite(SX126X_POWER_EN, HIGH);
  7. radio_powered = true;
  8. delay(10); // Allow radio to power up
  9. // RF switch RXEN pin handled by RadioLib via setRfSwitchPins()
  10. // Initialize LED
  11. pinMode(LED_PIN, OUTPUT);
  12. digitalWrite(LED_PIN, LOW);
  13. // Initialize fan control (on by default - 1W PA can overheat)
  14. pinMode(FAN_CTRL_PIN, OUTPUT);
  15. digitalWrite(FAN_CTRL_PIN, HIGH);
  16. }
  17. void TBeam1WBoard::onBeforeTransmit() {
  18. // RF switching handled by RadioLib via SX126X_DIO2_AS_RF_SWITCH and setRfSwitchPins()
  19. digitalWrite(LED_PIN, HIGH); // TX LED on
  20. }
  21. void TBeam1WBoard::onAfterTransmit() {
  22. digitalWrite(LED_PIN, LOW); // TX LED off
  23. }
  24. uint16_t TBeam1WBoard::getBattMilliVolts() {
  25. // T-Beam 1W uses 7.4V battery with voltage divider
  26. // ADC reads through divider - adjust multiplier based on actual divider ratio
  27. analogReadResolution(12);
  28. uint32_t raw = 0;
  29. for (int i = 0; i < 8; i++) {
  30. raw += analogRead(BATTERY_PIN);
  31. }
  32. raw = raw / 8;
  33. // Assuming voltage divider ratio from ADC_MULTIPLIER
  34. // 3.3V reference, 12-bit ADC (4095 max)
  35. return static_cast<uint16_t>((raw * 3300 * ADC_MULTIPLIER) / 4095);
  36. }
  37. const char* TBeam1WBoard::getManufacturerName() const {
  38. return "LilyGo T-Beam 1W";
  39. }
  40. void TBeam1WBoard::powerOff() {
  41. // Turn off radio LNA (CTRL pin must be LOW when not receiving)
  42. digitalWrite(SX126X_RXEN, LOW);
  43. // Turn off radio power
  44. digitalWrite(SX126X_POWER_EN, LOW);
  45. radio_powered = false;
  46. // Turn off LED and fan
  47. digitalWrite(LED_PIN, LOW);
  48. digitalWrite(FAN_CTRL_PIN, LOW);
  49. ESP32Board::powerOff();
  50. }
  51. void TBeam1WBoard::setFanEnabled(bool enabled) {
  52. digitalWrite(FAN_CTRL_PIN, enabled ? HIGH : LOW);
  53. }
  54. bool TBeam1WBoard::isFanEnabled() const {
  55. return digitalRead(FAN_CTRL_PIN) == HIGH;
  56. }