// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include #include namespace cellular::ussd { constexpr std::uint32_t pullResponseTimeout = 30; constexpr std::uint32_t pullSessionTimeout = 60; constexpr std::uint32_t noTimeout = 0; enum class State { none, pushSession, pullRequestSent, pullResponseReceived, sessionAborted }; class USSDHandler { public: bool handleUSSDRequest(cellular::USSDMessage::RequestType requestType, const std::string &request = ""); void handleUSSDTimer(); void externalRequestHandled(); bool handleURC(); void setUSSDTimer(); bool ussdSessionTimeout(); void setTimerStartCallback(std::function callback) { onTimerStart = std::move(callback); } void setTimerGetStateCallback(std::function callback) { onTimerGetState = std::move(callback); } void setTimerStopCallback(std::function callback) { onTimerStop = std::move(callback); } std::function onTimerStop; std::function onTimerStart; std::function onTimerGetState; std::function onOpenPushSession; std::function onAbortSession; std::function onSendUssdCode; std::function onRequestAbortSession; std::function onRequestOpenPushSession; private: State ussdState = State::none; std::uint32_t ussdTimeout = 0; }; } // namespace cellular::ussd