Skip to content

Commit 32e8d8d

Browse files
committed
Make permission field composable too
1 parent 3797b91 commit 32e8d8d

File tree

2 files changed

+41
-28
lines changed

2 files changed

+41
-28
lines changed

ArduinoCloudThing.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ ArduinoCloudThing::ArduinoCloudThing() {
4444
void ArduinoCloudThing::begin() {
4545

4646
status = ON;
47-
addProperty(status, READ);
47+
addProperty(status).readOnly();
4848
}
4949

5050
int ArduinoCloudThing::publish(CborArray& object, uint8_t* data) {
@@ -107,39 +107,39 @@ int ArduinoCloudThing::checkNewData() {
107107
return counter;
108108
}
109109

110-
bool ArduinoCloudThing::exists(String &name) {
110+
ArduinoCloudPropertyGeneric* ArduinoCloudThing::exists(String &name) {
111111
for (int i = 0; i < list.size(); i++) {
112112
ArduinoCloudPropertyGeneric *p = list.get(i);
113113
if (p->getName() == name) {
114-
return true;
114+
return p;
115115
}
116116
}
117-
return false;
117+
return NULL;
118118
}
119119

120-
ArduinoCloudPropertyGeneric& ArduinoCloudThing::addPropertyReal(int& property, String name, permissionType permission) {
121-
if (exists(name)) {
122-
return *(reinterpret_cast<ArduinoCloudPropertyGeneric*>(NULL));
120+
ArduinoCloudPropertyGeneric& ArduinoCloudThing::addPropertyReal(int& property, String name) {
121+
if (ArduinoCloudPropertyGeneric* p = exists(name)) {
122+
return *p;
123123
}
124-
ArduinoCloudProperty<int> *thing = new ArduinoCloudProperty<int>(property, name, permission);
124+
ArduinoCloudProperty<int> *thing = new ArduinoCloudProperty<int>(property, name);
125125
list.add(thing);
126126
return *(reinterpret_cast<ArduinoCloudPropertyGeneric*>(thing));
127127
}
128128

129-
ArduinoCloudPropertyGeneric& ArduinoCloudThing::addPropertyReal(bool& property, String name, permissionType permission) {
130-
if (exists(name)) {
131-
return *(reinterpret_cast<ArduinoCloudPropertyGeneric*>(NULL));
129+
ArduinoCloudPropertyGeneric& ArduinoCloudThing::addPropertyReal(bool& property, String name) {
130+
if (ArduinoCloudPropertyGeneric* p = exists(name)) {
131+
return *p;
132132
}
133-
ArduinoCloudProperty<bool> *thing = new ArduinoCloudProperty<bool>(property, name, permission);
133+
ArduinoCloudProperty<bool> *thing = new ArduinoCloudProperty<bool>(property, name);
134134
list.add(thing);
135135
return *(reinterpret_cast<ArduinoCloudPropertyGeneric*>(thing));
136136
}
137137

138-
ArduinoCloudPropertyGeneric& ArduinoCloudThing::addPropertyReal(float& property, String name, permissionType permission) {
139-
if (exists(name)) {
140-
return *(reinterpret_cast<ArduinoCloudPropertyGeneric*>(NULL));
138+
ArduinoCloudPropertyGeneric& ArduinoCloudThing::addPropertyReal(float& property, String name) {
139+
if (ArduinoCloudPropertyGeneric* p = exists(name)) {
140+
return *p;
141141
}
142-
ArduinoCloudProperty<float> *thing = new ArduinoCloudProperty<float>(property, name, permission);
142+
ArduinoCloudProperty<float> *thing = new ArduinoCloudProperty<float>(property, name);
143143
list.add(thing);
144144
return *(reinterpret_cast<ArduinoCloudPropertyGeneric*>(thing));
145145
}

ArduinoCloudThing.h

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ class ArduinoCloudPropertyGeneric
3636
virtual void append(CborObject& object) = 0;
3737
virtual String& getName() = 0;
3838
virtual void setName(String _name) = 0;
39-
virtual void setTag(int _tag) = 0;
39+
virtual ArduinoCloudPropertyGeneric& setTag(int _tag) = 0;
40+
virtual ArduinoCloudPropertyGeneric& readOnly() = 0;
41+
virtual ArduinoCloudPropertyGeneric& writeOnly() = 0;
4042
virtual int getTag() = 0;
4143
virtual void setPermission(permissionType _permission) = 0;
4244
virtual permissionType getPermission() = 0;
@@ -52,8 +54,8 @@ template <typename T>
5254
class ArduinoCloudProperty : public ArduinoCloudPropertyGeneric
5355
{
5456
public:
55-
ArduinoCloudProperty(T& _property, String _name, permissionType _permission) :
56-
property(_property), name(_name), permission(_permission) {}
57+
ArduinoCloudProperty(T& _property, String _name) :
58+
property(_property), name(_name) {}
5759

5860
bool write(T value) {
5961
if (permission != READ) {
@@ -81,8 +83,9 @@ class ArduinoCloudProperty : public ArduinoCloudPropertyGeneric
8183
name = _name;
8284
}
8385

84-
void setTag(int _tag) {
86+
ArduinoCloudPropertyGeneric& setTag(int _tag) {
8587
tag = _tag;
88+
return *(reinterpret_cast<ArduinoCloudPropertyGeneric*>(this));
8689
}
8790

8891
int getTag() {
@@ -93,6 +96,16 @@ class ArduinoCloudProperty : public ArduinoCloudPropertyGeneric
9396
permission = _permission;
9497
}
9598

99+
ArduinoCloudPropertyGeneric& readOnly() {
100+
permission = READ;
101+
return *(reinterpret_cast<ArduinoCloudPropertyGeneric*>(this));
102+
}
103+
104+
ArduinoCloudPropertyGeneric& writeOnly() {
105+
permission = WRITE;
106+
return *(reinterpret_cast<ArduinoCloudPropertyGeneric*>(this));
107+
}
108+
96109
permissionType getPermission() {
97110
return permission;
98111
}
@@ -142,7 +155,7 @@ class ArduinoCloudProperty : public ArduinoCloudPropertyGeneric
142155
int tag = -1;
143156
long lastUpdated = 0;
144157
long updatePolicy = ON_CHANGE;
145-
permissionType permission;
158+
permissionType permission = READWRITE;
146159
static int tagIndex;
147160
};
148161

@@ -172,18 +185,18 @@ inline void ArduinoCloudProperty<char*>::appendValue(CborObject &cbor) {
172185
};
173186

174187
#ifndef addProperty
175-
#define addProperty(prop, permission) addPropertyReal(prop, #prop, permission)
188+
#define addProperty(prop) addPropertyReal(prop, #prop)
176189
#endif
177190

178191
class ArduinoCloudThing {
179192
public:
180193
ArduinoCloudThing();
181194
void begin();
182-
ArduinoCloudPropertyGeneric& addPropertyReal(int& property, String name, permissionType permission);
183-
ArduinoCloudPropertyGeneric& addPropertyReal(bool& property, String name, permissionType permission);
184-
ArduinoCloudPropertyGeneric& addPropertyReal(float& property, String name, permissionType permission);
185-
ArduinoCloudPropertyGeneric& addPropertyReal(void* property, String name, permissionType permission);
186-
ArduinoCloudPropertyGeneric& addPropertyReal(String property, String name, permissionType permission);
195+
ArduinoCloudPropertyGeneric& addPropertyReal(int& property, String name);
196+
ArduinoCloudPropertyGeneric& addPropertyReal(bool& property, String name);
197+
ArduinoCloudPropertyGeneric& addPropertyReal(float& property, String name);
198+
ArduinoCloudPropertyGeneric& addPropertyReal(void* property, String name);
199+
ArduinoCloudPropertyGeneric& addPropertyReal(String property, String name);
187200
// poll should return > 0 if something has changed
188201
int poll(uint8_t* data);
189202
void decode(uint8_t * payload, size_t length);
@@ -195,7 +208,7 @@ class ArduinoCloudThing {
195208
int checkNewData();
196209
void compress(CborArray& object, CborBuffer& buffer);
197210

198-
bool exists(String &name);
211+
ArduinoCloudPropertyGeneric* exists(String &name);
199212

200213
bool status = OFF;
201214
char uuid[33];

0 commit comments

Comments
 (0)