// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include "Modem/ATCommon.hpp" #include "Modem/BaseChannel.hpp" namespace at { class ChannelMock : public BaseChannel { public: virtual Result ResultMock() { return Result(); } auto cmd(const std::string &cmd, std::chrono::milliseconds timeout = at::default_timeout, size_t rxCount = 0) noexcept -> Result override { return ResultMock(); } auto cmd(const at::AT &at) noexcept -> Result override { return ResultMock(); } auto cmd(const at::Cmd &at) -> Result override { return ResultMock(); } void cmd_init() override {} void cmd_send(std::string cmd) override {} void cmd_post() override {} std::string cmd_receive() override { return {}; } }; class FailingChannel : public ChannelMock { virtual Result ResultMock() { auto r = Result(); r.code = Result::Code::ERROR; return r; } }; class GenericChannel : public ChannelMock { public: GenericChannel(at::Result::Code code, std::vector response) : result(code, std::move(response)) {} private: virtual Result ResultMock() { return result; } const Result result; }; /// provides CSCS bad response class CSCS_badChannel : public ChannelMock { virtual Result ResultMock() { auto r = Result(); r.code = Result::Code::ERROR; r.response = {"LOL", "XD"}; return r; } }; /// standard bad CSCA values I get from modem (with result OK) class CSCA_emptyData : public ChannelMock { virtual Result ResultMock() { auto r = Result(); r.code = Result::Code::OK; r.response = {"+CSCA: \"\","}; return r; } }; /// provides proper CSCS reponse class CSCS_successChannel : public ChannelMock { public: std::string smsCenterAddress = "\"0700\""; std::string smsTypeOfAddress = "124"; auto ResultMock() -> Result override { auto r = Result(); r.code = Result::Code::OK; // space below side to CSCS matters r.response = {"+CSCA: " + smsCenterAddress + "," + smsTypeOfAddress, "OK"}; return r; } }; /// provides proper CLCC response with one call on the list class CLCC_successChannel_oneCall : public ChannelMock { public: const std::string idx = "1"; const std::string dir = "0"; const std::string stateOfCall = "0"; const std::string mode = "0"; const std::string multiparty = "1"; const std::string number = "10086"; const std::string type = "129"; auto ResultMock() -> Result final { auto result = Result(); result.code = Result::Code::OK; result.response = {"+CLCC: " + idx + "," + dir + "," + stateOfCall + "," + mode + "," + multiparty + "," + number + "," + type, "OK"}; return result; } }; /// provides proper CLCC response with two calls on the list class CLCC_successChannel_twoCalls : public ChannelMock { public: const std::string idx1{"1"}; const std::string dir1{"0"}; const std::string stateOfCall1{"0"}; const std::string mode1{"1"}; const std::string multiparty1{"0"}; const std::string number1{""}; const std::string type1{"129"}; const std::string idx2{"2"}; const std::string dir2{"0"}; const std::string stateOfCall2{"0"}; const std::string mode2{"0"}; const std::string multiparty2{"0"}; const std::string number2{"10086"}; const std::string type2{"129"}; const std::string tokensLTEMode{"1,0,0,1,0,\"\",129"}; const std::string tokensEstablishCall{"2,0,0,0,0,\"10086\",129"}; auto ResultMock() -> Result final { auto result = Result(); result.code = Result::Code::OK; result.response = {"+CLCC: " + tokensLTEMode, "+CLCC: " + tokensEstablishCall, "OK"}; return result; } }; // Provides succesfull 'OK' response class OK_Channel : public ChannelMock { public: auto ResultMock() -> Result final { auto result = Result(); result.code = Result::Code::OK; result.response = {"OK"}; return result; } }; // Provides bad 'OG' response class OG_Channel : public ChannelMock { public: auto ResultMock() -> Result final { auto result = Result(); result.code = Result::Code::OK; result.response = {"OG"}; return result; } }; /// provides proper CFUN response class CFUN_successChannel : public ChannelMock { public: const std::string token = "1"; auto ResultMock() -> Result final { auto result = Result(); result.code = Result::Code::OK; result.response = {"+CFUN: " + token, "OK"}; return result; } }; /// provides invalid CFUN response class CFUN_invalidTokenChannel : public ChannelMock { public: const std::string token = "7"; auto ResultMock() -> Result final { auto result = Result(); result.code = Result::Code::OK; result.response = {"+CFUN: " + token, "OK"}; return result; } }; } // namespace at