~aleteoryx/muditaos

2eff51722978621d63ab78c4ac81cfae32f44198 — Kuba 4 years ago 51c3dd2
[EGD-7864] Fix Modem rf in enabled after sim selected

Modem is now disconected from network until active sim card
is selected.
M module-cellular/modem/mux/CellularMux.cpp => module-cellular/modem/mux/CellularMux.cpp +4 -0
@@ 269,6 269,10 @@ CellularMux::ConfState CellularMux::confProcedure()
        }
    }

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

    return ConfState ::Success;
}


M module-services/service-cellular/ServiceCellular.cpp => module-services/service-cellular/ServiceCellular.cpp +0 -7
@@ 861,11 861,6 @@ bool ServiceCellular::handle_cellular_priv_init()
                         interval)) {
        connectionManager->setInterval(std::chrono::minutes{interval});
    }
    if (!connectionManager->onPhoneModeChange(phoneModeObserver->getCurrentPhoneMode())) {
        priv->state->set(State::ST::Failed);
        LOG_ERROR("Failed to handle phone mode");
        return false;
    }
    priv->state->set(State::ST::APNConfProcedure);
    return true;
}


@@ 1252,8 1247,6 @@ bool ServiceCellular::handle_URCReady()
    auto channel = cmux->get(CellularMux::Channel::Commands);
    bool ret     = true;

    priv->requestNetworkTimeSettings();

    ret = ret && channel->cmd(at::AT::ENABLE_NETWORK_REGISTRATION_URC);

    bus.sendMulticast<cellular::msg::notification::ModemStateChanged>(cellular::api::ModemState::Ready);

M module-services/service-cellular/src/ServiceCellularPriv.cpp => module-services/service-cellular/src/ServiceCellularPriv.cpp +5 -0
@@ 58,6 58,10 @@ namespace cellular::internal
            owner->bus.sendMulticast<notification::UnhandledCME>(code);
        };
        simCard->onSimNotPresent = [this]() { owner->bus.sendMulticast<notification::SimNotInserted>(); };
        simCard->onSimSelected   = [this]() {
            owner->connectionManager->onPhoneModeChange(owner->phoneModeObserver->getCurrentPhoneMode());
            requestNetworkTimeSettings();
        };
    }

    void ServiceCellularPriv::connectSimCard()


@@ 70,6 74,7 @@ namespace cellular::internal
            auto msg = static_cast<request::sim::SetActiveSim *>(request);
            auto result = simCard->handleSetActiveSim(msg->sim);
            owner->simTimer.start();
            simCard->handleSimCardSelected();
            return std::make_shared<request::sim::SetActiveSim::Response>(result);
        });
        owner->connect(typeid(request::sim::GetLockState), [&](sys::Message *) -> sys::MessagePointer {

M module-services/service-cellular/src/SimCard.cpp => module-services/service-cellular/src/SimCard.cpp +12 -0
@@ 352,5 352,17 @@ namespace cellular
                }
            }
        }
        void SimCard::handleSimCardSelected()
        {
            if (!isSimSelected) {
                isSimSelected = true;
                if (onSimSelected) {
                    onSimSelected();
                }
                else {
                    LOG_ERROR("onSimSelected callback is missing");
                }
            }
        }
    } // namespace service
} // namespace cellular

M module-services/service-cellular/src/SimCard.hpp => module-services/service-cellular/src/SimCard.hpp +6 -0
@@ 162,6 162,10 @@ namespace cellular::service
        void handleSimInsertionNotification(at::SimInsertedStatus status);

        /**
         * Handles post sim selection actions
         */
        void handleSimCardSelected();
        /**
         * Notification events
         */
        std::function<void()> onSimReady;


@@ 171,6 175,7 @@ namespace cellular::service
        std::function<void()> onSimEvent;
        std::function<void(unsigned int code)> onUnhandledCME;
        std::function<void()> onSimNotPresent;
        std::function<void()> onSimSelected;

      private:
        /** SIM card initialization sequence


@@ 242,6 247,7 @@ namespace cellular::service
        std::optional<api::SimSlot> sim = std::nullopt;
        std::optional<at::SimInsertedStatus> simInserted = std::nullopt;
        bool simSelectInProgress                         = false;
        bool isSimSelected                               = false;
    };

} // namespace cellular::service