~aleteoryx/muditaos

ref: 663177ad49b2c0c476ad1d2779050b4d4f07a7f2 muditaos/module-services/service-cellular/DTMFCode.cpp -rw-r--r-- 1.3 KiB
663177ad — Lefucjusz [MOS-170] Report domestic roaming as home network 2 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "DTMFCode.hpp"
#include <Utils.hpp>
#include <stdexcept>

DTMFCode::DTMFCode(const char digitChar)
{
    if ((digitChar >= '0' && digitChar <= '9') || digitChar == '*' || digitChar == '#') {
        this->digitChar = digitChar;
    }
    else {
        this->digitChar = 0;
        throw std::out_of_range("DTMF: Invalid number!");
    }
}
DTMFCode::DTMFCode(const char *digitStr)
{
    auto digitTmpString = std::string{digitStr};
    if (digitTmpString == "*" || digitTmpString == "#") {
        digitChar = digitTmpString[0];
    }
    else {
        try {
            auto digit = std::stoi(digitTmpString);
            if (digit > 9) {
                throw std::out_of_range("DTMF: Invalid number!");
            }
            digitChar = digit + '0';
        }
        catch (std::invalid_argument &e) {
            LOG_ERROR("Can't parse digit string to DTMF ASCII code");
            digitChar = 0;
            throw std::out_of_range("DTMF: Invalid number!");
        }
    }
}
auto DTMFCode::getDigitASCIICode() const -> char
{
    return digitChar;
}
DTMFCode::operator std::string() const
{
    return "\"" + std::string(1, getDigitASCIICode()) + "\"";
}