Refactor command line arguments

This commit is contained in:
Theo Arends 2021-01-30 17:00:50 +01:00
parent f43c098158
commit a4e8b9d681
2 changed files with 25 additions and 6 deletions

View File

@ -253,7 +253,7 @@ uint32_t ChrCount(const char *str, const char *delim) {
}
uint32_t ArgC(void) {
return ChrCount(XdrvMailbox.data, ",") +1;
return (XdrvMailbox.data_len > 0) ? ChrCount(XdrvMailbox.data, ",") +1 : 0;
}
// Function to return a substring defined by a delimiter at an index
@ -280,8 +280,25 @@ char* ArgV(char* dest, int index) {
return subStr(dest, XdrvMailbox.data, ",", index);
}
uint32_t ParseParameters(uint32_t count, uint32_t *params)
{
uint32_t ArgVul(uint32_t *args, uint32_t count) {
uint32_t argc = ArgC();
if (argc > count) { argc = count; }
count = argc;
if (argc) {
char argument[XdrvMailbox.data_len];
for (uint32_t i = 0; i < argc; i++) {
if (strlen(ArgV(argument, i +1))) {
args[i] = strtoul(argument, nullptr, 0);
} else {
count--;
}
}
}
return count;
}
uint32_t ParseParameters(uint32_t count, uint32_t *params) {
// Destroys XdrvMailbox.data
char *p;
uint32_t i = 0;
for (char *str = strtok_r(XdrvMailbox.data, ", ", &p); str && i < count; str = strtok_r(nullptr, ", ", &p), i++) {

View File

@ -201,11 +201,13 @@ void CmndBuzzer(void) {
if (XdrvMailbox.data_len > 0) {
if (XdrvMailbox.payload != 0) {
uint32_t parm[4] = { 0 };
uint32_t mode = 0;
ParseParameters(4, parm);
if (XdrvMailbox.payload <= 0) {
uint32_t mode = 0;
if (XdrvMailbox.payload < 0) {
parm[0] = 1; // Default Count
mode = -XdrvMailbox.payload; // 0, 1 or 2
if (XdrvMailbox.payload > -3) {
mode = -XdrvMailbox.payload; // 0, 1 or 2
}
}
for (uint32_t i = 1; i < 3; i++) {
if (parm[i] < 1) { parm[i] = 1; } // Default On time, Off time