Skip to content

Commit aba4ee9

Browse files
committed
Add CloudUnsignedInt type
1 parent 1920b54 commit aba4ee9

File tree

6 files changed

+329
-0
lines changed

6 files changed

+329
-0
lines changed

src/ArduinoIoTCloud.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,28 @@ Property& ArduinoIoTCloudClass::addPropertyReal(int& property, String name, int
146146
return addPropertyToContainer(_property_container, *p, name, permission, tag);
147147
}
148148

149+
void ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property))
150+
{
151+
addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn);
152+
}
153+
154+
void ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property))
155+
{
156+
Property* p = new CloudWrapperUnsignedInt(property);
157+
addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn);
158+
}
159+
160+
Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, Permission const permission)
161+
{
162+
return addPropertyReal(property, name, -1, permission);
163+
}
164+
165+
Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, int tag, Permission const permission)
166+
{
167+
Property* p = new CloudWrapperUnsignedInt(property);
168+
return addPropertyToContainer(_property_container, *p, name, permission, tag);
169+
}
170+
149171
void ArduinoIoTCloudClass::addPropertyReal(String& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property))
150172
{
151173
addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn);

src/ArduinoIoTCloud.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
#include "property/types/CloudWrapperBool.h"
4040
#include "property/types/CloudWrapperFloat.h"
4141
#include "property/types/CloudWrapperInt.h"
42+
#include "property/types/CloudWrapperUnsignedInt.h"
4243
#include "property/types/CloudWrapperString.h"
4344

4445
#include "utility/time/TimeService.h"
@@ -110,12 +111,14 @@ class ArduinoIoTCloudClass
110111
void addPropertyReal(bool& property, String name, permissionType permission_type = READWRITE, long seconds = ON_CHANGE, void(*fn)(void) = NULL, float minDelta = 0.0f, void(*synFn)(Property & property) = CLOUD_WINS) __attribute__((deprecated("Use addProperty(property, Permission::ReadWrite) instead.")));
111112
void addPropertyReal(float& property, String name, permissionType permission_type = READWRITE, long seconds = ON_CHANGE, void(*fn)(void) = NULL, float minDelta = 0.0f, void(*synFn)(Property & property) = CLOUD_WINS) __attribute__((deprecated("Use addProperty(property, Permission::ReadWrite) instead.")));
112113
void addPropertyReal(int& property, String name, permissionType permission_type = READWRITE, long seconds = ON_CHANGE, void(*fn)(void) = NULL, float minDelta = 0.0, void(*synFn)(Property & property) = CLOUD_WINS) __attribute__((deprecated("Use addProperty(property, Permission::ReadWrite) instead.")));
114+
void addPropertyReal(unsigned int& property, String name, permissionType permission_type = READWRITE, long seconds = ON_CHANGE, void(*fn)(void) = NULL, float minDelta = 0.0, void(*synFn)(Property & property) = CLOUD_WINS) __attribute__((deprecated("Use addProperty(property, Permission::ReadWrite) instead.")));
113115
void addPropertyReal(String& property, String name, permissionType permission_type = READWRITE, long seconds = ON_CHANGE, void(*fn)(void) = NULL, float minDelta = 0.0f, void(*synFn)(Property & property) = CLOUD_WINS) __attribute__((deprecated("Use addProperty(property, Permission::ReadWrite) instead.")));
114116

115117
Property& addPropertyReal(Property& property, String name, Permission const permission);
116118
Property& addPropertyReal(bool& property, String name, Permission const permission);
117119
Property& addPropertyReal(float& property, String name, Permission const permission);
118120
Property& addPropertyReal(int& property, String name, Permission const permission);
121+
Property& addPropertyReal(unsigned int& property, String name, Permission const permission);
119122
Property& addPropertyReal(String& property, String name, Permission const permission);
120123

