diff options
Diffstat (limited to 'src/diller/core.h')
-rw-r--r-- | src/diller/core.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/diller/core.h b/src/diller/core.h new file mode 100644 index 0000000..e9d5c28 --- /dev/null +++ b/src/diller/core.h @@ -0,0 +1,69 @@ +#pragma once + +#include "diller/utils.h" + +namespace diller { +namespace core { + +using diller::utils::property; + +template<uint8_t max_property_count> +using props = diller::utils::properties<max_property_count>; + +enum class diller_error : uint8_t { + OK, INVAL, NOMEM +}; + +static +const char * to_string(diller_error err) { + switch (err) { + case diller_error::OK: + return "ok"; + case diller_error::INVAL: + return "inval"; + case diller_error::NOMEM: + return "nomem"; + default: + return "unknown"; + } +} + +enum class property_action : uint8_t { + VALUE, + NAME, + DESCRIPTION, +}; + +class property_action_listener { + public: + virtual void on_property_action(const property *, property_action) = 0; +}; + +template<uint8_t number_of_properties> +class core { + public: + core(const String &mqtt_host, int mqtt_port); + void set_property_action_listener(property_action_listener *); + + void setup(); + void loop(); + + bool connected() const; + + diller_error cmd_property(const char *id, const char *value, const char *name); + props<number_of_properties> properties; + + const String mqtt_host; + const int mqtt_port = 1883; + String mac; + String client_id; + + private: + void callback(char* topic_, byte* payload, unsigned int length); + property_action_listener *property_action_listener_; +}; + +} // namespace core +} // namespace diller + +#include "diller/core_impl.h" |