Libraries/HueEmulator/src/include/Hue/Device.h
Go to the documentation of this file.
1 
20 #pragma once
21 
22 #include <Network/UPnP/Enumerator.h>
23 #include <WString.h>
24 #include <BitManipulations.h>
25 #include <ArduinoJson6.h>
26 #include <Data/BitSet.h>
27 
28 #define HUE_ERROR_CODE_MAP(XX) \
29  XX(1, UnauthorizedUser, "unauthorized user") \
30  XX(3, ResourceNotAvailable, "resource, <resource>, not available") \
31  XX(4, MethodNotAvailable, "method, <method_name>, not available for resource, <resource>") \
32  XX(6, ParameterNotAvailable, "parameter, <parameter>, not available") \
33  XX(101, LinkButtonNotPressed, "link button not pressed") \
34  XX(901, InternalError, "Internal error, <error_code>")
35 
36 namespace Hue
37 {
38 #define HUE_DEVICE_ATTR_MAP(XX) \
39  XX(on) \
40  XX(bri) \
41  XX(ct) \
42  XX(hue) \
43  XX(sat)
44 
45 #define HUE_COLORMODE_MAP(XX) \
46  XX(none) \
47  XX(hs) \
48  XX(ct) \
49  XX(xy)
50 
51 enum class Error {
52 #define XX(code, tag, desc) tag = code,
54 #undef XX
55 };
56 
60 enum class Status {
64  success,
78  pending,
85  error,
86 };
87 
89 JsonObject createSuccess(JsonDocument& result);
90 JsonObject createError(JsonDocument& result, const String& path, Error error, String description);
91 
92 class Device : public UPnP::Item
93 {
94 public:
95  using ID = uint32_t;
96 
97  enum class Attribute {
98 #define XX(t) t,
100 #undef XX
101  };
102 
104 
105  enum class ColorMode {
106 #define XX(t) t,
108 #undef XX
109  };
110 
118 
125  class Enumerator : public UPnP::Enumerator<Device, Enumerator>
126  {
127  public:
133  virtual Device* find(Device::ID id);
134 
140  virtual Device* find(const String& name);
141  };
142 
143  virtual ~Device()
144  {
145  }
146 
147  virtual ID getId() const = 0;
148 
149  virtual String getName() const = 0;
150 
159  virtual Status setAttribute(Attribute attr, unsigned value, Callback callback) = 0;
160 
167  virtual bool getAttribute(Attribute attr, unsigned& value) const = 0;
168 
178  virtual String getUniqueId() const;
179 
180  virtual ColorMode getColorMode() const
181  {
182  return ColorMode::none;
183  }
184 
185  virtual void getInfo(JsonObject json);
186 
190  bool operator==(const Device& dev) const
191  {
192  return getId() == dev.getId();
193  }
194 
195  bool operator==(const String& name) const
196  {
197  return this->getName() == name;
198  }
199 
200  bool operator==(ID id) const
201  {
202  return getId() == id;
203  }
204 };
205 
208 bool fromString(const char* tag, Device::Attribute& attr);
210 
211 } // namespace Hue
Definition: Bridge.h:29
XX(code, tag, desc)
ColorMode
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:105
JsonObject createSuccess(JsonDocument &result)
bool fromString(const char *tag, Device::Attribute &attr)
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:92
The action was accepted but requires further processing.
#define HUE_ERROR_CODE_MAP(XX)
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:28
The String class.
Definition: WString.h:136
Status
Status of a setAttribute request.
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:60
Definition: Delegate.h:20
Error
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:51
#define HUE_DEVICE_ATTR_MAP(XX)
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:38
Json json
bool operator==(ID id) const
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:200
String toString(Error error)
The action was performed immediately without error.
JsonObject createError(JsonDocument &result, const String &path, Error error, String description)
Manage a set of bit values using enumeration.
Definition: BitSet.h:43
bool operator==(const String &name) const
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:195
virtual ID getId() const =0
virtual ColorMode getColorMode() const
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:180
#define HUE_COLORMODE_MAP(XX)
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:45
virtual ~Device()
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:143
bool operator==(const Device &dev) const
Two devices are considered equal if they have the same ID.
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:190
Action could not be completed.
Attribute
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:97
uint32_t ID
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:95
Abstract class to manage a list of devices.
Definition: Libraries/HueEmulator/src/include/Hue/Device.h:125