Browse Source

sensors: gpio command

pull/547/head
Florent 11 months ago
parent
commit
b5a8a1a883
  1. 11
      examples/simple_sensor/SensorMesh.cpp
  2. 2
      src/MeshCore.h
  3. 17
      variants/rak3x72/target.h

11
examples/simple_sensor/SensorMesh.cpp

@ -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
}
}

2
src/MeshCore.h

@ -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
};

17
variants/rak3x72/target.h

@ -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;

Loading…
Cancel
Save