SinricPro Library
Loading...
Searching...
No Matches
StartStopController.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(START_STOP, start); // "start"
11FSTR(START_STOP, pause); // "pause"
12FSTR(START_STOP, setStartStop); // "setStartStop"
13FSTR(START_STOP, setPauseUnpause); // "setPauseUnpause"
14
28using StartStopCallback = std::function<bool(const String &, bool &)>;
29
44using PauseUnpauseCallback = std::function<bool(const String &, bool &)>;
45
54template <typename T>
56 public:
58
64 void onStartStop(StartStopCallback cb);
65
71 void onPauseUnpause(StartStopCallback cb);
72
80 bool sendStartStopEvent(bool start, String cause = FSTR_SINRICPRO_PHYSICAL_INTERACTION);
81
89 bool sendPauseUnpauseEvent(bool pause, String cause = FSTR_SINRICPRO_PHYSICAL_INTERACTION);
90
91 protected:
92 bool handleStartStopController(SinricProRequest &request);
93
94 private:
95 EventLimiter event_limiter;
96 StartStopCallback startStopCallbackCallback;
97 PauseUnpauseCallback pauseUnpauseCallback;
98};
99
100template <typename T>
102:event_limiter(EVENT_LIMIT_STATE) {
103 T* device = static_cast<T*>(this);
104 device->registerRequestHandler(std::bind(&StartStopController<T>::handleStartStopController, this, std::placeholders::_1));
105}
106
107template <typename T>
108void StartStopController<T>::onStartStop(StartStopCallback cb) { startStopCallbackCallback = cb; }
109
110template <typename T>
112
120template <typename T>
122 if (event_limiter) return false;
123 T* device = static_cast<T*>(this);
124
128 return device->sendEvent(eventMessage);
129}
130
138template <typename T>
140 if (event_limiter) return false;
141 T* device = static_cast<T*>(this);
142
146 return device->sendEvent(eventMessage);
147}
148
149template <typename T>
151 T* device = static_cast<T*>(this);
152
153 bool success = false;
154
155 if (startStopCallbackCallback && request.action == FSTR_START_STOP_setStartStop) {
156 bool start = request.request_value[FSTR_START_STOP_start];
157 success = startStopCallbackCallback(device->deviceId, start);
158 request.response_value[FSTR_START_STOP_start] = start;
159 return success;
160 }
161
162 if (pauseUnpauseCallback && request.action == FSTR_START_STOP_setPauseUnpause) {
163 bool pause = request.request_value[FSTR_START_STOP_pause];
164 success = pauseUnpauseCallback(device->deviceId, pause);
165 request.response_value[FSTR_START_STOP_pause] = pause;
166 return success;
167 }
168
169 return false;
170}
171
172} // SINRICPRO_NAMESPACE
173
174template <typename T>
175using StartStopController = SINRICPRO_NAMESPACE::StartStopController<T>;
AirQuality.
Definition AirQualitySensor.h:19
StartStopController class to handle start/stop and pause/unpause functionality.
Definition StartStopController.h:55
std::function< bool(const String &, bool &)> StartStopCallback
Definition for onStartStop callback.
Definition StartStopController.h:28
std::function< bool(const String &, bool &)> PauseUnpauseCallback
Definition for onPauseUnpause callback.
Definition StartStopController.h:44