Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
f44eec2c
D
Docs
项目概览
OpenHarmony
/
Docs
大约 2 年 前同步成功
通知
161
Star
293
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看板
未验证
提交
f44eec2c
编写于
10月 18, 2022
作者:
O
openharmony_ci
提交者:
Gitee
10月 18, 2022
浏览文件
操作
浏览文件
下载
差异文件
!10449 add usb error code
Merge pull request !10449 from 吴成文/master
上级
eaf702c9
a548094f
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
1074 addition
and
99 deletion
+1074
-99
zh-cn/application-dev/device/usb-guidelines.md
zh-cn/application-dev/device/usb-guidelines.md
+2
-1
zh-cn/application-dev/reference/apis/js-apis-usb-deprecated.md
.../application-dev/reference/apis/js-apis-usb-deprecated.md
+862
-0
zh-cn/application-dev/reference/apis/js-apis-usb.md
zh-cn/application-dev/reference/apis/js-apis-usb.md
+108
-28
zh-cn/application-dev/reference/errorcodes/errcode-usb.md
zh-cn/application-dev/reference/errorcodes/errcode-usb.md
+19
-0
zh-cn/device-dev/driver/driver-peripherals-usb-des.md
zh-cn/device-dev/driver/driver-peripherals-usb-des.md
+83
-70
未找到文件。
zh-cn/application-dev/device/usb-guidelines.md
浏览文件 @
f44eec2c
...
...
@@ -4,7 +4,7 @@
## 场景介绍
Host模式下,可以获取到已经连接的设备列表,并根据需要打开和关闭设备、控制设备权限、进行数据传输等。
Host模式下,可以获取到已经连接的
USB
设备列表,并根据需要打开和关闭设备、控制设备权限、进行数据传输等。
## 接口说明
...
...
@@ -19,6 +19,7 @@ USB类开放能力如下,具体请查阅[API参考文档](../reference/apis/js
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| hasRight(deviceName: string): boolean | 如果“使用者”(如各种App或系统)有权访问设备则返回true;无权访问设备则返回false。 |
| requestRight(deviceName: string): Promise
<
boolean
>
| 请求给定软件包的临时权限以访问设备。 |
| removeRight(deviceName: string): boolean | 移除软件包对设备的访问权限。|
| connectDevice(device: USBDevice): Readonly
<
USBDevicePipe
>
| 根据
`getDevices()`
返回的设备信息打开USB设备。 |
| getDevices(): Array
<
Readonly
<
USBDevice
>>
| 返回USB设备列表。 |
| setConfiguration(pipe: USBDevicePipe, config: USBConfig): number | 设置设备的配置。 |
...
...
zh-cn/application-dev/reference/apis/js-apis-usb-deprecated.md
0 → 100644
浏览文件 @
f44eec2c
# USB管理
本模块主要提供管理USB设备的相关功能,包括查询USB设备列表、批量数据传输、控制命令传输、权限控制等。
> **说明:**
>
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
>
> 从API version 9开始,该接口不再维护,推荐使用新接口[`@ohos.usbV9`](js-apis-usb.md)。
## 导入模块
```
js
import
usb
from
"
@ohos.usb
"
;
```
## usb.getDevices
getDevices(): Array
<
Readonly
<
USBDevice
>>
获取USB设备列表。
**系统能力:**
SystemCapability.USB.USBManager
**返回值:**
| 类型 | 说明 |
| ---------------------------------------------------- | ------- |
| Array
<
Readonly
<
[USBDevice](#usbdevice)
>>
| 设备信息列表。 |
**示例:**
```
js
let
devicesList
=
usb
.
getDevices
();
console
.
log
(
`devicesList =
${
JSON
.
stringify
(
devicesList
)}
`
);
//devicesList 返回的数据结构
//此处提供一个简单的示例,如下
[
{
name
:
"
1-1
"
,
serial
:
""
,
manufacturerName
:
""
,
productName
:
""
,
version
:
""
,
vendorId
:
7531
,
productId
:
2
,
clazz
:
9
,
subclass
:
0
,
protocol
:
1
,
devAddress
:
1
,
busNum
:
1
,
configs
:
[
{
id
:
1
,
attributes
:
224
,
isRemoteWakeup
:
true
,
isSelfPowered
:
true
,
maxPower
:
0
,
name
:
"
1-1
"
,
interfaces
:
[
{
id
:
0
,
protocol
:
0
,
clazz
:
9
,
subclass
:
0
,
alternateSetting
:
0
,
name
:
"
1-1
"
,
endpoints
:
[
{
address
:
129
,
attributes
:
3
,
interval
:
12
,
maxPacketSize
:
4
,
direction
:
128
,
number
:
1
,
type
:
3
,
interfaceId
:
0
,
},
],
},
],
},
],
},
]
```
## usb.connectDevice
connectDevice(device: USBDevice): Readonly
<
USBDevicePipe
>
打开USB设备。
需要调用
[
usb.getDevices
](
#usbgetdevices
)
获取设备信息以及device,再调用
[
usb.requestRight
](
#usbrequestright
)
获取设备请求权限。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| device |
[
USBDevice
](
#usbdevice
)
| 是 | USB设备信息。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| Readonly
<
[USBDevicePipe](#usbdevicepipe)
>
| 指定的传输通道对象。 |
**示例:**
```
js
let
devicepipe
=
usb
.
connectDevice
(
device
);
console
.
log
(
`devicepipe =
${
JSON
.
stringify
(
devicepipe
)}
`
);
```
## usb.hasRight
hasRight(deviceName: string): boolean
判断是否有权访问该设备。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| deviceName | string | 是 | 设备名称。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| boolean | true表示有访问设备的权限,false表示没有访问设备的权限。 |
**示例:**
```
js
let
devicesName
=
"
1-1
"
;
let
bool
=
usb
.
hasRight
(
devicesName
);
console
.
log
(
bool
);
```
## usb.requestRight
requestRight(deviceName: string): Promise
<
boolean
>
请求软件包的临时权限以访问设备。使用Promise异步回调。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| deviceName | string | 是 | 设备名称。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| Promise
<
boolean
>
| Promise对象,返回临时权限的申请结果。返回true表示临时权限申请成功;返回false则表示临时权限申请失败。 |
**示例:**
```
js
let
devicesName
=
"
1-1
"
;
usb
.
requestRight
(
devicesName
).
then
((
ret
)
=>
{
console
.
log
(
`requestRight =
${
JSON
.
stringify
(
ret
)}
`
);
});
```
## usb.claimInterface
claimInterface(pipe: USBDevicePipe, iface: USBInterface, force?: boolean): number
注册通信接口。
需要调用
[
usb.getDevices
](
#usbgetdevices
)
获取设备信息以及interfaces;调用
[
usb.requestRight
](
#usbrequestright
)
获取设备请求权限;调用
[
usb.connectDevice
](
#usbconnectdevice
)
接口得到devicepipe作为参数。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| pipe |
[
USBDevicePipe
](
#usbdevicepipe
)
| 是 | 用于确定总线号和设备地址。 |
| iface |
[
USBInterface
](
#usbinterface
)
| 是 | 用于确定需要获取接口的索引。 |
| force | boolean | 否 | 可选参数,是否强制获取。默认值为false
,表示不强制获取。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| number | 注册通信接口成功返回0;注册通信接口失败返回其他错误码。 |
**示例:**
```
js
let
ret
=
usb
.
claimInterface
(
devicepipe
,
interfaces
);
console
.
log
(
`claimInterface =
${
ret
}
`
);
```
## usb.releaseInterface
releaseInterface(pipe: USBDevicePipe, iface: USBInterface): number
释放注册过的通信接口。
需要调用
[
usb.claimInterface
](
#usbclaiminterface
)
先获取接口,才能使用此方法释放接口。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| pipe |
[
USBDevicePipe
](
#usbdevicepipe
)
| 是 | 用于确定总线号和设备地址。 |
| iface |
[
USBInterface
](
#usbinterface
)
| 是 | 用于确定需要释放接口的索引。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| number | 释放接口成功返回0;释放接口失败返回其他错误码。 |
**示例:**
```
js
let
ret
=
usb
.
releaseInterface
(
devicepipe
,
interfaces
);
console
.
log
(
`releaseInterface =
${
ret
}
`
);
```
## usb.setConfiguration
setConfiguration(pipe: USBDevicePipe, config: USBConfig): number
设置设备配置。
需要调用
[
usb.getDevices
](
#usbgetdevices
)
获取设备信息以及config;调用
[
usb.requestRight
](
#usbrequestright
)
获取设备请求权限;调用
[
usb.connectDevice
](
#usbconnectdevice
)
得到devicepipe作为参数。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| pipe |
[
USBDevicePipe
](
#usbdevicepipe
)
| 是 | 用于确定总线号和设备地址。 |
| config |
[
USBConfig
](
#usbconfig
)
| 是 | 用于确定需要设置的配置。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| number | 设置设备配置成功返回0;设置设备配置失败返回其他错误码。 |
**示例:**
```
js
let
ret
=
usb
.
setConfiguration
(
devicepipe
,
config
);
console
.
log
(
`setConfiguration =
${
ret
}
`
);
```
## usb.setInterface
setInterface(pipe: USBDevicePipe, iface: USBInterface): number
设置设备接口。
需要调用
[
usb.getDevices
](
#usbgetdevices
)
获取设备列表以及interfaces;调用
[
usb.requestRight
](
#usbrequestright
)
获取设备请求权限;调用
[
usb.connectDevice
](
#usbconnectdevice
)
得到devicepipe作为参数;调用
[
usb.claimInterface
](
#usbclaiminterface
)
注册通信接口。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ----- | ------------------------------- | --- | ------------- |
| pipe |
[
USBDevicePipe
](
#usbdevicepipe
)
| 是 | 用于确定总线号和设备地址。 |
| iface |
[
USBInterface
](
#usbinterface
)
| 是 | 用于确定需要设置的接口。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| number | 设置设备接口成功返回0;设置设备接口失败返回其他错误码。 |
**示例:**
```
js
let
ret
=
usb
.
setInterface
(
devicepipe
,
interfaces
);
console
.
log
(
`setInterface =
${
ret
}
`
);
```
## usb.getRawDescriptor
getRawDescriptor(pipe: USBDevicePipe): Uint8Array
获取原始的USB描述符。
需要调用
[
usb.getDevices
](
#usbgetdevices
)
获取设备列表;调用
[
usb.requestRight
](
#usbrequestright
)
获取设备请求权限;调用
[
usb.connectDevice
](
#usbconnectdevice
)
接口得到devicepipe作为参数。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| pipe |
[
USBDevicePipe
](
#usbdevicepipe
)
| 是 | 用于确定总线号和设备地址。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| Uint8Array | 返回获取的原始数据;失败返回undefined。 |
**示例:**
```
js
let
ret
=
usb
.
getRawDescriptor
(
devicepipe
);
```
## usb.getFileDescriptor
getFileDescriptor(pipe: USBDevicePipe): number
获取文件描述符。
需要调用
[
usb.getDevices
](
#usbgetdevices
)
获取设备列表;调用
[
usb.requestRight
](
#usbrequestright
)
获取设备请求权限;调用
[
usb.connectDevice
](
#usbconnectdevice
)
接口得到devicepipe作为参数。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| pipe |
[
USBDevicePipe
](
#usbdevicepipe
)
| 是 | 用于确定总线号和设备地址。 |
**返回值:**
| 类型 | 说明 |
| ------ | -------------------- |
| number | 返回设备对应的文件描述符;失败返回-1。 |
**示例:**
```
js
let
ret
=
usb
.
getFileDescriptor
(
devicepipe
);
```
## usb.controlTransfer
controlTransfer(pipe: USBDevicePipe, contrlparam: USBControlParams, timeout?: number): Promise
<
number
>
控制传输。
需要调用
[
usb.getDevices
](
#usbgetdevices
)
获取设备列表;调用
[
usb.requestRight
](
#usbrequestright
)
获取设备请求权限;调用
[
usb.connectDevice
](
#usbconnectdevice
)
接口得到devicepipe作为参数。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| pipe |
[
USBDevicePipe
](
#usbdevicepipe
)
| 是 | 用于确定设备。 |
| contrlparam |
[
USBControlParams
](
#usbcontrolparams
)
| 是 | 控制传输参数。 |
| timeout | number | 否 | 超时时间(单位:ms),可选参数,默认为0不超时。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| Promise
<
number
>
| Promise对象,获取传输或接收到的数据块大小。失败返回-1。 |
**示例:**
```
js
usb
.
controlTransfer
(
devicepipe
,
USBControlParams
).
then
((
ret
)
=>
{
console
.
log
(
`controlTransfer =
${
JSON
.
stringify
(
ret
)}
`
);
})
```
## usb.bulkTransfer
bulkTransfer(pipe: USBDevicePipe, endpoint: USBEndpoint, buffer: Uint8Array, timeout?: number): Promise
<
number
>
批量传输。
需要调用
[
usb.getDevices
](
#usbgetdevices
)
获取设备信息列表以及endpoint;再调用
[
usb.requestRight
](
#usbrequestright
)
获取设备请求权限;然后调用
[
usb.connectDevice
](
#usbconnectdevice
)
接口得到返回数据devicepipe之后,再次获取接口
[
usb.claimInterface
](
#usbclaiminterface
)
;再调用usb.bulkTransfer接口。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| pipe |
[
USBDevicePipe
](
#usbdevicepipe
)
| 是 | 用于确定设备。 |
| endpoint |
[
USBEndpoint
](
#usbendpoint
)
| 是 | 用于确定传输的端口。 |
| buffer | Uint8Array | 是 | 用于写入或读取的缓冲区。 |
| timeout | number | 否 | 超时时间(单位:ms),可选参数,默认为0不超时。|
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| Promise
<
number
>
| Promise对象,获取传输或接收到的数据块大小。失败返回-1。 |
**示例:**
```
js
//usb.getDevices 接口返回数据集合,取其中一个设备对象,并获取权限 。
//把获取到的设备对象作为参数传入usb.connectDevice;当usb.connectDevice接口成功返回之后;
//才可以调用第三个接口usb.claimInterface.当usb.claimInterface 调用成功以后,再调用该接口。
usb
.
bulkTransfer
(
devicepipe
,
endpoint
,
buffer
).
then
((
ret
)
=>
{
console
.
log
(
`bulkTransfer =
${
JSON
.
stringify
(
ret
)}
`
);
});
```
## usb.closePipe
closePipe(pipe: USBDevicePipe): number
关闭设备消息控制通道。
需要调用
[
usb.getDevices
](
#usbgetdevices
)
获取设备列表;调用
[
usb.requestRight
](
#usbrequestright
)
获取设备请求权限;调用
[
usb.connectDevice
](
#usbconnectdevice
)
得到devicepipe作为参数。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| pipe |
[
USBDevicePipe
](
#usbdevicepipe
)
| 是 | 用于确定USB设备消息控制通道。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| number | 关闭设备消息控制通道成功返回0;关闭设备消息控制通道失败返回其他错误码。 |
**示例:**
```
js
let
ret
=
usb
.
closePipe
(
devicepipe
);
console
.
log
(
`closePipe =
${
ret
}
`
);
```
## usb.usbFunctionsFromString<sup>9+</sup>
usbFunctionsFromString(funcs: string): number
在设备模式下,将字符串形式的USB功能列表转化为数字掩码。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------ | ---- | ---------------------- |
| funcs | string | 是 | 字符串形式的功能列表。 |
**返回值:**
| 类型 | 说明 |
| ------ | ------------------ |
| number | 转化后的数字掩码。 |
**示例:**
```
js
let
funcs
=
"
acm
"
;
let
ret
=
usb
.
usbFunctionsFromString
(
funcs
);
```
## usb.usbFunctionsToString<sup>9+</sup>
usbFunctionsToString(funcs: FunctionType): string
在设备模式下,将数字掩码形式的USB功能列表转化为字符串。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------------------------------ | ---- | ----------------- |
| funcs |
[
FunctionType
](
#functiontype9
)
| 是 | USB功能数字掩码。 |
**返回值:**
| 类型 | 说明 |
| ------ | ------------------------------ |
| string | 转化后的字符串形式的功能列表。 |
**示例:**
```
js
let
funcs
=
ACM
|
ECM
;
let
ret
=
usb
.
usbFunctionsToString
(
funcs
);
```
## usb.setCurrentFunctions<sup>9+</sup>
setCurrentFunctions(funcs: FunctionType): Promise
\<
boolean
\>
在设备模式下,设置当前的USB功能列表。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------------------------------ | ---- | ----------------- |
| funcs |
[
FunctionType
](
#functiontype9
)
| 是 | USB功能数字掩码。 |
**返回值:**
| 类型 | 说明 |
| ------------------ | ------------------------------------------------------------ |
| Promise
\<
boolean
\>
| Promise对象,返回设置成功与否的结果。true表示设置成功,false表示设置失败。 |
**示例:**
```
js
let
funcs
=
HDC
;
let
ret
=
usb
.
setCurrentFunctions
(
funcs
);
```
## usb.getCurrentFunctions<sup>9+</sup>
getCurrentFunctions(): FunctionType
在设备模式下,获取当前的USB功能列表的数字组合掩码。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
**返回值:**
| 类型 | 说明 |
| ------------------------------ | --------------------------------- |
|
[
FunctionType
](
#functiontype9
)
| 当前的USB功能列表的数字组合掩码。 |
**示例:**
```
js
let
ret
=
usb
.
getCurrentFunctions
();
```
## usb.getPorts<sup>9+</sup>
getPorts(): Array
\<
USBPort
\>
获取所有物理USB端口描述信息。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
**返回值:**
| 类型 | 说明 |
| ----------------------------- | --------------------- |
|
[
Array\<USBPort\>
](
#usbport9
)
| USB端口描述信息列表。 |
**示例:**
```
js
let
ret
=
usb
.
getPorts
();
```
## usb.getSupportedModes<sup>9+</sup>
getSupportedModes(portId: number): PortModeType
获取指定的端口支持的模式列表的组合掩码。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------ | ---- | -------- |
| portId | number | 是 | 端口号。 |
**返回值:**
| 类型 | 说明 |
| ------------------------------ | -------------------------- |
|
[
PortModeType
](
#portmodetype9
)
| 支持的模式列表的组合掩码。 |
**示例:**
```
js
let
ret
=
usb
.
getSupportedModes
(
0
);
```
## usb.setPortRoles<sup>9+</sup>
setPortRoles(portId: number, powerRole: PowerRoleType, dataRole: DataRoleType): Promise
\<
boolean
\>
设置指定的端口支持的角色模式,包含充电角色、数据传输角色。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| --------- | -------------------------------- | ---- | ---------------- |
| portId | number | 是 | 端口号。 |
| powerRole |
[
PowerRoleType
](
#powerroletype9
)
| 是 | 充电的角色。 |
| dataRole |
[
DataRoleType
](
#dataroletype9
)
| 是 | 数据传输的角色。 |
**返回值:**
| 类型 | 说明 |
| ------------------ | ------------------------------------------------------------ |
| Promise
\<
boolean
\>
| Promise对象,返回设置成功与否的结果。true表示设置成功,false表示设置失败。 |
**示例:**
```
js
let
ret
=
usb
.
getSupportedModes
(
0
);
```
## USBEndpoint
通过USB发送和接收数据的端口。通过
[
USBInterface
](
#usbinterface
)
获取。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 参数类型 | 说明 |
| ------------- | ------------------------------------------- | ------------- |
| address | number | 端点地址。 |
| attributes | number | 端点属性。 |
| interval | number | 端点间隔。 |
| maxPacketSize | number | 端点最大数据包大小。 |
| direction |
[
USBRequestDirection
](
#usbrequestdirection
)
| 端点的方向。 |
| number | number | 端点号。 |
| type | number | 端点类型。 |
| interfaceId | number | 端点所属的接口的唯一标识。 |
## USBInterface
一个
[
USBConfig
](
#usbconfig
)
中可以含有多个USBInterface,每个USBInterface提供一个功能。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 参数类型 | 说明 |
| ---------------- | ---------------------------------------- | --------------------- |
| id | number | 接口的唯一标识。 |
| protocol | number | 接口的协议。 |
| clazz | number | 设备类型。 |
| subClass | number | 设备子类。 |
| alternateSetting | number | 在同一个接口中的多个描述符中进行切换设置。 |
| name | string | 接口名称。 |
| endpoints | Array
<
[USBEndpoint](#usbendpoint)
>
| 当前接口所包含的端点。 |
## USBConfig
USB配置,一个
[
USBDevice
](
#usbdevice
)
中可以含有多个配置。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 参数类型 | 说明 |
| -------------- | ------------------------------------------------ | --------------- |
| id | number | 配置的唯一标识。 |
| attributes | number | 配置的属性。 |
| maxPower | number | 最大功耗,以毫安为单位。 |
| name | string | 配置的名称,可以为空。 |
| isRemoteWakeup | boolean | 检查当前配置是否支持远程唤醒。 |
| isSelfPowered | boolean | 检查当前配置是否支持独立电源。 |
| interfaces | Array
<
[USBInterface](#usbinterface)
>
| 配置支持的接口属性。 |
## USBDevice
USB设备信息。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 参数类型 | 说明 |
| ---------------- | ------------------------------------ | ---------- |
| busNum | number | 总线地址。 |
| devAddress | number | 设备地址。 |
| serial | string | 序列号。 |
| name | string | 设备名字。 |
| manufacturerName | string | 产商信息。 |
| productName | string | 产品信息。 |
| version | string | 版本。 |
| vendorId | number | 厂商ID。 |
| productId | number | 产品ID。 |
| clazz | number | 设备类。 |
| subClass | number | 设备子类。 |
| protocol | number | 设备协议码。 |
| configs | Array
<
[USBConfig](#usbconfig)
>
| 设备配置描述符信息。 |
## USBDevicePipe
USB设备消息传输通道,用于确定设备。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 参数类型 | 说明 |
| ---------- | ------ | ----- |
| busNum | number | 总线地址。 |
| devAddress | number | 设备地址。 |
## USBControlParams
控制传输参数。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 参数类型 | 说明 |
| ------- | ----------------------------------------------- | ---------------- |
| request | number | 请求类型。 |
| target |
[
USBRequestTargetType
](
#usbrequesttargettype
)
| 请求目标类型。 |
| reqType |
[
USBControlRequestType
](
#usbcontrolrequesttype
)
| 请求控制类型。 |
| value | number | 请求参数。 |
| index | number | 请求参数value对应的索引值。 |
| data | Uint8Array | 用于写入或读取的缓冲区。 |
## USBPort<sup>9+</sup>
USB设备端口。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 参数类型 | 说明 |
| -------------- | -------------------------------- | ----------------------------------- |
| id | number | USB端口唯一标识。 |
| supportedModes |
[
PortModeType
](
#portmodetype9
)
| USB端口所支持的模式的数字组合掩码。 |
| status |
[
USBPortStatus
](
#usbportstatus9
)
| USB端口角色。 |
## USBPortStatus<sup>9+</sup>
USB设备端口角色信息。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 参数类型 | 说明 |
| ---------------- | -------- | ---------------------- |
| currentMode | number | 当前的USB模式。 |
| currentPowerRole | number | 当前设备充电模式。 |
| currentDataRole | number | 当前设备数据传输模式。 |
## USBRequestTargetType
请求目标类型。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 值 | 说明 |
| ---------------------------- | ---- | ------ |
| USB_REQUEST_TARGET_DEVICE | 0 | 设备。 |
| USB_REQUEST_TARGET_INTERFACE | 1 | 接口。 |
| USB_REQUEST_TARGET_ENDPOINT | 2 | 端点。 |
| USB_REQUEST_TARGET_OTHER | 3 | 其他。 |
## USBControlRequestType
控制请求类型。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 值 | 说明 |
| ------------------------- | ---- | ------ |
| USB_REQUEST_TYPE_STANDARD | 0 | 标准。 |
| USB_REQUEST_TYPE_CLASS | 1 | 类。 |
| USB_REQUEST_TYPE_VENDOR | 2 | 厂商。 |
## USBRequestDirection
请求方向。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 值 | 说明 |
| --------------------------- | ---- | ------------------------ |
| USB_REQUEST_DIR_TO_DEVICE | 0 | 写数据,主设备往从设备。 |
| USB_REQUEST_DIR_FROM_DEVICE | 0x80 | 读数据,从设备往主设备。 |
## FunctionType<sup>9+</sup>
USB设备侧功能。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 值 | 说明 |
| ------------ | ---- | ---------- |
| NONE | 0 | 没有功能。 |
| ACM | 1 | acm功能。 |
| ECM | 2 | ecm功能。 |
| HDC | 4 | hdc功能。 |
| MTP | 8 | 暂不支持。 |
| PTP | 16 | 暂不支持。 |
| RNDIS | 32 | 暂不支持。 |
| MIDI | 64 | 暂不支持。 |
| AUDIO_SOURCE | 128 | 暂不支持。 |
| NCM | 256 | 暂不支持。 |
## PortModeType<sup>9+</sup>
USB端口模式类型。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 值 | 说明 |
| --------- | ---- | ---------------------------------------------------- |
| NONE | 0 | 无。 |
| UFP | 1 | 数据上行,需要外部供电。 |
| DFP | 2 | 数据下行,对外提供电源。 |
| DRP | 3 | 既可以做DFP(Host),也可以做UFP(Device),当前不支持。 |
| NUM_MODES | 4 | 当前不支持。 |
## PowerRoleType<sup>9+</sup>
电源角色类型。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 值 | 说明 |
| ------ | ---- | ---------- |
| NONE | 0 | 无。 |
| SOURCE | 1 | 外部供电。 |
| SINK | 2 | 内部供电。 |
## DataRoleType<sup>9+</sup>
数据角色类型。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
| 名称 | 值 | 说明 |
| ------ | ---- | ------------ |
| NONE | 0 | 无。 |
| HOST | 1 | 主设备角色。 |
| DEVICE | 2 | 从设备角色。 |
zh-cn/application-dev/reference/apis/js-apis-usb.md
浏览文件 @
f44eec2c
# USB管理
本模块主要提供管理USB设备的相关功能,包括
查询USB设备列表、批量数据传输、控制命令传输、权限控制
等。
本模块主要提供管理USB设备的相关功能,包括
主设备上查询USB设备列表、批量数据传输、控制命令传输、权限控制等;从设备上端口管理、功能切换及查询
等。
> **说明:**
>
> 本模块首批接口从API version
8
开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
> 本模块首批接口从API version
9
开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
## 导入模块
```
js
import
usb
from
"
@ohos.usb
"
;
import
usb
from
"
@ohos.usb
V9
"
;
```
## usb.getDevices
getDevices(): Array
<
Readonly
<
USBDevice
>>
获取
USB设备
列表。
获取
接入主设备的USB设备列表。如果没有设备接入,那么将会返回一个空的
列表。
**系统能力:**
SystemCapability.USB.USBManager
...
...
@@ -89,7 +89,7 @@ connectDevice(device: USBDevice): Readonly<USBDevicePipe>
打开USB设备。
需要调用
[
usb.getDevices
](
#usbgetdevices
)
获取设备信息以及device,再调用
[
usb.requestRight
](
#usbrequestright
)
获取设备请求
权限。
需要调用
[
usb.getDevices
](
#usbgetdevices
)
获取设备信息以及device,再调用
[
usb.requestRight
](
#usbrequestright
)
请求使用该设备的
权限。
**系统能力:**
SystemCapability.USB.USBManager
...
...
@@ -105,10 +105,26 @@ connectDevice(device: USBDevice): Readonly<USBDevicePipe>
| -------- | -------- |
| Readonly
<
[USBDevicePipe](#usbdevicepipe)
>
| 指定的传输通道对象。 |
**错误码:**
以下错误码的详细介绍参见
[
USB错误码
](
../errorcodes/errcode-usb.md
)
。
| 错误码ID | 错误信息 |
| -------- | -------- |
| 14400001 |Permission denied. Need call requestRight to get permission. |
**示例:**
```
js
let
devicepipe
=
usb
.
connectDevice
(
device
);
let
devicesList
=
usb
.
getDevices
();
if
(
devicesList
.
length
==
0
)
{
console
.
log
(
`device list is empty`
);
return
;
}
let
device
=
devicesList
[
0
];
usb
.
requestRight
(
device
.
name
);
let
devicepipe
=
usb
.
connectDevice
(
device
);
console
.
log
(
`devicepipe =
${
JSON
.
stringify
(
devicepipe
)}
`
);
```
...
...
@@ -169,6 +185,70 @@ usb.requestRight(devicesName).then((ret) => {
});
```
## usb.removeRight
removeRight(deviceName: string): boolean;
移除软件包访问设备的权限。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| deviceName | string | 是 | 设备名称。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| boolean | 返回权限移除结果。返回true表示权限移除成功;返回false则表示权限移除失败。 |
**示例:**
```
js
let
devicesName
=
"
1-1
"
;
if
(
usb
.
removeRight
(
devicesName
)
{
console
.
log
(
`Succeed in removing right`
);
}
```
## usb.addRight
addRight(bundleName: string, deviceName: string): boolean;
添加软件包访问设备的权限。
[
requestRight
](
#usbrequestright
)
的会触发弹框请求用户授权;addRight不会触发弹框,而是直接添加软件包访问设备的权限。
**系统接口:**
此接口为系统接口。
**系统能力:**
SystemCapability.USB.USBManager
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| deviceName | string | 是 | 设备名称。 |
| bundleName | string | 是 | 软件包名称。|
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| boolean | 返回权限添加结果。返回true表示权限添加成功;返回false则表示权限添加失败。 |
**示例:**
```
js
let
devicesName
=
"
1-1
"
;
let
bundleName
=
"
com.example.hello
"
;
if
(
usb
.
addRight
(
bundleName
,
devicesName
)
{
console
.
log
(
`Succeed in adding right`
);
}
```
## usb.claimInterface
claimInterface(pipe: USBDevicePipe, iface: USBInterface, force?: boolean): number
...
...
@@ -443,7 +523,7 @@ let ret = usb.closePipe(devicepipe);
console
.
log
(
`closePipe =
${
ret
}
`
);
```
## usb.usbFunctionsFromString
<sup>9+</sup>
## usb.usbFunctionsFromString
usbFunctionsFromString(funcs: string): number
...
...
@@ -472,7 +552,7 @@ let funcs = "acm";
let
ret
=
usb
.
usbFunctionsFromString
(
funcs
);
```
## usb.usbFunctionsToString
<sup>9+</sup>
## usb.usbFunctionsToString
usbFunctionsToString(funcs: FunctionType): string
...
...
@@ -486,7 +566,7 @@ usbFunctionsToString(funcs: FunctionType): string
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------------------------------ | ---- | ----------------- |
| funcs |
[
FunctionType
](
#functiontype
9
)
| 是 | USB功能数字掩码。 |
| funcs |
[
FunctionType
](
#functiontype
)
| 是 | USB功能数字掩码。 |
**返回值:**
...
...
@@ -501,7 +581,7 @@ let funcs = ACM | ECM;
let
ret
=
usb
.
usbFunctionsToString
(
funcs
);
```
## usb.setCurrentFunctions
<sup>9+</sup>
## usb.setCurrentFunctions
setCurrentFunctions(funcs: FunctionType): Promise
\<
boolean
\>
...
...
@@ -515,7 +595,7 @@ setCurrentFunctions(funcs: FunctionType): Promise\<boolean\>
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ------------------------------ | ---- | ----------------- |
| funcs |
[
FunctionType
](
#functiontype
9
)
| 是 | USB功能数字掩码。 |
| funcs |
[
FunctionType
](
#functiontype
)
| 是 | USB功能数字掩码。 |
**返回值:**
...
...
@@ -530,7 +610,7 @@ let funcs = HDC;
let
ret
=
usb
.
setCurrentFunctions
(
funcs
);
```
## usb.getCurrentFunctions
<sup>9+</sup>
## usb.getCurrentFunctions
getCurrentFunctions(): FunctionType
...
...
@@ -544,7 +624,7 @@ getCurrentFunctions(): FunctionType
| 类型 | 说明 |
| ------------------------------ | --------------------------------- |
|
[
FunctionType
](
#functiontype
9
)
| 当前的USB功能列表的数字组合掩码。 |
|
[
FunctionType
](
#functiontype
)
| 当前的USB功能列表的数字组合掩码。 |
**示例:**
...
...
@@ -552,7 +632,7 @@ getCurrentFunctions(): FunctionType
let
ret
=
usb
.
getCurrentFunctions
();
```
## usb.getPorts
<sup>9+</sup>
## usb.getPorts
getPorts(): Array
\<
USBPort
\>
...
...
@@ -566,7 +646,7 @@ getPorts(): Array\<USBPort\>
| 类型 | 说明 |
| ----------------------------- | --------------------- |
|
[
Array\<USBPort\>
](
#usbport
9
)
| USB端口描述信息列表。 |
|
[
Array\<USBPort\>
](
#usbport
)
| USB端口描述信息列表。 |
**示例:**
...
...
@@ -574,7 +654,7 @@ getPorts(): Array\<USBPort\>
let
ret
=
usb
.
getPorts
();
```
## usb.getSupportedModes
<sup>9+</sup>
## usb.getSupportedModes
getSupportedModes(portId: number): PortModeType
...
...
@@ -594,7 +674,7 @@ getSupportedModes(portId: number): PortModeType
| 类型 | 说明 |
| ------------------------------ | -------------------------- |
|
[
PortModeType
](
#portmodetype
9
)
| 支持的模式列表的组合掩码。 |
|
[
PortModeType
](
#portmodetype
)
| 支持的模式列表的组合掩码。 |
**示例:**
...
...
@@ -602,7 +682,7 @@ getSupportedModes(portId: number): PortModeType
let
ret
=
usb
.
getSupportedModes
(
0
);
```
## usb.setPortRoles
<sup>9+</sup>
## usb.setPortRoles
setPortRoles(portId: number, powerRole: PowerRoleType, dataRole: DataRoleType): Promise
\<
boolean
\>
...
...
@@ -617,8 +697,8 @@ setPortRoles(portId: number, powerRole: PowerRoleType, dataRole: DataRoleType):
| 参数名 | 类型 | 必填 | 说明 |
| --------- | -------------------------------- | ---- | ---------------- |
| portId | number | 是 | 端口号。 |
| powerRole |
[
PowerRoleType
](
#powerroletype
9
)
| 是 | 充电的角色。 |
| dataRole |
[
DataRoleType
](
#dataroletype
9
)
| 是 | 数据传输的角色。 |
| powerRole |
[
PowerRoleType
](
#powerroletype
)
| 是 | 充电的角色。 |
| dataRole |
[
DataRoleType
](
#dataroletype
)
| 是 | 数据传输的角色。 |
**返回值:**
...
...
@@ -729,7 +809,7 @@ USB设备消息传输通道,用于确定设备。
| index | number | 请求参数value对应的索引值。 |
| data | Uint8Array | 用于写入或读取的缓冲区。 |
## USBPort
<sup>9+</sup>
## USBPort
USB设备端口。
...
...
@@ -740,10 +820,10 @@ USB设备端口。
| 名称 | 参数类型 | 说明 |
| -------------- | -------------------------------- | ----------------------------------- |
| id | number | USB端口唯一标识。 |
| supportedModes |
[
PortModeType
](
#portmodetype
9
)
| USB端口所支持的模式的数字组合掩码。 |
| status |
[
USBPortStatus
](
#usbportstatus
9
)
| USB端口角色。 |
| supportedModes |
[
PortModeType
](
#portmodetype
)
| USB端口所支持的模式的数字组合掩码。 |
| status |
[
USBPortStatus
](
#usbportstatus
)
| USB端口角色。 |
## USBPortStatus
<sup>9+</sup>
## USBPortStatus
USB设备端口角色信息。
...
...
@@ -793,7 +873,7 @@ USB设备端口角色信息。
| USB_REQUEST_DIR_TO_DEVICE | 0 | 写数据,主设备往从设备。 |
| USB_REQUEST_DIR_FROM_DEVICE | 0x80 | 读数据,从设备往主设备。 |
## FunctionType
<sup>9+</sup>
## FunctionType
USB设备侧功能。
...
...
@@ -814,7 +894,7 @@ USB设备侧功能。
| AUDIO_SOURCE | 128 | 暂不支持。 |
| NCM | 256 | 暂不支持。 |
## PortModeType
<sup>9+</sup>
## PortModeType
USB端口模式类型。
...
...
@@ -830,7 +910,7 @@ USB端口模式类型。
| DRP | 3 | 既可以做DFP(Host),也可以做UFP(Device),当前不支持。 |
| NUM_MODES | 4 | 当前不支持。 |
## PowerRoleType
<sup>9+</sup>
## PowerRoleType
电源角色类型。
...
...
@@ -844,7 +924,7 @@ USB端口模式类型。
| SOURCE | 1 | 外部供电。 |
| SINK | 2 | 内部供电。 |
## DataRoleType
<sup>9+</sup>
## DataRoleType
数据角色类型。
...
...
zh-cn/application-dev/reference/errorcodes/errcode-usb.md
0 → 100644
浏览文件 @
f44eec2c
# USB服务错误码
## 14400001 连接USB设备被拒绝
**错误信息**
Permission denied. Need call requestRight to get permission.
**错误描述**
当调用USB模块部分接口时,如果没有相关权限,会报此错误码。
**可能原因**
没有获取到设备的使用权限。
**处理步骤**
调用requestRight方法申请设备的使用权限。
\ No newline at end of file
zh-cn/device-dev/driver/driver-peripherals-usb-des.md
浏览文件 @
f44eec2c
...
...
@@ -36,51 +36,51 @@ USB驱动模型Host侧开放的API接口功能,参考USB Host驱动模型图
| int32_t
UsbInitHostSdk(struct
UsbSession
\*\*session); | USB主机端驱动开发工具包初始化 |
| int32_t
UsbExitHostSdk(const
struct
UsbSession
<br/>
\*session); | USB主机端驱动开发工具包退出 |
| const
struct
UsbInterface
\*UsbClaimInterface(const
<br/>
struct
UsbSession
\*session,
uint8_t
busNum,
uint8_t
<br/>
usbAddr,
uint8_t
interfaceIndex); | 获取USB接口对象 |
| int
UsbReleaseInterface(const
struct
UsbInterface
<br/>
\*interfaceObj); | 释放USB接口对象 |
| int
UsbAddOrRemoveInterface(const
struct
UsbSession
<br/>
\*session,
uint8_t
busNum,
uint8_t
usbAddr,
uint8_t
<br/>
interfaceIndex,
UsbInterfaceStatus
status); | 增加移除接口 |
| int
32_t
UsbReleaseInterface(const
struct
UsbInterface
<br/>
\*interfaceObj); | 释放USB接口对象 |
| int
32_t
UsbAddOrRemoveInterface(const
struct
UsbSession
<br/>
\*session,
uint8_t
busNum,
uint8_t
usbAddr,
uint8_t
<br/>
interfaceIndex,
UsbInterfaceStatus
status); | 增加移除接口 |
| UsbInterfaceHandle
\*UsbOpenInterface(const
struct
<br/>
UsbInterface
\*interfaceObj); | 打开USB对象接口 |
| int32_t
UsbCloseInterface(const
UsbInterfaceHandle
<br/>
\*interfaceHandle); | 关闭USB接口对象 |
| int32_t
UsbSelectInterfaceSetting(const
<br/>
UsbInterfaceHandle
\*interfaceHandle,
uint8_t
<br/>
settingIndex,
struct
UsbInterface
\*\*interfaceObj); | 设置可选配置 |
| int32_t
UsbGetPipeInfo(const
UsbInterfaceHandle
<br/>
\*interfaceHandle,
uint8_t
settingIndex,
uint8_t
pipeId,
<br/>
struct
UsbPipeInfo
\*pipeInfo); | 获取指定可选设置的管道信息 |
| int32_t
UsbClearInterfaceHalt(const
<br/>
UsbInterfaceHandle
\*interfaceHandle,
uint8_t
<br/>
pipeAddress); | 清除指定索引的管道状态 |
| struct
UsbRequest
\*UsbAllocRequest(const
<br/>
UsbInterfaceHandle
\*interfaceHandle,
int
isoPackets
<br/>
,
in
t
length); | 分配请求对象 |
| int
UsbFreeRequest(const
struct
UsbRequest
<br/>
\*request); | 释放请求对象 |
| int
UsbSubmitRequestAsync(const
struct
UsbRequest
<br/>
\*request); | 发送异步请求 |
| struct
UsbRequest
\*UsbAllocRequest(const
<br/>
UsbInterfaceHandle
\*interfaceHandle,
int
32_t
isoPackets
<br/>
,
int32_
t
length); | 分配请求对象 |
| int
32_t
UsbFreeRequest(const
struct
UsbRequest
<br/>
\*request); | 释放请求对象 |
| int
32_t
UsbSubmitRequestAsync(const
struct
UsbRequest
<br/>
\*request); | 发送异步请求 |
| int32_t
UsbFillRequest(const
struct
UsbRequest
<br/>
\*request,
const
UsbInterfaceHandle
\*interfaceHandle,
<br/>
const
struct
UsbRequestParams
\*params); | 填充请求 |
|
sin
t
UsbCancelRequest(const
struct
UsbRequest
<br/>
\*request); | 取消异步请求 |
| int
UsbSubmitRequestSync(const
struct
UsbRequest
<br/>
\*request); | 发送同步请求 |
|
int32_
t
UsbCancelRequest(const
struct
UsbRequest
<br/>
\*request); | 取消异步请求 |
| int
32_t
UsbSubmitRequestSync(const
struct
UsbRequest
<br/>
\*request); | 发送同步请求 |
**表2**
usb_raw_api.h
| 接口名称 | 功能描述 |
| -------- | -------- |
| int
UsbRawInit(struct
UsbSession
\*\*session); | USB驱动开发工具包专家模式初始化 |
| int
UsbRawExit(const
struct
UsbSession
\*session); | USB驱动开发工具包专家模式退出 |
| int
32_t
UsbRawInit(struct
UsbSession
\*\*session); | USB驱动开发工具包专家模式初始化 |
| int
32_t
UsbRawExit(const
struct
UsbSession
\*session); | USB驱动开发工具包专家模式退出 |
| UsbRawHandle
\*UsbRawOpenDevice(const
struct
<br/>
UsbSession
\*session,
uint8_t
busNum,
uint8_t
<br/>
usbAddr); | 打开USB设备对象 |
| int
UsbRawCloseDevice(const
UsbRawHandle
<br/>
\*devHandle); | 关闭USB设备对象 |
| int
UsbRawSendControlRequest(const
struct
<br/>
UsbRawRequest
\*request,
const
UsbRawHandle
<br/>
\*devHandle,
const
struct
UsbControlRequestData
<br/>
\*requestData); | 执行同步控制传输 |
| int
UsbRawSendBulkRequest(const
struct
<br/>
UsbRawRequest
\*request,
const
UsbRawHandle
<br/>
\*devHandle,
const
struct
UsbRequestData
<br/>
\*requestData); | 执行同步批量传输 |
| int
UsbRawSendInterruptRequest(const
struct
<br/>
UsbRawRequest
\*request,
const
UsbRawHandle
<br/>
\*devHandle,
const
struct
UsbRequestData
<br/>
\*requestData); | 执行同步中断传输 |
| int
UsbRawGetConfigDescriptor(const
UsbRawDevice
<br/>
\*rawDev,
uint8_t
configIndex,
struct
<br/>
UsbRawConfigDescriptor
\*\*config); | 获取给定设备指定ID的设备配置描述符 |
| int
32_t
UsbRawCloseDevice(const
UsbRawHandle
<br/>
\*devHandle); | 关闭USB设备对象 |
| int
32_t
UsbRawSendControlRequest(const
struct
<br/>
UsbRawRequest
\*request,
const
UsbRawHandle
<br/>
\*devHandle,
const
struct
UsbControlRequestData
<br/>
\*requestData); | 执行同步控制传输 |
| int
32_t
UsbRawSendBulkRequest(const
struct
<br/>
UsbRawRequest
\*request,
const
UsbRawHandle
<br/>
\*devHandle,
const
struct
UsbRequestData
<br/>
\*requestData); | 执行同步批量传输 |
| int
32_t
UsbRawSendInterruptRequest(const
struct
<br/>
UsbRawRequest
\*request,
const
UsbRawHandle
<br/>
\*devHandle,
const
struct
UsbRequestData
<br/>
\*requestData); | 执行同步中断传输 |
| int
32_t
UsbRawGetConfigDescriptor(const
UsbRawDevice
<br/>
\*rawDev,
uint8_t
configIndex,
struct
<br/>
UsbRawConfigDescriptor
\*\*config); | 获取给定设备指定ID的设备配置描述符 |
| void
UsbRawFreeConfigDescriptor(const
struct
<br/>
UsbRawConfigDescriptor
\*config); | 释放配置描述符内存空间 |
| int
UsbRawGetConfiguration(const
UsbRawHandle
<br/>
\*devHandle,
in
t
\*config); | 获取当前激活配置 |
| int
UsbRawSetConfiguration(const
UsbRawHandle
<br/>
\*devHandle,
in
t
config); | 设置当前激活配置 |
| int
UsbRawGetDescriptor(const
struct
UsbRawRequest
<br/>
\*request,
const
UsbRawHandle
\*devHandle,
const
struct
<br/>
UsbRawDescriptorParam
\*param,
const
unsigned
char
<br/>
\*data); | 获取描述符信息 |
| int
32_t
UsbRawGetConfiguration(const
UsbRawHandle
<br/>
\*devHandle,
int32_
t
\*config); | 获取当前激活配置 |
| int
32_t
UsbRawSetConfiguration(const
UsbRawHandle
<br/>
\*devHandle,
int32_
t
config); | 设置当前激活配置 |
| int
32_t
UsbRawGetDescriptor(const
struct
UsbRawRequest
<br/>
\*request,
const
UsbRawHandle
\*devHandle,
const
struct
<br/>
UsbRawDescriptorParam
\*param,
const
unsigned
char
<br/>
\*data); | 获取描述符信息 |
| UsbRawDevice
\*UsbRawGetDevice(const
UsbRawHandle
<br/>
\*devHandle); | 由设备句柄获取设备指针 |
| int
UsbRawGetDeviceDescriptor(const
UsbRawDevice
<br/>
\*rawDev,
struct
<br/>
UsbDeviceDescriptor
\*desc); | 获取给定设备的USB设备描述符 |
| int
UsbRawClaimInterface(const
UsbRawHandle
<br/>
\*devHandle,
in
t
<br/>
interfaceNumber); | 声明给定设备句柄上的接口 |
| int
UsbRawReleaseInterface(const
UsbRawHandle
<br/>
\*devHandle,
in
<br/>
t
interfaceNumber); | 释放之前声明的接口 |
| int
UsbRawResetDevice(const
UsbRawHandle
<br/>
\*devHandle); | 复位设备 |
| struct
UsbRawRequest
\*UsbRawAllocRequest(const
<br/>
UsbRawHandle
<br/>
\*devHandle,
int
isoPackets,
in
t
length); | 分配一个带有指定数量的同步包描述符的传输请求 |
| int
UsbRawFreeRequest(const
struct
UsbRawRequest
<br/>
\*request); | 释放之前分配的传输请求 |
| int
UsbRawFillBulkRequest(const
struct
UsbRawRequest
<br/>
\*request,
const
UsbRawHandle
\*devHandle,
const
struct
<br/>
UsbRawFillRequestData
\*fillData); | 填充批量传输请求所需信息 |
| int
UsbRawFillControlSetup(const
unsigned
char
\*setup,
<br/>
const
struct
UsbControlRequestData
\*requestData); | 填充控制传输设置包所需信息 |
| int
UsbRawFillControlRequest(const
struct
UsbRawRequest
<br/>
\*request,
const
UsbRawHandle
\*devHandle,
const
struct
<br/>
UsbRawFillRequestData
\*fillData); | 填充控制传输请求所需信息 |
| int
UsbRawFillInterruptRequest(const
struct
UsbRawRequest
<br/>
\*request,
const
UsbRawHandle
\*devHandle,
const
struct
<br/>
UsbRawFillRequestData
\*fillData); | 填充中断传输请求所需信息 |
| int
UsbRawFillIsoRequest(const
struct
UsbRawRequest
<br/>
\*request,
const
UsbRawHandle
\*devHandle,
const
struct
<br/>
UsbRawFillRequestData
\*fillData); | 填充同步传输(Isochronous
Transfers)请求所需信息 |
| int
UsbRawSubmitRequest(const
struct
UsbRawRequest
<br/>
\*request); | 提交一个传输请求 |
| int
UsbRawCancelRequest(const
struct
UsbRawRequest
<br/>
\*request); | 取消一个传输请求 |
| int
UsbRawHandleRequests(const
UsbRawHandle
<br/>
\*devHandle); | 传输请求事件完成处理 |
| int
32_t
UsbRawGetDeviceDescriptor(const
UsbRawDevice
<br/>
\*rawDev,
struct
<br/>
UsbDeviceDescriptor
\*desc); | 获取给定设备的USB设备描述符 |
| int
32_t
UsbRawClaimInterface(const
UsbRawHandle
<br/>
\*devHandle,
int32_
t
<br/>
interfaceNumber); | 声明给定设备句柄上的接口 |
| int
32_t
UsbRawReleaseInterface(const
UsbRawHandle
<br/>
\*devHandle,
in
<br/>
t
interfaceNumber); | 释放之前声明的接口 |
| int
32_t
UsbRawResetDevice(const
UsbRawHandle
<br/>
\*devHandle); | 复位设备 |
| struct
UsbRawRequest
\*UsbRawAllocRequest(const
<br/>
UsbRawHandle
<br/>
\*devHandle,
int
32_t
isoPackets,
int32_
t
length); | 分配一个带有指定数量的同步包描述符的传输请求 |
| int
32_t
UsbRawFreeRequest(const
struct
UsbRawRequest
<br/>
\*request); | 释放之前分配的传输请求 |
| int
32_t
UsbRawFillBulkRequest(const
struct
UsbRawRequest
<br/>
\*request,
const
UsbRawHandle
\*devHandle,
const
struct
<br/>
UsbRawFillRequestData
\*fillData); | 填充批量传输请求所需信息 |
| int
32_t
UsbRawFillControlSetup(const
unsigned
char
\*setup,
<br/>
const
struct
UsbControlRequestData
\*requestData); | 填充控制传输设置包所需信息 |
| int
32_t
UsbRawFillControlRequest(const
struct
UsbRawRequest
<br/>
\*request,
const
UsbRawHandle
\*devHandle,
const
struct
<br/>
UsbRawFillRequestData
\*fillData); | 填充控制传输请求所需信息 |
| int
32_t
UsbRawFillInterruptRequest(const
struct
UsbRawRequest
<br/>
\*request,
const
UsbRawHandle
\*devHandle,
const
struct
<br/>
UsbRawFillRequestData
\*fillData); | 填充中断传输请求所需信息 |
| int
32_t
UsbRawFillIsoRequest(const
struct
UsbRawRequest
<br/>
\*request,
const
UsbRawHandle
\*devHandle,
const
struct
<br/>
UsbRawFillRequestData
\*fillData); | 填充同步传输(Isochronous
Transfers)请求所需信息 |
| int
32_t
UsbRawSubmitRequest(const
struct
UsbRawRequest
<br/>
\*request); | 提交一个传输请求 |
| int
32_t
UsbRawCancelRequest(const
struct
UsbRawRequest
<br/>
\*request); | 取消一个传输请求 |
| int
32_t
UsbRawHandleRequests(const
UsbRawHandle
<br/>
\*devHandle); | 传输请求事件完成处理 |
USB驱动模型Device侧开放的API接口功能,参考USB Device驱动模型图。
...
...
@@ -89,19 +89,19 @@ USB驱动模型Device侧开放的API接口功能,参考USB Device驱动模型
| 接口名称 | 功能描述 |
| -------- | -------- |
| const
struct
UsbFnDevice
\*UsbFnCreateDevice(const
<br/>
char
\*udcName,
const
struct
UsbFnDescriptorData
<br/>
\*descriptor); | 创建USB设备 |
| int
UsbFnRemoveDevice(struct
UsbFnDevice
<br/>
\*fnDevice); | 删除USB设备 |
| int
32_t
UsbFnRemoveDevice(struct
UsbFnDevice
<br/>
\*fnDevice); | 删除USB设备 |
| const
struct
UsbFnDevice
\*UsbFnGetDevice(const
char
<br/>
\*udcName); | 获取USB设备 |
**表4**
usbfn_interface.h
| 接口名称 | 功能描述 |
| -------- | -------- |
| int
UsbFnStartRecvInterfaceEvent(struct
<br/>
UsbFnInterface
\*interface,
uint32_t
eventMask,
<br/>
UsbFnEventCallback
callback,
void
\*context); | 开始接受Event事件 |
| int
UsbFnStopRecvInterfaceEvent(struct
<br/>
UsbFnInterface
\*interface); | 停止接受Event事件 |
| int
32_t
UsbFnStartRecvInterfaceEvent(struct
<br/>
UsbFnInterface
\*interface,
uint32_t
eventMask,
<br/>
UsbFnEventCallback
callback,
void
\*context); | 开始接受Event事件 |
| int
32_t
UsbFnStopRecvInterfaceEvent(struct
<br/>
UsbFnInterface
\*interface); | 停止接受Event事件 |
| UsbFnInterfaceHandle
UsbFnOpenInterface(struct
UsbFnInterface
\*interface); | 打开一个接口 |
| int
UsbFnCloseInterface(UsbFnInterfaceHandle
handle); | 关闭一个接口 |
| int
UsbFnGetInterfacePipeInfo(struct
UsbFnInterface
<br/>
\*interface,
uint8_t
pipeId,
struct
UsbFnPipeInfo
\*info); | 获取管道信息 |
| int
UsbFnSetInterfaceProp(const
struct
UsbFnInterface
<br/>
\*interface,
const
char
\*name,
const
char
\*value); | 设置自定义属性 |
| int
32_t
UsbFnCloseInterface(UsbFnInterfaceHandle
handle); | 关闭一个接口 |
| int
32_t
UsbFnGetInterfacePipeInfo(struct
UsbFnInterface
<br/>
\*interface,
uint8_t
pipeId,
struct
UsbFnPipeInfo
\*info); | 获取管道信息 |
| int
32_t
UsbFnSetInterfaceProp(const
struct
UsbFnInterface
<br/>
\*interface,
const
char
\*name,
const
char
\*value); | 设置自定义属性 |
**表5**
usbfn_request.h
...
...
@@ -109,10 +109,10 @@ USB驱动模型Device侧开放的API接口功能,参考USB Device驱动模型
| -------- | -------- |
| struct
UsbFnRequest
<br/>
\*UsbFnAllocCtrlRequest(UsbFnInterfaceHandle
handle,
<br/>
uint32_t
len); | 申请一个控制请求 |
| struct
UsbFnRequest
\*UsbFnAllocRequest(UsbFnInterfaceHandle
handle,
<br/>
uint8_t
pipe,
uint32_t
len); | 申请一个数据请求 |
| int
UsbFnFreeRequest(struct
UsbFnRequest
\*req); | 释放一个请求 |
| int
UsbFnSubmitRequestAsync(struct
UsbFnRequest
<br/>
\*req); | 发送异步请求 |
| int
UsbFnSubmitRequestSync(struct
UsbFnRequest
<br/>
\*req,
uint32_t
timeout); | 发送同步请求 |
| int
UsbFnCancelRequest(struct
UsbFnRequest
\*req); | 取消请求 |
| int
32_t
UsbFnFreeRequest(struct
UsbFnRequest
\*req); | 释放一个请求 |
| int
32_t
UsbFnSubmitRequestAsync(struct
UsbFnRequest
<br/>
\*req); | 发送异步请求 |
| int
32_t
UsbFnSubmitRequestSync(struct
UsbFnRequest
<br/>
\*req,
uint32_t
timeout); | 发送同步请求 |
| int
32_t
UsbFnCancelRequest(struct
UsbFnRequest
\*req); | 取消请求 |
## 开发步骤
...
...
@@ -218,6 +218,9 @@ root {
}
}
}
```
```
cpp
#include "usb_serial.h"
#include "hdf_base.h"
...
...
@@ -236,10 +239,10 @@ static struct UsbRequest *g_ctrlCmdRequest = NULL;
static
bool
g_acmReleaseFlag
=
false
;
static
uint8_t
*
g_acmReadBuffer
=
NULL
;
...
static int SerialCtrlMsg(struct AcmDevice *acm, uint8_t request,
static
int
32_t
SerialCtrlMsg
(
struct
AcmDevice
*
acm
,
uint8_t
request
,
uint16_t
value
,
void
*
buf
,
uint16_t
len
)
{
int ret;
int
32_t
ret
;
uint16_t
index
=
acm
->
intPipe
->
interfaceId
;
struct
UsbControlParams
controlParams
;
struct
UsbRequestParams
params
;
...
...
@@ -299,7 +302,7 @@ static struct UsbPipeInfo *EnumePipe(const struct AcmDevice *acm,
uint8_t
interfaceIndex
,
UsbPipeType
pipeType
,
UsbPipeDirection
pipeDirection
)
{
uint8_t
i
;
int ret;
int
32_t
ret
;
struct
UsbInterfaceInfo
*
info
=
NULL
;
UsbInterfaceHandle
*
interfaceHandle
=
NULL
;
if
(
pipeType
==
USB_PIPE_TYPE_CONTROL
)
...
...
@@ -408,11 +411,11 @@ error:
return
HDF_FAILURE
;
}
...
static int AcmAllocReadRequests(struct AcmDevice *acm)
static
int
32_t
AcmAllocReadRequests
(
struct
AcmDevice
*
acm
)
{
int ret;
int
32_t
ret
;
struct
UsbRequestParams
readParams
;
for (int i = 0; i < ACM_NR; i++) {
for
(
int
32_t
i
=
0
;
i
<
ACM_NR
;
i
++
)
{
acm
->
readReq
[
i
]
=
UsbAllocRequest
(
InterfaceIdToHandle
(
acm
,
acm
->
dataInPipe
->
interfaceId
),
0
,
acm
->
readSize
);
// 分配待发送的readReq IO Request对象
if
(
!
acm
->
readReq
[
i
])
{
HDF_LOGE
(
"readReq request failed"
);
...
...
@@ -441,9 +444,9 @@ error:
return
HDF_ERR_MALLOC_FAIL
;
}
static int AcmAllocNotifyRequest(struct AcmDevice *acm)
static
int
32_t
AcmAllocNotifyRequest
(
struct
AcmDevice
*
acm
)
{
int ret;
int
32_t
ret
;
struct
UsbRequestParams
intParams
=
{};
acm
->
notifyReq
=
UsbAllocRequest
(
InterfaceIdToHandle
(
acm
,
acm
->
intPipe
->
interfaceId
),
0
,
acm
->
intSize
);
// 分配待发送的中断IO Request对象
if
(
!
acm
->
notifyReq
)
{
...
...
@@ -474,7 +477,7 @@ error:
static
void
AcmReleaseInterfaces
(
struct
AcmDevice
*
acm
)
{
for (int i = 0; i < acm->interfaceCnt; i++) {
for
(
int
32_t
i
=
0
;
i
<
acm
->
interfaceCnt
;
i
++
)
{
if
(
acm
->
iface
[
i
])
{
UsbReleaseInterface
(
acm
->
iface
[
i
]);
acm
->
iface
[
i
]
=
NULL
;
...
...
@@ -488,7 +491,7 @@ static void AcmReleaseInterfaces(struct AcmDevice *acm)
static
int32_t
AcmClaimInterfaces
(
struct
AcmDevice
*
acm
)
{
for (int i = 0; i < acm->interfaceCnt; i++) {
for
(
int
32_t
i
=
0
;
i
<
acm
->
interfaceCnt
;
i
++
)
{
acm
->
iface
[
i
]
=
GetUsbInterfaceById
((
const
struct
AcmDevice
*
)
acm
,
acm
->
interfaceIndex
[
i
]);
// 获取UsbInterface接口对象
if
(
acm
->
iface
[
i
]
==
NULL
)
{
HDF_LOGE
(
"%s: interface%d is null"
,
__func__
,
acm
->
interfaceIndex
[
i
]);
...
...
@@ -511,7 +514,7 @@ static int32_t AcmClaimInterfaces(struct AcmDevice *acm)
static
void
AcmCloseInterfaces
(
struct
AcmDevice
*
acm
)
{
for (int i = 0; i < acm->interfaceCnt; i++) {
for
(
int
32_t
i
=
0
;
i
<
acm
->
interfaceCnt
;
i
++
)
{
if
(
acm
->
devHandle
[
i
])
{
UsbCloseInterface
(
acm
->
devHandle
[
i
]);
acm
->
devHandle
[
i
]
=
NULL
;
...
...
@@ -525,7 +528,7 @@ static void AcmCloseInterfaces(struct AcmDevice *acm)
static
int32_t
AcmOpenInterfaces
(
struct
AcmDevice
*
acm
)
{
for (int i = 0; i < acm->interfaceCnt; i++) {
for
(
int
32_t
i
=
0
;
i
<
acm
->
interfaceCnt
;
i
++
)
{
if
(
acm
->
iface
[
i
])
{
acm
->
devHandle
[
i
]
=
UsbOpenInterface
(
acm
->
iface
[
i
]);
// 打开获取到的UsbInterface接口对象
if
(
acm
->
devHandle
[
i
]
==
NULL
)
{
...
...
@@ -606,7 +609,7 @@ static int32_t AcmAllocRequests(struct AcmDevice *acm)
return
HDF_ERR_MALLOC_FAIL
;
}
for (int i = 0; i < ACM_NW; i++) {
for
(
int
32_t
i
=
0
;
i
<
ACM_NW
;
i
++
)
{
struct
AcmWb
*
snd
=
&
(
acm
->
wb
[
i
]);
snd
->
request
=
UsbAllocRequest
(
InterfaceIdToHandle
(
acm
,
acm
->
dataOutPipe
->
interfaceId
),
0
,
acm
->
writeSize
);
//分配待发送的IO Request对象
snd
->
instance
=
acm
;
...
...
@@ -789,7 +792,7 @@ HDF_INIT(g_usbSerialDriverEntry);
### Host RAW API驱动开发
```
```
cpp
root
{
module
=
"usb_pnp_device"
;
usb_pnp_config
{
...
...
@@ -836,7 +839,9 @@ root {
}
}
}
```
```
cpp
#include "usb_serial_rawapi.h"
#include <unistd.h>
#include "osal_mem.h"
...
...
@@ -858,11 +863,11 @@ struct OsalMutex g_stopIoLock;
static
bool
g_rawAcmReleaseFlag
=
false
;
......
static int UsbGetConfigDescriptor(UsbRawHandle *devHandle, struct UsbRawConfigDescriptor **config)
static
int
32_t
UsbGetConfigDescriptor
(
UsbRawHandle
*
devHandle
,
struct
UsbRawConfigDescriptor
**
config
)
{
UsbRawDevice
*
dev
=
NULL
;
int activeConfig;
int ret;
int
32_t
activeConfig
;
int
32_t
ret
;
if
(
devHandle
==
NULL
)
{
HDF_LOGE
(
"%s:%d devHandle is NULL"
,
...
...
@@ -893,9 +898,9 @@ static int UsbGetConfigDescriptor(UsbRawHandle *devHandle, struct UsbRawConfigDe
return
HDF_SUCCESS
;
}
...
static int UsbAllocWriteRequests(struct AcmDevice *acm)
static
int
32_t
UsbAllocWriteRequests
(
struct
AcmDevice
*
acm
)
{
int i;
int
32_t
i
;
for
(
i
=
0
;
i
<
ACM_NW
;
i
++
)
{
struct
AcmWb
*
snd
=
&
acm
->
wb
[
i
];
...
...
@@ -965,13 +970,13 @@ error:
return
HDF_FAILURE
;
}
...
static int UsbAllocReadRequests(struct AcmDevice *acm)
static
int
32_t
UsbAllocReadRequests
(
struct
AcmDevice
*
acm
)
{
struct
UsbRawFillRequestData
reqData
;
int size = acm->dataInEp->maxPacketSize;
int ret;
int
32_t
size
=
acm
->
dataInEp
->
maxPacketSize
;
int
32_t
ret
;
for (int i = 0; i < ACM_NR; i++) {
for
(
int
32_t
i
=
0
;
i
<
ACM_NR
;
i
++
)
{
acm
->
readReq
[
i
]
=
UsbRawAllocRequest
(
acm
->
devHandle
,
0
,
size
);
if
(
!
acm
->
readReq
[
i
])
{
HDF_LOGE
(
"readReq request failed"
);
...
...
@@ -996,11 +1001,11 @@ static int UsbAllocReadRequests(struct AcmDevice *acm)
return
HDF_SUCCESS
;
}
...
static int UsbAllocNotifyRequest(struct AcmDevice *acm)
static
int
32_t
UsbAllocNotifyRequest
(
struct
AcmDevice
*
acm
)
{
struct
UsbRawFillRequestData
fillRequestData
;
int size = acm->notifyEp->maxPacketSize;
int ret;
int
32_t
size
=
acm
->
notifyEp
->
maxPacketSize
;
int
32_t
ret
;
acm
->
notifyReq
=
UsbRawAllocRequest
(
acm
->
devHandle
,
0
,
size
);
if
(
!
acm
->
notifyReq
)
{
...
...
@@ -1226,9 +1231,8 @@ HDF_INIT(g_usbSerialRawDriverEntry);
USB ACM设备核心代码路径为drivers
\p
eripheral
\u
sb
\g
adget
\f
unction
\a
cm
\c
dcacm.c。其使用示例如下所示,首先根据描述符创建设备,然后获取接口,打开接口,获取Pipe信息,接收Event事件,接着进行USB通信(读写等),设备卸载时候,关闭接口,停止Event接收,删除设备。
```
1、创建设备
```
cpp
static
int32_t
AcmCreateFuncDevice
(
struct
UsbAcmDevice
*
acm
,
struct
DeviceResourceIface
*
iface
)
{
...
...
@@ -1251,7 +1255,9 @@ if (useHcs == 0) {
}
...
}
```
2、获取接口,打开接口,获取Pipe信息
```
cpp
static
int32_t
AcmParseEachPipe
(
struct
UsbAcmDevice
*
acm
,
struct
UsbAcmInterface
*
iface
)
{
...
...
...
@@ -1277,8 +1283,11 @@ static int32_t AcmParseEachIface(struct UsbAcmDevice *acm, struct UsbFnDevice *f
}
return
HDF_SUCCESS
;
}
```
3、接收Event事件
static int32_t AcmAllocCtrlRequests(struct UsbAcmDevice *acm, int num)
```
cpp
static
int32_t
AcmAllocCtrlRequests
(
struct
UsbAcmDevice
*
acm
,
int32_t
num
)
{
...
req
=
UsbFnCtrlRequestAlloc
(
acm
->
ctrlIface
.
handle
,
...
...
@@ -1292,7 +1301,9 @@ static int32_t AcmDriverInit(struct HdfDeviceObject *device)
ret
=
UsbFnInterfaceStartRecvEvent
(
acm
->
ctrlIface
.
fn
,
0xff
,
UsbAcmEventCallback
,
acm
);
...
}
```
4、进行USB通信(读写等)
```
cpp
static
int32_t
AcmSendNotifyRequest
(
struct
UsbAcmDevice
*
acm
,
uint8_t
type
,
uint16_t
value
,
void
*
data
,
uint32_t
length
)
{
...
...
@@ -1301,7 +1312,9 @@ static int32_t AcmSendNotifyRequest(struct UsbAcmDevice *acm, uint8_t type,
ret
=
UsbFnRequestSubmitAsync
(
req
);
...
}
```
5、关闭接口,停止Event接收,删除设备
```
cpp
static
int32_t
AcmReleaseFuncDevice
(
struct
UsbAcmDevice
*
acm
)
{
int32_t
ret
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录