diff options
| author | Jeff Hatch <jhatch@multitech.com> | 2019-08-02 14:44:48 -0500 | 
|---|---|---|
| committer | Jeff Hatch <jhatch@multitech.com> | 2019-08-02 14:44:48 -0500 | 
| commit | 014a0ebbbc3bc249cf04a42cc8abcd4413cfd699 (patch) | |
| tree | 552c99d0135d880aba3dff1c3e5f99e1e9d8f379 /src | |
| parent | f6f7d0e174d2bf5eb4494e2508c17d3d7fbdc4e9 (diff) | |
| download | libmts-io-014a0ebbbc3bc249cf04a42cc8abcd4413cfd699.tar.gz libmts-io-014a0ebbbc3bc249cf04a42cc8abcd4413cfd699.tar.bz2 libmts-io-014a0ebbbc3bc249cf04a42cc8abcd4413cfd699.zip | |
Updates for fwswitch in L4N1 and MNA1 radios
Diffstat (limited to 'src')
| -rw-r--r-- | src/MTS_IO_LE910C4NFRadio.cpp | 89 | ||||
| -rw-r--r-- | src/MTS_IO_ME910C1NARadio.cpp | 88 | 
2 files changed, 177 insertions, 0 deletions
| diff --git a/src/MTS_IO_LE910C4NFRadio.cpp b/src/MTS_IO_LE910C4NFRadio.cpp index 53348f7..e3fdd1f 100644 --- a/src/MTS_IO_LE910C4NFRadio.cpp +++ b/src/MTS_IO_LE910C4NFRadio.cpp @@ -18,6 +18,8 @@   *   */ +#include <mts/MTS_Text.h> +#include <mts/MTS_Logger.h>  #include <mts/MTS_IO_LE910C4NFRadio.h>  using namespace MTS::IO; @@ -30,3 +32,90 @@ LE910C4NFRadio::LE910C4NFRadio(const std::string& sPort)  } +CellularRadio::CODE LE910C4NFRadio::setActiveFirmware(const Json::Value& jArgs) { +    CellularRadio::CODE rc; + +    //    Set command allows enabling a specific firmware image on products +    //    embedding 2 different firmware images: +    // +    //    "AT#FWSWITCH=<image_number>[,<storage_conf>]" +    //    <image_number> - Firmware Image To Be Enabled +    //    0 – Image 1 (Default) +    //    1 – Image 2 +    //    <storage_conf> - Setting Storage Configuration +    //    0 – Save the <image_number> value in RAM +    //    1 – Save the <image_number> value in NVM + +    printTrace("%s| Set Active Firmware Image Number", getName().c_str()); + +    if(!jArgs["fwid"].isString()) { +        return INVALID_ARGS; +    } + +    if (jArgs["fwid"].asString() != "1" && jArgs["fwid"].asString() != "0" && jArgs["fwid"].asString() != "2") { +            return INVALID_ARGS; +    } + +    //  LE910-NA1 and LE910-NA V2 is orderable in single image or dual image (single SKU) +    //  configuration. So issue the test command first to make sure FWSWITCH is a valid command +    rc = sendBasicCommand("AT#FWSWITCH=?"); +    if (rc == ERROR) { +        printTrace("%s| FWSWITCH is not supported", getName().c_str()); +        return NOT_APPLICABLE; +    } +    else if (rc != SUCCESS) { +        return rc; +    } + +    std::string sCmd = "AT#FWSWITCH="; +    sCmd += jArgs["fwid"].asString(); +    sCmd += ",1"; + +    printTrace("%s| Issuing %s command", getName().c_str(), sCmd.c_str()); + +    return sendBasicCommand(sCmd, 5000); +} + +CellularRadio::CODE LE910C4NFRadio::getActiveFirmware(std::string& sFwId) { +    std::string sCmd; +    CellularRadio::CODE rc; +    // +    // Read command reports the current active firmware image: +    // AT#FWSWITCH? +    // #FWSWITCH: 1 +    // +    // OK +    // +    printTrace("%s| Get Active Firmware Image Number", getName().c_str()); + +    //  LE910-NA1 and LE910-NA V2 is orderable in single image or dual image (single SKU) +    //  configuration. So issue the test command first +    sCmd = "AT#FWSWITCH=?"; +    rc = sendBasicCommand(sCmd); +    if (rc == ERROR) { +        printTrace("%s| FWSWITCH is not supported", getName().c_str()); +        return NOT_APPLICABLE; +    } +    else if (rc != SUCCESS) { +        return rc; +    } + +    sCmd = "AT#FWSWITCH?"; +    std::string sResult = sendCommand(sCmd); +    size_t end = sResult.find(RSP_OK); +    if (end == std::string::npos) { +        printWarning("%s| Unable to get active image number from radio using command [%s]", +                getName().c_str(), +                sCmd.c_str()); +        return FAILURE; +    } + +    size_t start = sResult.find("#FWSWITCH:") + sizeof("#FWSWITCH:"); +    sFwId = MTS::Text::trim(sResult.substr(start, end-start)); +    if(sFwId.size() == 0) { +        printWarning("%s| Firmware Image Number is empty", getName().c_str()); +        return FAILURE; +    } + +    return SUCCESS; +} diff --git a/src/MTS_IO_ME910C1NARadio.cpp b/src/MTS_IO_ME910C1NARadio.cpp index 698bbf7..8c9992e 100644 --- a/src/MTS_IO_ME910C1NARadio.cpp +++ b/src/MTS_IO_ME910C1NARadio.cpp @@ -37,3 +37,91 @@ ME910C1NARadio::ME910C1NARadio(const std::string& sPort)  {  } + +CellularRadio::CODE ME910C1NARadio::setActiveFirmware(const Json::Value& jArgs) { +    CellularRadio::CODE rc; + +    //    Set command allows enabling a specific firmware image on products +    //    embedding 2 different firmware images: +    // +    //    "AT#FWSWITCH=<image_number>[,<storage_conf>]" +    //    <image_number> - Firmware Image To Be Enabled +    //    0 – Image 1 (Default) +    //    1 – Image 2 +    //    <storage_conf> - Setting Storage Configuration +    //    0 – Save the <image_number> value in RAM +    //    1 – Save the <image_number> value in NVM + +    printTrace("%s| Set Active Firmware Image Number", getName().c_str()); + +    if(!jArgs["fwid"].isString()) { +        return INVALID_ARGS; +    } + +    if (jArgs["fwid"].asString() != "1" && jArgs["fwid"].asString() != "0") { +            return INVALID_ARGS; +    } + +    //  LE910-NA1 and LE910-NA V2 is orderable in single image or dual image (single SKU) +    //  configuration. So issue the test command first +    rc = sendBasicCommand("AT#FWSWITCH=?"); +    if (rc == ERROR) { +        printTrace("%s| FWSWITCH is not supported", getName().c_str()); +        return NOT_APPLICABLE; +    } +    else if (rc != SUCCESS) { +        return rc; +    } + +    std::string sCmd = "AT#FWSWITCH="; +    sCmd += jArgs["fwid"].asString(); +    sCmd += ",1"; + +    printTrace("%s| Issuing %s command", getName().c_str(), sCmd.c_str()); + +    return sendBasicCommand(sCmd, 5000); +} + +CellularRadio::CODE ME910C1NARadio::getActiveFirmware(std::string& sFwId) { +    std::string sCmd; +    CellularRadio::CODE rc; +    // +    // Read command reports the current active firmware image: +    // AT#FWSWITCH? +    // #FWSWITCH: 1 +    // +    // OK +    // +    printTrace("%s| Get Active Firmware Image Number", getName().c_str()); + +    //  LE910-NA1 and LE910-NA V2 is orderable in single image or dual image (single SKU) +    //  configuration. So issue the test command first +    sCmd = "AT#FWSWITCH=?"; +    rc = sendBasicCommand(sCmd); +    if (rc == ERROR) { +        printTrace("%s| FWSWITCH is not supported", getName().c_str()); +        return NOT_APPLICABLE; +    } +    else if (rc != SUCCESS) { +        return rc; +    } + +    sCmd = "AT#FWSWITCH?"; +    std::string sResult = sendCommand(sCmd); +    size_t end = sResult.find(RSP_OK); +    if (end == std::string::npos) { +        printWarning("%s| Unable to get active image number from radio using command [%s]", +                getName().c_str(), +                sCmd.c_str()); +        return FAILURE; +    } + +    size_t start = sResult.find("#FWSWITCH:") + sizeof("#FWSWITCH:"); +    sFwId = MTS::Text::trim(sResult.substr(start, end-start)); +    if(sFwId.size() == 0) { +        printWarning("%s| Firmware Image Number is empty", getName().c_str()); +        return FAILURE; +    } + +    return SUCCESS; +} | 
