2121
2222class Device
2323{
24+ public:
25+ typedef void (*deviceWriteCb)(Device*, Param*, const param_val_t val, void *priv_data, write_ctx_t *ctx);
26+ typedef void (*deviceReadCb)(Device*, Param*, void *priv_data, read_ctx_t *ctx);
27+ typedef struct {
28+ void *priv_data;
29+ deviceWriteCb write_cb;
30+ deviceReadCb read_cb;
31+ } RMakerDevicePrivT;
2432 private:
2533 const device_handle_t *device_handle;
34+ RMakerDevicePrivT private_data;
2635
36+ protected:
37+ void setPrivateData (void *priv_data) {
38+ this ->private_data .priv_data = priv_data;
39+ }
40+
41+ const RMakerDevicePrivT* getDevicePrivateData ()
42+ {
43+ return &this ->private_data ;
44+ }
2745 public:
2846 Device ()
2947 {
3048 device_handle = NULL ;
31- }
49+ this ->private_data .priv_data = NULL ;
50+ this ->private_data .write_cb = NULL ;
51+ this ->private_data .read_cb = NULL ;
52+ }
53+
3254 Device (const char *dev_name, const char *dev_type = NULL , void *priv_data = NULL )
3355 {
34- device_handle = esp_rmaker_device_create (dev_name, dev_type, priv_data);
56+ this ->private_data .priv_data = priv_data;
57+ this ->private_data .write_cb = NULL ;
58+ this ->private_data .read_cb = NULL ;
59+ device_handle = esp_rmaker_device_create (dev_name, dev_type, &this ->private_data );
3560 if (device_handle == NULL ){
3661 log_e (" Device create error" );
3762 }
@@ -48,9 +73,6 @@ class Device
4873 {
4974 return device_handle;
5075 }
51-
52- typedef void (*deviceWriteCb)(Device*, Param*, const param_val_t val, void *priv_data, write_ctx_t *ctx);
53- typedef void (*deviceReadCb)(Device*, Param*, void *priv_data, read_ctx_t *ctx);
5476
5577 esp_err_t deleteDevice ();
5678 void addCb (deviceWriteCb write_cb, deviceReadCb read_cb = NULL );
@@ -94,7 +116,8 @@ class Switch : public Device
94116 }
95117 void standardSwitchDevice (const char *dev_name, void *priv_data, bool power)
96118 {
97- esp_rmaker_device_t *dev_handle = esp_rmaker_switch_device_create (dev_name, priv_data, power);
119+ this ->setPrivateData (priv_data);
120+ esp_rmaker_device_t *dev_handle = esp_rmaker_switch_device_create (dev_name, (void *)this ->getDevicePrivateData (), power);
98121 setDeviceHandle (dev_handle);
99122 if (dev_handle == NULL ){
100123 log_e (" Switch device not created" );
@@ -115,7 +138,8 @@ class LightBulb : public Device
115138 }
116139 void standardLightBulbDevice (const char *dev_name, void *priv_data, bool power)
117140 {
118- esp_rmaker_device_t *dev_handle = esp_rmaker_lightbulb_device_create (dev_name, priv_data, power);
141+ this ->setPrivateData (priv_data);
142+ esp_rmaker_device_t *dev_handle = esp_rmaker_lightbulb_device_create (dev_name, (void *)this ->getDevicePrivateData (), power);
119143 setDeviceHandle (dev_handle);
120144 if (dev_handle == NULL ){
121145 log_e (" Light device not created" );
@@ -157,7 +181,8 @@ class TemperatureSensor : public Device
157181 }
158182 void standardTemperatureSensorDevice (const char *dev_name, void *priv_data, float temp)
159183 {
160- esp_rmaker_device_t *dev_handle = esp_rmaker_temp_sensor_device_create (dev_name, priv_data, temp);
184+ this ->setPrivateData (priv_data);
185+ esp_rmaker_device_t *dev_handle = esp_rmaker_temp_sensor_device_create (dev_name, (void *)this ->getDevicePrivateData (), temp);
161186 setDeviceHandle (dev_handle);
162187 if (dev_handle == NULL ){
163188 log_e (" Temperature Sensor device not created" );
0 commit comments