~aleteoryx/muditaos

ref: feec59f5346b7b993271b88d5e5f5495fe4a2895 muditaos/module-bsp/drivers/pwm/DriverPWM.hpp -rw-r--r-- 1.8 KiB
feec59f5 — Lukasz Mastalerz [BH-1696] Notification when connect the device to the charger 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <memory>
#include <cstdint>
#include <bsp/common.hpp>

namespace drivers
{
    enum class PWMInstances
    {
        OFFSET = 1,
        PWM_1  = OFFSET,
        PWM_2,
        PWM_3,
        PWM_4,
        COUNT = PWM_4
    };

    enum class PWMModules
    {
        MODULE0 = 0,
        MODULE1,
        MODULE2,
        MODULE3,
        COUNT
    };

    enum class PWMChannel
    {
        A = 0,
        B,
        X
    };

    struct DriverPWMParams
    {
        PWMChannel channel;
        std::uint32_t frequency;
    };

    class DriverPWM
    {
      public:
        static std::shared_ptr<DriverPWM> Create(PWMInstances inst, PWMModules mod, const DriverPWMParams &params);

        DriverPWM(PWMInstances inst, PWMModules mod, const DriverPWMParams &params)
            : instance(inst), module(mod), parameters(params)
        {}

        virtual ~DriverPWM() = default;

        virtual void InitNextChannel(const DriverPWMParams &params) = 0;

        // Duty cycle in percent: 0 - 100
        virtual void SetDutyCycle(std::uint8_t duty_cycle, PWMChannel channel) = 0;

        virtual void Start(PWMChannel channel) = 0;

        virtual void Stop(PWMChannel channel) = 0;

        virtual void UpdateClockFrequency(bsp::CpuFrequencyMHz newFrequency) = 0;

      protected:
        PWMInstances instance;
        PWMModules module;
        const DriverPWMParams parameters;

      private:
        static std::weak_ptr<DriverPWM> pwmDrivers[static_cast<std::uint32_t>(PWMInstances::COUNT)]
                                                  [static_cast<std::uint32_t>(PWMModules::COUNT)];
    };

} // namespace drivers