@@ -27,25 +27,33 @@ FSTR(RANGE, rangeValueDelta); // "rangeValueDelta"
2727 * @snippet callbacks.cpp onRangeValue
2828 **/
2929
30- using GenericRangeValueCallback_int = bool (*)( const String &, const String &, int &);
31- using GenericRangeValueCallback_float = bool (*)( const String &, const String &, float &);
30+ using GenericRangeValueCallback_int = std::function< bool ( const String &, const String &, int &)> ;
31+ using GenericRangeValueCallback_float = std::function< bool ( const String &, const String &, float &)> ;
3232
3333struct GenericRangeValueCallback {
3434 GenericRangeValueCallback () : type(type_unknown) {}
35- GenericRangeValueCallback (GenericRangeValueCallback_int cb) : type(type_int), cb_int(cb) {}
36- GenericRangeValueCallback (GenericRangeValueCallback_float cb) : type(type_float), cb_float(cb) {}
35+ GenericRangeValueCallback (GenericRangeValueCallback_int cb) : type(type_int), callback(cb) {}
36+ GenericRangeValueCallback (GenericRangeValueCallback_float cb) : type(type_float), callback(cb) {}
37+ ~GenericRangeValueCallback () {};
38+ GenericRangeValueCallback& operator =(const GenericRangeValueCallback& other) { this ->callback = other.callback ; this ->type = other.type ; return *this ; };
3739 enum {
3840 type_unknown,
3941 type_int,
4042 type_float
4143 } type;
42- union {
44+ union Callback {
45+ Callback () {};
46+ Callback (const GenericRangeValueCallback_int& cb) : cb_int (cb) {};
47+ Callback (const GenericRangeValueCallback_float& cb) : cb_float (cb) {};
48+ Callback& operator =(const Callback& other) { cb_int = other.cb_int ; return *this ; }
49+ ~Callback (){};
50+
4351 GenericRangeValueCallback_int cb_int;
4452 GenericRangeValueCallback_float cb_float;
45- };
53+ } callback ;
4654};
4755
48- using SetRangeValueCallback = bool (*)( const String &, int &);
56+ using SetRangeValueCallback = std::function< bool ( const String &, int &)> ;
4957
5058/* *
5159 * @brief Callback definition for onRangeValue function on a specific instance
@@ -272,14 +280,14 @@ bool RangeController<T>::handleRangeController(SinricProRequest &request) {
272280
273281 if (cb.type == GenericRangeValueCallback::type_float) {
274282 float value = request.request_value [FSTR_RANGE_rangeValue];
275- success = cb.cb_float (device->deviceId , request.instance , value);
283+ success = cb.callback . cb_float (device->deviceId , request.instance , value);
276284 request.response_value [FSTR_RANGE_rangeValue] = value;
277285 return success;
278286 }
279287
280288 if (cb.type == GenericRangeValueCallback::type_int) {
281289 int value = request.request_value [FSTR_RANGE_rangeValue];
282- success = cb.cb_int (device->deviceId , request.instance , value);
290+ success = cb.callback . cb_int (device->deviceId , request.instance , value);
283291 request.response_value [FSTR_RANGE_rangeValue] = value;
284292 return success;
285293 }
@@ -303,14 +311,14 @@ bool RangeController<T>::handleRangeController(SinricProRequest &request) {
303311
304312 if (cb.type == GenericRangeValueCallback::type_float) {
305313 float value = request.request_value [FSTR_RANGE_rangeValueDelta];
306- success = cb.cb_float (device->deviceId , request.instance , value);
314+ success = cb.callback . cb_float (device->deviceId , request.instance , value);
307315 request.response_value [FSTR_RANGE_rangeValue] = value;
308316 return success;
309317 }
310318
311319 if (cb.type == GenericRangeValueCallback::type_int) {
312320 int value = request.request_value [FSTR_RANGE_rangeValueDelta];
313- success = cb.cb_int (device->deviceId , request.instance , value);
321+ success = cb.callback . cb_int (device->deviceId , request.instance , value);
314322 request.response_value [FSTR_RANGE_rangeValue] = value;
315323 return success;
316324 }
0 commit comments