diff --git a/zh-cn/device-dev/subsystems/Readme-CN.md b/zh-cn/device-dev/subsystems/Readme-CN.md index 313aa9644ef30dc077598dab180087770fd33824..80716e72840992e378b8b3fa7fa12d2d5a2506da 100755 --- a/zh-cn/device-dev/subsystems/Readme-CN.md +++ b/zh-cn/device-dev/subsystems/Readme-CN.md @@ -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) diff --git a/zh-cn/device-dev/subsystems/subsys-usbservice-demo.md b/zh-cn/device-dev/subsystems/subsys-usbservice-demo.md index da58221fd01a328428f45f156d692651afa21fac..5ba094ce370f0585ed359206c0d93d56bc2a759b 100644 --- a/zh-cn/device-dev/subsystems/subsys-usbservice-demo.md +++ b/zh-cn/device-dev/subsystems/subsys-usbservice-demo.md @@ -2,64 +2,156 @@ ``` -#include "usb_device_pipe_test.h" +#include #include -#include -#include "delayed_sp_singleton.h" -#include "hilog_wrapper.h" +#include +#include +#include #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 -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 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 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 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 configs = device.GetConfigs(); + OHOS::USB::USBConfig config = configs[0]; + std::vector 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 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 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 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; } ``` diff --git a/zh-cn/device-dev/subsystems/subsys-usbservice-guide.md b/zh-cn/device-dev/subsystems/subsys-usbservice-guide.md index 5ba3115cbeefc77204279d85bc64d350eb64abc5..e80128ea07220be33d7d7e533968d52624c3e405 100644 --- a/zh-cn/device-dev/subsystems/subsys-usbservice-guide.md +++ b/zh-cn/device-dev/subsystems/subsys-usbservice-guide.md @@ -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 deviceList; -int32_t ret = srvClient.GetDevices(deviceList); +std::vector deviceList; +int32_t ret = g_usbClient.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, force); +ret = g_usbClient.ClaimInterface(pip, interface, true); interface为deviceList中device的interface。 ``` @@ -50,5 +49,5 @@ pipe为打开设备后的数据传输通道,endpoint为device中数据传输 7. 关闭设备 ``` -srvClient.Close(pipe); +ret = g_usbClient.Close(pip); ```