//***********************************************************************************************************
//! @file        lmcal_exmc.h
//! @brief       Драйвер EXMC
//! @par         Поддерживаемые платформы: -
//! @version     v1.0.0
//! @date        23.06.2025
//!
//! @details     
//!              Настройки задаются в файле конфигурации lmcal_exmc_cfg.h.
//!
//!              Ограничения:
//!              - Ограничения драйвера зависят от модуля *_port.c и файла конфигурации *_cfg.h.
//!
//!              Возможности:
//!              - 
//!
//!              Порядок работы:
//!              - Настроить конфигурационный файл *_cfg.h;
//!              - Выполнить инициализацию драйвера *_init();
//!              - Выполнять обращение к памяти через указатели для каждого канала (см. lmcal_exmc_ch0_buf..)
//!              - ...
//!              - По завершению работы выполнить деинициализацию драйвера *_deinit().
//!
//***********************************************************************************************************

//! @addtogroup LMCAL
//! @{

//! @addtogroup EXMC
//! @{

#ifndef _LMCAL_EXMC_H
#define _LMCAL_EXMC_H

//******************************************** Включаемые файлы *********************************************

#include "lmcal_private.h"
#include "lmcal_exmc_cfg.h"


//******************************************* Определения типов *********************************************

// Логические каналы драйвера
typedef enum
{
    LMCAL_EXMC_CHANNEL0 = 0U,
    LMCAL_EXMC_CHANNEL1,
    LMCAL_EXMC_CHANNEL2,
    LMCAL_EXMC_CHANNEL3,
    LMCAL_EXMC_CHANNEL4,
    LMCAL_EXMC_CHANNEL5,
    LMCAL_EXMC_CHANNEL6,
    LMCAL_EXMC_CHANNEL7,
    LMCAL_EXMC_CHANNEL8,
    LMCAL_EXMC_CHANNEL9,
    LMCAL_EXMC_CHANNEL10,
    LMCAL_EXMC_CHANNEL11,
    LMCAL_EXMC_CHANNEL12,
    LMCAL_EXMC_CHANNEL13,
    LMCAL_EXMC_CHANNEL14,
    LMCAL_EXMC_CHANNEL15,
    
    LMCAL_EXMC_CHANNEL_QTY
} lmcal_exmc_channel_t;



//************************************ Глобальные (публичные) переменные ************************************

// Константные указатели на буфер указанного канала
#if (LMCAL_EXMC_CH0_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch0_buf;
#endif

#if (LMCAL_EXMC_CH1_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch1_buf;
#endif

#if (LMCAL_EXMC_CH2_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch2_buf;
#endif

#if (LMCAL_EXMC_CH3_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch3_buf;
#endif

#if (LMCAL_EXMC_CH4_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch4_buf;
#endif

#if (LMCAL_EXMC_CH5_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch5_buf;
#endif

#if (LMCAL_EXMC_CH6_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch6_buf;
#endif

#if (LMCAL_EXMC_CH7_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch7_buf;
#endif

#if (LMCAL_EXMC_CH8_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch8_buf;
#endif

#if (LMCAL_EXMC_CH9_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch9_buf;
#endif

#if (LMCAL_EXMC_CH10_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch10_buf;
#endif

#if (LMCAL_EXMC_CH11_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch11_buf;
#endif

#if (LMCAL_EXMC_CH12_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch12_buf;
#endif

#if (LMCAL_EXMC_CH13_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch13_buf;
#endif

#if (LMCAL_EXMC_CH14_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch14_buf;
#endif

#if (LMCAL_EXMC_CH15_ENABLE == 1)
extern lmcal_exmc_t* const lmcal_exmc_ch15_buf;
#endif

// Массив с константными указателями на буфера всех каналов
extern lmcal_exmc_t* const lmcal_exmc_buf[];


//******************************** Объявления глобальных (публичных) функций ********************************

//-----------------------------------------------------------------------------------------------------------
//! @brief       Инициализация модуля.
//! @param       -
//! @retval      см. fun_res_t
//-----------------------------------------------------------------------------------------------------------
extern fun_res_t lmcal_exmc_init(void);



//-----------------------------------------------------------------------------------------------------------
//! @brief       Денициализация модуля.
//! @param       -
//! @retval      см. fun_res_t
//-----------------------------------------------------------------------------------------------------------
extern fun_res_t lmcal_exmc_deinit(void);



//-----------------------------------------------------------------------------------------------------------
//! @brief       Стереть память всех включенных каналов.
//! @param[in]   symbol - символ, которым заполнить память
//! @retval      см. fun_res_t
//-----------------------------------------------------------------------------------------------------------
extern fun_res_t lmcal_exmc_erase_all(lmcal_exmc_t symbol);





//! @}
//! @}

#endif

//*********************************************** КОНЕЦ ФАЙЛА ***********************************************

