98 lines
2.9 KiB
C
98 lines
2.9 KiB
C
/*
|
||
* 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 <stdint.h>
|
||
#include <stdbool.h>
|
||
|
||
#include <efc_usb/status.h>
|
||
#include <efc_usb/service.h>
|
||
#include <efc_usb/loader.h>
|
||
|
||
/**
|
||
* @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_ */
|