/* * efc_usb.h * * Created on: 21 Aug 2023 * Author: malyarenko */ #ifndef INCLUDE_EFC_USB_H_ #define INCLUDE_EFC_USB_H_ #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include /** * @defgroup Api API * * @{ */ /** * @defgroup CommonApi Общий API * * @{ */ /** @brief Тип конфигурации USB драйвера */ enum efc_usb_config_type { /** Конфигурация драйвера для работы в сервисном режиме */ EFC_USB_CONFIG_SV = 0x01, /** Конфигурация драйвера для работы в режиме загрузчика */ EFC_USB_CONFIG_LD = 0x02, }; /** * @brief Описание взаимодействия с пользователем драйвера * * Структура содержит параметры и пользовательские обратные вызовы * для обеспечения взаимодействия с пользовательской программой * * Структура должна быть проинициализирована до вызова функции @ref efc_usb_init * * Если какая либо конфигуарция не испоьзуется, соответствующее * поле должно быть задано @c NULL */ struct efc_usb_config { /** Конфигурация драйвера для работы в сервисном режиме */ const struct efc_usb_sv_config* sv; const struct efc_usb_ld_config* ld; }; /** * @brief Инициализация USB драйвера * * Вызов функции инициализации должен предшествовать всем оставльным функциям драйвера * * @param enable_config Флаги используемых конфигураций, объединённых через побитовое ИЛИ * @param current_config Флаг текущей конфигураций * * @return @c true при успешной инициализации; иначе @c false */ bool efc_usb_init(uint8_t enable_config, uint8_t current_config, const struct efc_usb_config* config); /** * @brief Денициализация USB драйвера * * После вызова драйвера обращения к его функциям запрещено * * @return @c void */ void efc_usb_fini(); /** * @brief Обработчик прерываний USB драйвера * * Обработчик должен быть зарегистрирован на прерывание от используемого модуля USB * * @return void */ void efc_usb_int_handler(); /** @} */ /* CommonApi */ /** @} */ /* Api */ #ifdef __cplusplus } #endif #endif /* INCLUDE_EFC_USB_H_ */