~aleteoryx/muditaos

f08acdcc78c366903aa55758b6eb8e79d8a2a61c — Adam Dobrowolski 5 years ago 6474f7a
[EGD-6079] Moved at factory from header to cpp file

- data moved to std::initializer_list no issue warned with tools
- GCC tools do not warn issues with memory now
33 files changed, 194 insertions(+), 141 deletions(-)

M module-cellular/CMakeLists.txt
M module-cellular/Modem/ATCommon.cpp
M module-cellular/Modem/ATStream.cpp
M module-cellular/Modem/ATURCStream.cpp
M module-cellular/Modem/BaseChannel.hpp
M module-cellular/Modem/TS0710/TS0710.cpp
A module-cellular/at/ATFactory.hpp
M module-cellular/at/Cmd.hpp
M module-cellular/at/Commands.hpp
A module-cellular/at/Constants.hpp
A module-cellular/at/src/ATFactory.cpp
M module-services/service-cellular/NetworkSettings.cpp
M module-services/service-cellular/PacketData.cpp
M module-services/service-cellular/QMBNManager.cpp
M module-services/service-cellular/ServiceCellular.cpp
M module-services/service-cellular/SimCard.cpp
M module-services/service-cellular/checkSmsCenter.cpp
M module-services/service-cellular/requests/CallBarringRequest.cpp
M module-services/service-cellular/requests/CallForwardingRequest.cpp
M module-services/service-cellular/requests/CallRequest.cpp
M module-services/service-cellular/requests/CallWaitingRequest.cpp
M module-services/service-cellular/requests/ClipRequest.cpp
M module-services/service-cellular/requests/ClirRequest.cpp
M module-services/service-cellular/requests/ColpRequest.cpp
M module-services/service-cellular/requests/ImeiRequest.cpp
M module-services/service-cellular/requests/PasswordRegistrationRequest.cpp
M module-services/service-cellular/requests/PinChangeRequest.cpp
M module-services/service-cellular/requests/Request.cpp
M module-services/service-cellular/requests/SupplementaryServicesRequest.cpp
M module-services/service-cellular/requests/UssdRequest.cpp
M module-services/service-cellular/service-cellular/requests/RejectRequest.hpp
M module-services/service-cellular/service-cellular/requests/Request.hpp
M module-utils/Utils.hpp
M module-cellular/CMakeLists.txt => module-cellular/CMakeLists.txt +1 -0
@@ 40,6 40,7 @@ set(SOURCES
        ${CMAKE_CURRENT_SOURCE_DIR}/at/src/UrcFactory.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/at/src/Commands.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/at/src/Cmd.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/at/src/ATFactory.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/at/response.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/at/cmd/src/CSCA.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/at/cmd/src/QECCNUM.cpp

M module-cellular/Modem/ATCommon.cpp => module-cellular/Modem/ATCommon.cpp +2 -0
@@ 2,6 2,7 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ATCommon.hpp"
#include <at/Cmd.hpp>
#include "time/ScopedTime.hpp"
#include <functional>
#include <log/log.hpp>


@@ 11,6 12,7 @@
#include <inttypes.h> // for PRIu32
#include <Utils.hpp>
#include "ATStream.hpp"
#include <at/ATFactory.hpp>

using namespace at;


M module-cellular/Modem/ATStream.cpp => module-cellular/Modem/ATStream.cpp +3 -3
@@ 1,9 1,9 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <cstring>
#include "ATStream.hpp"

#include "ATCommon.hpp"

namespace at
{



@@ 211,4 211,4 @@ namespace at
        isATReady        = false;
        errcode          = 0;
    }
} // namespace at
\ No newline at end of file
} // namespace at

M module-cellular/Modem/ATURCStream.cpp => module-cellular/Modem/ATURCStream.cpp +2 -0
@@ 5,6 5,8 @@
#include "ATCommon.hpp"

#include <module-os/RTOSWrapper/include/ticks.hpp>
#include <cstring>

namespace at
{


M module-cellular/Modem/BaseChannel.hpp => module-cellular/Modem/BaseChannel.hpp +3 -0
@@ 7,9 7,12 @@
#include <vector>
#include <at/Commands.hpp>
#include <at/Result.hpp>
#include <at/Constants.hpp>

namespace at
{
    struct Cmd;

