#include "pat_pwm.h"

static pwm_record pwm[3];

void pwm_set_duty(uint8 n, uint8 duty)
{
os_printf("pwm_set (%d): %d\r\n",n,duty);
    pwm[n].duty = duty;
}

void hw_timer()
{
    uint8 i;
    for (i=0;i<3;i++)
    {
        if (pwm[i].duty == 255)
        {
            // high
            gpio_output_set(pwm[i].pin, 0 , pwm[i].pin, 0);
        }
        else if (pwm[i].duty == 0)
        {
            // low
            gpio_output_set(0, pwm[i].pin, pwm[i].pin, 0);
        }
        else
        {
            pwm[i].count++;
            if (pwm[i].count == 255)
            {
                // high
                gpio_output_set(pwm[i].pin, 0 , pwm[i].pin, 0);
            }
            else if (pwm[i].count == pwm[i].duty)
            {
                // low
                gpio_output_set(0, pwm[i].pin, pwm[i].pin, 0);
            }
        }
    }
}

void init_pwm()
{
    PIN_FUNC_SELECT(PWM1_PERI, PWM1_FUNC);
    PIN_FUNC_SELECT(PWM2_PERI, PWM2_FUNC);
    PIN_FUNC_SELECT(PWM3_PERI, PWM3_FUNC);

    uint8 i;
    for (i=0;i<3;i++)
    {
        pwm[i].count = 0;
        pwm[i].duty = 0;
    }
    pwm[0].pin = PWM1_PIN;
    pwm[1].pin = PWM2_PIN;
    pwm[2].pin = PWM3_PIN;

    os_printf("init pwm\r\n");
    hw_timer_init(0,1);
    hw_timer_set_func(hw_timer);
    hw_timer_arm(50);
    os_printf("pwm is initialized\r\n");
}

