// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
#include "drivers/pwm/DriverPWM.hpp"
#include "../fsl_drivers/fsl_common.h"
#include "../fsl_drivers/fsl_pwm.h"
#include "mutex.hpp"
namespace drivers
{
class RT1051DriverPWM : public DriverPWM
{
public:
RT1051DriverPWM(PWMInstances inst, PWMModules mod, const DriverPWMParams ¶ms);
~RT1051DriverPWM() final;
void SetDutyCycle(std::uint8_t dutyCyclePercent) final;
void Start() final;
void Stop() final;
void UpdateClockFrequency(std::uint32_t newFrequency) final;
enum class PwmState
{
Off,
On,
};
private:
PwmState GetPwmState();
void SetupPWMChannel(PWMChannel channel);
void SetupPWMInstance(std::uint32_t clockFrequency);
void ForceLowOutput();
void RestorePwmOutput();
PWM_Type *base = nullptr;
pwm_submodule_t pwmModule = kPWM_Module_0;
pwm_signal_param_t pwmSignalConfig = {.pwmChannel = kPWM_PwmB,
.dutyCyclePercent = 0,
.level = kPWM_HighTrue,
.deadtimeValue = 0,
.faultState = kPWM_PwmFaultState0};
std::uint8_t lastDutyCycle = 0;
cpp_freertos::MutexStandard frequencyChangeMutex;
};
} // namespace drivers