/**** Includes ****/
#include "../utils/utils.h"
#include "mcu/mcu_hal.h"
#include "pwm.h"

using namespace bsp;

/**** Private definitions ****/
/**** Private constants ****/
/**** Private variables ****/
/**** Private function declarations ****/

/**** Public function definitions ****/
bsp::PWMout::PWMout(uint8_t pwm_ch)
{
	this->pwm_ch = pwm_ch;
	this->write(0);
}

bsp::PWMout::~PWMout(void)
{
	this->write(0);
}

void bsp::PWMout::write(uint8_t duty)
{
	// Convert percent to 16b duty cycle
	uint16_t dc = util::percent_to_16b(duty);
	
	// Set PWM
	mcu::pwm_write(this->pwm_ch, dc);
	this->last_duty = duty;
}

uint8_t bsp::PWMout::get_set_duty(void)
{
	return this->last_duty;
}

/**** Private function definitions ****/
