diff --git a/examples/puara_basic_template/puara_basic_template.ino b/examples/puara_basic_template/puara_basic_template.ino index 49916ed..14e870f 100644 --- a/examples/puara_basic_template/puara_basic_template.ino +++ b/examples/puara_basic_template/puara_basic_template.ino @@ -6,9 +6,16 @@ Puara puara; // Dummy sensor data float sensor; +void onPuaraSettingsChanged() +{ + // Process here any change of settings by the user, OSC port, etc. +} + void setup() { // put your setup code here, to run once: Serial.begin(115200); + + puara.set_settings_changed_handler(onPuaraSettingsChanged); /* * the Puara start function initializes the filesystem, reads json configuration and * settings, start the wi-fi AP or connects to SSID, starts the webserver, inits serial diff --git a/src/puara.cpp b/src/puara.cpp index 1f19a31..762ff1b 100644 --- a/src/puara.cpp +++ b/src/puara.cpp @@ -130,6 +130,11 @@ void Puara::write_settings_json() return g_puara.settings.write_settings_json(); } +void Puara::set_settings_changed_handler(std::function func) +{ + return g_puara.settings.set_settings_changed_handler(std::move(func)); +} + double Puara::getVarNumber(std::string varName) { return g_puara.settings.getVarNumber(varName); diff --git a/src/puara.h b/src/puara.h index 8abc11b..404678f 100644 --- a/src/puara.h +++ b/src/puara.h @@ -12,6 +12,7 @@ #include #include +#include typedef void* httpd_handle_t; class Puara @@ -50,6 +51,8 @@ class Puara void read_settings_json(); void write_settings_json(); + void set_settings_changed_handler(std::function); + bool start_serial_listening(); void send_serial_data(std::string data); diff --git a/src/puara_filesystem.cpp b/src/puara_filesystem.cpp index c2246d6..9674164 100644 --- a/src/puara_filesystem.cpp +++ b/src/puara_filesystem.cpp @@ -220,7 +220,6 @@ void JSONSettings::write_config_json() void JSONSettings::write_settings_json() { - cJSON* root = cJSON_CreateObject(); cJSON* settings = cJSON_CreateArray(); cJSON* setting = NULL; @@ -254,6 +253,13 @@ void JSONSettings::write_settings_json() LOG("write_settings_json: Delete json entity"); cJSON_Delete(root); + if(this->on_settings_changed) + this->on_settings_changed(); +} + +void JSONSettings::set_settings_changed_handler(std::function func) +{ + this->on_settings_changed = std::move(func); } } diff --git a/src/puara_filesystem.hpp b/src/puara_filesystem.hpp index 8c43f96..71398fd 100644 --- a/src/puara_filesystem.hpp +++ b/src/puara_filesystem.hpp @@ -8,6 +8,7 @@ #include +#include #include #include #include @@ -38,14 +39,18 @@ struct JSONSettings // TODO: remove from puara_filesystem void read_settings_json(); void write_settings_json(); + void set_settings_changed_handler(std::function); + double getVarNumber(std::string varName); std::string getVarText(std::string varName); friend class Webserver; friend class Serial; + // Private API used by puara_web std::vector variables; std::unordered_map variables_fields; + std::function on_settings_changed; // Private API used by puara_serial void read_settings_json_internal(std::string& contents, bool merge = false); diff --git a/src/puara_web.hpp b/src/puara_web.hpp index 533eb52..1e205fb 100644 --- a/src/puara_web.hpp +++ b/src/puara_web.hpp @@ -4,6 +4,7 @@ #include #include +#include typedef void* httpd_handle_t; struct httpd_req;