1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openharmony-drivers_peripheral

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 17 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 07:36 80e6969

USB

Введение

Этот репозиторий содержит определения API для комплекта разработчика драйверов USB-хоста (DDK) и комплекта разработчика USB-устройств (DDK), а также их реализацию.

  • Комплект разработчика USB-хост DDK: предоставляет API для чтения и записи данных USB-устройства сторонних функциональных драйверов в пользовательском режиме, регистрации уведомлений о времени вставки/удаления устройства с помощью инфраструктуры ядра USB-драйвера и удаления логических устройств USB.

Рисунок 1. Логическое представление модулей на USB-хосте

  • Комплект разработчика USB-устройство DDK: создаёт и удаляет USB-устройства, получает уведомления о событиях, включает или отключает прослушивание событий, реализует неизохронную и изохронную передачу данных по каналам USB и устанавливает пользовательские атрибуты USB.

Рисунок 2. Логическое представление модулей на USB-устройстве

Структура каталогов

Структура каталогов исходного кода выглядит следующим образом:

/drivers/peripheral/usb
├── ddk             # DDK USB-модулей
│   └── device      # Реализация DDK для USB-устройства
│   └── host        # Реализация DDK для USB-хоста
├── gadget          # Демонстрационная реализация драйвера для USB-устройства
│   └── function    # Демоверсия драйвера для USB-устройства, включая абстрактную модель связи (ACM) и Ethernet-контроллер (ECM)
├── interfaces      # Драйвер API-интерфейсов в пользовательском режиме
│   └── ddk         # Определения API для USB-устройства и хоста
├── net             # Демонстрационная версия ECM-драйвера для USB-хоста
├── sample          # Программа тестирования приложений
│   └── device      # Реализация ACM-драйвера, чтение/запись и тест скорости для USB-устройства (для Linux и LiteOS)
│   └── host        # Реализация ACM-драйвера, чтение/запись и тест скорости для USB-хоста (для Linux и LiteOS)
├── serial          # Демонстрационная версия ACM-драйвера для USB-хоста
├── test            # Тестовый код
│   └── unittest    # Модульный тестовый код для USB-хоста и устройства

Доступные API

Комплект разработчика USB-хост DDK предоставляет API возможностей драйвера, которые можно напрямую вызывать в пользовательском режиме. Эти API можно классифицировать по функциям как класс инициализации DDK, класс операций интерфейса и класс операций запроса. Эти API могут использоваться для выполнения инициализации DDK, привязки/отпускания и открытия/закрытия интерфейса, выделения/освобождения запроса и реализации изохронной или неизохронной передачи.

Таблица 1 описывает некоторые из API комплекта разработчика USB-хост DDK.

Таблица 1. API комплекта разработчика USB-хост DDK

Заголовочный файл

API

Описание

usb_ddk_interface.h

В запросе используется язык программирования Markdown. Текст запроса представляет собой фрагмент кода на языке C, который описывает функции работы с USB-интерфейсом.

В запросе приведены следующие функции:

  • Obtains USB pipe information — получает информацию о каналах обмена данными по USB;
  • *int32_t UsbClearInterfaceHalt(const UsbInterfaceHandle interfaceHandle, uint8_t pipeAddress) — очищает состояние канала с указанным индексом;
  • **struct UsbRequest UsbAllocRequest(const UsbInterfaceHandle interfaceHandle, int32_t isoPackets, int32_t length) — выделяет запрос;
  • *int32_t UsbFreeRequest(const struct UsbRequest request) — освобождает запрос;
  • *int32_t UsbSubmitRequestAsync(const struct UsbRequest request) — отправляет запрос асинхронно;
  • **int32_t UsbFillRequest(const struct UsbRequest *request, const UsbInterfaceHandle interfaceHandle, const struct UsbRequestParams params) — заполняет запрос;
  • *int32_t UsbCancelRequest(const struct UsbRequest request) — отменяет асинхронный запрос;
  • *int32_t UsbSubmitRequestSync(const struct UsbRequest request) — отправляет синхронный запрос.

