sensors: gpio command

This commit is contained in:
Florent 2025-07-22 21:08:15 +02:00
parent e42d8f972e
commit b5a8a1a883
3 changed files with 29 additions and 1 deletions

View file

@ -545,7 +545,16 @@ void SensorMesh::handleCommand(uint32_t sender_timestamp, char* command, char* r
Serial.printf("\n");
}
reply[0] = 0;
} else {
} else if (memcmp(command, "gpio ", 4) == 0) { // gpio {value}: write, gpio: read
if (command[4] == ' ') { // it's a write
uint32_t val;
sscanf(&command[5], "%x", &val);
board.setGpio(val);
strcpy(reply, "Ok");
} else {
sprintf(reply, "%x", board.getGpio());
}
} else{
_cli.handleCommand(sender_timestamp, command, reply); // common CLI commands
}
}

View file

@ -41,6 +41,8 @@ public:
virtual void onAfterTransmit() { }
virtual void reboot() = 0;
virtual void powerOff() { /* no op */ }
virtual uint32_t getGpio() { return 0; }
virtual void setGpio(uint32_t values) {}
virtual uint8_t getStartupReason() const = 0;
virtual bool startOTAUpdate(const char* id, char reply[]) { return false; } // not supported
};

View file

@ -13,6 +13,12 @@
class RAK3x72Board : public STM32Board {
public:
void begin() override {
STM32Board::begin();
pinMode(PA0, OUTPUT);
pinMode(PA1, OUTPUT);
}
const char* getManufacturerName() const override {
return "RAK 3x72";
}
@ -25,6 +31,17 @@ public:
}
return ((double)raw) * ADC_MULTIPLIER / 8 / 4096;
}
void setGpio(uint32_t values) override {
// set led values
digitalWrite(PA0, values & 1);
digitalWrite(PA1, (values & 2) >> 1);
}
uint32_t getGpio() override {
// get led value
return (digitalRead(PA1) << 1) | digitalRead(PA0);
}
};
extern RAK3x72Board board;