Fix canal parsing: replace sscanf with strchr
This commit is contained in:
27
src/main.cpp
27
src/main.cpp
@@ -212,18 +212,21 @@ public:
|
|||||||
for (int j = 0; j < 20; j++) { sum += radio_driver.getCurrentRSSI(); delay(50); }
|
for (int j = 0; j < 20; j++) { sum += radio_driver.getCurrentRSSI(); delay(50); }
|
||||||
char r[32]; snprintf(r, sizeof(r), "noise:%.0fdBm", sum / 20); defer_response(r);
|
char r[32]; snprintf(r, sizeof(r), "noise:%.0fdBm", sum / 20); defer_response(r);
|
||||||
} else if (strncmp(cmd, "canal", 5) == 0) {
|
} else if (strncmp(cmd, "canal", 5) == 0) {
|
||||||
const char* rest = cmd + 5; while (*rest == ' ') rest++;
|
char buf[128]; strncpy(buf, cmd, sizeof(buf) - 1); buf[sizeof(buf) - 1] = 0;
|
||||||
char cname[32], cpass[32];
|
char* rest = buf + 5; while (*rest == ' ') rest++;
|
||||||
int n = sscanf(rest, "%31s %31s", cname, cpass);
|
char* cname = rest;
|
||||||
if (n == 2) {
|
char* space = strchr(cname, ' ');
|
||||||
strncpy(g_channel_name, cname, sizeof(g_channel_name) - 1);
|
if (!space) { defer_response("need name and password"); return; }
|
||||||
strncpy(g_channel_pass, cpass, sizeof(g_channel_pass) - 1);
|
*space = 0;
|
||||||
saveChannelConfig();
|
char* cpass = space + 1;
|
||||||
char r[64]; snprintf(r, sizeof(r), "canal %s %s ok", cname, cpass);
|
if (*cpass == 0) { defer_response("need name and password"); return; }
|
||||||
send_text(r);
|
strncpy(g_channel_name, cname, sizeof(g_channel_name) - 1);
|
||||||
delay(100);
|
strncpy(g_channel_pass, cpass, sizeof(g_channel_pass) - 1);
|
||||||
NVIC_SystemReset();
|
saveChannelConfig();
|
||||||
} else defer_response("canal name password");
|
char r[64]; snprintf(r, sizeof(r), "canal %s %s ok", cname, cpass);
|
||||||
|
send_text(r);
|
||||||
|
for (int i = 0; i < 5; i++) { digitalWrite(PIN_LED_STATUS, HIGH); delay(100); digitalWrite(PIN_LED_STATUS, LOW); delay(100); }
|
||||||
|
NVIC_SystemReset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user