Skip to content

Commit b7292cc

Browse files
committed
pre-defined sync callbacks are declared in the header, the callback passed to the property is based on syncMode parameter
1 parent 18418b3 commit b7292cc

File tree

1 file changed

+63
-8
lines changed

1 file changed

+63
-8
lines changed

src/ArduinoIoTCloud.h

Lines changed: 63 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
5479
class ArduinoIoTCloudClass {
5580

5681
public:
@@ -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

Comments
 (0)