// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include #include #include #include #include namespace at { namespace result { QECCNUM::QECCNUM(const Result &that) : Result(that) {} } // namespace result namespace cmd { QECCNUM::QECCNUM(Mode mode, NumberType numberType, const std::vector &number) noexcept : Cmd(std::string("AT") + std::string(qeccnumCmd), at::cmd::Modifier::Set) { setRequestParameters(mode, numberType, number); } QECCNUM::QECCNUM() noexcept : Cmd(std::string("AT") + std::string(qeccnumCmd), at::cmd::Modifier::Get) {} result::QECCNUM &QECCNUM::parse(Result &base_result) { auto *p = new result::QECCNUM(base_result); result = std::unique_ptr(p); if (p->response.empty()) { p->code = result::QECCNUM::Code::PARSING_ERROR; return *p; } bool hasData = false; for (auto &responseLine : p->response) { responseLine.erase(std::remove(responseLine.begin(), responseLine.end(), stringDelimiter), responseLine.end()); auto commandHeader = std::string(qeccnumCmd).append(commandPostfix); if (responseLine.find(commandHeader) == 0) { hasData = true; auto parsed = utils::split(std::string(responseLine, commandHeader.size()), dataSeparator); if (parsed.size() <= 1) { continue; } if (int category = 0; utils::toNumeric(parsed.front(), category)) { const auto firstNumberPosition = 1; if (category == 0) { p->eccNumbersNoSim = std::vector(parsed.begin() + firstNumberPosition, parsed.end()); } else if (category == 1) { p->eccNumbersSim = std::vector(parsed.begin() + firstNumberPosition, parsed.end()); } } } } if (hasData && p->eccNumbersSim.empty() && p->eccNumbersNoSim.empty()) { p->code = result::QECCNUM::Code::PARSING_ERROR; } return *p; } void QECCNUM::setRequestParameters(Mode mode, NumberType numberType, const std::vector &numbers) { body += utils::to_string(magic_enum::enum_integer(mode)) + "," + utils::to_string(magic_enum::enum_integer(numberType)); for (auto &number : numbers) { if (!number.empty()) { const std::string delim = std::string(1, stringDelimiter); body.append("," + delim + number + delim); } } } } // namespace cmd } // namespace at