SinricPro Library
Loading...
Searching...
No Matches
PercentageController.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(PERCENTAGE, setPercentage); // "setPercentage"
11FSTR(PERCENTAGE, percentage); // "percentage"
12FSTR(PERCENTAGE, adjustPercentage); // "adjustPercentage"
13
29using SetPercentageCallback = std::function<bool(const String &, int &)>;
44using AdjustPercentageCallback = std::function<bool(const String &, int &)>;
45
46
51template <typename T>
53 public:
55
56 void onSetPercentage(SetPercentageCallback cb);
57 void onAdjustPercentage(AdjustPercentageCallback cb);
58
59 bool sendSetPercentageEvent(int percentage, String cause = FSTR_SINRICPRO_PHYSICAL_INTERACTION);
60
61 protected:
62 bool handlePercentageController(SinricProRequest &request);
63
64 private:
65 EventLimiter event_limiter;
66 SetPercentageCallback percentageCallback;
67 AdjustPercentageCallback adjustPercentageCallback;
68};
69
70template <typename T>
72: event_limiter(EVENT_LIMIT_STATE) {
73 T* device = static_cast<T*>(this);
74 device->registerRequestHandler(std::bind(&PercentageController<T>::handlePercentageController, this, std::placeholders::_1));
75}
76
84template <typename T>
86
94template <typename T>
96
106template <typename T>
108 if (event_limiter) return false;
109 T* device = static_cast<T*>(this);
110
114 return device->sendEvent(eventMessage);
115}
116
117template <typename T>
119 T* device = static_cast<T*>(this);
120
121 bool success = false;
122
123 if (percentageCallback && request.action == FSTR_PERCENTAGE_setPercentage) {
124 int percentage = request.request_value[FSTR_PERCENTAGE_percentage];
125 success = percentageCallback(device->deviceId, percentage);
127 return success;
128 }
129
130 if (adjustPercentageCallback && request.action == FSTR_PERCENTAGE_adjustPercentage) {
131 int percentage = request.request_value[FSTR_PERCENTAGE_percentage];
132 success = adjustPercentageCallback(device->deviceId, percentage);
133 request.response_value[FSTR_PERCENTAGE_percentage] = percentage;
134 return success;
135 }
136 return success;
137}
138
139} // SINRICPRO_NAMESPACE
140
141template <typename T>
142using PercentageController = SINRICPRO_NAMESPACE::PercentageController<T>;
AirQuality.
Definition AirQualitySensor.h:19
PercentageController.
Definition PercentageController.h:52
std::function< bool(const String &, int &)> AdjustPercentageCallback
Callback definition for onAdjustPercentage function.
Definition PercentageController.h:44
std::function< bool(const String &, int &)> SetPercentageCallback
Callback definition for onSetPercentage function.
Definition PercentageController.h:29