diff options
Diffstat (limited to 'src/MTS_IO_TelitRadio.cpp')
| -rw-r--r-- | src/MTS_IO_TelitRadio.cpp | 69 | 
1 files changed, 39 insertions, 30 deletions
| diff --git a/src/MTS_IO_TelitRadio.cpp b/src/MTS_IO_TelitRadio.cpp index 52b5664..8d762be 100644 --- a/src/MTS_IO_TelitRadio.cpp +++ b/src/MTS_IO_TelitRadio.cpp @@ -789,7 +789,7 @@ ICellularRadio::CODE TelitRadio::fumoLocalApply(ICellularRadio::UpdateCb& stepCb      std::string sCmd;      FOTA_GROUP group = getFotaGroup(); -    rc = getTelitFirmware(m_sTelitFirmware); +    rc = getVendorFirmware(m_sTelitFirmware);      if (rc != SUCCESS) {          callNextStep(stepCb, "FUMO Error: Failed to obtain current firmware version");          return rc; @@ -938,39 +938,48 @@ ICellularRadio::CODE TelitRadio::abortWrite() {      return sendBasicCommand(CMD_ABORT_UPLOAD, 2000, 0x00);  } -ICellularRadio::CODE TelitRadio::getTelitFirmware(std::string& sFirmware) { -    /* -     * Currently, AT+CGMR command is used to determine the radio firmware version. -     * -     * AT+CGMR -     *   M0F.670006 -     * -     * Perhaps in the future we will use AT#SWPKGV command. -     * -     * AT#SWPKGV -     *   25.20.676-P0F.670690 -     *   M0F.670006 -     *   P0F.670690 -     *   A0F.670006 -     */ - +ICellularRadio::CODE TelitRadio::getVendorFirmware(std::string& sVendorFirmware) {      printTrace("%s| Get Telit-specific firmware version", getName().c_str()); -    sFirmware = ICellularRadio::VALUE_NOT_SUPPORTED; -    std::string sCmd("AT+CGMR"); +    ICellularRadio::CODE rc = FAILURE; +    sVendorFirmware = ICellularRadio::VALUE_NOT_SUPPORTED; +    std::string sFirmware; +    std::string sFirmwareBuild; +    std::string sCmd("AT#SWPKGV");      std::string sResult = sendCommand(sCmd);      size_t pos = sResult.find(ICellularRadio::RSP_OK); -    if (pos == std::string::npos) { -        printWarning("%s| Unable to get firmware from radio using command [%s]", getName().c_str(), sCmd.c_str()); -        return FAILURE; -    } -    sFirmware = MTS::Text::trim(sResult.substr(0, pos)); -    if(sFirmware.size() == 0) { -        printWarning("%s| Unable to get firmware from radio using command [%s]", getName().c_str(), sCmd.c_str()); -        return FAILURE; -    } +    do { -    return SUCCESS; +        if (pos != std::string::npos) { +            // Found +            std::vector<std::string> vLine = MTS::Text::split(sResult, "\r"); +            if(vLine[1].size() == 0) { +                printWarning("%s| Unable to get firmware from radio using command [%s]", getName().c_str(), sCmd.c_str()); +                rc = FAILURE; +            } else { +                sVendorFirmware = MTS::Text::trim(vLine[1]); +                rc = SUCCESS; +            } +            break; +        } + +        // Not Found. Then we will use "AT+CGMR" + "AT#CFVR" +        rc = getFirmware(sFirmware); +        if (rc != SUCCESS){ +            break; +        } + +        rc = getFirmwareBuild(sFirmwareBuild); +        if (rc != SUCCESS){ +            break; +        } + +        sVendorFirmware = sFirmware + "," + sFirmwareBuild; + +    } while (false); + + +    return rc;  }  ICellularRadio::CODE TelitRadio::fumoWaitUpgradeFinished(ICellularRadio::UpdateCb& stepCb) { @@ -1026,7 +1035,7 @@ ICellularRadio::CODE TelitRadio::fumoCheckNewFirmware(ICellularRadio::UpdateCb&      CODE rc = SUCCESS;      std::string sTelitFirmware; -    rc = getTelitFirmware(sTelitFirmware); +    rc = getVendorFirmware(sTelitFirmware);      if (rc != SUCCESS) {          callNextStep(stepCb, "FUMO Error: Failed to obtain current firmware version"); | 
