// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "ServiceCellularPriv.hpp" #include "messages.hpp" #include #include #include namespace cellular::internal { ServiceCellularPriv::ServiceCellularPriv(ServiceCellular *owner) : owner{owner}, simCard{std::make_unique()}, state{std::make_unique(owner)} { initSimCard(); } void ServiceCellularPriv::initSimCard() { using namespace cellular::msg; simCard->onSimReady = [this](bool ready) { // SIM causes SIM INIT, only on ready if (ready) { state->set(State::ST::SimInit); } owner->bus.sendMulticast(std::make_shared(ready), sys::BusChannel::ServiceCellularNotifications); }; simCard->onNeedPin = [this](unsigned int attempts) { owner->bus.sendMulticast(std::make_shared(attempts), sys::BusChannel::ServiceCellularNotifications); }; simCard->onNeedPuk = [this](unsigned int attempts) { owner->bus.sendMulticast(std::make_shared(attempts), sys::BusChannel::ServiceCellularNotifications); }; simCard->onSimBlocked = [this]() { owner->bus.sendMulticast(std::make_shared(), sys::BusChannel::ServiceCellularNotifications); }; simCard->onSimEvent = [this]() { owner->bus.sendUnicast(std::make_shared(), ::service::name::evt_manager); }; simCard->onUnhandledCME = [this](unsigned int code) { owner->bus.sendMulticast(std::make_shared(code), sys::BusChannel::ServiceCellularNotifications); }; } void ServiceCellularPriv::connectSimCard() { using namespace cellular::msg; owner->connect(typeid(request::sim::SetActiveSim), [&](sys::Message *request) -> sys::MessagePointer { auto msg = static_cast(request); return std::make_shared(simCard->handleSetActiveSim(msg->sim)); }); owner->connect(typeid(request::sim::GetLockState), [&](sys::Message *) -> sys::MessagePointer { return std::make_shared(simCard->handleIsPinLocked()); }); owner->connect(typeid(request::sim::ChangePin), [&](sys::Message *request) -> sys::MessagePointer { auto msg = static_cast(request); return std::make_shared(simCard->handleChangePin(msg->oldPin, msg->pin)); }); owner->connect(typeid(request::sim::UnblockWithPuk), [&](sys::Message *request) -> sys::MessagePointer { auto msg = static_cast(request); return std::make_shared( simCard->handleUnblockWithPuk(msg->puk, msg->pin)); }); owner->connect(typeid(request::sim::SetPinLock), [&](sys::Message *request) -> sys::MessagePointer { auto msg = static_cast(request); return std::make_shared(simCard->handleSetPinLock(msg->pin, msg->lock), msg->lock); }); owner->connect(typeid(request::sim::PinUnlock), [&](sys::Message *request) -> sys::MessagePointer { auto msg = static_cast(request); return std::make_shared(simCard->handlePinUnlock(msg->pin)); }); owner->connect(typeid(internal::msg::SimStateChanged), [&](sys::Message *request) -> sys::MessagePointer { auto msg = static_cast(request); simCard->handleSimStateChanged(msg->state); return sys::MessageNone{}; }); } } // namespace cellular::internal