SinricPro Library
Loading...
Searching...
No Matches
VolumeController.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(VOLUME, setVolume); // "setVolume"
11FSTR(VOLUME, volume); // "volume"
12FSTR(VOLUME, adjustVolume); // "adjustVolume"
13FSTR(VOLUME, volumeDefault); // "volumeDefault"
14
29using SetVolumeCallback = std::function<bool(const String &, int &)>;
30
46using AdjustVolumeCallback = std::function<bool(const String &, int &, bool)>;
47
48
53template <typename T>
55 public:
57
60
62
63 protected:
64 bool handleVolumeController(SinricProRequest &request);
65
66 private:
67 EventLimiter event_limiter;
68 SetVolumeCallback volumeCallback;
69 AdjustVolumeCallback adjustVolumeCallback;
70};
71
72template <typename T>
74: event_limiter(EVENT_LIMIT_STATE) {
75 T* device = static_cast<T*>(this);
76 device->registerRequestHandler(std::bind(&VolumeController<T>::handleVolumeController, this, std::placeholders::_1));
77}
78
86template <typename T>
88
96template <typename T>
98
108template <typename T>
110 if (event_limiter) return false;
111 T* device = static_cast<T*>(this);
112
116 return device->sendEvent(eventMessage);
117}
118
119template <typename T>
121 T* device = static_cast<T*>(this);
122
123 bool success = false;
124
125 if (volumeCallback && request.action == FSTR_VOLUME_setVolume) {
126 int volume = request.request_value[FSTR_VOLUME_volume];
127 success = volumeCallback(device->deviceId, volume);
128 request.response_value[FSTR_VOLUME_volume] = volume;
129 return success;
130 }
131
132 if (adjustVolumeCallback && request.action == FSTR_VOLUME_adjustVolume) {
133 int volume = request.request_value[FSTR_VOLUME_volume];
134 bool volumeDefault = request.request_value[FSTR_VOLUME_volumeDefault] | false;
135 success = adjustVolumeCallback(device->deviceId, volume, volumeDefault);
136 request.response_value[FSTR_VOLUME_volume] = volume;
137 return success;
138 }
139 return success;
140}
141
142} // SINRICPRO_NAMESPACE
143
144template <typename T>
145using VolumeController = SINRICPRO_NAMESPACE::VolumeController<T>;
AirQuality.
Definition AirQualitySensor.h:19
VolumeController.
Definition VolumeController.h:54
void onAdjustVolume(AdjustVolumeCallback cb)
Set callback function for adjustVolume request.
Definition VolumeController.h:97
void onSetVolume(SetVolumeCallback cb)
Set callback function for setVolume request.
Definition VolumeController.h:87
bool sendVolumeEvent(int volume, String cause=FSTR_SINRICPRO_PHYSICAL_INTERACTION)
Send setVolume event to SinricPro Server indicating actual volume has changed.
Definition VolumeController.h:109
std::function< bool(const String &, int &)> SetVolumeCallback
Callback definition for onSetVolume function.
Definition VolumeController.h:29
std::function< bool(const String &, int &, bool)> AdjustVolumeCallback
Callback definition for onAdjustVolume function.
Definition VolumeController.h:46