# USB-Transfer **Repository Path**: meha555/usb-transfer ## Basic Information - **Project Name**: USB-Transfer - **Description**: 【鸿蒙 Harmony Next 示例 代码】本demo使用@ohos.usbManager模块实现usb设备数据通信功能,主要实现控制传输功能与批量传输功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-27 - **Last Updated**: 2025-06-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # USB 数据通信Demo # 介绍 本demo使用[\@ohos.usbManager](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-usbmanager-V5)模块实现usb设备数据通信功能,主要实现控制传输功能与批量传输功能。 # 效果预览 ![USB数据通信效果预览](entry/src/main/resources/base/media/USBTranferPreview.gif) ## 约束与限制 1. 本示例支持 API Version 12 Release及以上版本。 2. 本示例支持 HarmonyOS 5.0.0 Release SDK及以上版本。 3. 本示例需要使用DevEco Studio 5.0.0 Release及以上版本进行编译运行。 ## 使用说明 无 ## 实现思路 获取连接设备信息 ```typescript // 获取 usb 连接设备 this.devicesList = usbManager.getDevices(); if (this.devicesList.length !== 0) { // 获取临时权限 usbManager.requestRight(this.devicesList[0].name); // 连接设备 let devicePipe: usbManager.USBDevicePipe = usbManager.connectDevice(this.devicesList[0]); // 更新连接状态 this.usbConnectStatus = this.context.resourceManager.getStringSync($r('app.string.UsbConnectConnectStatus_Connected')); // 获取设备列表第一台设备信息 this.deviceName = this.devicesList[0].name; this.busNum = this.devicesList[0].busNum; this.devAddress = this.devicesList[0].devAddress; } else { this.usbConnectStatus = this.context.resourceManager.getStringSync($r('app.string.UsbConnectConnectStatus_Disconnected')); this.tipsMassage = this.context.resourceManager.getStringSync($r('app.string.ConnectFailed')); } ``` 实现控制传输功能 ```typescript private async controlTransfer(device: usbManager.USBDevice) { try { // 调用 UsbService.controlTransfer() 方法进行控制传输 // controlTransferParam bmRequestType 属性 0x00:写数据,主设备往从设备;0x80:读数据,从设备往主设备. this.controlTransferResult = await UsbService.controlTransfer(device, controlTransferParam); if (this.controlTransferResult === -1) { this.tipsMassage = this.context.resourceManager.getStringSync($r('app.string.ControlTransfer_Failed')); } } catch (err) { this.tipsMassage = `${this.context.resourceManager.getStringSync($r('app.string.ControlTransfer_Error'))}: ${err}`; } } ``` 实现批量传输 OUT ```typescript private async bulkTransferOut(device: usbManager.USBDevice, sendText: string) { // 将 string 转换为 Uint8Array 类型 let transData: Uint8Array = TypeTransUtil.stringToUint8Array(sendText); try { // 发送数据 OUT this.bulkOutResult = await UsbService.bulkTransferOut(device, transData); if (this.bulkOutResult === -1) { this.tipsMassage = this.context.resourceManager.getStringSync($r('app.string.BulkTransferOut_Failed')); } } catch (err) { this.tipsMassage = `${this.context.resourceManager.getStringSync($r('app.string.BulkTransferOut_Error'))}: ${err}`; } } ``` 实现批量传输 IN ```typescript private async bulkTransferIn(device: usbManager.USBDevice) { // 接收批量传输返回值 与 buffer 获取的数据 let receiveData: ReceiveData = new ReceiveData(0, ''); try { // 接收数据 IN receiveData = await UsbService.bulkTransferIn(device); this.receiveMassage = receiveData.receiveMassage; this.bulkInResult = receiveData.receiveStatus; if (receiveData.receiveStatus === -1) { this.tipsMassage = this.context.resourceManager.getStringSync($r('app.string.BulkTransferIn_Failed')); } } catch (err) { this.tipsMassage = `${this.context.resourceManager.getStringSync($r('app.string.BulkTransferIn_Error'))}: ${err}`; } } ``` # 目录结构 ```markdown entry/main/ets/ |---entryability |---|---EntryAbility.ets |---model |---|---ControlTransferParam.ets // 控制传输参数 |---|---ReceiveData.ets // 批量传输接收数据类 |---pages |---|---Index.ets // 首页 |---service |---|---UsbService.ets // usb 数据通信服务 |---utils |---|---TypeTransUtil.ets // 数据类型转换工具 ``` ## 模块依赖 无 ## 参考文档 [USB管理](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-usbmanager-V5) # ChangeLog | 修订内容 | 修订日期 | |----------|------------| | 初稿 | 2024-12-26 | | README优化 | 2025-02-28 |