Также в запросе есть ссылки на файл usb_raw_api.h.

Это технический текст, в котором описываются функции для работы с USB. **int32_t UsbRawInit(struct UsbSession session);

Инициализирует низкоуровневые API USB.

*int32_t UsbRawExit(const struct UsbSession session);

Завершает работу низкоуровневых API USB.

**UsbRawHandle UsbRawOpenDevice(const struct UsbSession session, uint8_t busNum, uint8_t usbAddr);

Открывает устройство USB.

*int32_t UsbRawCloseDevice(const UsbRawHandle devHandle);

Закрывает устройство USB.

**int32_t UsbRawSendControlRequest(const struct UsbRawRequest *request, const UsbRawHandle devHandle, const struct UsbControlRequestData requestData);

Выполняет изохронную передачу управления.

**int32_t UsbRawSendBulkRequest(const struct UsbRawRequest *request, const UsbRawHandle devHandle, const struct UsbRequestData requestData);

Выполняет массовую изохронную передачу данных.

**int32_t UsbRawSendInterruptRequest(const struct UsbRawRequest *request, const UsbRawHandle devHandle, const struct UsbRequestData requestData);

Выполняет прерывистую изохронную передачу данных.

**int32_t UsbRawGetConfigDescriptor(const UsbRawDevice *rawDev, uint8_t configIndex, struct UsbRawConfigDescriptor config);

Получает дескриптор конфигурации устройства.

*void UsbRawFreeConfigDescriptor(const struct UsbRawConfigDescriptor config);

Освобождает дескриптор конфигурации. Освобождает память конфигурационного дескриптора.

int32_t UsbRawGetConfiguration(const UsbRawHandle *devHandle, int32_t *config); Получает используемую конфигурацию.

Obtains the configuration in use.

int32_t UsbRawSetConfiguration(const UsbRawHandle *devHandle, int32_t config); Устанавливает используемую конфигурацию.

Sets the configuration in use.

int32_t UsbRawGetDescriptor(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawDescriptorParam *param, const unsigned char *data); Получает информацию о дескрипторе.

Obtains descriptor information.

UsbRawDevice *UsbRawGetDevice(const UsbRawHandle *devHandle); Получает указатель на устройство на основе дескриптора устройства.

Obtains the device pointer based on the device handle.

int32_t UsbRawGetDeviceDescriptor(const UsbRawDevice *rawDev, struct UsbDeviceDescriptor *desc); Получает дескриптор устройства указанного USB-устройства.

Obtains the device descriptor of the specified USB device.

int32_t UsbRawClaimInterface(const UsbRawHandle *devHandle, int32_t interfaceNumber); Объявляет интерфейс для указанного дескриптора устройства.

Declares the interface on the specified device handle.

int32_t UsbRawReleaseInterface(const UsbRawHandle *devHandle, int32_t interfaceNumber); Освобождает ранее объявленный интерфейс.

Releases the previously declared interface.

int32_t UsbRawResetDevice(const UsbRawHandle *devHandle); Сбрасывает устройство.

Resets a device. Выделяет запрос на передачу с указанным количеством дескрипторов синхронизирующих пакетов.

Освобождает ранее выделенный запрос на передачу.

Заполняет запрос на массовую передачу данных.

Заполняет пакет настройки передачи управления.

Заполняет запрос передачи управления.

Заполняет запрос прерывания передачи.

Заполняет запрос изохронной передачи.

Отправляет запрос на передачу данных.

Отменяет запрос на передачу. Отмена запроса на передачу.

Cancels a transfer request.

Обработка запроса на управление устройством.

int32_t UsbRawHandleRequests(const UsbRawHandle *devHandle);

Handles a transfer request event.

USB-устройство DDK предоставляет API для управления устройствами, ввода/вывода и конфигурации, которые можно использовать для создания и удаления устройства, получения/открытия интерфейса и выполнения изохронной или неизохронной передачи.

Таблица 2 описывает некоторые из USB-устройств DDK API.