121124
/* The following methods are for MKR WAN 1300/1310 LoRa boards since
@@ -128,12 +131,14 @@ class ArduinoIoTCloudClass
128131
void addPropertyReal(bool& property, String name, int tag, permissionType permission_type = READWRITE, long seconds = ON_CHANGE, void(*fn)(void) = NULL, float minDelta = 0.0f, void(*synFn)(Property & property) = CLOUD_WINS) __attribute__((deprecated("Use addProperty(property, Permission::ReadWrite) instead.")));
129132
void addPropertyReal(float& property, String name, int tag, permissionType permission_type = READWRITE, long seconds = ON_CHANGE, void(*fn)(void) = NULL, float minDelta = 0.0f, void(*synFn)(Property & property) = CLOUD_WINS) __attribute__((deprecated("Use addProperty(property, Permission::ReadWrite) instead.")));
130133
void addPropertyReal(int& property, String name, int tag, permissionType permission_type = READWRITE, long seconds = ON_CHANGE, void(*fn)(void) = NULL, float minDelta = 0.0, void(*synFn)(Property & property) = CLOUD_WINS) __attribute__((deprecated("Use addProperty(property, Permission::ReadWrite) instead.")));
134+
void addPropertyReal(unsigned int& property, String name, int tag, permissionType permission_type = READWRITE, long seconds = ON_CHANGE, void(*fn)(void) = NULL, float minDelta = 0.0, void(*synFn)(Property & property) = CLOUD_WINS) __attribute__((deprecated("Use addProperty(property, Permission::ReadWrite) instead.")));
131135
void addPropertyReal(String& property, String name, int tag, permissionType permission_type = READWRITE, long seconds = ON_CHANGE, void(*fn)(void) = NULL, float minDelta = 0.0f, void(*synFn)(Property & property) = CLOUD_WINS) __attribute__((deprecated("Use addProperty(property, Permission::ReadWrite) instead.")));
132136

133137
Property& addPropertyReal(Property& property, String name, int tag, Permission const permission);
134138
Property& addPropertyReal(bool& property, String name, int tag, Permission const permission);
135139
Property& addPropertyReal(float& property, String name, int tag, Permission const permission);
136140
Property& addPropertyReal(int& property, String name, int tag, Permission const permission);
141+
Property& addPropertyReal(unsigned int& property, String name, int tag, Permission const permission);
137142
Property& addPropertyReal(String& property, String name, int tag, Permission const permission);
138143

139144
protected:

src/property/Property.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,15 @@ CborError Property::appendAttributeReal(int value, String attributeName, CborEnc
171171
}, encoder);
172172
}
173173

174+
CborError Property::appendAttributeReal(unsigned int value, String attributeName, CborEncoder *encoder) {
175+
return appendAttributeName(attributeName, [value](CborEncoder & mapEncoder)
176+
{
177+
CHECK_CBOR(cbor_encode_int(&mapEncoder, static_cast<int>(CborIntegerMapKey::Value)));
178+
CHECK_CBOR(cbor_encode_int(&mapEncoder, value));
179+
return CborNoError;
180+
}, encoder);
181+
}
182+
174183
CborError Property::appendAttributeReal(float value, String attributeName, CborEncoder *encoder) {
175184
return appendAttributeName(attributeName, [value](CborEncoder & mapEncoder)
176185
{
@@ -264,6 +273,12 @@ void Property::setAttributeReal(int& value, String attributeName) {
264273
});
265274
}
266275

276+
void Property::setAttributeReal(unsigned int& value, String attributeName) {
277+
setAttributeReal(attributeName, [&value](CborMapData & md) {
278+
value = md.val.get();
279+
});
280+
}
281+
267282
void Property::setAttributeReal(float& value, String attributeName) {
268283
setAttributeReal(attributeName, [&value](CborMapData & md) {
269284
value = md.val.get();

src/property/Property.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ class Property
186186
CborError append(CborEncoder * encoder, bool lightPayload);
187187
CborError appendAttributeReal(bool value, String attributeName = "", CborEncoder *encoder = nullptr);
188188
CborError appendAttributeReal(int value, String attributeName = "", CborEncoder *encoder = nullptr);
189+
CborError appendAttributeReal(unsigned int value, String attributeName = "", CborEncoder *encoder = nullptr);
189190
CborError appendAttributeReal(float value, String attributeName = "", CborEncoder *encoder = nullptr);
190191
CborError appendAttributeReal(String value, String attributeName = "", CborEncoder *encoder = nullptr);
191192
#ifndef __AVR__
@@ -198,6 +199,7 @@ class Property
198199
void setAttributesFromCloud(std::list<CborMapData> * map_data_list);
199200
void setAttributeReal(bool& value, String attributeName = "");
200201
void setAttributeReal(int& value, String attributeName = "");
202+
void setAttributeReal(unsigned int& value, String attributeName = "");
201203
void setAttributeReal(float& value, String attributeName = "");
202204
void setAttributeReal(String& value, String attributeName = "");
203205
String getAttributeName(String propertyName, char separator);

src/property/types/CloudUnsignedInt.h

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
//
2+
// This file is part of ArduinoCloudThing
3+
//
4+
// Copyright 2019 ARDUINO SA (http://www.arduino.cc/)
5+
//
6+
// This software is released under the GNU General Public License version 3,
7+
// which covers the main part of ArduinoCloudThing.
8+
// The terms of this license can be found at:
9+
// https://www.gnu.org/licenses/gpl-3.0.en.html
10+
//
11+
// You can be released from the requirements of the above licenses by purchasing
12+
// a commercial license. Buying such a license is mandatory if you want to modify or
13+
// otherwise use the software for commercial activities involving the Arduino
14+
// software without disclosing the source code of your own applications. To purchase
15+
// a commercial license, send an email to [email protected].
16+
//
17+
18+
#ifndef CLOUDUINT_H_
19+
#define CLOUDUINT_H_
20+
21+
/******************************************************************************
22+
INCLUDE
23+
******************************************************************************/
24+
25+
#include <Arduino.h>
26+
#include "../Property.h"
27+
28+
/******************************************************************************
29+
CLASS DECLARATION
30+
******************************************************************************/
31+
32+
33+
34+
class CloudUnsignedInt : public Property {
35+
private:
36+
unsigned int _value,
37+
_cloud_value;
38+
public:
39+
CloudUnsignedInt() {
40+
CloudUnsignedInt(0);
41+
}
42+
CloudUnsignedInt(unsigned int v) : _value(v), _cloud_value(v) {}
43+
operator unsigned int() const {
44+
return _value;
45+
}
46+
virtual bool isDifferentFromCloud() {
47+
return _value != _cloud_value && (abs(_value - _cloud_value) >= Property::_min_delta_property);
48+
}
49+
virtual void fromCloudToLocal() {
50+
_value = _cloud_value;
51+
}
52+
virtual void fromLocalToCloud() {
53+
_cloud_value = _value;
54+
}
55+
virtual CborError appendAttributesToCloud() {
56+
return appendAttribute(_value);
57+
}
58+
virtual void setAttributesFromCloud() {
59+
setAttribute(_cloud_value);
60+
}
61+
//modifiers
62+
CloudUnsignedInt& operator=(unsigned int v) {
63+
_value = v;
64+
updateLocalTimestamp();
65+
return *this;
66+
}
67+
CloudUnsignedInt& operator=(CloudUnsignedInt v) {
68+
return operator=((unsigned int)v);
69+
}
70+
CloudUnsignedInt& operator+=(unsigned int v) {
71+
return operator=(_value += v);
72+
}
73+
CloudUnsignedInt& operator-=(unsigned int v) {
74+
return operator=(_value -= v);
75+
}
76+
CloudUnsignedInt& operator*=(unsigned int v) {
77+
return operator=(_value *= v);
78+
}
79+
CloudUnsignedInt& operator/=(unsigned int v) {
80+
return operator=(_value /= v);
81+
}
82+
CloudUnsignedInt& operator%=(unsigned int v) {
83+
return operator=(_value %= v);
84+
}
85+
CloudUnsignedInt& operator++() {
86+
return operator=(++_value);
87+
}
88+
CloudUnsignedInt& operator--() {
89+
return operator=(--_value);
90+
}
91+
CloudUnsignedInt operator++(int) {
92+
operator=(_value + 1);
93+
return CloudUnsignedInt(_value);
94+
}
95+
CloudUnsignedInt operator--(int) {
96+
operator=(_value - 1);
97+
return CloudUnsignedInt(_value);
98+
}
99+
CloudUnsignedInt& operator&=(unsigned int v) {
100+
return operator=(_value &= v);
101+
}
102+
CloudUnsignedInt& operator|=(unsigned int v) {
103+
return operator=(_value |= v);
104+
}
105+
CloudUnsignedInt& operator^=(unsigned int v) {
106+
return operator=(_value ^= v);
107+
}
108+
CloudUnsignedInt& operator<<=(unsigned int v) {
109+
return operator=(_value <<= v);
110+
}
111+
CloudUnsignedInt& operator>>=(unsigned int v) {
112+
return operator=(_value >>= v);
113+
}
114+
//accessors
115+
CloudUnsignedInt operator+() const {
116+
return CloudUnsignedInt(+_value);
117+
}
118+
CloudUnsignedInt operator-() const {
119+
return CloudUnsignedInt(-_value);
120+
}
121+
CloudUnsignedInt operator!() const {
122+
return CloudUnsignedInt(!_value);
123+
}
124+
CloudUnsignedInt operator~() const {
125+
return CloudUnsignedInt(~_value);
126+
}
127+
//friends
128+
friend CloudUnsignedInt operator+(CloudUnsignedInt iw, CloudUnsignedInt v) {
129+
return iw += v;
130+
}
131+
friend CloudUnsignedInt operator+(CloudUnsignedInt iw, unsigned int v) {
132+
return iw += v;
133+
}
134+
friend CloudUnsignedInt operator+(unsigned int v, CloudUnsignedInt iw) {
135+
return CloudUnsignedInt(v) += iw;
136+
}
137+
friend CloudUnsignedInt operator-(CloudUnsignedInt iw, CloudUnsignedInt v) {
138+
return iw -= v;
139+
}
140+
friend CloudUnsignedInt operator-(CloudUnsignedInt iw, unsigned int v) {
141+
return iw -= v;
142+
}
143+
friend CloudUnsignedInt operator-(unsigned int v, CloudUnsignedInt iw) {
144+
return CloudUnsignedInt(v) -= iw;
145+
}
146+
friend CloudUnsignedInt operator*(CloudUnsignedInt iw, CloudUnsignedInt v) {
147+
return iw *= v;
148+
}
149+
friend CloudUnsignedInt operator*(CloudUnsignedInt iw, unsigned int v) {
150+
return iw *= v;
151+
}
152+
friend CloudUnsignedInt operator*(unsigned int v, CloudUnsignedInt iw) {
153+
return CloudUnsignedInt(v) *= iw;
154+
}
155+
friend CloudUnsignedInt operator/(CloudUnsignedInt iw, CloudUnsignedInt v) {
156+
return iw /= v;
157+
}
158+
friend CloudUnsignedInt operator/(CloudUnsignedInt iw, unsigned int v) {
159+
return iw /= v;
160+
}
161+
friend CloudUnsignedInt operator/(unsigned int v, CloudUnsignedInt iw) {
162+
return CloudUnsignedInt(v) /= iw;
163+
}
164+
friend CloudUnsignedInt operator%(CloudUnsignedInt iw, CloudUnsignedInt v) {
165+
return iw %= v;
166+
}
167+
friend CloudUnsignedInt operator%(CloudUnsignedInt iw, unsigned int v) {
168+
return iw %= v;
169+
}
170+
friend CloudUnsignedInt operator%(unsigned int v, CloudUnsignedInt iw) {
171+
return CloudUnsignedInt(v) %= iw;
172+
}
173+
friend CloudUnsignedInt operator&(CloudUnsignedInt iw, CloudUnsignedInt v) {
174+
return iw &= v;
175+
}
176+
friend CloudUnsignedInt operator&(CloudUnsignedInt iw, unsigned int v) {
177+
return iw &= v;
178+
}
179+
friend CloudUnsignedInt operator&(unsigned int v, CloudUnsignedInt iw) {
180+
return CloudUnsignedInt(v) &= iw;
181+
}
182+
friend CloudUnsignedInt operator|(CloudUnsignedInt iw, CloudUnsignedInt v) {
183+
return iw |= v;
184+
}
185+
friend CloudUnsignedInt operator|(CloudUnsignedInt iw, unsigned int v) {
186+
return iw |= v;
187+
}
188+
friend CloudUnsignedInt operator|(unsigned int v, CloudUnsignedInt iw) {
189+
return CloudUnsignedInt(v) |= iw;
190+
}
191+
friend CloudUnsignedInt operator^(CloudUnsignedInt iw, CloudUnsignedInt v) {
192+
return iw ^= v;
193+
}
194+
friend CloudUnsignedInt operator^(CloudUnsignedInt iw, unsigned int v) {
195+
return iw ^= v;
196+
}
197+
friend CloudUnsignedInt operator^(unsigned int v, CloudUnsignedInt iw) {
198+
return CloudUnsignedInt(v) ^= iw;
199+
}
200+
friend CloudUnsignedInt operator<<(CloudUnsignedInt iw, CloudUnsignedInt v) {
201+
return iw <<= v;
202+
}
203+
friend CloudUnsignedInt operator<<(CloudUnsignedInt iw, unsigned int v) {
204+
return iw <<= v;
205+
}
206+
friend CloudUnsignedInt operator<<(unsigned int v, CloudUnsignedInt iw) {
207+
return CloudUnsignedInt(v) <<= iw;
208+
}
209+
friend CloudUnsignedInt operator>>(CloudUnsignedInt iw, CloudUnsignedInt v) {
210+
return iw >>= v;
211+
}
212+
friend CloudUnsignedInt operator>>(CloudUnsignedInt iw, unsigned int v) {
213+
return iw >>= v;
214+
}
215+
friend CloudUnsignedInt operator>>(unsigned int v, CloudUnsignedInt iw) {
216+
return CloudUnsignedInt(v) >>= iw;
217+
}
218+
219+
};
220+
221+
222+
#endif /* CLOUDUINT_H_ */
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
//
2+
// This file is part of ArduinoCloudThing
3+
//
4+
// Copyright 2019 ARDUINO SA (http://www.arduino.cc/)
5+
//
6+
// This software is released under the GNU General Public License version 3,
7+
// which covers the main part of ArduinoCloudThing.
8+
// The terms of this license can be found at:
9+
// https://www.gnu.org/licenses/gpl-3.0.en.html
10+
//
11+
// You can be released from the requirements of the above licenses by purchasing
12+
// a commercial license. Buying such a license is mandatory if you want to modify or
13+
// otherwise use the software for commercial activities involving the Arduino
14+
// software without disclosing the source code of your own applications. To purchase
15+
// a commercial license, send an email to [email protected].
16+
//
17+
18+
#ifndef CLOUDWRAPPERUINT_H_
19+
#define CLOUDWRAPPERUINT_H_
20+
21+
/******************************************************************************
22+
INCLUDE
23+
******************************************************************************/
24+
25+
#include <Arduino.h>
26+
#include "CloudWrapperBase.h"
27+
28+
/******************************************************************************
29+
CLASS DECLARATION
30+
******************************************************************************/
31+
32+
class CloudWrapperUnsignedInt : public CloudWrapperBase {
33+
private:
34+
unsigned int &_primitive_value,
35+
_cloud_value,
36+
_local_value;
37+
public:
38+
CloudWrapperUnsignedInt(unsigned int& v) : _primitive_value(v), _cloud_value(v), _local_value(v) {}
39+
virtual bool isDifferentFromCloud() {
40+
return _primitive_value != _cloud_value && (abs(_primitive_value - _cloud_value) >= Property::_min_delta_property);
41+
}
42+
virtual void fromCloudToLocal() {
43+
_primitive_value = _cloud_value;
44+
}
45+
virtual void fromLocalToCloud() {
46+
_cloud_value = _primitive_value;
47+
}
48+
virtual CborError appendAttributesToCloud() {
49+
return appendAttribute(_primitive_value);
50+
}
51+
virtual void setAttributesFromCloud() {
52+
setAttribute(_cloud_value);
53+
}
54+
virtual bool isPrimitive() {
55+
return true;
56+
}
57+
virtual bool isChangedLocally() {
58+
return _primitive_value != _local_value;
59+
}
60+
};
61+
62+
63+
#endif /* CLOUDWRAPPERINT_H_ */

0 commit comments

Comments
 (0)