~aleteoryx/muditaos

70fe3a401e8ee9e04217d3a0820b6b2d3e0de2b4 — Kuba Kleczkowski 2 years ago 5c2032a
[MOS-813] Emergency calling fixed

User is now able to make emergency call with no sim card
inserted. RF functionality in modem is still disabled
until sim card is selected by user.
M module-cellular/modem/mux/CellularMux.cpp => module-cellular/modem/mux/CellularMux.cpp +2 -2
@@ 215,7 215,7 @@ CellularMux::ConfState CellularMux::baudDetectProcedure(uint16_t timeout_s)
    return ConfState::Failure;
}

CellularMux::ConfState CellularMux::confProcedure()
CellularMux::ConfState CellularMux::confProcedure(bool disableRF)
{
    LOG_DEBUG("Configuring modem...");



@@ 269,7 269,7 @@ CellularMux::ConfState CellularMux::confProcedure()
        }
    }

    if (!parser->cmd(at::AT::CFUN_DISABLE_TRANSMITTING)) {
    if (disableRF && !parser->cmd(at::AT::CFUN_DISABLE_TRANSMITTING)) {
        return ConfState::Failure;
    }


M module-cellular/modem/mux/CellularMux.h => module-cellular/modem/mux/CellularMux.h +1 -1
@@ 305,7 305,7 @@ class CellularMux

    ConfState baudDetectOnce();
    ConfState baudDetectProcedure(uint16_t timeout_s = 30);
    ConfState confProcedure();
    ConfState confProcedure(bool disableRF);
    ConfState audioConfProcedure();
    ConfState startMultiplexer();


M module-services/service-cellular/RequestFactory.cpp => module-services/service-cellular/RequestFactory.cpp +2 -2
@@ 81,8 81,7 @@ namespace cellular

    std::unique_ptr<IRequest> RequestFactory::create()
    {
        auto isRegisteredToNetwork = isConnectedToNetwork();
        if (auto req = emergencyCheck(); req && isRegisteredToNetwork) {
        if (auto req = emergencyCheck(); req) {
            return req;
        }



@@ 132,6 131,7 @@ namespace cellular
        if (!simInserted) {
            return std::make_unique<RejectRequest>(RejectRequest::RejectReason::NoSim, request);
        }
        auto isRegisteredToNetwork = isConnectedToNetwork();
        if (!isRegisteredToNetwork) {
            return std::make_unique<RejectRequest>(RejectRequest::RejectReason::NoNetworkConnection, request);
        }

M module-services/service-cellular/ServiceCellular.cpp => module-services/service-cellular/ServiceCellular.cpp +8 -1
@@ 842,8 842,15 @@ bool ServiceCellular::handle_power_down()

bool ServiceCellular::handle_start_conf_procedure()
{
    auto simSelected = settings->getValue(settings::SystemProperties::activeSim, settings::SettingsScope::Global);
    auto disableRF   = false;
    if (simSelected.empty()) {
        LOG_ERROR("No sim selected, disabling RF module.");
        disableRF = true;
    }

    // Start configuration procedure, if it's first run modem will be restarted
    auto confRet = cmux->confProcedure();
    auto confRet = cmux->confProcedure(disableRF);
    if (confRet == CellularMux::ConfState::Success) {
        priv->state->set(State::ST::AudioConfigurationProcedure);
        return true;

M module-services/service-cellular/tests/unittest_request_factory.cpp => module-services/service-cellular/tests/unittest_request_factory.cpp +1 -8
@@ 51,14 51,7 @@ TEST_CASE("Emergency handling")
        // no SIM and SIM emergency number / sim inserted
        {false, true, true, true, true, std::nullopt, typeid(CallRequest).name()},
        // no SIM and SIM emergency number / sim inserted / no network connection
        {false,
         true,
         true,
         true,
         false,
         RejectRequest::RejectReason::NoNetworkConnection,
         typeid(RejectRequest).name(),
         ""},
        {true, true, true, true, false, std::nullopt, typeid(CallRequest).name()},
        // no SIM emergency number / sim inserted
        {false, false, true, true, true, std::nullopt, typeid(CallRequest).name()},
        // SIM emergency number / sim inserted