Skip to content

Commit 0cab7a7

Browse files
committed
split lib for TCP and Lora connections
1 parent 504d8a1 commit 0cab7a7

8 files changed

+939
-114
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
*~
44
.vscode
55
*.orig
6+
.vs

src/ArduinoIoTCloud.h

Lines changed: 70 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -20,41 +20,26 @@
2020

2121
#include <ArduinoIoTCloud_Defines.h>
2222

23-
#ifdef BOARD_HAS_ECCX08
24-
#include <ArduinoBearSSL.h>
25-
#elif defined(BOARD_ESP)
26-
#include <WiFiClientSecure.h>
27-
#endif
23+
2824

2925
#include <ArduinoCloudThing.h>
30-
#include <ArduinoMqttClient.h>
26+
3127
#include <Arduino_DebugUtils.h>
32-
#include <Arduino_ConnectionHandler.h>
33-
#include "types/CloudWrapperBool.h"
28+
#include "types/CloudWrapperBool.h"
3429
#include "types/CloudWrapperFloat.h"
3530
#include "types/CloudWrapperInt.h"
3631
#include "types/CloudWrapperString.h"
37-
#include "utility/NTPUtils.h"
32+
3833

3934
#include "CloudSerial.h"
4035

41-
static char const DEFAULT_BROKER_ADDRESS_SECURE_AUTH[] = "mqtts-sa.iot.arduino.cc";
42-
static uint16_t const DEFAULT_BROKER_PORT_SECURE_AUTH = 8883;
43-
static char const DEFAULT_BROKER_ADDRESS_USER_PASS_AUTH[] = "mqtts-up.iot.arduino.cc";
44-
static uint16_t const DEFAULT_BROKER_PORT_USER_PASS_AUTH = 8884;
4536

4637
typedef enum {
4738
READ = 0x01,
4839
WRITE = 0x02,
4940
READWRITE = READ | WRITE
5041
} permissionType;
5142

52-
// Declaration of the struct for the mqtt connection options
53-
typedef struct {
54-
int keepAlive;
55-
bool cleanSession;
56-
int timeout;
57-
} mqttConnectionOptions;
5843

