From 130d5dd4729a668ab7cc72b5195b4ebdd994a940 Mon Sep 17 00:00:00 2001 From: Eric Duminil Date: Fri, 16 Apr 2021 17:42:47 +0200 Subject: [PATCH] Callback names --- ampel-firmware/ampel-firmware.ino | 5 +---- ampel-firmware/co2_sensor.cpp | 2 +- ampel-firmware/led_effects.cpp | 2 +- ampel-firmware/mqtt.cpp | 2 ++ ampel-firmware/mqtt.h | 1 + ampel-firmware/sensor_commands.cpp | 19 +++++++++++++++---- ampel-firmware/sensor_commands.h | 4 ++-- 7 files changed, 23 insertions(+), 12 deletions(-) diff --git a/ampel-firmware/ampel-firmware.ino b/ampel-firmware/ampel-firmware.ino index c9eeb1e..3fdfbd0 100644 --- a/ampel-firmware/ampel-firmware.ino +++ b/ampel-firmware/ampel-firmware.ino @@ -149,10 +149,7 @@ void loop() { if (Serial.available() > 0) { commandString = Serial.readStringUntil('\n'); - Serial.print(F("OHHHH. It would be cool to do something with : '")); - Serial.print(commandString); - Serial.println("'"); - sensor_commands::run(); + sensor_commands::run(commandString.c_str()); } if (sensor::processData()) { diff --git a/ampel-firmware/co2_sensor.cpp b/ampel-firmware/co2_sensor.cpp index f341c95..6707d55 100644 --- a/ampel-firmware/co2_sensor.cpp +++ b/ampel-firmware/co2_sensor.cpp @@ -76,7 +76,7 @@ namespace sensor { Serial.print(F("Auto-calibration is ")); Serial.println(config::auto_calibrate_sensor ? "ON." : "OFF."); - sensor_commands::defineCallback(printCO2, &co2); + sensor_commands::defineCallback("co2", printCO2, &co2); } //NOTE: should timer deviation be used to adjust measurement_timestep? diff --git a/ampel-firmware/led_effects.cpp b/ampel-firmware/led_effects.cpp index 6845adc..5aa2d01 100644 --- a/ampel-firmware/led_effects.cpp +++ b/ampel-firmware/led_effects.cpp @@ -83,7 +83,7 @@ namespace led_effects { pixels.setBrightness(config::max_brightness); LEDsOff(); - sensor_commands::defineCallback(helloRing, 0); + sensor_commands::defineCallback("led", helloRing, 0); } void toggleNightMode() { diff --git a/ampel-firmware/mqtt.cpp b/ampel-firmware/mqtt.cpp index 143ed73..62c597e 100644 --- a/ampel-firmware/mqtt.cpp +++ b/ampel-firmware/mqtt.cpp @@ -141,6 +141,8 @@ namespace mqtt { messageString += (char) message[i]; } Serial.println("'."); + sensor_commands::run(messageString.c_str()); + return; //TODO: Move this logic to a separate class, which could be used by Serial/MQTT/WebServer diff --git a/ampel-firmware/mqtt.h b/ampel-firmware/mqtt.h index 2899a99..76c8b9b 100644 --- a/ampel-firmware/mqtt.h +++ b/ampel-firmware/mqtt.h @@ -4,6 +4,7 @@ #include #include "config.h" #include "led_effects.h" +#include "sensor_commands.h" #ifdef AMPEL_CSV # include "csv_writer.h" #endif diff --git a/ampel-firmware/sensor_commands.cpp b/ampel-firmware/sensor_commands.cpp index 90e64f1..8ef85ba 100644 --- a/ampel-firmware/sensor_commands.cpp +++ b/ampel-firmware/sensor_commands.cpp @@ -2,6 +2,7 @@ namespace sensor_commands { const uint8_t MAX_CALLBACKS = 20; + const uint8_t MAX_COMMAND_SIZE = 20; uint8_t callbacks_count = 0; // A callback contains both a function and a pointer to arbitrary data // that will be passed as argument to the function. @@ -14,19 +15,29 @@ namespace sensor_commands { }; Callback callbacks[MAX_CALLBACKS]; + char callback_names[MAX_CALLBACKS][MAX_COMMAND_SIZE]; - void defineCallback(void (*f)(void*), void *d) { + void defineCallback(const char *command, void (*f)(void*), void *d) { if (callbacks_count < MAX_CALLBACKS) { - callbacks[callbacks_count++] = Callback(f, d); + callbacks[callbacks_count] = Callback(f, d); + strlcpy(callback_names[callbacks_count], command, MAX_COMMAND_SIZE); + callbacks_count++; } else { - Serial.println("OH NOOEEEESSS!!!! TOO MANY CALLBACKS"); + Serial.println(F("Too many callbacks have been defined.")); } } - void run() { + void run(const char *command) { + Serial.print(F("Received command : '")); + Serial.print(command); + Serial.println("'"); // Test all the callbacks. for (uint8_t i = 0; i < callbacks_count; i++) { + Serial.print("Trying '"); + Serial.print(callback_names[i]); + Serial.println("'"); callbacks[i].function(callbacks[i].data); } + Serial.println("Done."); } } diff --git a/ampel-firmware/sensor_commands.h b/ampel-firmware/sensor_commands.h index 81783f8..e94ec31 100644 --- a/ampel-firmware/sensor_commands.h +++ b/ampel-firmware/sensor_commands.h @@ -6,6 +6,6 @@ */ namespace sensor_commands { - void run(); - void defineCallback(void (*f)(void*), void *d); + void run(const char *command); + void defineCallback(const char *command, void (*f)(void*), void *d); } -- GitLab