@@ -123,37 +123,34 @@ int ArduinoIoTCloudLPWAN::writeProperties(const byte data[], int length) {
123123
124124ArduinoIoTConnectionStatus ArduinoIoTCloudLPWAN::checkCloudConnection ()
125125{
126+ ArduinoIoTConnectionStatus next_iot_status = _iotStatus;
127+
126128 switch (_iotStatus) {
127129 case ArduinoIoTConnectionStatus::IDLE: {
128- _iotStatus = ArduinoIoTConnectionStatus::CONNECTING;
129- printConnectionStatus (_iotStatus);
130+ next_iot_status = ArduinoIoTConnectionStatus::CONNECTING;
130131 }
131132 break ;
132133 case ArduinoIoTConnectionStatus::ERROR: {
133- _iotStatus = ArduinoIoTConnectionStatus::RECONNECTING;
134- printConnectionStatus (_iotStatus);
134+ next_iot_status = ArduinoIoTConnectionStatus::RECONNECTING;
135135 }
136136 break ;
137137 case ArduinoIoTConnectionStatus::CONNECTED: {
138138 if (_connection->getStatus () != NetworkConnectionState::CONNECTED) {
139- _iotStatus = ArduinoIoTConnectionStatus::DISCONNECTED;
140- printConnectionStatus (_iotStatus);
141- execCloudEventCallback (ArduinoIoTCloudEvent::DISCONNECT);
139+ next_iot_status = ArduinoIoTConnectionStatus::DISCONNECTED;
142140 }
143141 }
144142 break ;
145143 case ArduinoIoTConnectionStatus::DISCONNECTED: {
146- _iotStatus = ArduinoIoTConnectionStatus::RECONNECTING;
147- printConnectionStatus (_iotStatus);
144+ next_iot_status = ArduinoIoTConnectionStatus::RECONNECTING;
148145 }
149146 break ;
150147 case ArduinoIoTConnectionStatus::RECONNECTING: {
151148 int const ret_code = connect ();
152149 Debug.print (DBG_INFO, " ArduinoCloud.reconnect()" );
153150 if (ret_code == 1 ) {
154- _iotStatus = ArduinoIoTConnectionStatus::IDLE;
151+ next_iot_status = ArduinoIoTConnectionStatus::IDLE;
155152 } else {
156- _iotStatus = ArduinoIoTConnectionStatus::ERROR;
153+ next_iot_status = ArduinoIoTConnectionStatus::ERROR;
157154 }
158155
159156 }
@@ -162,15 +159,21 @@ ArduinoIoTConnectionStatus ArduinoIoTCloudLPWAN::checkCloudConnection()
162159 NetworkConnectionState net_status = _connection->getStatus ();
163160 Debug.print (DBG_VERBOSE, " ArduinoCloud.connect(): %d" , net_status);
164161 if (net_status == NetworkConnectionState::CONNECTED) {
165- _iotStatus = ArduinoIoTConnectionStatus::CONNECTED;
166- printConnectionStatus (_iotStatus);
167- execCloudEventCallback (ArduinoIoTCloudEvent::CONNECT);
162+ next_iot_status = ArduinoIoTConnectionStatus::CONNECTED;
168163 }
169164
170165 }
171166 break ;
172167 }
173168
169+ if (next_iot_status != _iotStatus)
170+ {
171+ printConnectionStatus (next_iot_status);
172+ if (next_iot_status == ArduinoIoTConnectionStatus::DISCONNECTED) execCloudEventCallback (ArduinoIoTCloudEvent::DISCONNECT);
173+ else if (next_iot_status == ArduinoIoTConnectionStatus::CONNECTED) execCloudEventCallback (ArduinoIoTCloudEvent::CONNECT);
174+ _iotStatus = next_iot_status;
175+ }
176+
174177 return _iotStatus;
175178}
176179
0 commit comments