From 1986b67d54e8e6a3f8176f5b4cb78786ac3ee496 Mon Sep 17 00:00:00 2001 From: Andrii Pientsov Date: Thu, 16 Jul 2020 19:23:40 +0300 Subject: Add vendor firmware version --- src/MTS_IO_CellularRadio.cpp | 5 ++++ src/MTS_IO_ICellularRadio.cpp | 1 + src/MTS_IO_QuectelRadio.cpp | 12 ++++---- src/MTS_IO_TelitRadio.cpp | 69 ++++++++++++++++++++++++------------------- 4 files changed, 51 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/src/MTS_IO_CellularRadio.cpp b/src/MTS_IO_CellularRadio.cpp index c4514e6..19f1b7b 100644 --- a/src/MTS_IO_CellularRadio.cpp +++ b/src/MTS_IO_CellularRadio.cpp @@ -200,6 +200,11 @@ ICellularRadio::CODE CellularRadio::getFirmwareBuild(std::string& sFirmwareBuild return FAILURE; } +ICellularRadio::CODE CellularRadio::getVendorFirmware(std::string& sVendorFirmware) { + sVendorFirmware = ICellularRadio::VALUE_NOT_SUPPORTED; + return FAILURE; +} + ICellularRadio::CODE CellularRadio::getHardware(std::string& sHardware) { printTrace("%s| Get Hardware", m_sName.c_str()); sHardware = ICellularRadio::VALUE_NOT_SUPPORTED; diff --git a/src/MTS_IO_ICellularRadio.cpp b/src/MTS_IO_ICellularRadio.cpp index 4b58189..9dbfad1 100644 --- a/src/MTS_IO_ICellularRadio.cpp +++ b/src/MTS_IO_ICellularRadio.cpp @@ -33,6 +33,7 @@ const char *MTS::IO::ICellularRadio::KEY_MANUFACTURER = "manufacturer"; //!< const char *MTS::IO::ICellularRadio::KEY_HARDWARE = "hardware"; //!< Radio Hardware Version const char *MTS::IO::ICellularRadio::KEY_FIRMWARE = "firmware"; //!< Radio Firmware Version const char *MTS::IO::ICellularRadio::KEY_FIRMWARE_BUILD = "firmwarebuild"; //!< Radio Firmware Build +const char *MTS::IO::ICellularRadio::KEY_VENDOR_FIRMWARE = "vendorfirmware"; //!< Radio Vendor Firmware Version const char *MTS::IO::ICellularRadio::KEY_CARRIER = "carrier"; //!< Cellular Service Provider = Home Network const char *MTS::IO::ICellularRadio::VALUE_CARRIER_VERIZON = "Verizon"; diff --git a/src/MTS_IO_QuectelRadio.cpp b/src/MTS_IO_QuectelRadio.cpp index 2d1ffcd..e32d6e8 100644 --- a/src/MTS_IO_QuectelRadio.cpp +++ b/src/MTS_IO_QuectelRadio.cpp @@ -591,7 +591,7 @@ ICellularRadio::CODE QuectelRadio::fumoLocalApply(ICellularRadio::UpdateCb& step ICellularRadio::CODE rc; std::string sCmd; - rc = getQuectelFirmware(m_sQuectelFirmware); + rc = getVendorFirmware(m_sQuectelFirmware); if (rc != SUCCESS) { callNextStep(stepCb, "FUMO Error: Failed to obtain current firmware version"); return rc; @@ -954,9 +954,9 @@ ICellularRadio::CODE QuectelRadio::checkFile(bool& bIsFilePresent, const std::st return SUCCESS; } -ICellularRadio::CODE QuectelRadio::getQuectelFirmware(std::string& sFirmware) { +ICellularRadio::CODE QuectelRadio::getVendorFirmware(std::string& sVendorFirmware) { printTrace("%s| Get Quectel-specific firmware version", getName().c_str()); - sFirmware = ICellularRadio::VALUE_NOT_SUPPORTED; + sVendorFirmware = ICellularRadio::VALUE_NOT_SUPPORTED; std::string sCmd("AT+QGMR"); std::string sResult = sendCommand(sCmd); size_t pos = sResult.find(ICellularRadio::RSP_OK); @@ -965,8 +965,8 @@ ICellularRadio::CODE QuectelRadio::getQuectelFirmware(std::string& sFirmware) { return FAILURE; } - sFirmware = MTS::Text::trim(sResult.substr(0, pos)); - if(sFirmware.size() == 0) { + sVendorFirmware = MTS::Text::trim(sResult.substr(0, pos)); + if(sVendorFirmware.size() == 0) { printWarning("%s| Unable to get firmware from radio using command [%s]", getName().c_str(), sCmd.c_str()); return FAILURE; } @@ -1053,7 +1053,7 @@ ICellularRadio::CODE QuectelRadio::fumoWaitNewFirmware(ICellularRadio::UpdateCb& MTS::Thread::sleep(10000); - if (getQuectelFirmware(sQuectelFirmware) != SUCCESS) { + if (getVendorFirmware(sQuectelFirmware) != SUCCESS) { // The radio is probably unavailable resetConnection(100); continue; 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 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"); -- cgit v1.2.3 From a05854f5d389f67001b7ecc4cda62c7320433349 Mon Sep 17 00:00:00 2001 From: Andrii Pientsov Date: Fri, 17 Jul 2020 10:03:48 +0300 Subject: Code review --- src/MTS_IO_ME910Radio.cpp | 32 -------------------------------- src/MTS_IO_TelitRadio.cpp | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 34 deletions(-) (limited to 'src') diff --git a/src/MTS_IO_ME910Radio.cpp b/src/MTS_IO_ME910Radio.cpp index 2b181d2..ad3e7ec 100644 --- a/src/MTS_IO_ME910Radio.cpp +++ b/src/MTS_IO_ME910Radio.cpp @@ -33,35 +33,3 @@ ME910Radio::ME910Radio(const std::string& sME910Model, const std::string& sPort) ICellularRadio::CODE ME910Radio::setRxDiversity(const Json::Value& jArgs) { return FAILURE; } - - -ICellularRadio::CODE ME910Radio::getFirmwareBuild(std::string& sFirmwareBuild) { - std::string sCmd("AT#CFVR"); - - std::string sResult = sendCommand(sCmd); - - size_t end = sResult.find(ICellularRadio::RSP_OK); - if (end == std::string::npos) { - printWarning("%s| Unable to get firmware build number [%s]", - getName().c_str(), - sCmd.c_str()); - return FAILURE; - } - - size_t start = sResult.find("#CFVR:"); - if (start == std::string::npos) { - printWarning("%s| Command returned unexpected response [%s]", - getName().c_str(), - sCmd.c_str()); - return FAILURE; - } - - start += sizeof("#CFVR:"); - - sFirmwareBuild = MTS::Text::trim(sResult.substr(start, end-start)); - if(sFirmwareBuild.size() == 0) { - printWarning("%s| Firmware Build Version is empty", getName().c_str()); - return FAILURE; - } - return SUCCESS; -} diff --git a/src/MTS_IO_TelitRadio.cpp b/src/MTS_IO_TelitRadio.cpp index 8d762be..599c71e 100644 --- a/src/MTS_IO_TelitRadio.cpp +++ b/src/MTS_IO_TelitRadio.cpp @@ -51,6 +51,36 @@ bool TelitRadio::resetRadio(uint32_t iTimeoutMillis) { return false; } +ICellularRadio::CODE TelitRadio::getFirmwareBuild(std::string& sFirmwareBuild) { + std::string sCmd("AT#CFVR"); + + std::string sResult = sendCommand(sCmd); + + size_t end = sResult.find(ICellularRadio::RSP_OK); + if (end == std::string::npos) { + printWarning("%s| Unable to get firmware build number [%s]", + getName().c_str(), + sCmd.c_str()); + return FAILURE; + } + + size_t start = sResult.find("#CFVR:"); + if (start == std::string::npos) { + printWarning("%s| Command returned unexpected response [%s]", + getName().c_str(), + sCmd.c_str()); + return FAILURE; + } + + start += sizeof("#CFVR:"); + + sFirmwareBuild = MTS::Text::trim(sResult.substr(start, end-start)); + if(sFirmwareBuild.size() == 0) { + printWarning("%s| Firmware Build Version is empty", getName().c_str()); + return FAILURE; + } + return SUCCESS; +} ICellularRadio::CODE TelitRadio::getModel(std::string& sModel) { printTrace("%s| Get Model", getName().c_str()); @@ -953,11 +983,11 @@ ICellularRadio::CODE TelitRadio::getVendorFirmware(std::string& sVendorFirmware) if (pos != std::string::npos) { // Found std::vector vLine = MTS::Text::split(sResult, "\r"); - if(vLine[1].size() == 0) { + sVendorFirmware = MTS::Text::trim(vLine[1]); + if(sVendorFirmware.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; -- cgit v1.2.3 From 298efe4e17d3665f9ddbb9298a37b563c60de735 Mon Sep 17 00:00:00 2001 From: Andrii Pientsov Date: Fri, 17 Jul 2020 10:42:16 +0300 Subject: Code review --- src/MTS_IO_QuectelRadio.cpp | 40 ++++++++++----------- src/MTS_IO_TelitRadio.cpp | 88 ++++++++++++++++++++++----------------------- 2 files changed, 64 insertions(+), 64 deletions(-) (limited to 'src') diff --git a/src/MTS_IO_QuectelRadio.cpp b/src/MTS_IO_QuectelRadio.cpp index e32d6e8..22fa92f 100644 --- a/src/MTS_IO_QuectelRadio.cpp +++ b/src/MTS_IO_QuectelRadio.cpp @@ -56,6 +56,26 @@ bool QuectelRadio::resetRadio(uint32_t iTimeoutMillis) { return false; } +ICellularRadio::CODE QuectelRadio::getVendorFirmware(std::string& sVendorFirmware) { + printTrace("%s| Get Quectel-specific firmware version", getName().c_str()); + sVendorFirmware = ICellularRadio::VALUE_NOT_SUPPORTED; + std::string sCmd("AT+QGMR"); + 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; + } + + sVendorFirmware = MTS::Text::trim(sResult.substr(0, pos)); + if(sVendorFirmware.size() == 0) { + printWarning("%s| Unable to get firmware from radio using command [%s]", getName().c_str(), sCmd.c_str()); + return FAILURE; + } + + return SUCCESS; +} + ICellularRadio::CODE QuectelRadio::getModel(std::string& sModel) { printTrace("%s| Get Model", getName().c_str()); //Always returns SUCCESS because the model should be m_sName @@ -954,26 +974,6 @@ ICellularRadio::CODE QuectelRadio::checkFile(bool& bIsFilePresent, const std::st return SUCCESS; } -ICellularRadio::CODE QuectelRadio::getVendorFirmware(std::string& sVendorFirmware) { - printTrace("%s| Get Quectel-specific firmware version", getName().c_str()); - sVendorFirmware = ICellularRadio::VALUE_NOT_SUPPORTED; - std::string sCmd("AT+QGMR"); - 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; - } - - sVendorFirmware = MTS::Text::trim(sResult.substr(0, pos)); - if(sVendorFirmware.size() == 0) { - printWarning("%s| Unable to get firmware from radio using command [%s]", getName().c_str(), sCmd.c_str()); - return FAILURE; - } - - return SUCCESS; -} - uint16_t QuectelRadio::getQuectelChecksum(const void* data, size_t nBytes) { auto castData = static_cast(data); uint16_t iChecksum = 0; diff --git a/src/MTS_IO_TelitRadio.cpp b/src/MTS_IO_TelitRadio.cpp index 599c71e..a82004c 100644 --- a/src/MTS_IO_TelitRadio.cpp +++ b/src/MTS_IO_TelitRadio.cpp @@ -82,6 +82,50 @@ ICellularRadio::CODE TelitRadio::getFirmwareBuild(std::string& sFirmwareBuild) { return SUCCESS; } +ICellularRadio::CODE TelitRadio::getVendorFirmware(std::string& sVendorFirmware) { + printTrace("%s| Get Telit-specific firmware version", getName().c_str()); + 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); + + do { + + if (pos != std::string::npos) { + // Found + std::vector vLine = MTS::Text::split(sResult, "\r"); + sVendorFirmware = MTS::Text::trim(vLine[1]); + if(sVendorFirmware.size() == 0) { + printWarning("%s| Unable to get firmware from radio using command [%s]", getName().c_str(), sCmd.c_str()); + rc = FAILURE; + } else { + 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::getModel(std::string& sModel) { printTrace("%s| Get Model", getName().c_str()); //Always returns SUCCESS because the model should be m_sName @@ -968,50 +1012,6 @@ ICellularRadio::CODE TelitRadio::abortWrite() { return sendBasicCommand(CMD_ABORT_UPLOAD, 2000, 0x00); } -ICellularRadio::CODE TelitRadio::getVendorFirmware(std::string& sVendorFirmware) { - printTrace("%s| Get Telit-specific firmware version", getName().c_str()); - 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); - - do { - - if (pos != std::string::npos) { - // Found - std::vector vLine = MTS::Text::split(sResult, "\r"); - sVendorFirmware = MTS::Text::trim(vLine[1]); - if(sVendorFirmware.size() == 0) { - printWarning("%s| Unable to get firmware from radio using command [%s]", getName().c_str(), sCmd.c_str()); - rc = FAILURE; - } else { - 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) { const uint32_t duAttachTimeout = 300000; // wait for 300 seconds for the radio to attach const uint32_t duUrcTimeout = 60 * 1000; // wait for 1 minutes for the next URC message -- cgit v1.2.3