实现USB数据通信鸿蒙示例代码
·
本文原创发布在华为开发者社区,更多鸿蒙场景化示例请见华为开发者联盟官网“行业实践与常见问题”专题页。
介绍
本示例使用@ohos.usbManager模块实现usb设备数据通信功能,主要实现控制传输功能与批量传输功能。
效果预览

实现思路
- 获取连接设备信息。
// 获取 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'));
}
- 实现控制传输功能。
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。
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。
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}`;
}
}
更多推荐
所有评论(0)