    class BaseChannel
    {
      public:

M module-cellular/Modem/TS0710/TS0710.cpp => module-cellular/Modem/TS0710/TS0710.cpp +2 -0
@@ 2,6 2,8 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "TS0710.h"
#include <at/ATFactory.hpp>
#include <at/Cmd.hpp>
#include "bsp/cellular/bsp_cellular.hpp"
#include "projdefs.h"
#include <service-cellular/ServiceCellular.hpp>

A module-cellular/at/ATFactory.hpp => module-cellular/at/ATFactory.hpp +13 -0
@@ 0,0 1,13 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "Commands.hpp"
#include <at/Cmd.hpp>

namespace at
{
    struct Cmd;
    auto factory(AT at) -> const Cmd &;
} // namespace at

M module-cellular/at/Cmd.hpp => module-cellular/at/Cmd.hpp +1 -5
@@ 6,16 6,12 @@
#include <string>
#include <Result.hpp>
#include <chrono>
#include <at/Constants.hpp>

namespace at
{
    using namespace std::chrono_literals;

    struct Cmd;

    /// if you've checked it's ok - or it was at least 300 in code somewhere, take this
    const auto default_timeout = 300ms;

    namespace cmd
    {
        enum class Modifier

M module-cellular/at/Commands.hpp => module-cellular/at/Commands.hpp +5 -130
@@ 3,27 3,16 @@

#pragma once

/// This file goal is to provide one place to store all at commands, with their respectable timeouts if these have

#include "Result.hpp"
#include <log/log.hpp>
#include <map>
#include <memory>
#include <string>
#include "Cmd.hpp"
#include "cmd/CSCA.hpp"
#include <chrono>
#include <vector>
#include <at/Constants.hpp>

namespace at
{

    using namespace std::chrono_literals;
    const auto default_doc_timeout      = 5000ms; /// if unsure - take this
    const auto default_long_doc_timeout = 15000ms;

    /// at::Cmd structure with command, it's timeout and some runtime data
    /// These are commands we use in our code with
    /// at::Cmd structure which consists of:
    /// { command, timeout, last : {sent, response, status } }

    ///
    /// doc is: per Quectel_EC25&EC21_AT_Commands_Manual_V1.3.pdf
    enum class AT
    {


@@ 139,120 128,6 @@ namespace at
        QEEC,     /// Echo cancellation parameters
    };

