Skip to content

Refactoring ArduinoIoTCloud #109

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 54 commits into from
Apr 8, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
03b18c6
Check for a valid pointer before calling 'delete' is not necessary si…
aentinger Mar 30, 2020
d2bdf9b
Since 'begin' is only called once we do not need to check if _sslClie…
aentinger Mar 30, 2020
223eaea
Moving all crypto relevant code to utility/crypto folder
aentinger Mar 30, 2020
2eca3fa
Extract functionality for reading device id from crypto chip from beg…
aentinger Mar 30, 2020
8505277
Compress error message in a single line for better readability of the…
aentinger Mar 30, 2020
74128b4
Extract reconstruction of certificate into util class CryptoUtil
aentinger Mar 30, 2020
f439f27
Refactor 'readDeviceId' to have a boolean return value like 'reconstr…
aentinger Mar 30, 2020
3b55be8
Reformatting for better readability
aentinger Mar 30, 2020
5d47880
Turning global variable 'ECCX08Cert' into local member variable '_ecc…
aentinger Mar 30, 2020
1d40d14
Moving ECCX08TLSConfig into examples/utility/Provisioning since it's …
aentinger Mar 30, 2020
aa74cf9
Adding comment based visual separators between the various sections o…
aentinger Mar 30, 2020
334ebe9
Reformatting class for better readability (and adding comments to fur…
aentinger Mar 30, 2020
cd3b1fc
Moving constant 'TIMEOUT_FOR_LASTVALUES_SYNC' into class 'ArduinoIoTC…
aentinger Mar 30, 2020
98fb05f
Removing writeStdout/writeProperties/writeShadowOut from being pure v…
aentinger Mar 30, 2020
4991925
Moving protected functions to be private since there is no need for t…
aentinger Mar 30, 2020
740c1be
Removing definition of 'mqttReconnect' since there is not even an imp…
aentinger Mar 30, 2020
5631899
Move initialisation/configuration code for MQTT client from func mqtt…
aentinger Mar 30, 2020
3b28cc2
Refector topic string creation into small inline methods
aentinger Mar 30, 2020
e7840da
Refactoring writeProperties/writeStdout/writeShadowOut into a single …
aentinger Mar 31, 2020
8701e53
Turning _thing_id into a private member variable
aentinger Mar 31, 2020
1a4632f
Turning _deice_id into a private member variable with setters/getters
aentinger Mar 31, 2020
89917bd
Deleting unused typedef for func ptr 'CallbackFunc'
aentinger Mar 31, 2020
a38c99c
Moving '_lastSyncRequestTickTime' into derived class 'ArduinoIoTCloud…
aentinger Mar 31, 2020
c3e047b
Moving '_syncStatus' into derived class 'ArduinoIoTCloudTCP' since it…
aentinger Mar 31, 2020
a2988fb
Renaming member variable 'Thing' to '_thing' to be overall consitent …
aentinger Mar 31, 2020
bf33c18
Fixing wrong multiple-inclusion-protection
aentinger Mar 31, 2020
3b10401
Adjusting include paths after fixing wrong include-guard
aentinger Mar 31, 2020
59642e9
Since the cloud event callback argument is never used the void * para…
aentinger Mar 31, 2020
90eec00
Turning cloud event callback func pointers to be private
aentinger Mar 31, 2020
2ec56e6
Adding virtual/override keywords and missing ctors where necessary
aentinger Mar 31, 2020
39cd442
Deleting non-relevant inclusion of RTCZero
aentinger Mar 31, 2020
4d8c0cf
Moving member variable _connection up into base class ArduinoIoTCloud…
aentinger Mar 31, 2020
7c58104
Moving 'writeProperties' to be a protected member function
aentinger Mar 31, 2020
0c1955b
Moving constant DEFAULT_CBOR_LORA_MSG_SIZE into source file since the…
aentinger Mar 31, 2020
ab632f5
Adding missing inline/const keywords where necessary
aentinger Mar 31, 2020
189c99a
Turn member function 'connectionCheck' to be private, there is no nee…
aentinger Mar 31, 2020
a4acad9
Move constant TIMEOUT_FOR_LASTVALUES_SYNC within module since its not…
aentinger Mar 31, 2020
3c21531
Turning public constant MQTT_TRANSMIT_BUFFER_SIZE into private consta…
aentinger Mar 31, 2020
2396468
Simplify printing of state changes
aentinger Apr 1, 2020
9a3b4b3
Rewriting connection state machine for better readability
aentinger Apr 1, 2020
04a7cd2
Extracting calling of callback functions into state transition detect…
aentinger Apr 1, 2020
3ce80fd
Adding method checkPhyConnection which takes over checking the connec…
aentinger Apr 1, 2020
0dbffd7
Rename connectionCheck to checkCloudConnection
aentinger Apr 1, 2020
45a2847
Extracting function checkPhyConnection into base class ArduinoIoTClou…
aentinger Apr 1, 2020
993dddb
Implementing state transition logic which simplifies the specific sta…
aentinger Apr 1, 2020
cb3eeb3
Restructuring state logic for better readabiltiy
aentinger Apr 1, 2020
05d299d
LoRa based boards to not establish a direct connection to the cloud s…
aentinger Apr 1, 2020
4d20c73
There is no device id for MKR WAN boards at this point
aentinger Apr 1, 2020
3f189bf
Reodering states to be more consistent with state changes how they oc…
aentinger Apr 1, 2020
cd4b745
Eliminate function to check connection to the cloud since we simply c…
aentinger Apr 1, 2020
9b53a41
Renaming _iotStatus to _iot_status to have consistent variable naming…
aentinger Apr 1, 2020
ef5657d
Unifying brace style within all files
aentinger Apr 1, 2020
01bb11d
Formatting sync logic for better readability
aentinger Apr 1, 2020
72aca14
Remove ifdef which is no longer necessary because the file is no long…
aentinger Apr 6, 2020
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
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,6 @@
#ifndef _ECCX08_TLS_CONFIG_H_
#define _ECCX08_TLS_CONFIG_H_

#include <ArduinoIoTCloud_Defines.h>

#ifdef BOARD_HAS_ECCX08

const byte DEFAULT_ECCX08_TLS_CONFIG[128] = {
// Read only - start
// SN[0:3]
Expand Down Expand Up @@ -106,6 +102,4 @@ const byte DEFAULT_ECCX08_TLS_CONFIG[128] = {
0x1C, 0x00
};

#endif /* BOARD_HAS_ECCX08 */

#endif /* _ECCX08_TLS_CONFIG_H_ */
5 changes: 3 additions & 2 deletions examples/utility/Provisioning/Provisioning.ino
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#include <ArduinoIoTCloud.h>
#include <utility/ECCX08Cert.h>
#include <utility/ECCX08TLSConfig.h>
#include "ECCX08TLSConfig.h"

#include <ArduinoBearSSL.h>
#include <ArduinoECCX08.h>
Expand All @@ -11,6 +10,8 @@ const int compressedCertSlot = 10;
const int serialNumberAndAuthorityKeyIdentifierSlot = 11;
const int deviceIdSlot = 12;

ECCX08CertClass ECCX08Cert;

void setup() {
Serial.begin(9600);
while (!Serial);
Expand Down
119 changes: 84 additions & 35 deletions src/ArduinoIoTCloud.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,28 @@
a commercial license, send an email to [email protected].
*/

/******************************************************************************
* INCLUDE
******************************************************************************/

#include <ArduinoIoTCloud.h>

void ArduinoIoTCloudClass::addPropertyReal(ArduinoCloudProperty& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(ArduinoCloudProperty & property)) {
/******************************************************************************
* PUBLIC MEMBER FUNCTIONS
******************************************************************************/

void ArduinoIoTCloudClass::addCallback(ArduinoIoTCloudEvent const event, OnCloudEventCallback callback)
{
_cloud_event_callback[static_cast<size_t>(event)] = callback;
}

void ArduinoIoTCloudClass::addPropertyReal(ArduinoCloudProperty& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(ArduinoCloudProperty & property))
{
addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn);
}

void ArduinoIoTCloudClass::addPropertyReal(ArduinoCloudProperty& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(ArduinoCloudProperty & property)) {
void ArduinoIoTCloudClass::addPropertyReal(ArduinoCloudProperty& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(ArduinoCloudProperty & property))
{
Permission permission = Permission::ReadWrite;
if (permission_type == READ) {
permission = Permission::Read;
Expand All @@ -32,102 +47,136 @@ void ArduinoIoTCloudClass::addPropertyReal(ArduinoCloudProperty& property, Strin
}

if (seconds == ON_CHANGE) {
Thing.addPropertyReal(property, name, permission, tag).publishOnChange(minDelta, DEFAULT_MIN_TIME_BETWEEN_UPDATES_MILLIS).onUpdate(fn).onSync(synFn);
_thing.addPropertyReal(property, name, permission, tag).publishOnChange(minDelta, DEFAULT_MIN_TIME_BETWEEN_UPDATES_MILLIS).onUpdate(fn).onSync(synFn);
} else {
Thing.addPropertyReal(property, name, permission, tag).publishEvery(seconds).onUpdate(fn).onSync(synFn);
_thing.addPropertyReal(property, name, permission, tag).publishEvery(seconds).onUpdate(fn).onSync(synFn);
}
}

void ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(ArduinoCloudProperty & property)) {
void ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(ArduinoCloudProperty & property))
{
addPropertyReal(property, name, -1, permission_type, seconds, fn, minDelta, synFn);
}

void ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(ArduinoCloudProperty & property)) {
void ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, int tag, permissionType permission_type, long seconds, void(*fn)(void), float minDelta, void(*synFn)(ArduinoCloudProperty & property))
{
ArduinoCloudProperty* p = new CloudWrapperBool(property);
addPropertyReal(*p, name, tag, permission_type, seconds, fn, minDelta, synFn);
}
ArduinoCloudProperty& ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, Permission const permission) {

ArduinoCloudProperty& ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, Permission const permission)
{
return addPropertyReal(property, name, -1, permission);
}
ArduinoCloudProperty& ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, int tag, Permission const permission) {

ArduinoCloudProperty& ArduinoIoTCloudClass::addPropertyReal(bool& property, String name, int tag, Permission const permission)
{
ArduinoCloudProperty* p = new CloudWrapperBool(property);
return Thing.addPropertyReal(*p, name, permission, tag);
return _thing.addPropertyReal(*p, name, permission, tag);
}

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

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

ArduinoCloudProperty& ArduinoIoTCloudClass::addPropertyReal(float& property, String name, int tag, Permission const permission) {
ArduinoCloudProperty& ArduinoIoTCloudClass::addPropertyReal(float& property, String name, int tag, Permission const permission)
{
ArduinoCloudProperty* p = new CloudWrapperFloat(property);
return Thing.addPropertyReal(*p, name, permission, tag);
return _thing.addPropertyReal(*p, name, permission, tag);
}

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

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

ArduinoCloudProperty& ArduinoIoTCloudClass::addPropertyReal(int& property, String name, int tag, Permission const permission) {
ArduinoCloudProperty& ArduinoIoTCloudClass::addPropertyReal(int& property, String name, int tag, Permission const permission)
{
ArduinoCloudProperty* p = new CloudWrapperInt(property);
return Thing.addPropertyReal(*p, name, permission, tag);
return _thing.addPropertyReal(*p, name, permission, tag);
}

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

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

ArduinoCloudProperty& ArduinoIoTCloudClass::addPropertyReal(String& property, String name, int tag, Permission const permission) {
ArduinoCloudProperty& ArduinoIoTCloudClass::addPropertyReal(String& property, String name, int tag, Permission const permission)
{
ArduinoCloudProperty* p = new CloudWrapperString(property);
return Thing.addPropertyReal(*p, name, permission, tag);
return _thing.addPropertyReal(*p, name, permission, tag);
}

void ArduinoIoTCloudClass::addCallback(ArduinoIoTCloudEvent const event, OnCloudEventCallback callback) {
switch (event) {
case ArduinoIoTCloudEvent::SYNC: _on_sync_event_callback = callback; break;
case ArduinoIoTCloudEvent::CONNECT: _on_connect_event_callback = callback; break;
case ArduinoIoTCloudEvent::DISCONNECT: _on_disconnect_event_callback = callback; break;
/******************************************************************************
* PROTECTED MEMBER FUNCTIONS
******************************************************************************/

NetworkConnectionState ArduinoIoTCloudClass::checkPhyConnection()
{
NetworkConnectionState const connect_state = _connection->check();

if (_connection->check() != NetworkConnectionState::CONNECTED)
{
if (_iot_status == ArduinoIoTConnectionStatus::CONNECTED)
{
disconnect();
}
}
};

void ArduinoIoTCloudClass::execCloudEventCallback(OnCloudEventCallback& callback, void* callback_arg) {
return connect_state;
}

void ArduinoIoTCloudClass::execCloudEventCallback(ArduinoIoTCloudEvent const event)
{
OnCloudEventCallback callback = _cloud_event_callback[static_cast<size_t>(event)];
if (callback) {
(*callback)(callback_arg);
(*callback)();
}
}
void ArduinoIoTCloudClass::printConnectionStatus(ArduinoIoTConnectionStatus status) {
switch (status) {

void ArduinoIoTCloudClass::printConnectionStatus(ArduinoIoTConnectionStatus status)
{
switch (status)
{
case ArduinoIoTConnectionStatus::IDLE: Debug.print(DBG_INFO, "Arduino IoT Cloud Connection status: IDLE"); break;
case ArduinoIoTConnectionStatus::ERROR: Debug.print(DBG_ERROR, "Arduino IoT Cloud Connection status: ERROR"); break;
case ArduinoIoTConnectionStatus::CONNECTING: Debug.print(DBG_INFO, "Arduino IoT Cloud Connection status: CONNECTING"); break;
case ArduinoIoTConnectionStatus::RECONNECTING: Debug.print(DBG_INFO, "Arduino IoT Cloud Connection status: RECONNECTING"); break;
case ArduinoIoTConnectionStatus::CONNECTED: Debug.print(DBG_INFO, "Arduino IoT Cloud Connection status: CONNECTED"); break;
case ArduinoIoTConnectionStatus::DISCONNECTED: Debug.print(DBG_ERROR, "Arduino IoT Cloud Connection status: DISCONNECTED"); break;
}
}
}
Loading