~aleteoryx/muditaos

608839d4539792ba761d110da9dc7c76d37582e5 — kkleczkowski 5 years ago ccc49c7
[EGD-4423] Added MMI convertible to action messages. (#1087)

* [EGD-4423] Added MMI convertible to action messages.

* [EGD-4423] Fixed message type.

* [EGD-4423] Review applied.

* [EGD-4423] Unneded message removed, restored cellular log blocking.

Co-authored-by: Kuba Kleczkowski <dd>
M changelog.md => changelog.md +1 -0
@@ 4,6 4,7 @@

* `[cellular]` Integration with basic flow for SIM card (cellular<>GUI)
* `[file indexer db]` Added UT fot File Indexer DB
* `[cellular]` Added MMI convertible to action messages.

### Fixed


M module-services/service-appmgr/CMakeLists.txt => module-services/service-appmgr/CMakeLists.txt +1 -0
@@ 5,6 5,7 @@ set(SOURCES
    ApplicationManifest.cpp
    Controller.cpp
    data/SimActionsParams.cpp
    data/MmiActionsParams.cpp
    model/ApplicationManager.cpp
    model/ApplicationHandle.cpp
    model/ApplicationsRegistry.cpp

A module-services/service-appmgr/data/MmiActionsParams.cpp => module-services/service-appmgr/data/MmiActionsParams.cpp +22 -0
@@ 0,0 1,22 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <service-appmgr/data/MmiActionsParams.hpp>

using namespace app::manager::actions;

MMIParams::MMIParams(std::string mmiData) : mmiData{std::move(mmiData)}
{}

std::string MMIParams::getData() const
{
    return mmiData;
}

MMIResultParams::MMIResultParams(MMIResult result) : result(result)
{}

MMIResultParams::MMIResult MMIResultParams::getData() const noexcept
{
    return result;
}

M module-services/service-appmgr/model/ApplicationManager.cpp => module-services/service-appmgr/model/ApplicationManager.cpp +3 -0
@@ 267,6 267,9 @@ namespace app::manager
        connect(typeid(CellularUnlockSimMessage), convertibleToActionHandler);
        connect(typeid(CellularBlockSimMessage), convertibleToActionHandler);
        connect(typeid(CellularDisplayCMEMessage), convertibleToActionHandler);
        connect(typeid(CellularMMIResultMessage), convertibleToActionHandler);
        connect(typeid(CellularMMIResponseMessage), convertibleToActionHandler);
        connect(typeid(CellularMMIPushMessage), convertibleToActionHandler);
    }

    sys::ReturnCodes ApplicationManager::SwitchPowerModeHandler(const sys::ServicePowerMode mode)

M module-services/service-appmgr/service-appmgr/Actions.hpp => module-services/service-appmgr/service-appmgr/Actions.hpp +3 -0
@@ 43,6 43,9 @@ namespace app::manager
            RequestPinChange,
            UnlockSim,
            BlockSim,
            ShowMMIResult,
            ShowMMIResponse,
            ShowMMIPush,
            DisplayCMEError,
            UserAction // The last enumerator in the Action enum.
                       // All user-defined actions shall have values greater than UserAction.

A module-services/service-appmgr/service-appmgr/data/MmiActionsParams.hpp => module-services/service-appmgr/service-appmgr/data/MmiActionsParams.hpp +36 -0
@@ 0,0 1,36 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <service-appmgr/service-appmgr/Actions.hpp>

namespace app::manager::actions
{

    class MMIParams : public ActionParams
    {
      public:
        explicit MMIParams(std::string mmiData);

        [[nodiscard]] std::string getData() const;

      private:
        std::string mmiData;
    };

    class MMIResultParams : public ActionParams
    {
      public:
        enum class MMIResult
        {
            Success,
            Failed
        };
        explicit MMIResultParams(MMIResult result);
        [[nodiscard]] MMIResult getData() const noexcept;

      private:
        MMIResult result;
    };
} // namespace app::manager::actions

M module-services/service-cellular/CellularRequestHandler.cpp => module-services/service-cellular/CellularRequestHandler.cpp +32 -21
@@ 16,24 16,32 @@
#include "service-cellular/requests/ImeiRequest.hpp"
#include "service-cellular/requests/UssdRequest.hpp"

#include <service-appmgr/model/ApplicationManager.hpp>

void CellularRequestHandler::handle(ImeiRequest &request, at::Result &result)
{
    if (!request.checkModemResponse(result)) {
        request.setHandled(false);
        sendMmiResult(false);
        return;
    }
    request.setHandled(true);
    auto msg = std::make_shared<CellularMMIPushMessage>(result.response[0]);
    sys::Bus::SendUnicast(msg, app::manager::ApplicationManager::ServiceName, &cellular);
}

void CellularRequestHandler::handle(UssdRequest &request, at::Result &result)
{
    if (!request.checkModemResponse(result)) {
        request.setHandled(false);
        return;
    auto requestHandled = request.checkModemResponse(result);

    if (requestHandled) {
        cellular.ussdState = ussd::State::pullRequestSent;
        cellular.setUSSDTimer();
    }
    cellular.ussdState = ussd::State::pullRequestSent;
    cellular.setUSSDTimer();
    request.setHandled(true);
    else {
        sendMmiResult(requestHandled);
    }
    request.setHandled(requestHandled);
}

void CellularRequestHandler::handle(CallRequest &request, at::Result &result)


@@ 54,27 62,30 @@ void CellularRequestHandler::handle(CallRequest &request, at::Result &result)

void CellularRequestHandler::handle(SupplementaryServicesRequest &request, at::Result &result)
{
    if (!request.checkModemResponse(result)) {
        request.setHandled(false);
        return;
    }
    request.setHandled(true);
    auto requestHandled = request.checkModemResponse(result);
    request.setHandled(requestHandled);
    sendMmiResult(requestHandled);
}

void CellularRequestHandler::handle(PasswordRegistrationRequest &request, at::Result &result)
{
    if (!request.checkModemResponse(result)) {
        request.setHandled(false);
        return;
    }
    request.setHandled(true);
    auto requestHandled = request.checkModemResponse(result);
    request.setHandled(requestHandled);
    sendMmiResult(requestHandled);
}

void CellularRequestHandler::handle(PinChangeRequest &request, at::Result &result)
{
    if (!request.checkModemResponse(result)) {
        request.setHandled(false);
        return;
    }
    request.setHandled(true);
    auto requestHandled = request.checkModemResponse(result);
    request.setHandled(requestHandled);
    sendMmiResult(requestHandled);
}

void CellularRequestHandler::sendMmiResult(bool result)
{
    using namespace app::manager::actions;

    auto msg = std::make_shared<CellularMMIResultMessage>(result ? MMIResultParams::MMIResult::Success
                                                                 : MMIResultParams::MMIResult::Failed);
    sys::Bus::SendUnicast(msg, app::manager::ApplicationManager::ServiceName, &cellular);
}

M module-services/service-cellular/ServiceCellular.cpp => module-services/service-cellular/ServiceCellular.cpp +6 -2
@@ 637,9 637,13 @@ sys::MessagePointer ServiceCellular::DataReceivedHandler(sys::DataMessage *msgl,
            auto resp   = handleAllMessagesFromMessageStorage();
            responseMsg = std::make_shared<CellularResponseMessage>(resp);
        } break;
        case CellularNotificationMessage::Type::SignalStrengthUpdate:
        case CellularNotificationMessage::Type::NetworkStatusUpdate:
        case CellularNotificationMessage::Type::NewIncomingUSSD: {

            auto message = std::make_shared<CellularMMIResponseMessage>(msg->data);
            sys::Bus::SendUnicast(message, app::manager::ApplicationManager::ServiceName, this);
        } break;
        case CellularNotificationMessage::Type::SignalStrengthUpdate:
        case CellularNotificationMessage::Type::NetworkStatusUpdate: {
            // skipped
            responseMsg = std::make_shared<CellularResponseMessage>(false);
        }

M module-services/service-cellular/service-cellular/CellularMessage.hpp => module-services/service-cellular/service-cellular/CellularMessage.hpp +61 -0
@@ 20,6 20,7 @@
#include <service-appmgr/service-appmgr/messages/ActionRequest.hpp>
#include <service-appmgr/service-appmgr/Actions.hpp>
#include <service-appmgr/service-appmgr/data/SimActionsParams.hpp>
#include <service-appmgr/service-appmgr/data/MmiActionsParams.hpp>

class CellularMessage : public sys::DataMessage
{


@@ 508,6 509,66 @@ class CellularAntennaResponseMessage : public sys::ResponseMessage
    bool retCode;
    bsp::cellular::antenna antenna;
};

class CellularMMIResult : public CellularMessage
{
  protected:
    app::manager::actions::MMIResultParams params;

    explicit CellularMMIResult(app::manager::actions::MMIResultParams::MMIResult result)
        : CellularMessage(MessageType::CellularMMIData), params(result)
    {}
};

class CellularMMIResultMessage : public CellularMMIResult, public app::manager::actions::ConvertibleToAction
{
  public:
    explicit CellularMMIResultMessage(app::manager::actions::MMIResultParams::MMIResult result)
        : CellularMMIResult(result)
    {}

    [[nodiscard]] auto toAction() const -> std::unique_ptr<app::manager::ActionRequest>
    {
        return std::make_unique<app::manager::ActionRequest>(
            sender,
            app::manager::actions::ShowMMIResult,
            std::make_unique<app::manager::actions::MMIResultParams>(params));
    }
};
class CellularMMIDataMessage : public CellularMessage
{
  protected:
    app::manager::actions::MMIParams params;

  public:
    explicit CellularMMIDataMessage(std::string mmiData)
        : CellularMessage(MessageType::CellularMMIData), params(mmiData)
    {}
};
class CellularMMIResponseMessage : public CellularMMIDataMessage, public app::manager::actions::ConvertibleToAction
{
  public:
    explicit CellularMMIResponseMessage(std::string mmiData) : CellularMMIDataMessage(std::move(mmiData))
    {}

    [[nodiscard]] auto toAction() const -> std::unique_ptr<app::manager::ActionRequest>
    {
        return std::make_unique<app::manager::ActionRequest>(
            sender, app::manager::actions::ShowMMIResponse, std::make_unique<app::manager::actions::MMIParams>(params));
    }
};
class CellularMMIPushMessage : public CellularMMIDataMessage, public app::manager::actions::ConvertibleToAction
{
  public:
    explicit CellularMMIPushMessage(std::string mmiData) : CellularMMIDataMessage(std::move(mmiData))
    {}

    [[nodiscard]] auto toAction() const -> std::unique_ptr<app::manager::ActionRequest>
    {
        return std::make_unique<app::manager::ActionRequest>(
            sender, app::manager::actions::ShowMMIPush, std::make_unique<app::manager::actions::MMIParams>(params));
    }
};
namespace cellular
{


M module-services/service-cellular/service-cellular/CellularRequestHandler.hpp => module-services/service-cellular/service-cellular/CellularRequestHandler.hpp +1 -0
@@ 23,4 23,5 @@ class CellularRequestHandler : public RequestHandler

  private:
    ServiceCellular &cellular;
    void sendMmiResult(bool result);
};

M source/MessageType.hpp => source/MessageType.hpp +1 -0
@@ 102,6 102,7 @@ enum class MessageType
    CellularUSSDRequest,
    CellularTimeUpdated,
    CellularSimState,
    CellularMMIData,

    DBNotesAdd,            ///< Add new note's record
    DBNotesRemove,         ///< Remove selected note's record