/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : hal_delay.c
  * @brief          : Delay hardware abstraction layer source file
  ******************************************************************************
  */
/* USER CODE END Header */

#include "hal.h"
#include "hal_delay.h"

/**
 * @brief Initialize delay module
 */
void hal_delay_init(void) {
    /* Call architecture specific delay initialization */
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F4
    hal_stm32f4_delay_init();
#else
#error "Unsupported HAL architecture"
#endif
}

/**
 * @brief Delay in milliseconds
 * @param ms: Delay time in milliseconds
 */
void hal_delay_ms(uint32_t ms) {
    /* Call architecture specific delay implementation */
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F4
    hal_stm32f4_delay_ms(ms);
#else
#error "Unsupported HAL architecture"
#endif
}

/**
 * @brief Delay in microseconds
 * @param us: Delay time in microseconds
 */
void hal_delay_us(uint32_t us) {
    /* Call architecture specific delay implementation */
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F4
    hal_stm32f4_delay_us(us);
#else
#error "Unsupported HAL architecture"
#endif
}

/**
 * @brief Get current system tick count in milliseconds
 * @return Current tick count in milliseconds
 */
uint32_t hal_get_tick(void) {
    /* Call architecture specific tick implementation */
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F4
    return hal_stm32f4_get_tick();
#else
#error "Unsupported HAL architecture"
#endif
}
