diff --git a/examples/simple_sensor/SensorMesh.cpp b/examples/simple_sensor/SensorMesh.cpp index 38af81e6..24e6b62b 100644 --- a/examples/simple_sensor/SensorMesh.cpp +++ b/examples/simple_sensor/SensorMesh.cpp @@ -545,15 +545,25 @@ void SensorMesh::handleCommand(uint32_t sender_timestamp, char* command, char* r Serial.printf("\n"); } reply[0] = 0; - } else if (memcmp(command, "gpio ", 4) == 0) { // gpio {value}: write, gpio: read - if (command[4] == ' ') { // it's a write + } else if (memcmp(command, "io ", 2) == 0) { // io {value}: write, io: read + if (command[2] == ' ') { // it's a write uint32_t val; - sscanf(&command[5], "%x", &val); + uint32_t g = board.getGpio(); + if (command[3] == 'r') { // reset bits + sscanf(&command[4], "%x", &val); + val = g & ~val; + } else if (command[3] == 's') { // set bits + sscanf(&command[4], "%x", &val); + val |= g; + } else if (command[3] == 't') { // toggle bits + sscanf(&command[4], "%x", &val); + val ^= g; + } else { // set value + sscanf(&command[3], "%x", &val); + } board.setGpio(val); - strcpy(reply, "Ok"); - } else { - sprintf(reply, "%x", board.getGpio()); } + sprintf(reply, "%x", board.getGpio()); } else{ _cli.handleCommand(sender_timestamp, command, reply); // common CLI commands }