实现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}`;
    }
    }
相关推荐
晓说前端2 分钟前
TypeScript 核心语法应用 —— Vue 3 中的使用(上)
前端·typescript
No Silver Bullet8 分钟前
Vue进阶(贰幺叁)vue.config.js 中 productionSourceMap 作用详解
前端·javascript·vue.js
xcsweb10 分钟前
从5分钟到10秒:我用一个Skill把团队部署效率提升了30倍
前端·vue.js
用户629605932470529 分钟前
一次位置调整引发的画布失忆:深入 Vue2 虚拟 DOM 复用机制
前端·vue.js
Sterting31 分钟前
条件渲染与列表渲染
前端·vue.js
__sjfzllv___34 分钟前
在职前端Leader学习/转行 AI Agent -DAY28
前端
不爱说话郭德纲35 分钟前
uni-app x iOS 扫码模糊怎么办?AVFoundation 灰尘级别摄像头助你超广角聚焦
前端·uni-app·app
柒和远方36 分钟前
V062:WebGPU 端侧推理与单例模式:从 Transformers.js 把大模型装进浏览器,到 Worker 线程的流式对话
前端
huabuyu39 分钟前
INP 自动化归因与自愈:如何自动定位、修复并验证一次卡顿
前端·javascript
何时梦醒40 分钟前
第一篇:项目概览 — 在浏览器里跑大模型,端侧 AI 的革命来了
前端·人工智能