diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2016-04-11 08:24:56 +0200 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2016-04-11 08:24:56 +0200 |
commit | 1aee39b3b4048ad8fc6e442cc5d0d79be1b6f233 (patch) | |
tree | 335211feec9512ad2b44ad65376715d6f0bcb58b /src/diller/core.h | |
parent | 1effc988e95a7c39ed673bbcc840ff20cec4bb75 (diff) | |
download | diller-1aee39b3b4048ad8fc6e442cc5d0d79be1b6f233.tar.gz diller-1aee39b3b4048ad8fc6e442cc5d0d79be1b6f233.tar.bz2 diller-1aee39b3b4048ad8fc6e442cc5d0d79be1b6f233.tar.xz diller-1aee39b3b4048ad8fc6e442cc5d0d79be1b6f233.zip |
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" |