mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-20 22:13:47 +00:00
71 lines
1.9 KiB
C++
71 lines
1.9 KiB
C++
#include "TBeam1WBoard.h"
|
|
|
|
void TBeam1WBoard::begin() {
|
|
ESP32Board::begin();
|
|
|
|
// Power on radio module (must be done before radio init)
|
|
pinMode(SX126X_POWER_EN, OUTPUT);
|
|
digitalWrite(SX126X_POWER_EN, HIGH);
|
|
radio_powered = true;
|
|
delay(10); // Allow radio to power up
|
|
|
|
// RF switch RXEN pin handled by RadioLib via setRfSwitchPins()
|
|
|
|
// Initialize LED
|
|
pinMode(LED_PIN, OUTPUT);
|
|
digitalWrite(LED_PIN, LOW);
|
|
|
|
// Initialize fan control (on by default - 1W PA can overheat)
|
|
pinMode(FAN_CTRL_PIN, OUTPUT);
|
|
digitalWrite(FAN_CTRL_PIN, HIGH);
|
|
}
|
|
|
|
void TBeam1WBoard::onBeforeTransmit() {
|
|
// RF switching handled by RadioLib via SX126X_DIO2_AS_RF_SWITCH and setRfSwitchPins()
|
|
digitalWrite(LED_PIN, HIGH); // TX LED on
|
|
}
|
|
|
|
void TBeam1WBoard::onAfterTransmit() {
|
|
digitalWrite(LED_PIN, LOW); // TX LED off
|
|
}
|
|
|
|
uint16_t TBeam1WBoard::getBattMilliVolts() {
|
|
// T-Beam 1W uses 7.4V battery with voltage divider
|
|
// ADC reads through divider - adjust multiplier based on actual divider ratio
|
|
analogReadResolution(12);
|
|
uint32_t raw = 0;
|
|
for (int i = 0; i < 8; i++) {
|
|
raw += analogRead(BATTERY_PIN);
|
|
}
|
|
raw = raw / 8;
|
|
// Assuming voltage divider ratio from ADC_MULTIPLIER
|
|
// 3.3V reference, 12-bit ADC (4095 max)
|
|
return static_cast<uint16_t>((raw * 3300 * ADC_MULTIPLIER) / 4095);
|
|
}
|
|
|
|
const char* TBeam1WBoard::getManufacturerName() const {
|
|
return "LilyGo T-Beam 1W";
|
|
}
|
|
|
|
void TBeam1WBoard::powerOff() {
|
|
// Turn off radio LNA (CTRL pin must be LOW when not receiving)
|
|
digitalWrite(SX126X_RXEN, LOW);
|
|
|
|
// Turn off radio power
|
|
digitalWrite(SX126X_POWER_EN, LOW);
|
|
radio_powered = false;
|
|
|
|
// Turn off LED and fan
|
|
digitalWrite(LED_PIN, LOW);
|
|
digitalWrite(FAN_CTRL_PIN, LOW);
|
|
|
|
ESP32Board::powerOff();
|
|
}
|
|
|
|
void TBeam1WBoard::setFanEnabled(bool enabled) {
|
|
digitalWrite(FAN_CTRL_PIN, enabled ? HIGH : LOW);
|
|
}
|
|
|
|
bool TBeam1WBoard::isFanEnabled() const {
|
|
return digitalRead(FAN_CTRL_PIN) == HIGH;
|
|
}
|