2 Star 0 Fork 980

zhao_haipeng / drivers_peripheral_1

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README_zh.md 34.62 KB
一键复制 编辑 原始数据 按行查看 历史
wzm 提交于 2022-04-08 23:52 . fix usb:modify parameter type of functions

USB

简介

该仓下主要包含USB Host DDK和USB Device DDK接口定义及其实现,提供的主要功能如下:

  • Usb Host DDK:负责提供用户态第三方功能驱动的USB设备数据读写接口,向内核USB驱动框架注册的设备插拔时间通知接口,提供移除USB逻辑设备的接口;

图 1 USB仓HOST侧相关模块逻辑视图

  • Usb Device DDK:负责创建和删除USB设备,接口的事件获取、打开、关闭等,管道同步异步读写通信,设置Usb自定义属性等;

图 2 USB仓Device侧相关模块逻辑视图

目录

该仓下源代码目录结构如下所示

/drivers/peripheral/usb
├── ddk             # USB模块DDK代码
│   └── device      # USB模块Device侧DDK实现
│   └── host        # USB模块Host侧DDK实现
├── gadget          # USB模块Device侧驱动Demo实现
│   └── function    # USB模块Device侧驱动Demo,包括ACM和ECM驱动
├── interfaces      # USB模块对用户态提供的驱动能力接口
│   └── ddk         # USB模块Device侧和Host侧对外提供的接口定义
├── net             # USB模块Host侧ECM驱动Demo实现
├── sample          # USB模块应用测试程序实现
│   └── device      # USB模块Device侧ACM驱动读写和测速应用程序实现,适配Linux和LiteOS系统
│   └── host        # USB模块Host侧ACM驱动读写和测速应用程序实现,适配Linux和LiteOS系统
├── serial          # USB模块Host侧ACM驱动Demo实现
├── test            # USB模块的测试代码
│   └── unittest    # USB模块的单元测试代码,包括Host侧和Device侧

接口说明

Usb Host DDK提供给用户态可直接调用的驱动能力接口,按照功能分类三大类:DDK初始化类、对interface对象操作类、对request对象操作类,可以提供DDK初始化、interface绑定和释放,打开和关闭操作,request的申请和释放,同步和异步传输等。

提供的部分接口说明如表1 USB Host DDK接口所示:

表 1 USB HOST DDK接口

头文件

接口名称

功能描述

usb_ddk_interface.h

int32_t UsbInitHostSdk(struct UsbSession **session);

USB主机端驱动开发工具包初始化

int32_t UsbExitHostSdk(const struct UsbSession *session);

USB主机端驱动开发工具包退出

struct UsbInterface *UsbClaimInterface(const struct UsbSession *session, uint8_t busNum, uint8_t usbAddr, uint8_t interfaceIndex);

获取USB接口对象

int32_t UsbReleaseInterface(const struct UsbInterface *interfaceObj);

释放USB接口对象

int32_t UsbAddOrRemoveInterface(const struct UsbSession *session, uint8_t busNum, uint8_t usbAddr, uint8_t interfaceIndex, UsbInterfaceStatus status);

增加移除接口

UsbInterfaceHandle *UsbOpenInterface(const struct UsbInterface *interfaceObj);

打开USB对象接口

int32_t UsbCloseInterface(const UsbInterfaceHandle *interfaceHandle);

关闭USB接口对象

int32_t UsbSelectInterfaceSetting(const UsbInterfaceHandle *interfaceHandle, uint8_t settingIndex, struct UsbInterface **interfaceObj);

设置可选配置

int32_t UsbGetPipeInfo(const UsbInterfaceHandle *interfaceHandle, uint8_t settingIndex, uint8_t pipeId, struct UsbPipeInfo *pipeInfo);

获取指定可选设置的管道信息

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

int32_t UsbRawInit(struct UsbSession **session);

USB驱动开发工具包专家模式初始化

int32_t UsbRawExit(const struct UsbSession *session);

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);

获取给定设备指定ID的设备配置描述符

void UsbRawFreeConfigDescriptor(const struct UsbRawConfigDescriptor *config);

释放配置描述符内存空间

int32_t UsbRawGetConfiguration(const UsbRawHandle *devHandle, int32_t *config);

获取当前激活配置

