From a0566e5958f7cedc2ab8dfc9644284817ecb6b37 Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 11 Nov 2022 16:19:07 +0100 Subject: [PATCH 1/5] Remove unnecessary methods from public access label --- src/ArduinoIoTCloud.h | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/ArduinoIoTCloud.h b/src/ArduinoIoTCloud.h index 8be318b25..a17525e37 100644 --- a/src/ArduinoIoTCloud.h +++ b/src/ArduinoIoTCloud.h @@ -130,20 +130,6 @@ class ArduinoIoTCloudClass Property& addPropertyReal(unsigned int& property, String name, Permission const permission); Property& addPropertyReal(String& property, String name, Permission const permission); - Property& addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); - Property& addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); - Property& addPropertyReal(float& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); - Property& addPropertyReal(int& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); - Property& addPropertyReal(unsigned int& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); - Property& addPropertyReal(String& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); - - Property& addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, Permission const permission); - Property& addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, Permission const permission); - Property& addPropertyReal(float& property, PropertyContainer &prop_cont, String name, Permission const permission); - Property& addPropertyReal(int& property, PropertyContainer &prop_cont, String name, Permission const permission); - Property& addPropertyReal(unsigned int& property, PropertyContainer &prop_cont, String name, Permission const permission); - Property& addPropertyReal(String& property, PropertyContainer &prop_cont, String name, Permission const permission); - /* The following methods are for MKR WAN 1300/1310 LoRa boards since * they use a number to identify a given property within a CBOR message. * This approach reduces the required amount of data which is of great @@ -178,11 +164,26 @@ class ArduinoIoTCloudClass void execCloudEventCallback(ArduinoIoTCloudEvent const event); + /* The following methods are used to handle hidden thing and device properties */ + Property& addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, Permission const permission); + Property& addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, Permission const permission); + Property& addPropertyReal(float& property, PropertyContainer &prop_cont, String name, Permission const permission); + Property& addPropertyReal(int& property, PropertyContainer &prop_cont, String name, Permission const permission); + Property& addPropertyReal(unsigned int& property, PropertyContainer &prop_cont, String name, Permission const permission); + Property& addPropertyReal(String& property, PropertyContainer &prop_cont, String name, Permission const permission); + private: String _device_id; OnCloudEventCallback _cloud_event_callback[3]; bool _thing_id_outdated; + + Property& addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); + Property& addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); + Property& addPropertyReal(float& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); + Property& addPropertyReal(int& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); + Property& addPropertyReal(unsigned int& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); + Property& addPropertyReal(String& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); }; #ifdef HAS_TCP From 0773524ea96bdc0749f9960bdaeb20a1320a1cd4 Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 11 Nov 2022 16:26:21 +0100 Subject: [PATCH 2/5] Reorder methods to make more clear calls dependency --- src/ArduinoIoTCloud.cpp | 238 ++++++++++++++++++---------------------- 1 file changed, 109 insertions(+), 129 deletions(-) diff --git a/src/ArduinoIoTCloud.cpp b/src/ArduinoIoTCloud.cpp index 0d9102d67..2b291d245 100644 --- a/src/ArduinoIoTCloud.cpp +++ b/src/ArduinoIoTCloud.cpp @@ -66,222 +66,202 @@ void ArduinoIoTCloudClass::addCallback(ArduinoIoTCloudEvent const event, OnCloud _cloud_event_callback[static_cast(event)] = callback; } -void ArduinoIoTCloudClass::addPropertyReal(Property& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) +/* The following methods are used for non-LoRa boards */ +Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, Permission const permission) { - addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn); + return addPropertyReal(property, _thing_property_container, name, -1, permission); } - -void ArduinoIoTCloudClass::addPropertyReal(Property& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) +Property& ArduinoIoTCloudClass::addPropertyReal(float& property, String name, Permission const permission) { - Permission permission = Permission::ReadWrite; - if (permission_type == READ) { - permission = Permission::Read; - } else if (permission_type == WRITE) { - permission = Permission::Write; - } else { - permission = Permission::ReadWrite; - } - - if (seconds == ON_CHANGE) { - addPropertyToContainer(_thing_property_container, property, name, permission, tag).publishOnChange(minDelta, Property::DEFAULT_MIN_TIME_BETWEEN_UPDATES_MILLIS).onUpdate(fn).onSync(synFn); - } else { - addPropertyToContainer(_thing_property_container, property, name, permission, tag).publishEvery(seconds).onUpdate(fn).onSync(synFn); - } + return addPropertyReal(property, _thing_property_container, name, -1, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, String name, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(int& property, String name, Permission const permission) { - return addPropertyToContainer(_thing_property_container, property, name, permission); + return addPropertyReal(property, _thing_property_container, name, -1, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, String name, int tag, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, Permission const permission) { - return addPropertyToContainer(_thing_property_container, property, name, permission, tag); + return addPropertyReal(property, _thing_property_container, name, -1, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(String& property, String name, Permission const permission) { - return addPropertyToContainer(prop_cont, property, name, permission, -1); + return addPropertyReal(property, _thing_property_container, name, -1, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, String name, Permission const permission) { - return addPropertyToContainer(prop_cont, property, name, permission, tag); + return addPropertyReal(property, _thing_property_container, name, -1, permission); } -void ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) +/* The following methods are used for LoRa boards */ +Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, int tag, Permission const permission) { - addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn); + return addPropertyReal(property, _thing_property_container, name, tag, permission); } - -void ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) +Property& ArduinoIoTCloudClass::addPropertyReal(float& property, String name, int tag, Permission const permission) { - Property* p = new CloudWrapperBool(property); - addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn); + return addPropertyReal(property, _thing_property_container, name, tag, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(int& property, String name, int tag, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, -1, permission); + return addPropertyReal(property, _thing_property_container, name, tag, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, int tag, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, int tag, Permission const permission) { return addPropertyReal(property, _thing_property_container, name, tag, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(String& property, String name, int tag, Permission const permission) { - return addPropertyReal(property, prop_cont, name, -1, permission); + return addPropertyReal(property, _thing_property_container, name, tag, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, String name, int tag, Permission const permission) { - Property* p = new CloudWrapperBool(property); - return addPropertyToContainer(prop_cont, *p, name, permission, tag); + return addPropertyReal(property, _thing_property_container, name, tag, permission); } +/* The following methods are deprecated but still used for non-LoRa boards */ +void ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) +{ + addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn); +} void ArduinoIoTCloudClass::addPropertyReal(float& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) { addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn); } - -void ArduinoIoTCloudClass::addPropertyReal(float& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) +void ArduinoIoTCloudClass::addPropertyReal(int& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) { - Property* p = new CloudWrapperFloat(property); - addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn); + addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn); } - -Property& ArduinoIoTCloudClass::addPropertyReal(float& property, String name, Permission const permission) +void ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) { - return addPropertyReal(property, _thing_property_container, name, -1, permission); + addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn); } - -Property& ArduinoIoTCloudClass::addPropertyReal(float& property, String name, int tag, Permission const permission) +void ArduinoIoTCloudClass::addPropertyReal(String& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) { - return addPropertyReal(property, _thing_property_container, name, tag, permission); + addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn); } - -Property& ArduinoIoTCloudClass::addPropertyReal(float& property, PropertyContainer &prop_cont, String name, Permission const permission) +void ArduinoIoTCloudClass::addPropertyReal(Property& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) { - return addPropertyReal(property, prop_cont, name, -1, permission); + addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn); } -Property& ArduinoIoTCloudClass::addPropertyReal(float& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) +/* The following methods are deprecated but still used for both LoRa and non-LoRa boards */ +void ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) { - Property* p = new CloudWrapperFloat(property); - return addPropertyToContainer(prop_cont, *p, name, permission, tag); + Property* p = new CloudWrapperBool(property); + addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn); } - -void ArduinoIoTCloudClass::addPropertyReal(int& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) +void ArduinoIoTCloudClass::addPropertyReal(float& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) { - addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn); + Property* p = new CloudWrapperFloat(property); + addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn); } - void ArduinoIoTCloudClass::addPropertyReal(int& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) { Property* p = new CloudWrapperInt(property); addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn); } - -Property& ArduinoIoTCloudClass::addPropertyReal(int& property, String name, Permission const permission) +void ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) { - return addPropertyReal(property, _thing_property_container, name, -1, permission); + Property* p = new CloudWrapperUnsignedInt(property); + addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn); } - -Property& ArduinoIoTCloudClass::addPropertyReal(int& property, String name, int tag, Permission const permission) +void ArduinoIoTCloudClass::addPropertyReal(String& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) { - return addPropertyReal(property, _thing_property_container, name, tag, permission); + Property* p = new CloudWrapperString(property); + addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn); } - -Property& ArduinoIoTCloudClass::addPropertyReal(int& property, PropertyContainer &prop_cont, String name, Permission const permission) +void ArduinoIoTCloudClass::addPropertyReal(Property& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) { - return addPropertyReal(property, prop_cont, name, -1, permission); + Permission permission = Permission::ReadWrite; + if (permission_type == READ) { + permission = Permission::Read; + } else if (permission_type == WRITE) { + permission = Permission::Write; + } else { + permission = Permission::ReadWrite; + } + + if (seconds == ON_CHANGE) { + addPropertyToContainer(_thing_property_container, property, name, permission, tag).publishOnChange(minDelta, Property::DEFAULT_MIN_TIME_BETWEEN_UPDATES_MILLIS).onUpdate(fn).onSync(synFn); + } else { + addPropertyToContainer(_thing_property_container, property, name, permission, tag).publishEvery(seconds).onUpdate(fn).onSync(synFn); + } } -Property& ArduinoIoTCloudClass::addPropertyReal(int& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) +/****************************************************************************** + * PROTECTED MEMBER FUNCTIONS + ******************************************************************************/ + +void ArduinoIoTCloudClass::execCloudEventCallback(ArduinoIoTCloudEvent const event) { - Property* p = new CloudWrapperInt(property); - return addPropertyToContainer(prop_cont, *p, name, permission, tag); + OnCloudEventCallback callback = _cloud_event_callback[static_cast(event)]; + if (callback) { + (*callback)(); + } } -void ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) +__attribute__((weak)) void setDebugMessageLevel(int const /* level */) { - addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn); + /* do nothing */ } -void ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) +/* The following methods are used internally to handle hidden thing and device properties */ +Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, Permission const permission) { - Property* p = new CloudWrapperUnsignedInt(property); - addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn); + return addPropertyReal(property, prop_cont, name, -1, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(float& property, PropertyContainer &prop_cont, String name, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, -1, permission); + return addPropertyReal(property, prop_cont, name, -1, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, int tag, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(int& property, PropertyContainer &prop_cont, String name, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, tag, permission); + return addPropertyReal(property, prop_cont, name, -1, permission); } - Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, PropertyContainer &prop_cont, String name, Permission const permission) { return addPropertyReal(property, prop_cont, name, -1, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(String& property, PropertyContainer &prop_cont, String name, Permission const permission) { - Property* p = new CloudWrapperUnsignedInt(property); - return addPropertyToContainer(prop_cont, *p, name, permission, tag); + return addPropertyReal(property, prop_cont, name, -1, permission); } - -void ArduinoIoTCloudClass::addPropertyReal(String& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) +Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, Permission const permission) { - addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn); + return addPropertyReal(property, prop_cont, name, -1, permission); } -void ArduinoIoTCloudClass::addPropertyReal(String& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property)) +/****************************************************************************** + * PRIVATE MEMBER FUNCTIONS + ******************************************************************************/ + +/* The following methods are used for both LoRa and non-LoRa boards */ +Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) { - Property* p = new CloudWrapperString(property); - addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn); + Property* p = new CloudWrapperBool(property); + return addPropertyReal(*p, prop_cont, name, tag, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(String& property, String name, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(float& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, -1, permission); + Property* p = new CloudWrapperFloat(property); + return addPropertyReal(*p, prop_cont, name, tag, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(String& property, String name, int tag, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(int& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, tag, permission); + Property* p = new CloudWrapperInt(property); + return addPropertyReal(*p, prop_cont, name, tag, permission); } - -Property& ArduinoIoTCloudClass::addPropertyReal(String& property, PropertyContainer &prop_cont, String name, Permission const permission) +Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) { - return addPropertyReal(property, prop_cont, name, -1, permission); + Property* p = new CloudWrapperUnsignedInt(property); + return addPropertyReal(*p, prop_cont, name, tag, permission); } - Property& ArduinoIoTCloudClass::addPropertyReal(String& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) { Property* p = new CloudWrapperString(property); - return addPropertyToContainer(prop_cont, *p, name, permission, tag); + return addPropertyReal(*p, prop_cont, name, tag, permission); } - -/****************************************************************************** - * PROTECTED MEMBER FUNCTIONS - ******************************************************************************/ - -void ArduinoIoTCloudClass::execCloudEventCallback(ArduinoIoTCloudEvent const event) -{ - OnCloudEventCallback callback = _cloud_event_callback[static_cast(event)]; - if (callback) { - (*callback)(); - } -} - -__attribute__((weak)) void setDebugMessageLevel(int const /* level */) +Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) { - /* do nothing */ -} + return addPropertyToContainer(prop_cont, property, name, permission, tag); +} \ No newline at end of file From fa9e6eec1314a75fbbab1595b0f0af7dea599151 Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 11 Nov 2022 17:49:28 +0100 Subject: [PATCH 3/5] Remove no more needed protected methods --- src/ArduinoIoTCloud.cpp | 26 -------------------------- src/ArduinoIoTCloud.h | 8 -------- 2 files changed, 34 deletions(-) diff --git a/src/ArduinoIoTCloud.cpp b/src/ArduinoIoTCloud.cpp index 2b291d245..3df5363fa 100644 --- a/src/ArduinoIoTCloud.cpp +++ b/src/ArduinoIoTCloud.cpp @@ -205,32 +205,6 @@ __attribute__((weak)) void setDebugMessageLevel(int const /* level */) /* do nothing */ } -/* The following methods are used internally to handle hidden thing and device properties */ -Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, Permission const permission) -{ - return addPropertyReal(property, prop_cont, name, -1, permission); -} -Property& ArduinoIoTCloudClass::addPropertyReal(float& property, PropertyContainer &prop_cont, String name, Permission const permission) -{ - return addPropertyReal(property, prop_cont, name, -1, permission); -} -Property& ArduinoIoTCloudClass::addPropertyReal(int& property, PropertyContainer &prop_cont, String name, Permission const permission) -{ - return addPropertyReal(property, prop_cont, name, -1, permission); -} -Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, PropertyContainer &prop_cont, String name, Permission const permission) -{ - return addPropertyReal(property, prop_cont, name, -1, permission); -} -Property& ArduinoIoTCloudClass::addPropertyReal(String& property, PropertyContainer &prop_cont, String name, Permission const permission) -{ - return addPropertyReal(property, prop_cont, name, -1, permission); -} -Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, Permission const permission) -{ - return addPropertyReal(property, prop_cont, name, -1, permission); -} - /****************************************************************************** * PRIVATE MEMBER FUNCTIONS ******************************************************************************/ diff --git a/src/ArduinoIoTCloud.h b/src/ArduinoIoTCloud.h index a17525e37..2be126f2c 100644 --- a/src/ArduinoIoTCloud.h +++ b/src/ArduinoIoTCloud.h @@ -164,14 +164,6 @@ class ArduinoIoTCloudClass void execCloudEventCallback(ArduinoIoTCloudEvent const event); - /* The following methods are used to handle hidden thing and device properties */ - Property& addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, Permission const permission); - Property& addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, Permission const permission); - Property& addPropertyReal(float& property, PropertyContainer &prop_cont, String name, Permission const permission); - Property& addPropertyReal(int& property, PropertyContainer &prop_cont, String name, Permission const permission); - Property& addPropertyReal(unsigned int& property, PropertyContainer &prop_cont, String name, Permission const permission); - Property& addPropertyReal(String& property, PropertyContainer &prop_cont, String name, Permission const permission); - private: String _device_id; From 74b3ff2b81631e5f689d791fcd0f9015f581bc94 Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 11 Nov 2022 17:58:13 +0100 Subject: [PATCH 4/5] Simplify addPropertyReal logic and remove no more needed private methods --- src/ArduinoIoTCloud.cpp | 65 ++++++++++++----------------------------- src/ArduinoIoTCloud.h | 7 ----- 2 files changed, 18 insertions(+), 54 deletions(-) diff --git a/src/ArduinoIoTCloud.cpp b/src/ArduinoIoTCloud.cpp index 3df5363fa..7763dd1f5 100644 --- a/src/ArduinoIoTCloud.cpp +++ b/src/ArduinoIoTCloud.cpp @@ -69,53 +69,58 @@ void ArduinoIoTCloudClass::addCallback(ArduinoIoTCloudEvent const event, OnCloud /* The following methods are used for non-LoRa boards */ Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, -1, permission); + return addPropertyReal(property, name, -1, permission); } Property& ArduinoIoTCloudClass::addPropertyReal(float& property, String name, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, -1, permission); + return addPropertyReal(property, name, -1, permission); } Property& ArduinoIoTCloudClass::addPropertyReal(int& property, String name, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, -1, permission); + return addPropertyReal(property, name, -1, permission); } Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, -1, permission); + return addPropertyReal(property, name, -1, permission); } Property& ArduinoIoTCloudClass::addPropertyReal(String& property, String name, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, -1, permission); + return addPropertyReal(property, name, -1, permission); } Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, String name, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, -1, permission); + return addPropertyReal(property, name, -1, permission); } -/* The following methods are used for LoRa boards */ +/* The following methods are used for both LoRa and non-Lora boards */ Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, int tag, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, tag, permission); + Property* p = new CloudWrapperBool(property); + return addPropertyReal(*p, name, tag, permission); } Property& ArduinoIoTCloudClass::addPropertyReal(float& property, String name, int tag, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, tag, permission); + Property* p = new CloudWrapperFloat(property); + return addPropertyReal(*p, name, tag, permission); } Property& ArduinoIoTCloudClass::addPropertyReal(int& property, String name, int tag, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, tag, permission); + Property* p = new CloudWrapperInt(property); + return addPropertyReal(*p, name, tag, permission); } Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, int tag, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, tag, permission); + Property* p = new CloudWrapperUnsignedInt(property); + return addPropertyReal(*p, name, tag, permission); } Property& ArduinoIoTCloudClass::addPropertyReal(String& property, String name, int tag, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, tag, permission); + Property* p = new CloudWrapperString(property); + return addPropertyReal(*p, name, tag, permission); } Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, String name, int tag, Permission const permission) { - return addPropertyReal(property, _thing_property_container, name, tag, permission); + return addPropertyToContainer(_thing_property_container, property, name, permission, tag); } /* The following methods are deprecated but still used for non-LoRa boards */ @@ -205,37 +210,3 @@ __attribute__((weak)) void setDebugMessageLevel(int const /* level */) /* do nothing */ } -/****************************************************************************** - * PRIVATE MEMBER FUNCTIONS - ******************************************************************************/ - -/* The following methods are used for both LoRa and non-LoRa boards */ -Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) -{ - Property* p = new CloudWrapperBool(property); - return addPropertyReal(*p, prop_cont, name, tag, permission); -} -Property& ArduinoIoTCloudClass::addPropertyReal(float& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) -{ - Property* p = new CloudWrapperFloat(property); - return addPropertyReal(*p, prop_cont, name, tag, permission); -} -Property& ArduinoIoTCloudClass::addPropertyReal(int& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) -{ - Property* p = new CloudWrapperInt(property); - return addPropertyReal(*p, prop_cont, name, tag, permission); -} -Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) -{ - Property* p = new CloudWrapperUnsignedInt(property); - return addPropertyReal(*p, prop_cont, name, tag, permission); -} -Property& ArduinoIoTCloudClass::addPropertyReal(String& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) -{ - Property* p = new CloudWrapperString(property); - return addPropertyReal(*p, prop_cont, name, tag, permission); -} -Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission) -{ - return addPropertyToContainer(prop_cont, property, name, permission, tag); -} \ No newline at end of file diff --git a/src/ArduinoIoTCloud.h b/src/ArduinoIoTCloud.h index 2be126f2c..717bce0fa 100644 --- a/src/ArduinoIoTCloud.h +++ b/src/ArduinoIoTCloud.h @@ -169,13 +169,6 @@ class ArduinoIoTCloudClass String _device_id; OnCloudEventCallback _cloud_event_callback[3]; bool _thing_id_outdated; - - Property& addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); - Property& addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); - Property& addPropertyReal(float& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); - Property& addPropertyReal(int& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); - Property& addPropertyReal(unsigned int& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); - Property& addPropertyReal(String& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission); }; #ifdef HAS_TCP From f1370560ba37a20d1fc197a451ca288e62e890cf Mon Sep 17 00:00:00 2001 From: pennam Date: Mon, 14 Nov 2022 13:32:59 +0100 Subject: [PATCH 5/5] Manually wrap and add hidden properties into the _device_property_container --- src/ArduinoIoTCloudTCP.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/ArduinoIoTCloudTCP.cpp b/src/ArduinoIoTCloudTCP.cpp index f34da15af..3c11dea8f 100644 --- a/src/ArduinoIoTCloudTCP.cpp +++ b/src/ArduinoIoTCloudTCP.cpp @@ -250,18 +250,26 @@ int ArduinoIoTCloudTCP::begin(bool const enable_watchdog, String brokerAddress, _deviceTopicOut = getTopic_deviceout(); _deviceTopicIn = getTopic_devicein(); - addPropertyReal(_lib_version, _device_property_container, "LIB_VERSION", Permission::Read); + Property* p; + p = new CloudWrapperString(_lib_version); + addPropertyToContainer(_device_property_container, *p, "LIB_VERSION", Permission::Read, -1); #if OTA_ENABLED - addPropertyReal(_ota_cap, _device_property_container, "OTA_CAP", Permission::Read); - addPropertyReal(_ota_error, _device_property_container, "OTA_ERROR", Permission::Read); - addPropertyReal(_ota_img_sha256, _device_property_container, "OTA_SHA256", Permission::Read); - addPropertyReal(_ota_url, _device_property_container, "OTA_URL", Permission::ReadWrite); - addPropertyReal(_ota_req, _device_property_container, "OTA_REQ", Permission::ReadWrite); + p = new CloudWrapperBool(_ota_cap); + addPropertyToContainer(_device_property_container, *p, "OTA_CAP", Permission::Read, -1); + p = new CloudWrapperInt(_ota_error); + addPropertyToContainer(_device_property_container, *p, "OTA_ERROR", Permission::Read, -1); + p = new CloudWrapperString(_ota_img_sha256); + addPropertyToContainer(_device_property_container, *p, "OTA_SHA256", Permission::Read, -1); + p = new CloudWrapperString(_ota_url); + addPropertyToContainer(_device_property_container, *p, "OTA_URL", Permission::ReadWrite, -1); + p = new CloudWrapperBool(_ota_req); + addPropertyToContainer(_device_property_container, *p, "OTA_REQ", Permission::ReadWrite, -1); #endif /* OTA_ENABLED */ + p = new CloudWrapperString(_thing_id); + addPropertyToContainer(_device_property_container, *p, "thing_id", Permission::ReadWrite, -1).onUpdate(setThingIdOutdated); - addPropertyReal(_tz_offset, _thing_property_container, "tz_offset", Permission::ReadWrite).onSync(CLOUD_WINS).onUpdate(updateTimezoneInfo); - addPropertyReal(_tz_dst_until, _thing_property_container, "tz_dst_until", Permission::ReadWrite).onSync(CLOUD_WINS).onUpdate(updateTimezoneInfo); - addPropertyReal(_thing_id, _device_property_container, "thing_id", Permission::ReadWrite).onUpdate(setThingIdOutdated); + addPropertyReal(_tz_offset, "tz_offset", Permission::ReadWrite).onSync(CLOUD_WINS).onUpdate(updateTimezoneInfo); + addPropertyReal(_tz_dst_until, "tz_dst_until", Permission::ReadWrite).onSync(CLOUD_WINS).onUpdate(updateTimezoneInfo); #if OTA_STORAGE_PORTENTA_QSPI #define BOOTLOADER_ADDR (0x8000000)