~aleteoryx/muditaos

ref: 0823d82e5141f44812c54debf07245d0ca746124 muditaos/module-cellular/at/src/URC_CTZE.cpp -rw-r--r-- 1.3 KiB
0823d82e — Radoslaw Wicik [EGD-3743] Update copyrights in fies - add empty line after license 5 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
#include "../URC_CTZE.hpp"
#include <log/debug.hpp>

using namespace at::urc;

CTZE::CTZE(const std::string &val) : Any(val)
{}

auto CTZE::what() -> std::string
{
    return urc_name;
}

struct tm CTZE::getTimeInfo(void)
{
    struct tm timeinfo;
    std::string dateTimeStr(tokens[static_cast<uint32_t>(tokensDescription::date)] + "," +
                            tokens[static_cast<uint32_t>(tokensDescription::time)]);
    utils::findAndReplaceAll(dateTimeStr, "\"", "");

    std::stringstream stream(dateTimeStr);
    stream >> std::get_time(&timeinfo, "%Y/%m/%d,%H:%M:%S");
    constexpr uint32_t signLenght  = 1;
    constexpr uint32_t valueLength = 2;
    constexpr uint32_t signPos     = 0;

    utils::findAndReplaceAll(tokens[static_cast<uint32_t>(tokensDescription::GMTdiference)], "\"", "");
    auto sign  = tokens[static_cast<uint32_t>(tokensDescription::GMTdiference)].substr(signPos, signLenght);
    auto value = tokens[static_cast<uint32_t>(tokensDescription::GMTdiference)].substr(signLenght, valueLength);

    uint32_t offset;
    if (utils::toNumeric(value, offset)) {
        constexpr uint32_t quatersInHour = 4;
        offset /= quatersInHour;
        if (sign == "+") {
            timeinfo.tm_hour += offset;
        }
        else if (sign == "-") {
            timeinfo.tm_hour -= offset;
        }
    }

    return timeinfo;
}