/*
 * LED.cpp
 *
 *  Created on: Jun 25, 2023
 *      Author: Carst
 */

#include <stm32g0xx_ll_gpio.h>
#include "STM32G071KBT6.hpp"
#include "LED.hpp"

namespace ElektronischeLast
{
    LED::LED(std::uint32_t interval)
    {
      LL_GPIO_InitTypeDef GPIO_InitStruct = {
        .Pin = LL_GPIO_PIN_6,
        .Mode = LL_GPIO_MODE_OUTPUT,
        .Speed = LL_GPIO_SPEED_FREQ_LOW,
        .OutputType = LL_GPIO_OUTPUT_PUSHPULL,
        .Pull = LL_GPIO_PULL_NO,
      };

      LL_GPIO_ResetOutputPin(GPIOC, LL_GPIO_PIN_6);
      LL_GPIO_Init(GPIOC, &GPIO_InitStruct);

      this->last_toggle = systick;
      this->interval = interval;
    }

    LED::~LED()
    {

    }

    void LED::blink(void)
    {
      if((systick - this->last_toggle) > this->interval)
      {
        this->toggle();
        this->last_toggle = systick;
      }
    }

    void LED::toggle(void)
    {
      LL_GPIO_TogglePin(GPIOC, LL_GPIO_PIN_6);
    }
}