~aleteoryx/muditaos

ref: ef3f840a4dfa76f16dd009c536782a8b28fec6e9 muditaos/module-apps/application-calendar/data/OptionParser.hpp -rw-r--r-- 1.8 KiB
ef3f840a — Marcin Smoczyński [EGD-6049] Add voice call over HSP 4 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
47
48
49
50
51
52
53
54
55
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "CalendarData.hpp"

class OptionParser
{
  private:
    constexpr static const int start_bit   = 16;
    constexpr static const int options_num = 7;

  public:
    OptionParser() = default;
    std::unique_ptr<WeekDaysRepeatData> setWeekDayOptions(const uint32_t &dataDB,
                                                          std::unique_ptr<WeekDaysRepeatData> weekDayOptions)
    {
        const uint32_t startBit        = start_bit;
        const uint32_t numberOfOptions = options_num;
        for (uint32_t i = startBit; i < startBit + numberOfOptions; i++) {
            if (dataDB & (1 << i)) {
                weekDayOptions->setData(i - startBit);
            }
        }
        return weekDayOptions;
    }

    uint32_t getDatabaseFieldValue(std::unique_ptr<WeekDaysRepeatData> weekDayOptions)
    {
        uint32_t dataDB                = 0;
        const uint32_t startBit        = start_bit;
        const uint32_t numberOfOptions = options_num;
        for (uint32_t i = startBit; i < startBit + numberOfOptions; i++) {
            if (weekDayOptions->getData(i - startBit)) {
                dataDB += (1 << i);
            }
        }
        return dataDB;
    }

    uint32_t getNoCustomValue(uint32_t dataDB)
    {
        /// Set all bits in custom field to zero
        /// DataDB input is not modifyed
        const uint32_t startBit        = start_bit;
        const uint32_t numberOfOptions = options_num;
        for (uint32_t i = startBit; i < startBit + numberOfOptions; i++) {
            if (dataDB & (1 << i)) {
                dataDB -= (1 << i);
            }
        }
        return dataDB;
    }
};