    // below timeouts are defined in Quectel_EC25&EC21_AT_Commands_Manual_V1.3.pdf
    inline auto factory(AT at) -> const Cmd &
    {
        static const std::map<AT, const Cmd> fact{
            {AT::AT, {"AT", 100ms}},
            {AT::ECHO_OFF, {"ATE0"}},
            {AT::FACTORY_RESET, {"AT&F"}},
            {AT::SW_INFO, {"ATI\r", default_doc_timeout}},
            {AT::FLOW_CTRL_ON, {"AT+IFC=2,2\r\n", 500ms}},
            {AT::FLOW_CTRL_OFF, {"AT+IFC=0,0", 500ms}},
            {AT::URC_NOTIF_CHANNEL, {"AT+QCFG=\"cmux/urcport\",1"}},
            {AT::RI_PIN_AUTO_CALL, {"AT+QCFG=\"urc/ri/ring\",\"auto\""}},
            {AT::RI_PIN_OFF_CALL, {"AT+QCFG=\"urc/ri/ring\",\"off\""}},
            {AT::RI_PIN_PULSE_SMS, {"AT+QCFG=\"urc/ri/smsincoming\",\"pulse\",450"}},
            {AT::RI_PIN_OFF_SMS, {"AT+QCFG=\"urc/ri/smsincoming\",\"off\""}},
            {AT::RI_PIN_PULSE_OTHER, {"AT+QCFG=\"urc/ri/other\",\"pulse\""}},
            {AT::URC_DELAY_ON, {"AT+QCFG=\"urc/delay\",1"}},
            {AT::URC_UART1, {"AT+QURCCFG=\"urcport\",\"uart1\""}},
            {AT::AT_PIN_READY_LOGIC, {"AT+QCFG=\"apready\",1,1,200"}},
            {AT::URC_NOTIF_SIGNAL, {"AT+QINDCFG=\"csq\",1"}},
            {AT::CRC_ON, {"AT+CRC=1"}},
            {AT::CALLER_NUMBER_PRESENTATION, {"AT+CLIP=1", 18000ms}},
            {AT::SMS_TEXT_FORMAT, {"AT+CMGF=1"}},
            {AT::SMS_UCSC2, {"AT+CSCS=\"UCS2\""}},
            {AT::SMS_GSM, {"AT+CSCS=\"GSM\""}},
            {AT::QSCLK_ON, {"AT+QSCLK=1", 3000ms}},
            {AT::QDAI, {"AT+QDAI?"}},
            {AT::QDAI_INIT, {"AT+QDAI=1,0,0,3,0,1,1,1"}},
            {AT::SET_URC_CHANNEL, {"AT+QCFG=\"cmux/urcport\",2", default_doc_timeout}},
            {AT::CSQ, {"AT+CSQ", default_doc_timeout}},
            {AT::CLCC, {"AT+CLCC", default_doc_timeout}},
            {AT::CMGD, {"AT+CMGD=", default_doc_timeout}},
            {AT::CNUM, {"AT+CNUM"}},
            {AT::CIMI, {"AT+CIMI"}},
            {AT::QCMGR, {"AT+QCMGR=", 2000ms}},
            {AT::ATH, {"ATH", 90000ms}},
            {AT::ATA, {"ATA", 90000ms}},
            {AT::ATD, {"ATD"}},
            {AT::IPR, {"AT+IPR="}},
            {AT::CMUX, {"AT+CMUX="}},
            {AT::CFUN, {"AT+CFUN=", default_long_doc_timeout}},
            {AT::CFUN_RESET, {"AT+CFUN=1,1", default_long_doc_timeout}},
            {AT::CFUN_MIN_FUNCTIONALITY, {"AT+CFUN=0", default_long_doc_timeout}},
            {AT::CFUN_FULL_FUNCTIONALITY, {"AT+CFUN=1", default_long_doc_timeout}},
            {AT::CFUN_DISABLE_TRANSMITTING, {"AT+CFUN=4", default_long_doc_timeout}},
            {AT::CMGS, {"AT+CMGS=\"", 120s}},   // verified in docs
            {AT::QCMGS, {"AT+QCMGS=\"", 120s}}, // verified in docs
            {AT::CREG, {"AT+CREG?", default_doc_timeout}},
            {AT::QNWINFO, {"AT+QNWINFO"}},
            {AT::COPS, {"AT+COPS", 180000ms}},
            {AT::QSIMSTAT, {"AT+QSIMSTAT?"}},
            {AT::SIM_DET, {"AT+QSIMDET?"}},
            {AT::SIM_DET_ON, {"AT+QSIMDET=1,0"}},
            {AT::SIMSTAT_ON, {"AT+QSIMSTAT=1"}},
            {AT::SET_SCANMODE, {"AT+QCFG=\"nwscanmode\","}},
            {AT::GET_SCANMODE, {"AT+QCFG=\"nwscanmode\""}},
            {AT::QGMR, {"AT+QGMR"}},
            {AT::STORE_SETTINGS_ATW, {"AT&W"}},
            {AT::CEER, {"AT+CEER"}},
            {AT::QIGETERROR, {"AT+QIGETERROR"}},
            {AT::VTS, {"AT+VTS="}},
            {AT::QLDTMF, {"AT+QLDTMF=1,"}},
            {AT::CUSD_OPEN_SESSION, {"AT+CUSD=1"}},
            {AT::CUSD_CLOSE_SESSION, {"AT+CUSD=2"}},
            {AT::CUSD_SEND, {"AT+CUSD=1,"}},
            {AT::SET_SMS_STORAGE, {"AT+CPMS=\"SM\",\"SM\",\"SM\"", 300ms}},
            {AT::CPIN, {"AT+CPIN=", default_timeout}},
            {AT::GET_CPIN, {"AT+CPIN?", default_timeout}},
            {AT::QPINC, {"AT+QPINC=", default_timeout}},
            {AT::CLCK, {"AT+CLCK=", default_timeout}},
            {AT::CPWD, {"AT+CPWD=", default_timeout}},
            {AT::ENABLE_TIME_ZONE_UPDATE, {"AT+CTZU=3"}},
            {AT::SET_TIME_ZONE_REPORTING, {"AT+CTZR=2"}},
            {AT::DISABLE_TIME_ZONE_UPDATE, {"AT+CTZU=0"}},
            {AT::DISABLE_TIME_ZONE_REPORTING, {"AT+CTZR=0"}},
            {AT::ENABLE_NETWORK_REGISTRATION_URC, {"AT+CREG=2"}},
            {AT::SET_SMS_TEXT_MODE_UCS2, {"AT+CSMP=17,167,0,8"}},
            {AT::LIST_MESSAGES, {"AT+CMGL=\"ALL\"", default_doc_timeout}},
            {AT::GET_IMEI, {"AT+GSN", default_doc_timeout}},
            {AT::CCFC, {"AT+CCFC=", default_doc_timeout}},
            {AT::CCWA, {"AT+CCWA=", default_doc_timeout}},
            {AT::CCWA_GET, {"AT+CCWA?", default_doc_timeout}},
            {AT::CHLD, {"AT+CHLD=\"", default_doc_timeout}},
            {AT::CLIP, {"AT+CLIP=", default_long_doc_timeout}},
            {AT::CLIP_GET, {"AT+CLIP?", default_long_doc_timeout}},
            {AT::CLIR, {"AT+CLIR=", default_long_doc_timeout}},
            {AT::CLIR_GET, {"AT+CLIR?", default_long_doc_timeout}},
            {AT::CLIR_RESET, {"AT+CLIR=0", default_long_doc_timeout}},
            {AT::CLIR_ENABLE, {"AT+CLIR=1", default_long_doc_timeout}},
            {AT::CLIR_DISABLE, {"AT+CLIR=2", default_long_doc_timeout}},
            {AT::COLP, {"AT+COLP", default_long_doc_timeout}},
            {AT::COLP_GET, {"AT+COLP?", default_long_doc_timeout}},
            {AT::COLP_ENABLE, {"AT+COLP=1", default_long_doc_timeout}},
            {AT::COLP_DISABLE, {"AT+COLP=0", default_long_doc_timeout}},
            {AT::CSSN, {"AT+CSSN=\"", default_doc_timeout}},
            {AT::QICSGP, {"AT+QICSGP", default_timeout}},
            {AT::QIACT, {"AT+QIACT", 150000ms}},
            {AT::QIDEACT, {"AT+QIDEACT", 40000ms}},
            {AT::QRXGAIN, {"AT+QRXGAIN=40000", default_timeout}},
            {AT::CLVL, {"AT+CLVL=3", default_timeout}},
            {AT::QMIC, {"AT+QMIC=15000,15000", default_timeout}},
            {AT::QEEC, {"AT+QEEC=", 3000ms}},
            {AT::QNVFR, {"AT+QNVFR=", default_long_doc_timeout}},
            {AT::QNVFW, {"AT+QNVFW=", default_long_doc_timeout}},
            {AT::QMBNCFG, {"AT+QMBNCFG=", default_long_doc_timeout}},
            {AT::QCFG_IMS, {"AT+QCFG=\"ims\"", default_timeout}}};

        if (fact.count(at) != 0u) {
            return fact.at(at);
        }
        LOG_ERROR("NO SUCH AT COMMAND DEFINED: %d", static_cast<int>(at));
        return fact.at(AT::AT);
    }

