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