aboutsummaryrefslogtreecommitdiff
path: root/src/diller/core.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/diller/core.h')
-rw-r--r--src/diller/core.h69
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"