提交 7667de34 编写于 作者: W wu-chengwen

feat: update subsys-usbservice-demo.md and subsystems/Readme-CN.md and...

feat: update subsys-usbservice-demo.md and subsystems/Readme-CN.md and subsys-usbservice-guide.md and subsys-usbservice-overview.md
Signed-off-by: Nwu-chengwen <wuchengwen4@huawei.com>
上级 c447a3a0
...@@ -43,10 +43,10 @@ ...@@ -43,10 +43,10 @@
- [Sensor服务子系概述](subsys-sensor-overview.md) - [Sensor服务子系概述](subsys-sensor-overview.md)
- [Sensor服务子系使用指导](subsys-sensor-guide.md) - [Sensor服务子系使用指导](subsys-sensor-guide.md)
- [Sensor服务子系使用实例](subsys-sensor-demo.md) - [Sensor服务子系使用实例](subsys-sensor-demo.md)
- [Usb服务子系统指南](subsys-usbservice.md) - [Usb服务子系统](subsys-usbservice.md)
- [USB服务子系概述](subsys-usbservice-overview.md) - [USB服务子系概述](subsys-usbservice-overview.md)
- [USB服务子系使用指导](subsys-usbservice-guide.md) - [USB服务子系使用指导](subsys-usbservice-guide.md)
- [USB服务子系使用实例](subsys-usbservice-demo.md) - [USB服务子系使用实例](subsys-usbservice-demo.md)
- [用户程序框架](subsys-application-framework.md) - [用户程序框架](subsys-application-framework.md)
- [概述](subsys-application-framework-overview.md) - [概述](subsys-application-framework-overview.md)
- [搭建环境](subsys-application-framework-envbuild.md) - [搭建环境](subsys-application-framework-envbuild.md)
......
# USB服务子系使用实例<a name="ZH-CN_TOPIC_0000001092792986"></a> # USB服务子系使用实例<a name="ZH-CN_TOPIC_0000001092792986"></a>
``` ```
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <map> #include <map>
#include <mutex> #include <mutex>
#include <sstream> #include <sstream>
#include <sys/time.h>
#include "if_system_ability_manager.h" #include "if_system_ability_manager.h"
#include "ipc_skeleton.h" #include "ipc_skeleton.h"
#include "iremote_object.h" #include "iremote_object.h"
...@@ -16,138 +17,164 @@ ...@@ -16,138 +17,164 @@
#include "system_ability_definition.h" #include "system_ability_definition.h"
#include "usb_common.h" #include "usb_common.h"
#include "usb_device.h" #include "usb_device.h"
#include "usb_errors.h"
#include "usb_request.h" #include "usb_request.h"
#include "usb_server_proxy.h" #include "usb_server_proxy.h"
#include "usb_srv_client.h" #include "usb_srv_client.h"
#include "usb_errors.h"
#include <sys/time.h>
//需要修改/base/usb/usb_manager/service/BUILD.gn和/base/usb/usb_manager/ohos.build文件 #define REQUESTYPE ((1 << 7) | (0 << 5) | (0 & 0x1f))
//usb_manager/servrice/BUILD.gn是因为.cpp文件在service目录下,可根据实际情况来调整gn的指定路径 #define REQUESTCMD 6
#define VALUE (2 << 8) + 0
#define TIMEOUT 5000
#define ITFCLASS 10
#define ITFPROTOCOL 2
int main(int argc, char **argv) void GetType(OHOS::USB::USBEndpoint tep, OHOS::USB::USBEndpoint &outEp, bool &outEpFlg)
{ {
int32_t ret; if ((tep.GetType() == 2)) {
static OHOS::USB::UsbSrvClient &g_usbClient = OHOS::USB::UsbSrvClient::GetInstance(); if (tep.GetDirection() == 0) {
// GetDevices outEp = tep;
std::vector<OHOS::USB::UsbDevice> deviceList; outEpFlg = true;
ret = g_usbClient.GetDevices(deviceList);
if (ret != 0) {
std::cout << "GetDevices failed width ret = " << ret << std::endl;
return -5;
}
if (deviceList.empty()) {
std::cout << "device list is empty." << std::endl;
return -5;
} }
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(); bool selectEndpoint(OHOS::USB::USBConfig config,
OHOS::USB::USBConfig config = configs[0]; std::vector<OHOS::USB::UsbInterface> interfaces,
std::vector<OHOS::USB::UsbInterface> interfaces = config.GetInterfaces(); OHOS::USB::UsbInterface &interface,
OHOS::USB::UsbInterface interface; OHOS::USB::USBEndpoint &outEp,
OHOS::USB::USBEndpoint inEp; bool &outEpFlg)
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) { for (int32_t i = 0; i < config.GetInterfaceCount(); ++i) {
OHOS::USB::UsbInterface tif = interfaces[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(); std::vector<OHOS::USB::USBEndpoint> mEndpoints = tif.GetEndpoints();
for (int32_t j = 0; j < tif.GetEndpointCount(); ++j) { for (int32_t j = 0; j < tif.GetEndpointCount(); ++j) {
OHOS::USB::USBEndpoint tep = mEndpoints[j]; OHOS::USB::USBEndpoint tep = mEndpoints[j];
std::cout << hestr << "mEndpoints[" << j << "]:" << std::endl; if ((tif.GetClass() == ITFCLASS) && (tif.GetSubClass() == 0) && (tif.GetProtocol() == ITFPROTOCOL)) {
std::cout << hestr << tep.ToString() << std::endl; GetType(tep, outEp, outEpFlg);
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 (outEpFlg) {
if (!interfaceFlg) {
if ((outEpFlg) && (inEpFlg)) {
interface = interfaces[i]; interface = interfaces[i];
interfaceFlg = true; return true;
} else {
inEpFlg = false;
outEpFlg = false;
}
} }
std::cout << std::endl; std::cout << std::endl;
} }
// OpenDevice return false;
std::cout << "usb_device_test : << OpenDevice >> test begin -> " << std::endl; }
OHOS::USB::USBDevicePipe pip;
ret = g_usbClient.RequestRight(device.GetName()); int OpenDeviceTest(OHOS::USB::UsbSrvClient &g_usbClient, OHOS::USB::UsbDevice device, OHOS::USB::USBDevicePipe &pip)
std::cout << "设备请求权限结果 ret = " << ret << std::endl; {
int ret = g_usbClient.RequestRight(device.GetName());
std::cout << "设备请求权限结果 RequestRight = " << ret << std::endl;
if (0 != ret) { if (0 != ret) {
std::cout << "设备请求权限失败 ret = " << ret << std::endl; std::cout << "设备请求权限失败 RequestRight = " << ret << std::endl;
} }
ret = g_usbClient.OpenDevice(device, pip); ret = g_usbClient.OpenDevice(device, pip);
if (ret != 0) { return ret;
std::cout << "OpenDevice failed width ret = " << ret << std::endl; }
return -5;
} int CtrTransferTest(OHOS::USB::UsbSrvClient &g_usbClient, OHOS::USB::USBDevicePipe &pip)
{
std::cout << "usb_device_test : << Control Transfer >> " << std::endl; 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; std::vector<uint8_t> vData;
const OHOS::USB::UsbCtrlTransfer tctrl = {requestType, requestCmd, value, index, timeout}; const OHOS::USB::UsbCtrlTransfer tctrl = {REQUESTYPE, REQUESTCMD, VALUE, 0, TIMEOUT};
ret = g_usbClient.ControlTransfer(pip, tctrl, vData); int ret = g_usbClient.ControlTransfer(pip, tctrl, vData);
if (ret != 0) { if (ret != 0) {
std::cout << "control message read failed width ret = " << ret << std::endl; std::cout << "control message read failed width ret = " << ret << std::endl;
} else { } else {
std::cout << "control message read success" << std::endl; std::cout << "control message read success" << std::endl;
} }
return ret;
}
int ClaimTest(OHOS::USB::UsbSrvClient &g_usbClient,
OHOS::USB::USBDevicePipe &pip,
OHOS::USB::UsbInterface interface,
bool interfaceFlg)
{
if (interfaceFlg) { if (interfaceFlg) {
std::cout << "ClaimInterface InterfaceInfo:" << interface.ToString() << std::endl; std::cout << "ClaimInterface InterfaceInfo:" << interface.ToString() << std::endl;
ret = g_usbClient.ClaimInterface(pip, interface, true); int ret = g_usbClient.ClaimInterface(pip, interface, true);
if (ret != 0) { if (ret != 0) {
std::cout << "ClaimInterface failed width ret = " << ret << std::endl; std::cout << "ClaimInterface failed width ret = " << ret << std::endl;
} else { } else {
std::cout << "ClaimInterface success" << std::endl; std::cout << "ClaimInterface success" << std::endl;
} }
} }
// BulkTransfer return 0;
}
int BulkTransferTest(OHOS::USB::UsbSrvClient &g_usbClient,
OHOS::USB::USBDevicePipe &pip,
OHOS::USB::USBEndpoint outEp,
bool interfaceFlg,
bool outEpFlg)
{
if (interfaceFlg) { if (interfaceFlg) {
std::cout << "usb_device_test : << Bulk transfer start >> " << std::endl; std::cout << "usb_device_test : << Bulk transfer start >> " << std::endl;
if (outEpFlg) { if (outEpFlg) {
std::cout << "usb_device_test : << Bulk transfer write >> " << std::endl;
uint8_t buffer[50] = "hello world 123456789"; uint8_t buffer[50] = "hello world 123456789";
std::vector<uint8_t> vData(buffer, buffer + 21); std::vector<uint8_t> vData(buffer, buffer + 21);
ret = g_usbClient.BulkTransfer(pip, outEp, vData, 5000); int ret = g_usbClient.BulkTransfer(pip, outEp, vData, 5000);
if (ret != 0) { if (ret != 0) {
std::cout << "Bulk transfer write failed width ret = " << ret << std::endl; std::cout << "Bulk transfer write failed width ret = " << ret << std::endl;
} else { } else {
std::cout << "Bulk transfer write success" << std::endl; std::cout << "Bulk transfer write success" << std::endl;
} }
return ret;
}
}
return 0;
}
int main(int argc, char **argv)
{
static OHOS::USB::UsbSrvClient &g_usbClient = OHOS::USB::UsbSrvClient::GetInstance();
// GetDevices
std::vector<OHOS::USB::UsbDevice> deviceList;
int32_t ret = g_usbClient.GetDevices(deviceList);
if (ret != 0) {
return OHOS::USB::UEC_SERVICE_INVALID_VALUE;
}
if (deviceList.empty()) {
return OHOS::USB::UEC_SERVICE_INVALID_VALUE;
} }
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 outEp;
bool interfaceFlg = false;
bool outEpFlg = false;
interfaceFlg = selectEndpoint(config, interfaces, interface, outEp, outEpFlg);
// OpenDevice
std::cout << "usb_device_test : << OpenDevice >> test begin -> " << std::endl;
OHOS::USB::USBDevicePipe pip;
ret = OpenDeviceTest(g_usbClient, device, pip);
if (ret != 0) {
return OHOS::USB::UEC_SERVICE_INVALID_VALUE;
} }
// ControlTransfer
CtrTransferTest(g_usbClient, pip);
// ClaimInterface
ClaimTest(g_usbClient, pip, interface, interfaceFlg);
// BulkTransferWrite
BulkTransferTest(g_usbClient, pip, outEp, interfaceFlg, outEpFlg);
// CloseDevice // CloseDevice
std::cout << "usb_device_test : << Close Device >> " << std::endl; std::cout << "usb_device_test : << Close Device >> " << std::endl;
ret = g_usbClient.Close(pip); ret = g_usbClient.Close(pip);
if (ret == 0) { if (ret == 0) {
std::cout << "Close device failed width ret = " << ret << std::endl; std::cout << "Close device failed width ret = " << ret << std::endl;
return -5; return OHOS::USB::UEC_SERVICE_INVALID_VALUE;
} else { } else {
std::cout << "Close device success" << std::endl; std::cout << "Close device success" << std::endl;
} }
......
# USB服务子系使用指导<a name="ZH-CN_TOPIC_0000001077367159"></a> # USB服务子系使用指导<a name="ZH-CN_TOPIC_0000001077367159"></a>
- [使用步骤](#section18816105182315) - [使用步骤](#section18816105182315)
......
# USB服务子系概述<a name="ZH-CN_TOPIC_0000001092893508"></a> # USB服务子系概述<a name="ZH-CN_TOPIC_0000001092893508"></a>
- [概述](#section175431838101617) - [概述](#section175431838101617)
- [接口说明](#section83365421647) - [接口说明](#section83365421647)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册