#include "linkBlink.h"


/* Локальная копия конфигурации */
static LED_BlinkRx_Config_t led_cfg;

/* Внутренние переменные состояния */
static uint32_t last_tick = 0;      // Время последнего переключения
static uint8_t toggle_counter = 0;  // Счётчик переключений
static uint8_t blinking = 0;        // Флаг активного мигания


/**
 * @brief Инициализация структуры
 */
void LED_BlinkRx_Init(LED_BlinkRx_Config_t *cfg)
{
    led_cfg = *cfg;
}


/**
 * @brief Запуск мигания при приёме данных
 */
void LED_BlinkRx_OnRx(void)
{
		
    blinking = 1;
    toggle_counter = 0;
    last_tick = HAL_GetTick();
}


/**
 * @brief Функция должна вызываться регулярно (в while(1))
 */
void LED_BlinkRx_Process(void)
{
    if (!blinking)
        return;

    /* Проверка истечения периода */
    if (HAL_GetTick() - last_tick >= led_cfg.blink_period)
    {
        last_tick = HAL_GetTick();

        /* Переключаем состояние пина */
        HAL_GPIO_TogglePin(led_cfg.port, led_cfg.pin);
        toggle_counter++;

        /* Каждое мигание = 2 переключения (вкл + выкл) */
        if (toggle_counter >= led_cfg.blink_count * 2)
        {
            HAL_GPIO_WritePin(led_cfg.port, led_cfg.pin, GPIO_PIN_SET);
            blinking = 0;
        }
    }
}