SinricPro Library
EqualizerController.h
1 #ifndef _EQUALIZERCONTROLLER_H_
2 #define _EQUALIZERCONTROLLER_H_
3 
4 #include "SinricProRequest.h"
5 
10 template <typename T>
12 public:
13  EqualizerController() { static_cast<T &>(*this).requestHandlers.push_back(std::bind(&EqualizerController<T>::handleEqualizerController, this, std::placeholders::_1)); }
30  using SetBandsCallback = std::function<bool(const String &, const String &, int &)>;
31 
48  using AdjustBandsCallback = std::function<bool(const String &, const String &, int &)>;
49 
65  using ResetBandsCallback = std::function<bool(const String &, const String &, int &)>;
66 
70 
71  bool sendBandsEvent(String bands, int level, String cause = "PHYSICAL_INTERACTION");
72 
73 protected:
74  bool handleEqualizerController(SinricProRequest &request);
75 
76 private:
77  SetBandsCallback setBandsCallback;
78  AdjustBandsCallback adjustBandsCallback;
79  ResetBandsCallback resetBandsCallback;
80 };
81 
89 template <typename T>
90 void EqualizerController<T>::onSetBands(SetBandsCallback cb) { setBandsCallback = cb; }
91 
99 template <typename T>
100 void EqualizerController<T>::onAdjustBands(AdjustBandsCallback cb) { adjustBandsCallback = cb; }
101 
109 template <typename T>
110 void EqualizerController<T>::onResetBands(ResetBandsCallback cb) { resetBandsCallback = cb; }
111 
122 template <typename T>
123 bool EqualizerController<T>::sendBandsEvent(String bands, int level, String cause) {
124  T& device = static_cast<T&>(*this);
125 
126  DynamicJsonDocument eventMessage = device.prepareEvent("setBands", cause.c_str());
127  JsonObject event_value = eventMessage["payload"]["value"];
128  JsonArray event_value_bands = event_value.createNestedArray("bands");
129  JsonObject event_bands = event_value_bands.createNestedObject();
130  event_bands["name"] = bands;
131  event_bands["value"] = level;
132  return device.sendEvent(eventMessage);
133 }
134 
135 template <typename T>
136 bool EqualizerController<T>::handleEqualizerController(SinricProRequest &request) {
137  T &device = static_cast<T &>(*this);
138  bool success = false;
139 
140  if (setBandsCallback && request.action == "setBands") {
141  JsonArray bands_array = request.request_value["bands"];
142  JsonArray response_value_bands = request.response_value.createNestedArray("bands");
143 
144  for (size_t i = 0; i < bands_array.size(); i++) {
145  int level = bands_array[i]["level"] | 0;
146  String bandsName = bands_array[i]["name"] | "";
147  success = setBandsCallback(device.deviceId, bandsName, level);
148  JsonObject response_value_bands_i = response_value_bands.createNestedObject();
149  response_value_bands_i["name"] = bandsName;
150  response_value_bands_i["level"] = level;
151  }
152  return success;
153  }
154 
155  if (adjustBandsCallback && request.action == "adjustBands") {
156  JsonArray bands_array = request.request_value["bands"];
157  JsonArray response_value_bands = request.response_value.createNestedArray("bands");
158 
159  for (size_t i = 0; i < bands_array.size(); i++) {
160  int levelDelta = bands_array[i]["levelDelta"] | 1;
161  String direction = bands_array[i]["levelDirection"];
162  if (direction == "DOWN")
163  levelDelta *= -1;
164  String bandsName = bands_array[i]["name"] | "";
165  success = adjustBandsCallback(device.deviceId, bandsName, levelDelta);
166  JsonObject response_value_bands_i = response_value_bands.createNestedObject();
167  response_value_bands_i["name"] = bandsName;
168  response_value_bands_i["level"] = levelDelta;
169  }
170  return success;
171  }
172 
173  if (resetBandsCallback && request.action == "resetBands") {
174  JsonArray bands_array = request.request_value["bands"];
175  JsonArray response_value_bands = request.response_value.createNestedArray("bands");
176 
177  for (size_t i = 0; i < bands_array.size(); i++) {
178  int level = 0;
179  String bandsName = bands_array[i]["name"] | "";
180  success = adjustBandsCallback(device.deviceId, bandsName, level);
181  JsonObject response_value_bands_i = response_value_bands.createNestedObject();
182  response_value_bands_i["name"] = bandsName;
183  response_value_bands_i["level"] = level;
184  }
185  return success;
186  }
187 
188  return success;
189 }
190 
191 #endif
EqualizerController.
Definition: EqualizerController.h:11
std::function< bool(const String &, const String &, int &)> AdjustBandsCallback
Callback definition for onAdjustBands function.
Definition: EqualizerController.h:48
void onAdjustBands(AdjustBandsCallback cb)
Set callback function for adjustBands request.
Definition: EqualizerController.h:100
void onSetBands(SetBandsCallback cb)
Set callback function for setBands request.
Definition: EqualizerController.h:90
bool sendBandsEvent(String bands, int level, String cause="PHYSICAL_INTERACTION")
Send setBands event to SinricPro Server indicating bands level has changed.
Definition: EqualizerController.h:123
void onResetBands(ResetBandsCallback cb)
Set callback function for resetBands request.
Definition: EqualizerController.h:110
std::function< bool(const String &, const String &, int &)> ResetBandsCallback
Callback definition for onResetBands function.
Definition: EqualizerController.h:65
std::function< bool(const String &, const String &, int &)> SetBandsCallback
Callback definition for onSetBands function.
Definition: EqualizerController.h:30