@@ -51,6 +51,31 @@ enum ArduinoIoTConnectionStatus {
5151 IOT_STATUS_CLOUD_ERROR,
5252};
5353
54+ template <typename T, typename N=T>
55+ void onAutoSync (ArduinoCloudProperty<T> property) {
56+ Serial.println (" Executing the AUTO sync" );
57+ if ( property.getLastCloudChangeTimestamp () > property.getLastLocalChangeTimestamp ()){
58+ property.setPropertyValue (property.getCloudShadowValue ());
59+ if ( property.getLastCloudChangeTimestamp () > property.getLastCloudSyncTimestamp ()){
60+ property.forceCallbackOnChange ();
61+ }
62+ }
63+ }
64+
65+ template <typename T, typename N=T>
66+ void onForceCloudSync (ArduinoCloudProperty<T> property) {
67+ Serial.println (" Executing the FORCE_CLOUD sync" );
68+ property.setPropertyValue (property.getCloudShadowValue ());
69+ if ( property.getLastCloudChangeTimestamp () > property.getLastCloudSyncTimestamp ()){
70+ property.forceCallbackOnChange ();
71+ }
72+ }
73+
74+ template <typename T, typename N=T>
75+ void onForceDeviceSync (ArduinoCloudProperty<T> property) {
76+ Serial.println (" Executing the FORCE_DEVICE sync" );
77+ }
78+
5479class ArduinoIoTCloudClass {
5580
5681public:
@@ -65,11 +90,11 @@ class ArduinoIoTCloudClass {
6590 static const int RECONNECTION_TIMEOUT = 2000 ;
6691 static const int TIMEOUT_FOR_LASTVALUES_SYNC = 10000 ;
6792
68-
6993 void onGetTime (unsigned long (*callback)(void ));
7094
7195 int connect ();
7296 bool disconnect ();
97+ void prova ();
7398
7499 void poll () __attribute__((deprecated)); /* Attention: Function is deprecated - use 'update' instead */
75100 void update (void (*callback)(void ) = NULL);
@@ -95,17 +120,47 @@ class ArduinoIoTCloudClass {
95120
96121
97122 template <typename T, typename N=T>
98- void addPropertyReal (T & property, String name, permissionType permission_type = READWRITE, SyncMode syncMode = PROPERTIES_SYNC_FORCE_DEVICE , void (*synFn)(ArduinoCloudProperty<T> property ) = NULL, long seconds = ON_CHANGE , void(*fn)( void ) = NULL, N minDelta = N(0 )) {
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 )) {
99124 Permission permission = Permission::ReadWrite;
100125 if (permission_type == READ ) permission = Permission::Read;
101126 else if (permission_type == WRITE) permission = Permission::Write;
102127 else permission = Permission::ReadWrite;
103-
104- if (seconds == ON_CHANGE) {
105- Thing.addPropertyReal (property, name, permission, syncMode).publishOnChange ((T)minDelta, DEFAULT_MIN_TIME_BETWEEN_UPDATES_MILLIS).onUpdate (fn).onSync (synFn);
106- }
107- else {
108- Thing.addPropertyReal (property, name, permission, syncMode).publishEvery (seconds).onUpdate (fn).onSync (synFn);
128+
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+ }
109164 }
110165 }
111166
0 commit comments