Skip to content

Reorder and simplify addPropertyReal methods #343

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Dec 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
205 changes: 65 additions & 140 deletions src/ArduinoIoTCloud.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,207 +66,131 @@ void ArduinoIoTCloudClass::addCallback(ArduinoIoTCloudEvent const event, OnCloud
_cloud_event_callback[static_cast<size_t>(event)] = callback;
}

void ArduinoIoTCloudClass::addPropertyReal(Property& 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(Property& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property))
{
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(Property& property, String name, Permission const permission)
{
return addPropertyToContainer(_thing_property_container, property, name, permission);
}

Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, String name, int tag, Permission const permission)
/* The following methods are used for non-LoRa boards */
Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, Permission const permission)
{
return addPropertyToContainer(_thing_property_container, property, name, permission, tag);
return addPropertyReal(property, name, -1, permission);
}

Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, Permission const permission)
Property& ArduinoIoTCloudClass::addPropertyReal(float& property, String name, Permission const permission)
{
return addPropertyToContainer(prop_cont, property, name, permission, -1);
return addPropertyReal(property, name, -1, permission);
}

Property& ArduinoIoTCloudClass::addPropertyReal(Property& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission)
Property& ArduinoIoTCloudClass::addPropertyReal(int& property, String name, Permission const permission)
{
return addPropertyToContainer(prop_cont, property, name, permission, tag);
return addPropertyReal(property, name, -1, permission);
}

void ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property))
Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, Permission const permission)
{
addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn);
return addPropertyReal(property, name, -1, 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(String& property, String name, Permission const permission)
{
Property* p = new CloudWrapperBool(property);
addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn);
return addPropertyReal(property, name, -1, permission);
}

Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, Permission const 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 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& ArduinoIoTCloudClass::addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, Permission const permission)
{
return addPropertyReal(property, prop_cont, name, -1, permission);
}

Property& ArduinoIoTCloudClass::addPropertyReal(bool& property, PropertyContainer &prop_cont, String name, int tag, Permission const permission)
{
Property* p = new CloudWrapperBool(property);
return addPropertyToContainer(prop_cont, *p, name, permission, tag);
}

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);
return addPropertyReal(*p, name, tag, permission);
}

void ArduinoIoTCloudClass::addPropertyReal(float& 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 CloudWrapperFloat(property);
addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn);
return addPropertyReal(*p, name, tag, permission);
}

Property& ArduinoIoTCloudClass::addPropertyReal(float& 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);
Property* p = new CloudWrapperInt(property);
return addPropertyReal(*p, name, tag, permission);
}

Property& ArduinoIoTCloudClass::addPropertyReal(float& 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* p = new CloudWrapperUnsignedInt(property);
return addPropertyReal(*p, name, tag, permission);
}

Property& ArduinoIoTCloudClass::addPropertyReal(float& 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);
Property* p = new CloudWrapperString(property);
return addPropertyReal(*p, name, tag, permission);
}

Property& ArduinoIoTCloudClass::addPropertyReal(float& 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 CloudWrapperFloat(property);
return addPropertyToContainer(prop_cont, *p, name, permission, tag);
return addPropertyToContainer(_thing_property_container, property, name, permission, tag);
}

void ArduinoIoTCloudClass::addPropertyReal(int& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property))
/* 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(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(float& 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(int& property, String name, int tag, Permission const permission)
void ArduinoIoTCloudClass::addPropertyReal(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, tag, permission);
addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn);
}

Property& ArduinoIoTCloudClass::addPropertyReal(int& property, PropertyContainer &prop_cont, 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, prop_cont, name, -1, permission);
addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn);
}

Property& ArduinoIoTCloudClass::addPropertyReal(int& property, PropertyContainer &prop_cont, 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))
{
Property* p = new CloudWrapperInt(property);
return addPropertyToContainer(prop_cont, *p, name, permission, tag);
addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn);
}

void ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property))
void ArduinoIoTCloudClass::addPropertyReal(Property& 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(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 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 CloudWrapperUnsignedInt(property);
Property* p = new CloudWrapperBool(property);
addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn);
}

Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, Permission const permission)
{
return addPropertyReal(property, _thing_property_container, name, -1, permission);
}

Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, String name, int tag, Permission const permission)
void ArduinoIoTCloudClass::addPropertyReal(float& 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 CloudWrapperFloat(property);
addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn);
}

Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, PropertyContainer &prop_cont, String name, Permission const permission)
void ArduinoIoTCloudClass::addPropertyReal(int& 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);
Property* p = new CloudWrapperInt(property);
addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn);
}

Property& ArduinoIoTCloudClass::addPropertyReal(unsigned int& property, PropertyContainer &prop_cont, String name, int tag, 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))
{
Property* p = new CloudWrapperUnsignedInt(property);
return addPropertyToContainer(prop_cont, *p, name, permission, tag);
}

void ArduinoIoTCloudClass::addPropertyReal(String& 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);
addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn);
}

void ArduinoIoTCloudClass::addPropertyReal(String& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(Property & property))
{
Property* p = new CloudWrapperString(property);
addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn);
}

Property& ArduinoIoTCloudClass::addPropertyReal(String& property, String name, Permission const permission)
{
return addPropertyReal(property, _thing_property_container, name, -1, permission);
}

Property& ArduinoIoTCloudClass::addPropertyReal(String& property, String name, int tag, Permission const permission)
{
return addPropertyReal(property, _thing_property_container, name, tag, permission);
}

Property& ArduinoIoTCloudClass::addPropertyReal(String& 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;
}

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);
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);
}
}

/******************************************************************************
Expand All @@ -285,3 +209,4 @@ __attribute__((weak)) void setDebugMessageLevel(int const /* level */)
{
/* do nothing */
}

14 changes: 0 additions & 14 deletions src/ArduinoIoTCloud.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading