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