Таблица 2. API USB-устройства DDK

Заголовок файла API Описание
usbfn_device.h const struct UsbFnDevice *UsbFnCreateDevice(const char *udcName, const struct UsbFnDescriptorData *descriptor); Создаёт USB-устройство.
int32_t UsbFnRemoveDevice(struct UsbFnDevice *fnDevice); Удаляет USB-устройство.
const struct UsbFnDevice *UsbFnGetDevice(const char *udcName); Получает USB-устройство.
usbfn_interface.h

*int32_t UsbFnStopRecvInterfaceEvent(struct UsbFnInterface interface) — останавливает получение событий.

*UsbFnInterfaceHandle UsbFnOpenInterface(struct UsbFnInterface interface) — открывает интерфейс.

int32_t UsbFnCloseInterface(UsbFnInterfaceHandle handle) — закрывает интерфейс.

**int32_t UsbFnGetInterfacePipeInfo(struct UsbFnInterface interface, uint8_t pipeId, struct UsbFnPipeInfo info) — получает информацию о канале.

**int32_t UsbFnSetInterfaceProp(const struct UsbFnInterface *interface, const char name, const char value) — устанавливает пользовательские атрибуты.

Примечание: в запросе присутствуют фрагменты кода на языке C, которые не были переведены. Текст запроса:

id="p16290141681918"><a name="p16290141681918"></a><a name="p16290141681918"></a>struct UsbFnRequest *UsbFnAllocRequest(UsbFnInterfaceHandle handle, uint8_t pipe, uint32_t len);</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1929141611198"><a name="p1929141611198"></a><a name="p1929141611198"></a>Allocates a data request.</p>
</td>
</tr>
<tr id="row1948179195"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1395181710193"><a name="p1395181710193"></a><a name="p1395181710193"></a>int32_t UsbFnFreeRequest(struct UsbFnRequest *req);</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p169531741912"><a name="p169531741912"></a><a name="p169531741912"></a>Releases a request.</p>
</td>
</tr>
<tr id="row1331121813197"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p533121871912"><a name="p533121871912"></a><a name="p533121871912"></a>int32_t UsbFnSubmitRequestAsync(struct UsbFnRequest *req);</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p4331131817195"><a name="p4331131817195"></a><a name="p4331131817195"></a> Sends a request asynchronously.</p>
</td>
</tr>
<tr id="row1393181951920"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p79410191191"><a name="p79410191191"></a><a name="p79410191191"></a>int32_t UsbFnSubmitRequestSync(struct UsbFnRequest *req, uint32_t timeout);</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p17948193197"><a name="p17948193197"></a><a name="p17948193197"></a>Sends a request synchronously.</p>
</td>
</tr>
<tr id="row12422102092613"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p194231720102610"><a name="p194231720102610"></a><a name="p194231720102610"></a>int32_t UsbFnCancelRequest(struct UsbFnRequest *req);</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p342315202267"><a name="p342315202267"></a><a name="p342315202267"></a>Cancels a request.</p>
</td>
</tr>

Перевод текста на русский язык:

Структуре UsbFnRequest присваивается значение с помощью функции UsbFnAllocRequest, которая принимает в качестве аргументов дескриптор интерфейса UsbFn (handle), номер канала pipe и длину len.

Функция allocates a data request выделяет запрос данных.

Функция int32_t UsbFnFreeRequest освобождает запрос, который передаётся через указатель на структуру req.

В асинхронном режиме отправляет запрос функция int32_t UsbFnSubmitRequestAsync, которой также передаётся указатель на структуру запроса req.

Синхронно отправляет запрос функция int32_t UsbFnSubmitRequestSync, которой дополнительно передаётся значение таймаута timeout.

Запрос отменяется функцией int32_t UsbFnCancelRequest, которой передаётся указатель на структуру запроса req.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/openharmony-drivers_peripheral.git
git@api.gitlife.ru:oschina-mirror/openharmony-drivers_peripheral.git
oschina-mirror
openharmony-drivers_peripheral
openharmony-drivers_peripheral
master