SinricPro Library
Loading...
Searching...
No Matches
SmartButtonStateController.h
1#pragma once
2
3#include "../SinricProRequest.h"
4#include "../EventLimiter.h"
5#include "../SinricProStrings.h"
6#include "../SinricProNamespace.h"
7
11enum class SmartButtonPressType {
12 SINGLE_PRESS,
13 DOUBLE_PRESS,
14 LONG_PRESS
15};
16
17namespace SINRICPRO_NAMESPACE {
18
19FSTR(BUTTONSTATE, state); // Button state key
20FSTR(BUTTONSTATE, singlePress); // Single press state value
21FSTR(BUTTONSTATE, doublePress); // Double press state value
22FSTR(BUTTONSTATE, longPress); // Long press state value
23FSTR(BUTTONSTATE, setSmartButtonState); // Set state action name
24
25// Callback type definition for button press events
26using SmartButtonPressCallback = std::function<bool(const String&, SmartButtonPressType)>;
27
33template <typename T>
35public:
41
46 void onButtonPress(SmartButtonPressCallback cb);
47
48protected:
54 bool handleSmartButtonStateController(SinricProRequest &request);
55
56private:
57 SmartButtonPressCallback buttonPressCallback;
58
64 SmartButtonPressType getSmartButtonPressType(const String& stateStr);
65};
66
67template <typename T>
69 T* device = static_cast<T*>(this);
70 device->registerRequestHandler(
72 this,
73 std::placeholders::_1)
74 );
75}
76
77template <typename T>
78void SmartButtonStateController<T>::onButtonPress(SmartButtonPressCallback cb) {
79 buttonPressCallback = cb;
80}
81
82template <typename T>
83SmartButtonPressType SmartButtonStateController<T>::getSmartButtonPressType(const String& stateStr) {
85 return SmartButtonPressType::SINGLE_PRESS;
86 } else if (stateStr == FSTR_BUTTONSTATE_doublePress) {
87 return SmartButtonPressType::DOUBLE_PRESS;
88 } else {
89 return SmartButtonPressType::LONG_PRESS;
90 }
91}
92
93template <typename T>
95 // Only process setSmartButtonState actions
96 if (request.action != FSTR_BUTTONSTATE_setSmartButtonState || !buttonPressCallback) {
97 return false;
98 }
99
100 T* device = static_cast<T*>(this);
101 String stateStr = request.request_value[FSTR_BUTTONSTATE_state];
102
103 // Only process valid button states
107 return false;
108 }
109
110 SmartButtonPressType pressType = getSmartButtonPressType(stateStr);
111 return buttonPressCallback(device->deviceId, pressType);
112}
113
114} // namespace SINRICPRO_NAMESPACE
115
116template <typename T>
117using SmartButtonStateController = SINRICPRO_NAMESPACE::SmartButtonStateController<T>;
AirQuality.
Definition AirQualitySensor.h:19
Controller class for managing smart button state and interactions.
Definition SmartButtonStateController.h:34