实现USB数据通信鸿蒙示例代码

本文原创发布在华为开发者社区,更多鸿蒙场景化示例请见华为开发者联盟官网"行业实践与常见问题"专题页。

介绍

本示例使用@ohos.usbManager模块实现usb设备数据通信功能,主要实现控制传输功能与批量传输功能。

实现USB数据通信源码链接

效果预览

实现思路

  1. 获取连接设备信息。
kotlin 复制代码
    // 获取 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'));
    }
  1. 实现控制传输功能。
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}`;
    }
    }
  1. 实现批量传输 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}`;
    }
    }
  1. 实现批量传输 IN。
ini 复制代码
    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}`;
    }
    }
相关推荐
l1m0_21 分钟前
AI设计工具有哪些?Paico、Pixso AI、墨刀AI、Lovable、Codex怎么选
前端·人工智能·ai·设计·墨刀·codex·pixso
web打印社区23 分钟前
Lodop在Edge和双核浏览器-先分清内核
前端·javascript·edge·pdf·ecmascript·html5
西瓜拿铁好喝29 分钟前
开源和闭源 AI 办公工具,分别适合谁
java·前端·数据库
IT_陈寒29 分钟前
深入理解SpringBoot:核心原理与最佳实践
前端·人工智能·后端
风骏时光牛马1 小时前
大模型综合能力多维评测:性能、逻辑与落地表现对比
前端
liuchangng1 小时前
React 19 + Vite 6 实战:从教材 PDF 到 866 词间隔重复单词 App
前端·react.js·pdf·vite·开源项目
Dwzun1 小时前
基于SpringBoot3+Vue3的油莎豆种植管理系统
java·前端·vue.js·spring boot·后端·python·计算机网络
小码哥_常7 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮9 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
她说可以呀11 小时前
Vue插槽
前端·javascript·vue.js