#include "stm32f0xx_hal.h"
#include "logic.h"
#include "pwm_in.h"
#include "gpio.h"
#include "pwm_out.h"


//
void logic_main(void)
{
    IWDG->KR = 0xAAAA;
      
    if (get_button()) 
    {
        gpio_set_output(true);
        HAL_Delay(500);
        IWDG->KR = 0xAAAA;
        HAL_Delay(500);
        IWDG->KR = 0xAAAA;
        logic_set_out_pwm();
        HAL_Delay(500);
        IWDG->KR = 0xAAAA;
        gpio_set_output(false);
        tim_pwm_pulse_idle();
        
        set_button(false);
    }   
    
}

//
void logic_set_out_pwm(void)
{
    tim_pwm_out_set_pulse(PWM_OUT_CH_1, 1750);
}

//
void wdt_init(void)
{
    RCC_OscInitTypeDef RCC_OscInitStruct;
  
    RCC_OscInitStruct.OscillatorType =  RCC_OSCILLATORTYPE_LSI;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    RCC_OscInitStruct.LSIState = RCC_LSI_ON;
    HAL_RCC_OscConfig(&RCC_OscInitStruct);
    
    // 1. Enable the IWDG by writing 0x0000 CCCC in the IWDG_KR register.
    IWDG->KR = 0xCCCC;
    // 2. Enable register access by writing 0x0000 5555 in the IWDG_KR register.
    IWDG->KR = 0x5555;
    // 3. Write the IWDG prescaler by programming IWDG_PR from 0 to 7.
    IWDG->PR = 4;
    // 4. Write the reload register (IWDG_RLR).
    IWDG->RLR = 1000;
    // 5. Wait for the registers to be updated (IWDG_SR = 0x0000 0000).
    while (IWDG->SR);
    // 6. Refresh the counter value with IWDG_RLR (IWDG_KR = 0x0000 AAAA)
    IWDG->KR = 0xAAAA;
}