实现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}`;
    }
    }
相关推荐
0思必得019 分钟前
[Web自动化] 开发者工具性能(Performance)面板
运维·前端·自动化·web自动化·开发者工具
心灵的制造商23 分钟前
el-tree左侧新增类别和删除类别实例代码
前端·javascript·vue.js
冴羽26 分钟前
不知道怎么写 Nano Banana Pro 提示词?分享你一个结构化示例,复刻任意图片
前端·人工智能·aigc
IT_陈寒27 分钟前
JavaScript 性能优化:7个 V8 引擎隐藏技巧让你的代码提速200%
前端·人工智能·后端
脾气有点小暴33 分钟前
uniapp通用单张图片上传组件
前端·javascript·vue.js·uni-app·uniapp
小菜今天没吃饱39 分钟前
DVWA-XSS(stored)
前端·网络安全·xss·dvwa
云飞云共享云桌面39 分钟前
研发部门使用SolidWorks,三维设计云桌面应该怎么选?
运维·服务器·前端·网络·自动化·电脑
老华带你飞1 小时前
茶叶商城|基于SprinBoot+vue的茶叶商城系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot
烛阴1 小时前
不只是Public与Private:C#访问修饰符全方位解读
前端·c#
涔溪1 小时前
Vue3常用的组合式API 超详细讲解
前端·javascript·vue.js