Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
e4c356d9
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看板
提交
e4c356d9
编写于
12月 13, 2021
作者:
W
wu-chengwen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: update subsystems/Readme-CN.md and subsys-usbservice-guide.md and subsys-usbservice-demo.md
Signed-off-by:
N
wu-chengwen
<
wuchengwen4@huawei.com
>
上级
b3d055aa
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
150 addition
and
59 deletion
+150
-59
zh-cn/device-dev/subsystems/Readme-CN.md
zh-cn/device-dev/subsystems/Readme-CN.md
+2
-2
zh-cn/device-dev/subsystems/subsys-usbservice-demo.md
zh-cn/device-dev/subsystems/subsys-usbservice-demo.md
+141
-49
zh-cn/device-dev/subsystems/subsys-usbservice-guide.md
zh-cn/device-dev/subsystems/subsys-usbservice-guide.md
+7
-8
未找到文件。
zh-cn/device-dev/subsystems/Readme-CN.md
浏览文件 @
e4c356d9
...
...
@@ -45,8 +45,8 @@
-
[
Sensor服务子系使用实例
](
subsys-sensor-demo.md
)
-
[
Usb服务子系统指南
](
subsys-usbservice.md
)
-
[
USB服务子系概述
](
subsys-usbservice-overview.md
)
-
[
USB服务子系
概述
](
subsys-usbservice-guide.md
)
-
[
USB服务子系
概述
](
subsys-usbservice-demo.md
)
-
[
USB服务子系
使用指导
](
subsys-usbservice-guide.md
)
-
[
USB服务子系
使用实例
](
subsys-usbservice-demo.md
)
-
[
用户程序框架
](
subsys-application-framework.md
)
-
[
概述
](
subsys-application-framework-overview.md
)
-
[
搭建环境
](
subsys-application-framework-envbuild.md
)
...
...
zh-cn/device-dev/subsystems/subsys-usbservice-demo.md
浏览文件 @
e4c356d9
...
...
@@ -2,64 +2,156 @@
```
#include
"usb_device_pipe_test.h"
#include
<cstdio>
#include <iostream>
#include <
vector
>
#include
"delayed_sp_singleton.h"
#include
"hilog_wrapper.h"
#include <
map
>
#include
<mutex>
#include
<sstream>
#include "if_system_ability_manager.h"
#include "ipc_skeleton.h"
#include "iremote_object.h"
#include "iservice_registry.h"
#include "iusb_srv.h"
#include "string_ex.h"
#include "system_ability_definition.h"
#include "usb_common.h"
#include "usb_device.h"
#include "usb_request.h"
#include "usb_server_proxy.h"
#include "usb_srv_client.h"
#include "usb_errors.h"
#include <sys/time.h>
void UsbDevicePipeTest::SetUpTestCase(void)
//需要修改/base/usb/usb_manager/service/BUILD.gn和/base/usb/usb_manager/ohos.build文件
//usb_manager/servrice/BUILD.gn是因为.cpp文件在service目录下,可根据实际情况来调整gn的指定路径
int main(int argc, char **argv)
{
auto &srvClient = UsbSrvClient::GetInstance()
;
auto ret = srvClient.SetPortRole(1, 1, 1
);
sleep(SLEEP_TIME);
USB_HILOGI(MODULE_USB_SERVICE, "UsbDevicePipeTest:: [Device] SetPortRole=%{public}d", ret)
;
ASSERT_TRUE(ret == 0
);
int32_t ret
;
static OHOS::USB::UsbSrvClient &g_usbClient = OHOS::USB::UsbSrvClient::GetInstance(
);
// GetDevices
std::vector<OHOS::USB::UsbDevice> deviceList
;
ret = g_usbClient.GetDevices(deviceList
);
if (ret != 0) {
exit(0);
std::cout << "GetDevices failed width ret = " << ret << std::endl;
return -5;
}
std::cout << "请连接设备,连接完后按回车键继续" << std::endl;
int c;
while ((c = getchar()) != '\n' && c != EOF) {
;
if (deviceList.empty()) {
std::cout << "device list is empty." << std::endl;
return -5;
}
}
/* 测试用例函数 */
HWTEST_F(UsbDevicePipeTest, UsbBulkTransfer001, TestSize.Level1)
{
vector<UsbDevice> devi;
// 获取usb service实例
auto &UsbSrvClient = UsbSrvClient::GetInstance();
// 获取usb设备列表
auto ret = UsbSrvClient.GetDevices(devi);
EXPECT_TRUE(ret == 0);
EXPECT_TRUE(!(devi.empty())) << "delist NULL";
USBDevicePipe pipe;
UsbDevice device = devi.front();
// 申请设备权限
UsbSrvClient.RequestRight(device.GetName());
// 打开设备
ret = UsbSrvClient.OpenDevice(device, pipe);
EXPECT_TRUE(ret == 0);
UsbInterface interface = device.GetConfigs().front().GetInterfaces().at(1);
USBEndpoint point = interface.GetEndpoints().front();
// 配置设备接口
ret = UsbSrvClient.ClaimInterface(pipe, interface, true);
EXPECT_TRUE(ret == 0);
uint8_t buffer[255] = "bulk read";
uint32_t len = 255;
std::vector<uint8_t> bulkbuffer = {buffer, buffer + len};
// 数据传输
ret = UsbSrvClient.BulkTransfer(pipe, point, bulkbuffer, 500);
EXPECT_TRUE(ret == 0);
// 关闭设备
bool close = UsbSrvClient.Close(pipe);
EXPECT_TRUE(close);
for (auto it = deviceList.begin(); it != deviceList.end(); ++it) {
std::cout << "device info :" << it->ToString() << "\n" << std::endl;
}
std::cout << "usb_device_test : << GetDevices >> test end ok <-" << std::endl;
OHOS::USB::UsbDevice device = deviceList[0];
std::vector<OHOS::USB::USBConfig> configs = device.GetConfigs();
OHOS::USB::USBConfig config = configs[0];
std::vector<OHOS::USB::UsbInterface> interfaces = config.GetInterfaces();
OHOS::USB::UsbInterface interface;
OHOS::USB::USBEndpoint inEp;
OHOS::USB::USBEndpoint outEp;
bool interfaceFlg = false;
bool inEpFlg = false;
bool outEpFlg = false;
std::string hstr = "\t";
std::cout << "test device Info:" << device.ToString() << std::endl;
std::cout << hstr << "config Info:" << config.ToString() << std::endl;
hstr += "\t";
for (int32_t i = 0; i < config.GetInterfaceCount(); ++i) {
OHOS::USB::UsbInterface tif = interfaces[i];
std::cout << hstr << "Interfaces[" << i << "]:" << std::endl;
std::cout << hstr << tif.ToString() << std::endl;
std::string hestr = hstr + "\t";
std::vector<OHOS::USB::USBEndpoint> mEndpoints = tif.GetEndpoints();
for (int32_t j = 0; j < tif.GetEndpointCount(); ++j) {
OHOS::USB::USBEndpoint tep = mEndpoints[j];
std::cout << hestr << "mEndpoints[" << j << "]:" << std::endl;
std::cout << hestr << tep.ToString() << std::endl;
if ((tif.GetClass() == 10) && (tif.GetSubClass() == 0) && (tif.GetProtocol() == 2)) {
if ((!interfaceFlg) && (tep.GetType() == 2)) {
if (tep.GetDirection()) {
inEp = tep;
inEpFlg = true;
} else {
outEp = tep;
outEpFlg = true;
}
}
}
}
if (!interfaceFlg) {
if ((outEpFlg) && (inEpFlg)) {
interface = interfaces[i];
interfaceFlg = true;
} else {
inEpFlg = false;
outEpFlg = false;
}
}
std::cout << std::endl;
}
// OpenDevice
std::cout << "usb_device_test : << OpenDevice >> test begin -> " << std::endl;
OHOS::USB::USBDevicePipe pip;
ret = g_usbClient.RequestRight(device.GetName());
std::cout << "设备请求权限结果 ret = " << ret << std::endl;
if (0 != ret) {
std::cout << "设备请求权限失败 ret = " << ret << std::endl;
}
ret = g_usbClient.OpenDevice(device, pip);
if (ret != 0) {
std::cout << "OpenDevice failed width ret = " << ret << std::endl;
return -5;
}
std::cout << "usb_device_test : << Control Transfer >> " << std::endl;
int32_t requestCmd = 6;
int32_t requestType = ((1 << 7) | (0 << 5) | (0 & 0x1f));
int32_t value = (2 << 8) + 0; // descriptor type << 8 + descriptor index
int32_t index = 0;
int32_t timeout = 5000;
std::vector<uint8_t> vData;
const OHOS::USB::UsbCtrlTransfer tctrl = {requestType, requestCmd, value, index, timeout};
ret = g_usbClient.ControlTransfer(pip, tctrl, vData);
if (ret != 0) {
std::cout << "control message read failed width ret = " << ret << std::endl;
} else {
std::cout << "control message read success" << std::endl;
}
if (interfaceFlg) {
std::cout << "ClaimInterface InterfaceInfo:" << interface.ToString() << std::endl;
ret = g_usbClient.ClaimInterface(pip, interface, true);
if (ret != 0) {
std::cout << "ClaimInterface failed width ret = " << ret << std::endl;
} else {
std::cout << "ClaimInterface success" << std::endl;
}
}
// BulkTransfer
if (interfaceFlg) {
std::cout << "usb_device_test : << Bulk transfer start >> " << std::endl;
if (outEpFlg) {
std::cout << "usb_device_test : << Bulk transfer write >> " << std::endl;
uint8_t buffer[50] = "hello world 123456789";
std::vector<uint8_t> vData(buffer, buffer + 21);
ret = g_usbClient.BulkTransfer(pip, outEp, vData, 5000);
if (ret != 0) {
std::cout << "Bulk transfer write failed width ret = " << ret << std::endl;
} else {
std::cout << "Bulk transfer write success" << std::endl;
}
}
}
// CloseDevice
std::cout << "usb_device_test : << Close Device >> " << std::endl;
ret = g_usbClient.Close(pip);
if (ret == 0) {
std::cout << "Close device failed width ret = " << ret << std::endl;
return -5;
} else {
std::cout << "Close device success" << std::endl;
}
return 0;
}
```
...
...
zh-cn/device-dev/subsystems/subsys-usbservice-guide.md
浏览文件 @
e4c356d9
...
...
@@ -9,34 +9,33 @@
1.
获取usb service实例
```
auto &srvClient =
UsbSrvClient::GetInstance();
static OHOS::USB::UsbSrvClient &g_usbClient = OHOS::USB::
UsbSrvClient::GetInstance();
```
2.
获取usb设备列表
```
std::vector<UsbDevice> deviceList;
int32_t ret =
srv
Client.GetDevices(deviceList);
std::vector<
OHOS::USB::
UsbDevice> deviceList;
int32_t ret =
g_usb
Client.GetDevices(deviceList);
```
3.
申请设备权限
```
UsbDevice device = deviceList.front();
int32_t ret = UsbSrvClient.RequestRight(device.GetName());
int32_t ret = g_usbClient.RequestRight(device.GetName());
```
4.
打开设备
```
USBDevicePipe pip;
int32_t
ret = srvClient.OpenDevice(dev
, pip);
int32_t
et = g_usbClient.OpenDevice(device
, pip);
```
5.
配置设备接口
```
srvClient.ClaimInterface(pip, interface, forc
e);
ret = g_usbClient.ClaimInterface(pip, interface, tru
e);
interface为deviceList中device的interface。
```
...
...
@@ -50,5 +49,5 @@ pipe为打开设备后的数据传输通道,endpoint为device中数据传输
7.
关闭设备
```
srvClient.Close(pipe
);
ret = g_usbClient.Close(pip
);
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录