USB
Этот репозиторий содержит определения API для комплекта разработчика драйверов USB-хоста (DDK) и комплекта разработчика USB-устройств (DDK), а также их реализацию.
Рисунок 1. Логическое представление модулей на 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-хоста и устройства
Комплект разработчика USB-хост DDK предоставляет API возможностей драйвера, которые можно напрямую вызывать в пользовательском режиме. Эти API можно классифицировать по функциям как класс инициализации DDK, класс операций интерфейса и класс операций запроса. Эти API могут использоваться для выполнения инициализации DDK, привязки/отпускания и открытия/закрытия интерфейса, выделения/освобождения запроса и реализации изохронной или неизохронной передачи.
Таблица 1 описывает некоторые из API комплекта разработчика USB-хост DDK.
Таблица 1. API комплекта разработчика USB-хост DDK
В запросе приведены следующие функции:
Также в запросе есть ссылки на файл 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
*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 )