    enum class commadsSet
    {
        modemInit,

A module-cellular/at/Constants.hpp => module-cellular/at/Constants.hpp +13 -0
@@ 0,0 1,13 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <chrono>

namespace at
{
    constexpr std::chrono::milliseconds default_timeout{300};            /// if you've checked that it's ok
    constexpr std::chrono::milliseconds default_doc_timeout{5000};       /// if unsure - take this
    constexpr std::chrono::milliseconds default_long_doc_timeout{15000}; /// long timeout from docs
} // namespace at

A module-cellular/at/src/ATFactory.cpp => module-cellular/at/src/ATFactory.cpp +124 -0
@@ 0,0 1,124 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ATFactory.hpp"
#include "cmd/CSCA.hpp"

namespace at
{
    using namespace std::chrono_literals;

    std::initializer_list<std::pair<const AT, const Cmd>> initializer = {
        {AT::AT, {"AT", 100ms}},
        {AT::ECHO_OFF, {"ATE0"}},
        {AT::FACTORY_RESET, {"AT&F"}},
        {AT::SW_INFO, {"ATI\r", default_doc_timeout}},
        {AT::FLOW_CTRL_ON, {"AT+IFC=2,2\r\n", 500ms}},
        {AT::FLOW_CTRL_OFF, {"AT+IFC=0,0", 500ms}},
        {AT::URC_NOTIF_CHANNEL, {"AT+QCFG=\"cmux/urcport\",1"}},
        {AT::RI_PIN_AUTO_CALL, {"AT+QCFG=\"urc/ri/ring\",\"auto\""}},
        {AT::RI_PIN_OFF_CALL, {"AT+QCFG=\"urc/ri/ring\",\"off\""}},
        {AT::RI_PIN_PULSE_SMS, {"AT+QCFG=\"urc/ri/smsincoming\",\"pulse\",450"}},
        {AT::RI_PIN_OFF_SMS, {"AT+QCFG=\"urc/ri/smsincoming\",\"off\""}},
        {AT::RI_PIN_PULSE_OTHER, {"AT+QCFG=\"urc/ri/other\",\"pulse\""}},
        {AT::URC_DELAY_ON, {"AT+QCFG=\"urc/delay\",1"}},
        {AT::URC_UART1, {"AT+QURCCFG=\"urcport\",\"uart1\""}},
        {AT::AT_PIN_READY_LOGIC, {"AT+QCFG=\"apready\",1,1,200"}},
        {AT::URC_NOTIF_SIGNAL, {"AT+QINDCFG=\"csq\",1"}},
        {AT::CRC_ON, {"AT+CRC=1"}},
        {AT::CALLER_NUMBER_PRESENTATION, {"AT+CLIP=1", 18000ms}},
        {AT::SMS_TEXT_FORMAT, {"AT+CMGF=1"}},
        {AT::SMS_UCSC2, {"AT+CSCS=\"UCS2\""}},
        {AT::SMS_GSM, {"AT+CSCS=\"GSM\""}},
        {AT::QSCLK_ON, {"AT+QSCLK=1", 3000ms}},
        {AT::QDAI, {"AT+QDAI?"}},
        {AT::QDAI_INIT, {"AT+QDAI=1,0,0,3,0,1,1,1"}},
        {AT::SET_URC_CHANNEL, {"AT+QCFG=\"cmux/urcport\",2", default_doc_timeout}},
        {AT::CSQ, {"AT+CSQ", default_doc_timeout}},
        {AT::CLCC, {"AT+CLCC", default_doc_timeout}},
        {AT::CMGD, {"AT+CMGD=", default_doc_timeout}},
        {AT::CNUM, {"AT+CNUM"}},
        {AT::CIMI, {"AT+CIMI"}},
        {AT::QCMGR, {"AT+QCMGR=", 2000ms}},
        {AT::ATH, {"ATH", 90000ms}},
        {AT::ATA, {"ATA", 90000ms}},
        {AT::ATD, {"ATD"}},
        {AT::IPR, {"AT+IPR="}},
        {AT::CMUX, {"AT+CMUX="}},
        {AT::CFUN, {"AT+CFUN=", default_long_doc_timeout}},
        {AT::CFUN_RESET, {"AT+CFUN=1,1", default_long_doc_timeout}},
        {AT::CFUN_MIN_FUNCTIONALITY, {"AT+CFUN=0", default_long_doc_timeout}},
        {AT::CFUN_FULL_FUNCTIONALITY, {"AT+CFUN=1", default_long_doc_timeout}},
        {AT::CFUN_DISABLE_TRANSMITTING, {"AT+CFUN=4", default_long_doc_timeout}},
        {AT::CMGS, {"AT+CMGS=\"", 120s}},   // verified in docs
        {AT::QCMGS, {"AT+QCMGS=\"", 120s}}, // verified in docs
        {AT::CREG, {"AT+CREG?", default_doc_timeout}},
        {AT::QNWINFO, {"AT+QNWINFO"}},
        {AT::COPS, {"AT+COPS", 180000ms}},
        {AT::QSIMSTAT, {"AT+QSIMSTAT?"}},
        {AT::SIM_DET, {"AT+QSIMDET?"}},
        {AT::SIM_DET_ON, {"AT+QSIMDET=1,0"}},
        {AT::SIMSTAT_ON, {"AT+QSIMSTAT=1"}},
        {AT::SET_SCANMODE, {"AT+QCFG=\"nwscanmode\","}},
        {AT::GET_SCANMODE, {"AT+QCFG=\"nwscanmode\""}},
        {AT::QGMR, {"AT+QGMR"}},
        {AT::STORE_SETTINGS_ATW, {"AT&W"}},
        {AT::CEER, {"AT+CEER"}},
        {AT::QIGETERROR, {"AT+QIGETERROR"}},
        {AT::VTS, {"AT+VTS="}},
        {AT::QLDTMF, {"AT+QLDTMF=1,"}},
        {AT::CUSD_OPEN_SESSION, {"AT+CUSD=1"}},
        {AT::CUSD_CLOSE_SESSION, {"AT+CUSD=2"}},
        {AT::CUSD_SEND, {"AT+CUSD=1,"}},
        {AT::SET_SMS_STORAGE, {"AT+CPMS=\"SM\",\"SM\",\"SM\"", 300ms}},
        {AT::CPIN, {"AT+CPIN=", default_timeout}},
        {AT::GET_CPIN, {"AT+CPIN?", default_timeout}},
        {AT::QPINC, {"AT+QPINC=", default_timeout}},
        {AT::CLCK, {"AT+CLCK=", default_timeout}},
        {AT::CPWD, {"AT+CPWD=", default_timeout}},
        {AT::ENABLE_TIME_ZONE_UPDATE, {"AT+CTZU=3"}},
        {AT::SET_TIME_ZONE_REPORTING, {"AT+CTZR=2"}},
        {AT::DISABLE_TIME_ZONE_UPDATE, {"AT+CTZU=0"}},
        {AT::DISABLE_TIME_ZONE_REPORTING, {"AT+CTZR=0"}},
        {AT::ENABLE_NETWORK_REGISTRATION_URC, {"AT+CREG=2"}},
        {AT::SET_SMS_TEXT_MODE_UCS2, {"AT+CSMP=17,167,0,8"}},
        {AT::LIST_MESSAGES, {"AT+CMGL=\"ALL\"", default_doc_timeout}},
        {AT::GET_IMEI, {"AT+GSN", default_doc_timeout}},
        {AT::CCFC, {"AT+CCFC=", default_doc_timeout}},
        {AT::CCWA, {"AT+CCWA=", default_doc_timeout}},
        {AT::CCWA_GET, {"AT+CCWA?", default_doc_timeout}},
        {AT::CHLD, {"AT+CHLD=\"", default_doc_timeout}},
        {AT::CLIP, {"AT+CLIP=", default_long_doc_timeout}},
        {AT::CLIP_GET, {"AT+CLIP?", default_long_doc_timeout}},
        {AT::CLIR, {"AT+CLIR=", default_long_doc_timeout}},
        {AT::CLIR_GET, {"AT+CLIR?", default_long_doc_timeout}},
        {AT::CLIR_RESET, {"AT+CLIR=0", default_long_doc_timeout}},
        {AT::CLIR_ENABLE, {"AT+CLIR=1", default_long_doc_timeout}},
        {AT::CLIR_DISABLE, {"AT+CLIR=2", default_long_doc_timeout}},
        {AT::COLP, {"AT+COLP", default_long_doc_timeout}},
        {AT::COLP_GET, {"AT+COLP?", default_long_doc_timeout}},
        {AT::COLP_ENABLE, {"AT+COLP=1", default_long_doc_timeout}},
        {AT::COLP_DISABLE, {"AT+COLP=0", default_long_doc_timeout}},
        {AT::CSSN, {"AT+CSSN=\"", default_doc_timeout}},
        {AT::QICSGP, {"AT+QICSGP", default_timeout}},
        {AT::QIACT, {"AT+QIACT", 150000ms}},
        {AT::QIDEACT, {"AT+QIDEACT", 40000ms}},
        {AT::QRXGAIN, {"AT+QRXGAIN=40000", default_timeout}},
        {AT::CLVL, {"AT+CLVL=3", default_timeout}},
        {AT::QMIC, {"AT+QMIC=15000,15000", default_timeout}},
        {AT::QEEC, {"AT+QEEC=", 3000ms}},
        {AT::QNVFR, {"AT+QNVFR=", default_long_doc_timeout}},
        {AT::QNVFW, {"AT+QNVFW=", default_long_doc_timeout}},
        {AT::QMBNCFG, {"AT+QMBNCFG=", default_long_doc_timeout}},
        {AT::QCFG_IMS, {"AT+QCFG=\"ims\"", default_timeout}}};

