@@ -51,9 +51,11 @@ enum ArduinoIoTConnectionStatus {
5151 IOT_STATUS_CLOUD_ERROR,
5252};
5353
54- template <typename T, typename N=T>
54+ #define AUTO_SYNC onAutoSync
55+ template <typename T>
5556void onAutoSync (ArduinoCloudProperty<T> property) {
56- Serial.println (" Executing the AUTO sync" );
57+ Serial.print (" Executing the AUTO sync on: " );
58+ Serial.println (property.getPropertyName ());
5759 if ( property.getLastCloudChangeTimestamp () > property.getLastLocalChangeTimestamp ()){
5860 property.setPropertyValue (property.getCloudShadowValue ());
5961 if ( property.getLastCloudChangeTimestamp () > property.getLastCloudSyncTimestamp ()){
@@ -62,18 +64,22 @@ void onAutoSync(ArduinoCloudProperty<T> property) {
6264 }
6365}
6466
65- template <typename T, typename N=T>
67+ #define FORCE_CLOUD_SYNC onForceCloudSync
68+ template <typename T>
6669void onForceCloudSync (ArduinoCloudProperty<T> property) {
67- Serial.println (" Executing the FORCE_CLOUD sync" );
70+ Serial.print (" Executing the FORCE_CLOUD sync on: " );
71+ Serial.println (property.getPropertyName ());
6872 property.setPropertyValue (property.getCloudShadowValue ());
6973 if ( property.getLastCloudChangeTimestamp () > property.getLastCloudSyncTimestamp ()){
7074 property.forceCallbackOnChange ();
7175 }
7276}
7377
74- template <typename T, typename N=T>
78+ #define FORCE_DEVICE_SYNC onForceDeviceSync
79+ template <typename T>
7580void onForceDeviceSync (ArduinoCloudProperty<T> property) {
76- Serial.println (" Executing the FORCE_DEVICE sync" );
81+ Serial.print (" Executing the FORCE_DEVICE sync on: " );
82+ Serial.println (property.getPropertyName ());
7783}
7884
7985class ArduinoIoTCloudClass {
@@ -120,47 +126,26 @@ class ArduinoIoTCloudClass {
120126
121127
122128 template <typename T, typename N=T>
123- void addPropertyReal (T & property, String name, permissionType permission_type = READWRITE, long seconds = ON_CHANGE, void (*fn)(void ) = NULL, SyncMode syncMode = PROPERTIES_SYNC_FORCE_DEVICE , void(*synFn)(ArduinoCloudProperty<T> property) = NULL, N minDelta = N( 0 ) ) {
129+ void addPropertyReal (T & property, String name, permissionType permission_type = READWRITE, long seconds = ON_CHANGE, void (*fn)(void ) = NULL, N minDelta = N( 0 ) , void(*synFn)(ArduinoCloudProperty<T> property) = FORCE_CLOUD_SYNC ) {
124130 Permission permission = Permission::ReadWrite;
125131 if (permission_type == READ ) permission = Permission::Read;
126132 else if (permission_type == WRITE) permission = Permission::Write;
127133 else permission = Permission::ReadWrite;
128134
129- switch (syncMode){
130- case PROPERTIES_SYNC_AUTO:
131- if (seconds == ON_CHANGE) {
132- Thing.addPropertyReal (property, name, permission).publishOnChange ((T)minDelta, DEFAULT_MIN_TIME_BETWEEN_UPDATES_MILLIS).onUpdate (fn).onSync (onAutoSync);
133- } else {
134- Thing.addPropertyReal (property, name, permission).publishEvery (seconds).onUpdate (fn).onSync (onAutoSync);
135- }
136- break ;
137- case PROPERTIES_SYNC_FORCE_CLOUD:
138- if (seconds == ON_CHANGE) {
139- Thing.addPropertyReal (property, name, permission).publishOnChange ((T)minDelta, DEFAULT_MIN_TIME_BETWEEN_UPDATES_MILLIS).onUpdate (fn).onSync (onForceCloudSync);
140- } else {
141- Thing.addPropertyReal (property, name, permission).publishEvery (seconds).onUpdate (fn).onSync (onForceCloudSync);
142- }
143- break ;
144- case PROPERTIES_SYNC_FORCE_DEVICE:
145- if (seconds == ON_CHANGE) {
146- Thing.addPropertyReal (property, name, permission).publishOnChange ((T)minDelta, DEFAULT_MIN_TIME_BETWEEN_UPDATES_MILLIS).onUpdate (fn).onSync (onForceDeviceSync);
147- } else {
148- Thing.addPropertyReal (property, name, permission).publishEvery (seconds).onUpdate (fn).onSync (onForceDeviceSync);
149- }
150- break ;
151- case PROPERTIES_SYNC_CUSTOM:
152- if (seconds == ON_CHANGE) {
153- Thing.addPropertyReal (property, name, permission).publishOnChange ((T)minDelta, DEFAULT_MIN_TIME_BETWEEN_UPDATES_MILLIS).onUpdate (fn).onSync (synFn);
154- } else {
155- Thing.addPropertyReal (property, name, permission).publishEvery (seconds).onUpdate (fn).onSync (synFn);
156- }
157- break ;
158- default :
159- if (seconds == ON_CHANGE) {
160- Thing.addPropertyReal (property, name, permission).publishOnChange ((T)minDelta, DEFAULT_MIN_TIME_BETWEEN_UPDATES_MILLIS).onUpdate (fn).onSync (onForceCloudSync);
161- } else {
162- Thing.addPropertyReal (property, name, permission).publishEvery (seconds).onUpdate (fn).onSync (onForceCloudSync);
163- }
135+ SyncMode syncMode = PROPERTIES_SYNC_FORCE_CLOUD;
136+ if (synFn == (void (*)(ArduinoCloudProperty<T> property))AUTO_SYNC)
137+ syncMode = PROPERTIES_SYNC_AUTO;
138+ else if (synFn == (void (*)(ArduinoCloudProperty<T> property))FORCE_CLOUD_SYNC)
139+ syncMode = PROPERTIES_SYNC_FORCE_CLOUD;
140+ else if (synFn == (void (*)(ArduinoCloudProperty<T> property))FORCE_DEVICE_SYNC)
141+ syncMode = PROPERTIES_SYNC_FORCE_DEVICE;
142+ else
143+ syncMode = PROPERTIES_SYNC_CUSTOM;
144+
145+ if (seconds == ON_CHANGE) {
146+ Thing.addPropertyReal (property, name, permission).publishOnChange ((T)minDelta, DEFAULT_MIN_TIME_BETWEEN_UPDATES_MILLIS).onUpdate (fn).onSync (synFn);
147+ } else {
148+ Thing.addPropertyReal (property, name, permission).publishEvery (seconds).onUpdate (fn).onSync (synFn);
164149 }
165150 }
166151
0 commit comments