diff options
| author | Serhii Kostiuk <serhii.o.kostiuk@globallogic.com> | 2020-07-03 22:03:53 +0300 | 
|---|---|---|
| committer | Serhii Kostiuk <serhii.o.kostiuk@globallogic.com> | 2020-07-03 22:03:53 +0300 | 
| commit | 075c19d664719808164a5c4ea5e5a3525fcb4702 (patch) | |
| tree | cc2c4b5f239d9c2023d1b9423cee3c975bceaa70 /src | |
| parent | d19829b7e9cdd3c7e3d209628044ab62cd46b907 (diff) | |
| download | libmts-io-075c19d664719808164a5c4ea5e5a3525fcb4702.tar.gz libmts-io-075c19d664719808164a5c4ea5e5a3525fcb4702.tar.bz2 libmts-io-075c19d664719808164a5c4ea5e5a3525fcb4702.zip | |
Quectel Delta Radio Firmware Upgrade support - libmts-io implementation
Cleanup for the printouts and status messages.
Diffstat (limited to 'src')
| -rw-r--r-- | src/MTS_IO_QuectelRadio.cpp | 52 | 
1 files changed, 38 insertions, 14 deletions
| diff --git a/src/MTS_IO_QuectelRadio.cpp b/src/MTS_IO_QuectelRadio.cpp index cbc2cfb..03593a7 100644 --- a/src/MTS_IO_QuectelRadio.cpp +++ b/src/MTS_IO_QuectelRadio.cpp @@ -549,9 +549,12 @@ ICellularRadio::CODE QuectelRadio::fumoLocalInject(int fd, ICellularRadio::Updat      bool bIsFilePresent = false;      do { +        callNextStep(stepCb, "FUMO Info: downloading the firmware"); +          rc = checkFile(bIsFilePresent, VALUE_MTS_DELTA_NAME);          if (rc != SUCCESS) { -            printError("Failed to check if the delta file was already uploaded."); +            printError("Failed to check if the delta file was already download."); +            callNextStep(stepCb, "FUMO Error: failed to download the firmware file");              break;          } @@ -561,15 +564,19 @@ ICellularRadio::CODE QuectelRadio::fumoLocalInject(int fd, ICellularRadio::Updat          if (rc != SUCCESS) {              printError("Failed to remove the previous delta file."); +            callNextStep(stepCb, "FUMO Error: failed to download the firmware file");              break;          }          rc = uploadFile(fd, VALUE_MTS_DELTA_NAME, stepCb);          if (rc != SUCCESS) { -            printError("Failed to upload the delta file."); +            printError("Failed to inject the delta file."); +            callNextStep(stepCb, "FUMO Error: failed to download the firmware file");              break;          } +        callNextStep(stepCb, "FUMO Info: firmware downloaded successfully"); +      } while (false);      return rc; @@ -592,6 +599,7 @@ ICellularRadio::CODE QuectelRadio::fumoLocalApply(ICellularRadio::UpdateCb& step      rc = sendBasicCommand(sCmd, 1000);      if (rc != SUCCESS) { +        printError("FUMO failed, OK not received from the radio");          callNextStep(stepCb, "FUMO Error: failed to apply the firmware");          return rc;      } @@ -611,29 +619,44 @@ ICellularRadio::CODE QuectelRadio::fumoLocalApply(ICellularRadio::UpdateCb& step          // It's now detached. Try to reconnect          if (!resetConnection(duAttachTimeout)) {              printError("Can't connect to the radio in %d ms", (duAttachTimeout)); - -            callNextStep(stepCb, "FUMO error: failed to connect to the radio in recovery mode"); +            callNextStep(stepCb, "FUMO Error: unable to obtain radio after reset");              break;          }          // It's now back on the bus. Wait for the URC messages. +        printInfo("Applying the radio firmware"); +        callNextStep(stepCb, "FUMO Info: applying the radio firmware");          rc = fumoWaitUpgradeFinished(stepCb); +          if (rc == ERROR) {              // unrecoverable error +            callNextStep(stepCb, "FUMO Error: failed to apply the firmware, consider radio reset");              break;          }          if (rc != SUCCESS) {              // attempt failed, radio reboots and starts its next attempt +            printError("Failed to apply the firmware, attempts left: %d", (dMaxAttempts - i - 1)); +            callNextStep(stepCb, "FUMO Error: failed to apply the firmware");              continue;          } -        // attempt finished +        // Wait for the radio to finish update and reboot +        printTrace("Waiting for the radio to come up"); +        callNextStep(stepCb, "FUMO Info: waiting for the radio to enter normal mode"); + +        rc = fumoWaitNewFirmware(stepCb);          break;      } -    // Wait for the radio to finish update and reboot -    rc = fumoWaitNewFirmware(stepCb); +    if (rc == SUCCESS) { +        printInfo("Radio firmware applied successfully"); +        callNextStep(stepCb, "FUMO done: radio firmware applied successfully"); +    } else { +        printError("Radio firmware has not been updated"); +        callNextStep(stepCb, "FUMO error: radio firmware has not been updated"); +    } +      return rc;  } @@ -1015,7 +1038,7 @@ ICellularRadio::CODE QuectelRadio::fumoWaitUpgradeFinished(ICellularRadio::Updat      const std::string sFotaUrcEnd = "\"END\"";      const std::vector<std::string> vFotaBailStrings{ sFotaUrcPrefix }; -    CODE rc = ERROR; +    CODE rc = FAILURE;      std::string sResponse;      while (true) {  // breaks on "FOTA","END" @@ -1025,6 +1048,7 @@ ICellularRadio::CODE QuectelRadio::fumoWaitUpgradeFinished(ICellularRadio::Updat          if (sResponse.find(sFotaUrcPrefix) == std::string::npos) {              printError("No URC messages from the radio in %d ms", duUrcTimeout);              callNextStep(stepCb, "FUMO error: timeout, radio is not responding"); +            rc = ERROR;              break;          } @@ -1041,7 +1065,7 @@ ICellularRadio::CODE QuectelRadio::fumoWaitUpgradeFinished(ICellularRadio::Updat                  break;              }              // attempt failed, the radio attempts to recover -            rc = FAILURE; +            callNextStep(stepCb, "FUMO Error: radio returned error code " + sCode);              break;          } else if (sStage == sFotaUrcStart) {              printTrace("Got FOTA START message"); @@ -1049,6 +1073,7 @@ ICellularRadio::CODE QuectelRadio::fumoWaitUpgradeFinished(ICellularRadio::Updat              printTrace("Got FOTA progress message");              const std::string& sPercents = vParts[2];              printInfo("FOTA progress: [%s]", sPercents.c_str()); +            callNextStep(stepCb, "FUMO Info: firmware apply progress " + sPercents);          } else {              printInfo("FOTA unexpected URC code: [%s]", sStage.c_str());          } @@ -1074,6 +1099,7 @@ ICellularRadio::CODE QuectelRadio::fumoWaitNewFirmware(ICellularRadio::UpdateCb&          }  #if 0 +        // TODO: Implement the version check          if (sFirmware == m_sFw && sFirmwareBuild == m_sFwBuild) {              // Have the same firmware. The radio resets several time              // before the firmware is actually get upgraded. So keep polling. @@ -1089,11 +1115,9 @@ ICellularRadio::CODE QuectelRadio::fumoWaitNewFirmware(ICellularRadio::UpdateCb&      }      oTimer.stop(); -    if (rc == SUCCESS) { -        callNextStep(stepCb, "FUMO done: radio firmware applied successfully"); -    } -    else { -        callNextStep(stepCb, "FUMO error: radio firmware has not been updated"); +    if (rc != SUCCESS) { +        printError("Radio is not responding"); +        callNextStep(stepCb, "FUMO Error: unable to obtain radio after reset");      }      return rc; | 