    auto factory(AT at) -> const Cmd &
    {
        static auto fact = std::map<AT, const Cmd>(initializer);
        if (fact.count(at) != 0u) {
            return fact.at(at);
        }
        LOG_ERROR("no such at command defined: %d", static_cast<int>(at));
        return fact.at(AT::AT);
    }
} // namespace at

M module-services/service-cellular/NetworkSettings.cpp => module-services/service-cellular/NetworkSettings.cpp +1 -0
@@ 4,6 4,7 @@
#include "NetworkSettings.hpp"
#include "QMBNManager.hpp"
#include <unordered_map>
#include <at/ATFactory.hpp>

std::string NetworkSettings::getCurrentOperator() const
{

M module-services/service-cellular/PacketData.cpp => module-services/service-cellular/PacketData.cpp +1 -1
@@ 6,9 6,9 @@
#include <optional>
#include <algorithm>
#include <iterator>

#include <response.hpp>
#include <Utils.hpp>
#include <at/ATFactory.hpp>
namespace at
{
    namespace response

M module-services/service-cellular/QMBNManager.cpp => module-services/service-cellular/QMBNManager.cpp +1 -0
@@ 4,6 4,7 @@
#include "QMBNManager.hpp"
#include "Utils.hpp"
#include "response.hpp"
#include <at/ATFactory.hpp>

namespace at
{

M module-services/service-cellular/ServiceCellular.cpp => module-services/service-cellular/ServiceCellular.cpp +3 -1
@@ 23,10 23,12 @@
#include <BaseInterface.hpp>
#include <CalllogRecord.hpp>
#include <Commands.hpp>
#include <at/ATFactory.hpp>
#include <Common/Common.hpp>
#include <Common/Query.hpp>
#include <MessageType.hpp>
#include <Modem/ATCommon.hpp>
#include <Modem/ATCommon.hpp>
#include <Modem/ATParser.hpp>
#include <Modem/TS0710/DLC_channel.h>
#include <Modem/TS0710/TS0710.h>


@@ 93,7 95,7 @@

const char *ServiceCellular::serviceName = "ServiceCellular";

inline constexpr auto cellularStack = 25000UL;
inline constexpr auto cellularStack = 8000;

using namespace cellular;


M module-services/service-cellular/SimCard.cpp => module-services/service-cellular/SimCard.cpp +2 -0
@@ 7,6 7,8 @@
#include "Result.hpp"
#include "UrcCpin.hpp" //for Cpin parseState
#include "UrcFactory.hpp"
#include <at/ATFactory.hpp>
#include <at/Cmd.hpp>

SimCardResult SimCard::convertErrorFromATResult(const at::Result atres) const
{

M module-services/service-cellular/checkSmsCenter.cpp => module-services/service-cellular/checkSmsCenter.cpp +1 -0
@@ 3,6 3,7 @@

#include "checkSmsCenter.hpp"
#include "Modem/BaseChannel.hpp"
#include <at/cmd/CSCA.hpp>

[[nodiscard]] bool checkSmsCenter(at::BaseChannel &channel)
{

M module-services/service-cellular/requests/CallBarringRequest.cpp => module-services/service-cellular/requests/CallBarringRequest.cpp +1 -0
@@ 5,6 5,7 @@

#include <at/Commands.hpp>
#include <Utils.hpp>
#include <at/ATFactory.hpp>

#include "service-cellular/requests/CallBarringRequest.hpp"


M module-services/service-cellular/requests/CallForwardingRequest.cpp => module-services/service-cellular/requests/CallForwardingRequest.cpp +1 -0
@@ 5,6 5,7 @@

#include <at/Commands.hpp>
#include <Utils.hpp>
#include <at/ATFactory.hpp>

#include "service-cellular/requests/CallForwardingRequest.hpp"


M module-services/service-cellular/requests/CallRequest.cpp => module-services/service-cellular/requests/CallRequest.cpp +1 -0
@@ 8,6 8,7 @@
#include <at/Commands.hpp>

#include "service-cellular/requests/CallRequest.hpp"
#include <at/ATFactory.hpp>

namespace cellular
{

M module-services/service-cellular/requests/CallWaitingRequest.cpp => module-services/service-cellular/requests/CallWaitingRequest.cpp +1 -0
@@ 5,6 5,7 @@

#include <at/Commands.hpp>
#include <Utils.hpp>
#include <at/ATFactory.hpp>

#include "service-cellular/requests/CallWaitingRequest.hpp"


M module-services/service-cellular/requests/ClipRequest.cpp => module-services/service-cellular/requests/ClipRequest.cpp +1 -0
@@ 5,6 5,7 @@

#include <at/Commands.hpp>
#include <Utils.hpp>
#include <at/ATFactory.hpp>

#include "service-cellular/requests/ClipRequest.hpp"


M module-services/service-cellular/requests/ClirRequest.cpp => module-services/service-cellular/requests/ClirRequest.cpp +1 -0
@@ 5,6 5,7 @@

#include <at/Commands.hpp>
#include <Utils.hpp>
#include <at/ATFactory.hpp>

#include "service-cellular/requests/ClirRequest.hpp"


M module-services/service-cellular/requests/ColpRequest.cpp => module-services/service-cellular/requests/ColpRequest.cpp +1 -0
@@ 5,6 5,7 @@

#include <at/Commands.hpp>
#include <Utils.hpp>
#include <at/ATFactory.hpp>

#include "service-cellular/requests/ColpRequest.hpp"


M module-services/service-cellular/requests/ImeiRequest.cpp => module-services/service-cellular/requests/ImeiRequest.cpp +1 -0
@@ 6,6 6,7 @@

#include <at/Result.hpp>
#include <at/Commands.hpp>
#include <at/ATFactory.hpp>

#include "service-cellular/requests/ImeiRequest.hpp"


M module-services/service-cellular/requests/PasswordRegistrationRequest.cpp => module-services/service-cellular/requests/PasswordRegistrationRequest.cpp +1 -0
@@ 5,6 5,7 @@

#include <at/Commands.hpp>
#include <Utils.hpp>
#include <at/ATFactory.hpp>

#include "service-cellular/requests/PasswordRegistrationRequest.hpp"
#include "service-cellular/requests/CallBarringRequest.hpp" // for barringServiceToFacility map

M module-services/service-cellular/requests/PinChangeRequest.cpp => module-services/service-cellular/requests/PinChangeRequest.cpp +2 -0
@@ 5,8 5,10 @@

#include <at/Commands.hpp>
#include <Utils.hpp>
#include <at/ATFactory.hpp>

#include "service-cellular/requests/PinChangeRequest.hpp"
#include <at/ATFactory.hpp>

namespace
{

M module-services/service-cellular/requests/Request.cpp => module-services/service-cellular/requests/Request.cpp +1 -0
@@ 6,6 6,7 @@

#include <at/Result.hpp>
#include <at/Commands.hpp>
#include <at/ATFactory.hpp>

#include "service-cellular/requests/Request.hpp"


M module-services/service-cellular/requests/SupplementaryServicesRequest.cpp => module-services/service-cellular/requests/SupplementaryServicesRequest.cpp +1 -0
@@ 6,6 6,7 @@

#include <at/Commands.hpp>
#include <Utils.hpp>
#include <at/ATFactory.hpp>

#include "service-cellular/requests/SupplementaryServicesRequest.hpp"
#include "service-cellular/requests/CallForwardingRequest.hpp"

M module-services/service-cellular/requests/UssdRequest.cpp => module-services/service-cellular/requests/UssdRequest.cpp +1 -0
@@ 9,6 9,7 @@
#include <at/Commands.hpp>

#include "service-cellular/requests/UssdRequest.hpp"
#include <at/ATFactory.hpp>

namespace cellular
{

M module-services/service-cellular/service-cellular/requests/RejectRequest.hpp => module-services/service-cellular/service-cellular/requests/RejectRequest.hpp +1 -0
@@ 4,6 4,7 @@
#pragma once

#include <at/Result.hpp>
#include <at/Cmd.hpp>

#include "service-cellular/RequestHandler.hpp"
#include "service-cellular/requests/Request.hpp"

M module-services/service-cellular/service-cellular/requests/Request.hpp => module-services/service-cellular/service-cellular/requests/Request.hpp +1 -0
@@ 6,6 6,7 @@
#include <at/Result.hpp>
#include <at/Commands.hpp>
#include "service-cellular/RequestHandler.hpp"
#include <at/Cmd.hpp>

namespace cellular
{

M module-utils/Utils.hpp => module-utils/Utils.hpp +0 -1
@@ 4,7 4,6 @@
#pragma once
#include "i18n/i18n.hpp"
#include <algorithm> // std::find_if_not
#include <log/log.hpp>
#include <sstream>
#include <iomanip>
#include <cmath>