* refactor to support new Board::handleCommand(), and "get/set radio.fem.*" commands

This commit is contained in:
Scott Powell
2026-09-15 18:41:11 +10:00
parent 53b6476409
commit 3a3c13a143
2 changed files with 55 additions and 6 deletions
@@ -16,7 +16,6 @@ void WioTrackerL1Board::begin() {
pinMode(PIN_BUTTON5, INPUT_PULLUP);
pinMode(PIN_BUTTON6, INPUT_PULLUP);
#if defined(PIN_WIRE_SDA) && defined(PIN_WIRE_SCL)
Wire.setPins(PIN_WIRE_SDA, PIN_WIRE_SCL);
#endif
@@ -38,3 +37,51 @@ bool WioTrackerL1Board::setLoRaFemPaGainEnabled(bool enable) {
digitalWrite(SX126X_POWER_EN, enable ? HIGH : LOW); // enable/disable the 1W PA
return true;
}
void WioTrackerL1Board::attachDynamicPrefs(KeyValueStore* prefs) {
_prefs = prefs;
char gain[8];
gain[0] = 0;
_prefs->getByKey("fem_txgain", gain, 7); // get initial values
setLoRaFemPaGainEnabled(strcmp(gain, "1") == 0);
}
bool WioTrackerL1Board::handleCommand(const char* command, uint32_t sender_timestamp, char* reply) {
if (strcmp(command, "get radio.fem.rxgain") == 0) {
strcpy(reply, "Error: unsupported");
return true;
}
if (memcmp(command, "set radio.fem.rxgain ", 21) == 0) {
strcpy(reply, "Error: unsupported");
return true;
}
if (strcmp(command, "get radio.fem.txgain") == 0) {
sprintf(reply, "> %s", isLoRaFemPaGainEnabled() ? "on" : "off");
return true;
}
if (memcmp(command, "set radio.fem.txgain ", 21) == 0) {
if (memcmp(&command[21], "on", 2) == 0) {
if (setLoRaFemPaGainEnabled(true)) {
_prefs->setByKey("fem_txgain", "1");
strcpy(reply, "OK - LoRa FEM TX gain on");
} else {
strcpy(reply, "Error: failed to apply LoRa FEM TX gain");
}
} else if (memcmp(&command[21], "off", 3) == 0) {
if (setLoRaFemPaGainEnabled(false)) {
_prefs->setByKey("fem_txgain", "0");
strcpy(reply, "OK - LoRa FEM TX gain off");
} else {
strcpy(reply, "Error: failed to apply LoRa FEM TX gain");
}
} else {
strcpy(reply, "Error: state must be on or off");
}
return true;
}
return false; // not handled
}
@@ -8,10 +8,16 @@ class WioTrackerL1Board : public NRF52BoardDCDC {
protected:
uint8_t btn_prev_state;
bool _is_pa_enabled = false;
KeyValueStore* _prefs = NULL;
bool setLoRaFemPaGainEnabled(bool enable);
bool isLoRaFemPaGainEnabled() const { return _is_pa_enabled; }
public:
WioTrackerL1Board() : NRF52Board("WioTrackerL1 OTA") {}
void begin();
void attachDynamicPrefs(KeyValueStore* prefs);
bool handleCommand(const char* command, uint32_t sender_timestamp, char* reply) override;
#if defined(P_LORA_TX_LED)
void onBeforeTransmit() override {
@@ -35,10 +41,6 @@ public:
return "Seeed Wio Tracker L1";
}
bool canControlLoRaFemPaGain() const override { return true; }
bool setLoRaFemPaGainEnabled(bool enable) override;
bool isLoRaFemPaGainEnabled() const override { return _is_pa_enabled; }
void powerOff() override {
setLoRaFemPaGainEnabled(false); // turn Off PA
NRF52Board::powerOff();