Skip to content

Commit 9e1c63a

Browse files
authored
Merge pull request #201 from arduino-libraries/reset-ota-error
Reset OTA error before new OTA download
2 parents 8de1a10 + 293f741 commit 9e1c63a

File tree

2 files changed

+38
-34
lines changed

2 files changed

+38
-34
lines changed

src/ArduinoIoTCloudTCP.cpp

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ int ArduinoIoTCloudTCP::begin(String brokerAddress, uint16_t brokerPort)
141141
addPropertyReal(_ota_error, "OTA_ERROR", Permission::Read);
142142
addPropertyReal(_ota_img_sha256, "OTA_SHA256", Permission::Read);
143143
addPropertyReal(_ota_url, "OTA_URL", Permission::ReadWrite).onSync(DEVICE_WINS);
144-
addPropertyReal(_ota_req, "OTA_REQ", Permission::ReadWrite).onSync(DEVICE_WINS).onUpdate(ArduinoIoTCloudTCP::on_OTA_REQ_Update);
144+
addPropertyReal(_ota_req, "OTA_REQ", Permission::ReadWrite).onSync(DEVICE_WINS);
145145
#endif /* OTA_ENABLED */
146146

147147
#if OTA_STORAGE_SNU
@@ -301,6 +301,23 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_Connected()
301301
*/
302302
sendPropertiesToCloud();
303303

304+
#if OTA_ENABLED
305+
/* Request a OTA download if the hidden property
306+
* OTA request has been set.
307+
*/
308+
if (_ota_req)
309+
{
310+
/* Clear the error flag. */
311+
_ota_error = static_cast<int>(OTAError::None);
312+
/* Transmit the cleared error flag to the cloud. */
313+
sendPropertiesToCloud();
314+
/* Clear the request flag. */
315+
_ota_req = false;
316+
/* Call member function to handle OTA request. */
317+
onOTARequest();
318+
}
319+
#endif /* OTA_ENABLED */
320+
304321
return State::Connected;
305322
}
306323
}
@@ -374,48 +391,36 @@ int ArduinoIoTCloudTCP::write(String const topic, byte const data[], int const l
374391
}
375392

376393
#if OTA_ENABLED
377-
void ArduinoIoTCloudTCP::on_OTA_REQ_Update()
378-
{
379-
ArduinoCloud.onOTARequest();
380-
}
381-
382394
void ArduinoIoTCloudTCP::onOTARequest()
383395
{
384-
DBG_VERBOSE(F("ArduinoIoTCloudTCP::%s _ota_req = %s"), __FUNCTION__, _ota_req ? "true" : "false");
385396
DBG_VERBOSE(F("ArduinoIoTCloudTCP::%s _ota_url = %s"), __FUNCTION__, _ota_url.c_str());
386397

387-
if (_ota_req)
388-
{
389-
/* Clear the request flag. */
390-
_ota_req = false;
391-
392-
/* Status flag to prevent the reset from being executed
393-
* when HTTPS download is not supported.
394-
*/
395-
bool ota_download_success = false;
398+
/* Status flag to prevent the reset from being executed
399+
* when HTTPS download is not supported.
400+
*/
401+
bool ota_download_success = false;
396402

397403
#if OTA_STORAGE_SNU
398-
/* Just to be safe delete any remains from previous updates. */
399-
WiFiStorage.remove("/fs/UPDATE.BIN.LZSS");
400-
WiFiStorage.remove("/fs/UPDATE.BIN.LZSS.TMP");
404+
/* Just to be safe delete any remains from previous updates. */
405+
WiFiStorage.remove("/fs/UPDATE.BIN.LZSS");
406+
WiFiStorage.remove("/fs/UPDATE.BIN.LZSS.TMP");
401407

402-
/* Trigger direct download to nina module. */
403-
uint8_t nina_ota_err_code = 0;
404-
if (!WiFiStorage.downloadOTA(_ota_url.c_str(), &nina_ota_err_code))
405-
{
406-
DBG_ERROR(F("ArduinoIoTCloudTCP::%s error download to nina: %d"), __FUNCTION__, nina_ota_err_code);
407-
_ota_error = static_cast<int>(OTAError::DownloadFailed);
408-
return;
409-
}
408+
/* Trigger direct download to nina module. */
409+
uint8_t nina_ota_err_code = 0;
410+
if (!WiFiStorage.downloadOTA(_ota_url.c_str(), &nina_ota_err_code))
411+
{
412+
DBG_ERROR(F("ArduinoIoTCloudTCP::%s error download to nina: %d"), __FUNCTION__, nina_ota_err_code);
413+
_ota_error = static_cast<int>(OTAError::DownloadFailed);
414+
return;
415+
}
410416

411-
/* The download was a success. */
412-
ota_download_success = true;
417+
/* The download was a success. */
418+
ota_download_success = true;
413419
#endif /* OTA_STORAGE_SNU */
414420

415-
/* Perform the reset to reboot to SxU. */
416-
if (ota_download_success)
417-
NVIC_SystemReset();
418-
}
421+
/* Perform the reset to reboot to SxU. */
422+
if (ota_download_success)
423+
NVIC_SystemReset();
419424
}
420425
#endif
421426

src/ArduinoIoTCloudTCP.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,6 @@ class ArduinoIoTCloudTCP: public ArduinoIoTCloudClass
140140
int write(String const topic, byte const data[], int const length);
141141

142142
#if OTA_ENABLED
143-
static void on_OTA_REQ_Update();
144143
void onOTARequest();
145144
#endif
146145
};

0 commit comments

Comments
 (0)