5944
enum class ArduinoIoTConnectionStatus {
6045
IDLE,
@@ -78,59 +63,40 @@ enum class ArduinoIoTCloudEvent {
7863
typedef void (*CallbackFunc)(void);
7964
typedef void (*OnCloudEventCallback)(void * /* arg */);
8065

66+
/*************************************************
67+
Pure Virtual Class Definition
68+
**************************************************/
8169
class ArduinoIoTCloudClass {
8270

8371
public:
84-
ArduinoIoTCloudClass();
85-
~ArduinoIoTCloudClass();
86-
87-
#ifdef BOARD_HAS_ECCX08
88-
int begin(ConnectionHandler &connection, String brokerAddress = DEFAULT_BROKER_ADDRESS_SECURE_AUTH, uint16_t brokerPort = DEFAULT_BROKER_PORT_SECURE_AUTH);
89-
#else
90-
int begin(ConnectionHandler &connection, String brokerAddress = DEFAULT_BROKER_ADDRESS_USER_PASS_AUTH, uint16_t brokerPort = DEFAULT_BROKER_PORT_USER_PASS_AUTH);
91-
#endif
92-
int begin(Client &net, String brokerAddress = DEFAULT_BROKER_ADDRESS_SECURE_AUTH, uint16_t brokerPort = DEFAULT_BROKER_PORT_SECURE_AUTH);
93-
// Class constant declaration
94-
static const int MQTT_TRANSMIT_BUFFER_SIZE = 256;
95-
static const int TIMEOUT_FOR_LASTVALUES_SYNC = 10000;
96-
97-
int connect();
98-
bool disconnect();
99-
100-
inline void update() {
101-
update(NULL);
102-
}
103-
inline void update(int const reconnectionMaxRetries, int const reconnectionTimeoutMs) __attribute__((deprecated)) {
104-
update(NULL);
105-
}
106-
void update(CallbackFunc onSyncCompleteCallback) __attribute__((deprecated)); /* Attention: Function is deprecated - use 'addCallback(ArduinoIoTCloudConnectionEvent::SYNC, &onSync)' for adding a onSyncCallback instead */
72+
static const int TIMEOUT_FOR_LASTVALUES_SYNC = 10000;
73+
/*Public Virtual Functions*/
74+
virtual int connect() = 0;
75+
virtual bool disconnect() = 0;
10776

108-
int connected();
109-
// Clean up existing Mqtt connection, create a new one and initialize it
110-
int reconnect(Client& /* net */);
77+
virtual void update() = 0;
78+
virtual void update(int const reconnectionMaxRetries, int const reconnectionTimeoutMs) __attribute__((deprecated)) = 0;
79+
virtual void update(CallbackFunc onSyncCompleteCallback) __attribute__((deprecated)) = 0; /* Attention: Function is deprecated - use 'addCallback(ArduinoIoTCloudConnectionEvent::SYNC, &onSync)' for adding a onSyncCallback instead */
80+
81+
virtual int connected() = 0;
82+
83+
virtual void connectionCheck() = 0;
84+
85+
virtual void printDebugInfo() = 0;
11186

11287
inline void setThingId(String const thing_id) {
11388
_thing_id = thing_id;
11489
};
115-
#ifdef BOARD_ESP
116-
inline void setBoardId(String const device_id) {
117-
_device_id = device_id;
118-
}
119-
inline void setSecretDeviceKey(String const password) {
120-
_password = password;
121-
}
122-
#endif
90+
12391
inline String getThingId() const {
12492
return _thing_id;
12593
};
126-
inline String getDeviceId() const {
127-
return _device_id;
128-
};
129-
inline ConnectionHandler * getConnection() {
130-
return _connection;
131-
}
13294

133-
#define addProperty( v, ...) addPropertyReal(v, #v, __VA_ARGS__)
95+
inline String getDeviceId() const {
96+
return _device_id;
97+
};
98+
99+
#define addProperty( v, ...) addPropertyReal(v, #v, __VA_ARGS__)
134100

135101
static unsigned long const DEFAULT_MIN_TIME_BETWEEN_UPDATES_MILLIS = 500; /* Data rate throttled to 2 Hz */
136102

@@ -183,76 +149,68 @@ class ArduinoIoTCloudClass {
183149
return Thing.addPropertyReal(*p, name, permission);
184150
}
185151

186-
void connectionCheck();
187-
String getBrokerAddress() {
188-
return _brokerAddress;
189-
}
190-
uint16_t getBrokerPort() {
191-
return _brokerPort;
192-
}
193-
void printDebugInfo();
194-
void addCallback(ArduinoIoTCloudEvent const event, OnCloudEventCallback callback);
152+
void addCallback(ArduinoIoTCloudEvent const event, OnCloudEventCallback callback) {
153+
switch (event) {
154+
case ArduinoIoTCloudEvent::SYNC: _on_sync_event_callback = callback; break;
155+
case ArduinoIoTCloudEvent::CONNECT: _on_connect_event_callback = callback; break;
156+
case ArduinoIoTCloudEvent::DISCONNECT: _on_disconnect_event_callback = callback; break;
157+
}
158+
};
195159

196160
protected:
197-
friend class CloudSerialClass;
198-
int writeStdout(const byte data[], int length);
199-
int writeProperties(const byte data[], int length);
200-
int writeShadowOut(const byte data[], int length);
201-
202-
// Used to initialize MQTTClient
203-
void mqttClientBegin();
204-
// Function in charge of perform MQTT reconnection, basing on class parameters(retries,and timeout)
205-
bool mqttReconnect(int const maxRetries, int const timeout);
206-
// Used to retrieve last values from _shadowTopicIn
207-
void requestLastValue();
161+
162+
virtual int writeStdout(const byte data[], int length) = 0;
163+
virtual int writeProperties(const byte data[], int length) = 0;
164+
virtual int writeShadowOut(const byte data[], int length) = 0;
165+
166+
167+
208168

209169
ArduinoIoTConnectionStatus getIoTStatus() {
210170
return _iotStatus;
211171
}
212172

213-
private:
214173
ArduinoIoTConnectionStatus _iotStatus = ArduinoIoTConnectionStatus::IDLE;
215-
ConnectionHandler * _connection;
216-
static void onMessage(int length);
217-
void handleMessage(int length);
218-
ArduinoIoTSynchronizationStatus _syncStatus = ArduinoIoTSynchronizationStatus::SYNC_STATUS_SYNCHRONIZED;
174+
219175

220-
void sendPropertiesToCloud();
176+
177+
ArduinoIoTSynchronizationStatus _syncStatus = ArduinoIoTSynchronizationStatus::SYNC_STATUS_SYNCHRONIZED;
221178

222-
String _device_id, _thing_id, _brokerAddress;
223-
uint16_t _brokerPort;
179+
180+
String _device_id, _thing_id;
181+
224182

225183
ArduinoCloudThing Thing;
226-
227-
#ifdef BOARD_HAS_ECCX08
228-
BearSSLClient *_sslClient;
229-
#elif defined(BOARD_ESP)
230-
WiFiClientSecure *_sslClient;
231-
String _password;
232-
#endif
233-
234-
MqttClient *_mqttClient;
184+
235185
int _lastSyncRequestTickTime;
236186

237-
238-
// Class attribute to define MTTQ topics 2 for stdIn/out and 2 for data, in order to avoid getting previous pupblished payload
239-
String _stdinTopic;
240-
String _stdoutTopic;
241-
String _shadowTopicOut;
242-
String _shadowTopicIn;
243-
String _dataTopicOut;
244-
String _dataTopicIn;
245-
String _otaTopic;
246-
Client *_net;
247-
248187
OnCloudEventCallback _on_sync_event_callback,
249188
_on_connect_event_callback,
250189
_on_disconnect_event_callback;
251190

252-
static void execCloudEventCallback(OnCloudEventCallback & callback, void * callback_arg);
253-
static void printConnectionStatus(ArduinoIoTConnectionStatus status);
191+
static void execCloudEventCallback(OnCloudEventCallback & callback, void * callback_arg) {
192+
if (callback) {
193+
(*callback)(callback_arg);
194+
}
195+
}
196+
static void printConnectionStatus(ArduinoIoTConnectionStatus status) {
197+
switch (status) {
198+
case ArduinoIoTConnectionStatus::IDLE: Debug.print(DBG_INFO, "Arduino IoT Cloud Connection status: IDLE"); break;
199+
case ArduinoIoTConnectionStatus::ERROR: Debug.print(DBG_ERROR, "Arduino IoT Cloud Connection status: ERROR"); break;
200+
case ArduinoIoTConnectionStatus::CONNECTING: Debug.print(DBG_INFO, "Arduino IoT Cloud Connection status: CONNECTING"); break;
201+
case ArduinoIoTConnectionStatus::RECONNECTING: Debug.print(DBG_INFO, "Arduino IoT Cloud Connection status: RECONNECTING"); break;
202+
case ArduinoIoTConnectionStatus::CONNECTED: Debug.print(DBG_INFO, "Arduino IoT Cloud Connection status: CONNECTED"); break;
203+
case ArduinoIoTConnectionStatus::DISCONNECTED: Debug.print(DBG_ERROR, "Arduino IoT Cloud Connection status: DISCONNECTED"); break;
204+
}
205+
}
254206
};
255-
256-
extern ArduinoIoTCloudClass ArduinoCloud;
207+
#if defined(ARDUINO_SAMD_MKRGSM1400) || defined(ARDUINO_SAMD_MKRWIFI1010) || \
208+
defined(ARDUINO_SAMD_MKR1000) || defined(ARDUINO_SAMD_NANO_33_IOT)
209+
#include "ArduinoIoTCloudTCP.h"
210+
extern ArduinoIoTCloudTCP ArduinoCloud;
211+
#elif defined(ARDUINO_SAMD_MKR1300) || defined(ARDUINO_SAMD_MKR1310)
212+
//#include "ArduinoIoTCloudLPWAN.h"
213+
//extern ArduinoIoTCloudLPWAN ArduinoCloud;
214+
#endif
257215

258216
#endif

0 commit comments

Comments
 (0)