repair broken rcommand processing

This commit is contained in:
cyberman54 2021-01-07 10:37:55 +01:00
parent 59e3876296
commit 3d6af69c0b
2 changed files with 27 additions and 26 deletions

View File

@ -25,7 +25,6 @@ typedef struct {
const uint8_t opcode; const uint8_t opcode;
void (*func)(uint8_t[]); void (*func)(uint8_t[]);
const uint8_t params; const uint8_t params;
const bool store;
} cmd_t; } cmd_t;
// Struct for remote command processing queue // Struct for remote command processing queue

View File

@ -379,13 +379,10 @@ void set_saveconfig(uint8_t val[]) {
saveConfig(false); saveConfig(false);
}; };
// check and execute remote command // assign previously defined functions to set of numeric remote commands
void rcmd_execute(const uint8_t cmd[], const uint8_t cmdlength) { // format: {opcode, function, number of function arguments}
// assign previously defined functions to set of numeric remote commands static const cmd_t table[] = {
// format: {opcode, function, number of function arguments}
const cmd_t table[] = {
{0x01, set_rssi, 1}, {0x02, set_countmode, 1}, {0x01, set_rssi, 1}, {0x02, set_countmode, 1},
{0x03, set_gps, 1}, {0x04, set_display, 1}, {0x03, set_gps, 1}, {0x04, set_display, 1},
{0x05, set_loradr, 1}, {0x06, set_lorapower, 1}, {0x05, set_loradr, 1}, {0x06, set_lorapower, 1},
@ -405,15 +402,20 @@ void rcmd_execute(const uint8_t cmd[], const uint8_t cmdlength) {
{0x86, get_time, 0}, {0x87, set_time, 0}, {0x86, get_time, 0}, {0x87, set_time, 0},
{0x99, set_flush, 0}}; {0x99, set_flush, 0}};
static const uint8_t cmdtablesize =
sizeof(table) / sizeof(table[0]); // number of commands in command table
// check and execute remote command
void rcmd_execute(const uint8_t cmd[], const uint8_t cmdlength) {
if (cmdlength == 0) if (cmdlength == 0)
return; return;
uint8_t foundcmd[cmdlength], cursor = 0; uint8_t foundcmd[cmdlength], cursor = 0;
int i =
sizeof(table) / sizeof(table[0]); // number of commands in command table
while (cursor < cmdlength) { while (cursor < cmdlength) {
int i = cmdtablesize;
while (i--) { while (i--) {
if (cmd[cursor] == table[i].opcode) { // lookup command in opcode table if (cmd[cursor] == table[i].opcode) { // lookup command in opcode table
cursor++; // strip 1 byte opcode cursor++; // strip 1 byte opcode