Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
857ee488
D
Docs
项目概览
OpenHarmony
/
Docs
1 年多 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
857ee488
编写于
6月 20, 2023
作者:
W
wu-chengwen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add usb ddk guidelines
Signed-off-by:
N
wu-chengwen
<
wuchengwen4@huawei.com
>
上级
914a3b74
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
79 addition
and
0 deletion
+79
-0
zh-cn/application-dev/napi/usb-ddk-guidelines.md
zh-cn/application-dev/napi/usb-ddk-guidelines.md
+79
-0
未找到文件。
zh-cn/application-dev/napi/usb-ddk-guidelines.md
0 → 100644
浏览文件 @
857ee488
# USB DDK开发指导
## 场景介绍
USB DDK(USB Driver Develop Kit)是OpenHarmony为开发者提供的USB驱动程序开发套件,支持基于用户态、在应用层开发USB设备驱动。提供了一系列主机侧访问设备的接口,包括主机侧打开和关闭接口、管道同步异步读写通信、控制传输、中断传输等。
## 接口说明
| 名称 | 描述 |
| -------- | -------- |
| OH_Usb_Init(void) | 初始化DDK。 |
| OH_Usb_Release(void) | 释放DDK。 |
| OH_Usb_GetDeviceDescriptor(uint64_t deviceId, struct UsbDeviceDescriptor
*
desc) | 获取设备描述符。 |
| OH_Usb_GetConfigDescriptor(uint64_t deviceId, uint8_t configIndex, struct UsbDdkConfigDescriptor
**
const config) | 获取配置描述符。请在描述符使用完后使OH_Usb_FreeConfigDescriptor()释放描述符,否则会造成内存泄露。 |
| OH_Usb_FreeConfigDescriptor(const struct UsbDdkConfigDescriptor
*
const config) | 释放配置描述符,请在描述符使用完后释放描述符,否则会造成内存泄露。 |
| OH_Usb_ClaimInterface(uint64_t deviceId, uint8_t interfaceIndex, uint64_t
*
interfaceHandle) | 声明接口。 |
| OH_Usb_ReleaseInterface(uint64_t interfaceHandle) | 释放接口。 |
| OH_Usb_SendPipeRequest(const struct UsbRequestPipe
*pipe, UsbDeviceMemMap *
devMmap) | 发送管道请求,该接口为同步接口。中断传输和批量传输都使用该接口发送请求。 |
| OH_Usb_CreateDeviceMemMap(uint64_t deviceId, size_t size, UsbDeviceMemMap
**
devMmap) | 创建缓冲区。请在缓冲区使用完后,调用OH_Usb_DestroyDeviceMemMap()销毁缓冲区,否则会造成资源泄露。 |
| OH_Usb_DestroyDeviceMemMap(UsbDeviceMemMap
*
devMmap) | 销毁缓冲区。请在缓冲区使用完后及时销毁缓冲区,否则会造成资源泄露。 |
详细的接口说明请参考
[
USB DDK
](
../reference/native-apis/_usb_ddk.md
)
。
## USB DDK开发步骤
以下步骤描述了在
**OpenHarmony**
如何使用
**USB DDK**
开发USB驱动:
1.
**获取设备描述符**
。使用
**usb_ddk_api.h**
的
**OH_Usb_Init**
接口初始化DDK,并使用
**OH_Usb_GetDeviceDescriptor**
获取到设备描述符。
```c++
// 初始化USB DDK
OH_Usb_Init();
struct UsbDeviceDescriptor devDesc;
uint64_t deviceId = 0;
// 获取设备描述符
OH_Usb_GetDeviceDescriptor(deviceId, &devDesc);
```
2.
**获取配置描述符及声明接口**
。使用
**usb_ddk_api.h**
的
**OH_Usb_GetConfigDescriptor**
接口获取配置描述符
**config**
,并使用
**OH_Usb_ClaimInterface**
声明接口。
```c++
struct UsbDdkConfigDescriptor *config = nullptr;
// 获取配置描述符
OH_Usb_GetConfigDescriptor(deviceId, 1, &config);
// 根据配置描述符,找到所需要通信的interfaceIndex
uint8_t interfaceIndex = 0;
// 声明接口
uint64_t interfaceHandle = 0;
OH_Usb_ClaimInterface(deviceId, interfaceIndex, &interfaceHandle);
// 释放配置描述符
OH_Usb_FreeConfigDescriptor(config);
```
3.
**创建内存映射缓冲区及发送请求**
。使用
**usb_ddk_api.h**
的
**OH_Usb_CreateDeviceMemMap**
接口创建内存映射缓冲区
**devMmap**
,并使用
**OH_Usb_SendPipeRequest**
发送请求。
```c++
struct UsbDeviceMemMap *devMmap = nullptr;
// 创建用于存放数据的缓冲区
size_t bufferLen = 10;
OH_Usb_CreateDeviceMemMap(deviceId, bufferLen, &devMmap);
struct UsbRequestPipe pipe;
pipe.interfaceHandle = interfaceHandle;
// 根据配置描述符找到所要通信的端点
pipe.endpoint = 128;
pipe.timeout = UINT32_MAX;
// 发送请求
OH_Usb_SendPipeRequest(&pipe, devMmap);
```
4.
**释放资源**
。在所有请求处理完毕,程序退出前,使用
**usb_ddk_api.h**
的
**OH_Usb_DestroyDeviceMemMap**
接口销毁缓冲区。使用
**OH_Usb_ReleaseInterface**
释放接口。使用
**OH_Usb_Release**
释放USB DDK。
```c++
// 销毁缓冲区
OH_Usb_DestroyDeviceMemMap(devMmap);
// 释放接口
OH_Usb_ReleaseInterface(interfaceHandle);
// 释放USB DDK
OH_Usb_Release();
```
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录