3#include "../SinricProRequest.h" 
    4#include "../EventLimiter.h" 
    5#include "../SinricProStrings.h" 
    7#include "../SinricProNamespace.h" 
    8namespace SINRICPRO_NAMESPACE {
 
   10FSTR(RANGE, setRangeValue);       
 
   11FSTR(RANGE, rangeValue);          
 
   12FSTR(RANGE, adjustRangeValue);    
 
   13FSTR(RANGE, rangeValueDelta);     
 
   31using GenericRangeValueCallback_float = bool (*)(
const String &, 
const String &, 
float &);
 
   33struct GenericRangeValueCallback {
 
   34  GenericRangeValueCallback() : type(type_unknown) {}
 
   36  GenericRangeValueCallback(GenericRangeValueCallback_float 
cb) : type(type_float), cb_float(
cb) {}
 
   44    GenericRangeValueCallback_float cb_float;
 
   48using SetRangeValueCallback = bool (*)(
const String &, 
int &);
 
  127    bool handleRangeController(SinricProRequest &
request);
 
  130    EventLimiter event_limiter;
 
  131    std::map<String, EventLimiter> event_limiter_generic;
 
  133    std::map<String, GenericRangeValueCallback> genericSetRangeValueCallback;
 
  135    std::map<String, GenericRangeValueCallback> genericAdjustRangeValueCallback;
 
  140: event_limiter(EVENT_LIMIT_STATE) { 
 
  141  T* 
device = 
static_cast<T*
>(
this);
 
  153  setRangeValueCallback = 
cb;
 
 
  165  genericSetRangeValueCallback[instance] = GenericRangeValueCallback(
cb);
 
 
  170  genericSetRangeValueCallback[instance] = GenericRangeValueCallback(
cb);
 
  181  adjustRangeValueCallback = 
cb;
 
 
  186  genericAdjustRangeValueCallback[instance] = GenericRangeValueCallback(
cb);
 
  190void RangeController<T>::onAdjustRangeValue(
const String &instance, GenericAdjustRangeValueCallback_float cb) {
 
  191  genericAdjustRangeValueCallback[instance] = GenericRangeValueCallback(cb);
 
  205  if (event_limiter) 
return false;
 
  206  T* 
device = 
static_cast<T*
>(
this);
 
 
  226  if (event_limiter_generic.find(instance) == event_limiter_generic.end()) event_limiter_generic[instance] = EventLimiter(EVENT_LIMIT_STATE);
 
  227  if (event_limiter_generic[instance]) 
return false;
 
  228  T* 
device = 
static_cast<T*
>(
this);
 
 
 
  240  if (event_limiter_generic.find(instance) == event_limiter_generic.end()) event_limiter_generic[instance] = EventLimiter(EVENT_LIMIT_STATE);
 
  241  if (event_limiter_generic[instance]) 
return false;
 
  242  T* 
device = 
static_cast<T*
>(
this);
 
  253bool RangeController<T>::handleRangeController(SinricProRequest &request) {
 
  254  T* device = 
static_cast<T*
>(
this);
 
  256  bool success = 
false;
 
  258  if (request.action == FSTR_RANGE_setRangeValue) {
 
  260    if (request.instance == 
"") {
 
  262      int rangeValue = request.request_value[FSTR_RANGE_rangeValue];
 
  263      if (setRangeValueCallback) success = setRangeValueCallback(device->deviceId, rangeValue);
 
  264      request.response_value[FSTR_RANGE_rangeValue] = rangeValue;
 
  269      if (genericSetRangeValueCallback.find(request.instance) == genericSetRangeValueCallback.end()) 
return false;
 
  271      auto& cb = genericSetRangeValueCallback[request.instance];
 
  273      if (cb.type == GenericRangeValueCallback::type_float) {
 
  274        float value = request.request_value[FSTR_RANGE_rangeValue];
 
  275        success = cb.cb_float(device->deviceId, request.instance, value);
 
  276        request.response_value[FSTR_RANGE_rangeValue] = value;
 
  280      if (cb.type == GenericRangeValueCallback::type_int) {
 
  281        int value = request.request_value[FSTR_RANGE_rangeValue];
 
  282        success = cb.cb_int(device->deviceId, request.instance, value);
 
  283        request.response_value[FSTR_RANGE_rangeValue] = value;
 
  289  if (request.action == FSTR_RANGE_adjustRangeValue) {
 
  291    if (request.instance == 
"") {
 
  293      int rangeValue = request.request_value[FSTR_RANGE_rangeValueDelta];
 
  294      if (adjustRangeValueCallback) success = adjustRangeValueCallback(device->deviceId, rangeValue);
 
  295      request.response_value[FSTR_RANGE_rangeValue] = rangeValue;
 
  300      if (genericAdjustRangeValueCallback.find(request.instance) == genericAdjustRangeValueCallback.end()) 
return false;
 
  302      auto& cb = genericAdjustRangeValueCallback[request.instance];
 
  304      if (cb.type == GenericRangeValueCallback::type_float) {
 
  305        float value = request.request_value[FSTR_RANGE_rangeValueDelta];
 
  306        success = cb.cb_float(device->deviceId, request.instance, value);
 
  307        request.response_value[FSTR_RANGE_rangeValue] = value;
 
  311      if (cb.type == GenericRangeValueCallback::type_int) {
 
  312        int value = request.request_value[FSTR_RANGE_rangeValueDelta];
 
  313        success = cb.cb_int(device->deviceId, request.instance, value);
 
  314        request.response_value[FSTR_RANGE_rangeValue] = value;
 
  326using RangeController = SINRICPRO_NAMESPACE::RangeController<T>;
 
 
 
 
 
 
AirQuality.
Definition AirQualitySensor.h:19
 
RangeControllerFloatInt.
Definition RangeController.h:109
 
bool sendRangeValueEvent(int rangeValue, String cause=FSTR_SINRICPRO_PHYSICAL_INTERACTION)
Send rangeValue event to report curent rangeValue to SinricPro server.
Definition RangeController.h:204
 
void onRangeValue(const String &instance, GenericSetRangeValueCallback_int cb)
Set callback function for setRangeValue request on a specific instance (custom device)
Definition RangeController.h:164
 
void onRangeValue(SetRangeValueCallback cb)
Set callback function for setRangeValue request.
Definition RangeController.h:152
 
bool sendRangeValueEvent(const String &instance, int rangeValue, String cause=FSTR_SINRICPRO_PHYSICAL_INTERACTION)
Send rangeValue event to report curent rangeValue to SinricPro server for a specific instance (custom...
Definition RangeController.h:225
 
void onAdjustRangeValue(AdjustRangeValueCallback cb)
Set callback function for adjustRangeValue request.
Definition RangeController.h:180
 
bool(*)(const String &, const String &, int &) GenericRangeValueCallback_int
Callback definition for onRangeValue function.
Definition RangeController.h:30
 
GenericRangeValueCallback_int GenericSetRangeValueCallback_int
Callback definition for onRangeValue function on a specific instance.
Definition RangeController.h:65
 
bool(*)(const String &, int &) AdjustRangeValueCallback
Callback definition for onAdjustRangeValue function.
Definition RangeController.h:82