SinricPro Library
Loading...
Searching...
No Matches
EqualizerController.h
1#pragma once
2
3#include "../SinricProRequest.h"
4#include "../EventLimiter.h"
5#include "../SinricProStrings.h"
6
7#include "../SinricProNamespace.h"
8namespace SINRICPRO_NAMESPACE {
9
10FSTR(EQUALIZER, setBands); // "setBands"
11FSTR(EQUALIZER, bands); // "bands"
12FSTR(EQUALIZER, name); // "name"
13FSTR(EQUALIZER, value); // "value"
14FSTR(EQUALIZER, level); // "level"
15FSTR(EQUALIZER, adjustBands); // "adjustBands"
16FSTR(EQUALIZER, levelDelta); // "levelDelta"
17FSTR(EQUALIZER, levelDirection); // "levelDirection"
18FSTR(EQUALIZER, DOWN); // "DOWN"
19FSTR(EQUALIZER, resetBands); // "resetBands"
20
37using SetBandsCallback = std::function<bool(const String &, const String &, int &)>;
38
55using AdjustBandsCallback = std::function<bool(const String &, const String &, int &)>;
56
72using ResetBandsCallback = std::function<bool(const String &, const String &, int &)>;
73
78template <typename T>
80public:
82
86
87 bool sendBandsEvent(String bands, int level, String cause = "PHYSICAL_INTERACTION");
88
89protected:
90 bool handleEqualizerController(SinricProRequest &request);
91
92private:
93 EventLimiter event_limiter;
94 SetBandsCallback setBandsCallback;
95 AdjustBandsCallback adjustBandsCallback;
96 ResetBandsCallback resetBandsCallback;
97};
98
99template <typename T>
101: event_limiter(EVENT_LIMIT_STATE) {
102 T* device = static_cast<T*>(this);
103 device->registerRequestHandler(std::bind(&EqualizerController<T>::handleEqualizerController, this, std::placeholders::_1));
104}
105
113template <typename T>
115
123template <typename T>
125
133template <typename T>
135
146template <typename T>
159
160template <typename T>
162 T* device = static_cast<T*>(this);
163 bool success = false;
164
165 if (setBandsCallback && request.action == FSTR_EQUALIZER_setBands) {
168
169 for (size_t i = 0; i < bands_array.size(); i++) {
172 success = setBandsCallback(device->deviceId, bandsName, level);
176 }
177 return success;
178 }
179
180 if (adjustBandsCallback && request.action == FSTR_EQUALIZER_adjustBands) {
181 JsonArray bands_array = request.request_value[FSTR_EQUALIZER_bands];
182 JsonArray response_value_bands = request.response_value[FSTR_EQUALIZER_bands].to<JsonArray>();
183
184 for (size_t i = 0; i < bands_array.size(); i++) {
185 int levelDelta = bands_array[i][FSTR_EQUALIZER_levelDelta] | 1;
186 String direction = bands_array[i][FSTR_EQUALIZER_levelDirection];
187 if (direction == FSTR_EQUALIZER_DOWN)
188 levelDelta *= -1;
189 String bandsName = bands_array[i][FSTR_EQUALIZER_name] | "";
190 success = adjustBandsCallback(device->deviceId, bandsName, levelDelta);
191 JsonObject response_value_bands_i = response_value_bands.add<JsonObject>();
192 response_value_bands_i[FSTR_EQUALIZER_name] = bandsName;
193 response_value_bands_i[FSTR_EQUALIZER_level] = levelDelta;
194 }
195 return success;
196 }
197
198 if (resetBandsCallback && request.action == FSTR_EQUALIZER_resetBands) {
199 JsonArray bands_array = request.request_value[FSTR_EQUALIZER_bands];
200 JsonArray response_value_bands = request.response_value[FSTR_EQUALIZER_bands].to<JsonArray>();
201
202 for (size_t i = 0; i < bands_array.size(); i++) {
203 int level = 0;
204 String bandsName = bands_array[i][FSTR_EQUALIZER_name] | "";
205 success = adjustBandsCallback(device->deviceId, bandsName, level);
206 JsonObject response_value_bands_i = response_value_bands.add<JsonObject>();
207 response_value_bands_i[FSTR_EQUALIZER_name] = bandsName;
208 response_value_bands_i[FSTR_EQUALIZER_level] = level;
209 }
210 return success;
211 }
212
213 return success;
214}
215
216} // SINRICPRO_NAMESPACE
217
218template <typename T>
219using EqualizerController = SINRICPRO_NAMESPACE::EqualizerController<T>;
AirQuality.
Definition AirQualitySensor.h:19
EqualizerController.
Definition EqualizerController.h:79
void onAdjustBands(AdjustBandsCallback cb)
Set callback function for adjustBands request.
Definition EqualizerController.h:124
void onSetBands(SetBandsCallback cb)
Set callback function for setBands request.
Definition EqualizerController.h:114
bool sendBandsEvent(String bands, int level, String cause="PHYSICAL_INTERACTION")
Send setBands event to SinricPro Server indicating bands level has changed.
Definition EqualizerController.h:147
void onResetBands(ResetBandsCallback cb)
Set callback function for resetBands request.
Definition EqualizerController.h:134
std::function< bool(const String &, const String &, int &)> AdjustBandsCallback
Callback definition for onAdjustBands function.
Definition EqualizerController.h:55
std::function< bool(const String &, const String &, int &)> ResetBandsCallback
Callback definition for onResetBands function.
Definition EqualizerController.h:72
std::function< bool(const String &, const String &, int &)> SetBandsCallback
Callback definition for onSetBands function.
Definition EqualizerController.h:37