An error occurred while loading the file. Please try again.
-
Thapa authored844c044c
#include "sensor_commands.h"
namespace sensor_commands {
const uint8_t MAX_CALLBACKS = 20;
const uint8_t MAX_COMMAND_SIZE = 30;
uint8_t callbacks_count = 0;
struct Callback {
Callback(const char *s = 0, void (*f)(int32_t) = 0, const char *d = 0) :
name(s), function(f), doc(d) {
}
const char *name;
void (*function)(int32_t);
const char *doc;
};
Callback callbacks[MAX_CALLBACKS];
void defineCallback(const char *name, void (*function)(int32_t), const char *doc) {
if (callbacks_count < MAX_CALLBACKS) {
callbacks[callbacks_count] = Callback(name, function, doc);
callbacks_count++;
} else {
Serial.println(F("Too many callbacks have been defined."));
}
}
uint8_t parseCommand(const char *command, char *function_name, int32_t ¶meter) {
char split_command[MAX_COMMAND_SIZE];
strlcpy(split_command, command, MAX_COMMAND_SIZE);
Serial.print(F("Received : '"));
Serial.print(command);
Serial.println("'");
char *arg;
char *part1;
part1 = strtok(split_command, " ");
if (!part1) {
// Empty string
return 1;
}
strlcpy(function_name, part1, MAX_COMMAND_SIZE);
arg = strtok(NULL, " ");
uint8_t code = 0;
if (arg) {
char *end;
parameter = strtol(arg, &end, 10);
if (*end) {
// Second argument isn't a number
code = 2;
}
} else {
// No parameter
code = 2;
}
return code;
}
void listAvailableCallbacks() {
for (uint8_t i = 0; i < callbacks_count; i++) {
Serial.print(" ");
Serial.print(callbacks[i].name);
Serial.print(callbacks[i].doc);
Serial.println(".");
}
led_effects::showKITTWheel(color::red, 1);
}
void run(const char *command) {
char function_name[MAX_COMMAND_SIZE];
int32_t parameter = 0;
parseCommand(command, function_name, parameter);
for (uint8_t i = 0; i < callbacks_count; i++) {
if (!strcmp(function_name, callbacks[i].name)) {
Serial.print("Calling : ");
Serial.print(function_name);
Serial.print("(");
Serial.print(parameter);
Serial.println(")");
callbacks[i].function(parameter);
return;
}
}
Serial.println(F("Message not supported. Available commands :"));
listAvailableCallbacks();
}
}