#pragma once #include "diller_utils.h" #include #include namespace diller { namespace core { using diller::utils::property; template using props = diller::utils::properties; 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 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 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 "impl/diller_core_impl.h"