int32_t UsbRawSetConfiguration(const UsbRawHandle *devHandle, int32_t config);

设置当前激活配置

int32_t UsbRawGetDescriptor(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawDescriptorParam *param, const unsigned char *data);

获取描述符信息

UsbRawDevice *UsbRawGetDevice(const UsbRawHandle *devHandle);

由设备句柄获取设备指针

int32_t UsbRawGetDeviceDescriptor(const UsbRawDevice *rawDev, struct UsbDeviceDescriptor *desc);

获取给定设备的USB设备描述符

int32_t UsbRawClaimInterface(const UsbRawHandle *devHandle, int32_t interfaceNumber);

声明给定设备句柄上的接口

int32_t UsbRawReleaseInterface(const UsbRawHandle *devHandle, int32_t interfaceNumber);

释放之前声明的接口

int32_t UsbRawResetDevice(const UsbRawHandle *devHandle);

复位设备

struct UsbRawRequest *UsbRawAllocRequest(const UsbRawHandle *devHandle, int32_t isoPackets, int32_t length);

分配一个带有指定数量的同步包描述符的传输请求

int32_t UsbRawFreeRequest(const struct UsbRawRequest *request);

释放之前分配的传输请求

int32_t UsbRawFillBulkRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawFillRequestData *fillData);

填充批量传输请求所需信息

int32_t UsbRawFillControlSetup(const unsigned char *setup, const struct UsbControlRequestData *requestData);

填充控制传输设置包所需信息

int32_t UsbRawFillControlRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawFillRequestData *fillData);

填充控制传输请求所需信息

int32_t UsbRawFillInterruptRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawFillRequestData *fillData);

填充中断传输请求所需信息

int32_t UsbRawFillIsoRequest(const struct UsbRawRequest *request, const UsbRawHandle *devHandle, const struct UsbRawFillRequestData *fillData);

填充同步传输(Isochronous Transfers)请求所需信息

int32_t UsbRawSubmitRequest(const struct UsbRawRequest *request);

提交一个传输请求

int32_t UsbRawCancelRequest(const struct UsbRawRequest *request);

取消一个传输请求

int32_t UsbRawHandleRequests(const UsbRawHandle *devHandle);

传输请求事件完成处理

Usb Device DDK提供设备管理、IO管理、配置管理,主要功能有:创建和删除设备、获取和打开接口、同步和异步传输等。

提供的部分接口说明如表2 USB Device DDK接口所示:

表 2 USB Device DDK接口

头文件

接口名称

功能描述

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 UsbFnStartRecvInterfaceEvent(struct UsbFnInterface *interface, uint32_t eventMask, UsbFnEventCallback callback, void *context);

开始接受Event事件

int32_t UsbFnStopRecvInterfaceEvent(struct UsbFnInterface *interface);

停止接受Event事件

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);

设置自定义属性

usbfn_request.h

struct UsbFnRequest *UsbFnAllocCtrlRequest(UsbFnInterfaceHandle handle, uint32_t len);

申请一个控制请求

struct UsbFnRequest *UsbFnAllocRequest(UsbFnInterfaceHandle handle, uint8_t pipe, uint32_t len);

申请一个数据请求

int32_t UsbFnFreeRequest(struct UsbFnRequest *req);

释放一个请求

int32_t UsbFnSubmitRequestAsync(struct UsbFnRequest *req);

发送异步请求

int32_t UsbFnSubmitRequestSync(struct UsbFnRequest *req, uint32_t timeout);

发送同步请求

int32_t UsbFnCancelRequest(struct UsbFnRequest *req);

取消请求

使用说明

该仓核心功能包括两个方面:

  1. Usb Host侧,包括DDK API和RAW API两套接口,提供用户态第三方功能驱动的USB设备数据读写接口。
  2. Usb Device接口可以定制不同Usb设备,如串口、网卡、键盘、自定义设备等。

相关仓

驱动子系统

drivers_framework

drivers_adapter

drivers_adapter_khdf_linux

drivers_peripheral

1
https://gitee.com/zhao_haipeng/drivers_peripheral_1.git
git@gitee.com:zhao_haipeng/drivers_peripheral_1.git
zhao_haipeng
drivers_peripheral_1
drivers_peripheral_1
master

搜索帮助