HarmonyOS 设备管理开发:USB 服务开发指导

基本概念

USB 服务是应用访问底层的一种设备抽象概念。开发者根据提供的 USB API,可以获取设备列表、控制设备访问权限、以及与连接的设备进行数据传输、控制命令传输等。

运作机制

USB 服务系统包含 USB API、USB Service、USB HAL。

图 1USB 服务运作机制

● USB API:提供 USB 的基础 API,主要包含查询 USB 设备列表、批量数据传输、控制命令传输、权限控制等。

● USB Service:主要实现 HAL 层数据的接收、解析、分发以及对设备的管理等。

● USB HAL 层:提供给用户态可直接调用的驱动能力接口。

场景介绍

Host 模式下,可以获取到已经连接的 USB 设备列表,并根据需要打开和关闭设备、控制设备权限、进行数据传输等。

接口说明

USB 服务主要提供的功能有:查询 USB 设备列表、批量数据传输、控制命令传输、权限控制等。

USB 类开放能力如下,具体请查阅API参考文档

表 1 USB 类的开放能力接口

开发步骤

USB 设备可作为 Host 设备连接 Device 设备进行数据传输。开发示例如下:

  1. 获取设备列表。

    ts// 导入USB接口api包。import usb from '@ohos.usbManager';// 获取设备列表。let deviceList : Array = usb.getDevices();/deviceList结构示例[ { name: "1-1", serial: "", manufacturerName: "", productName: "", version: "", vendorId: 7531, productId: 2, clazz: 9, subClass: 0, protocol: 1, devAddress: 1, busNum: 1, configs: [ { id: 1, attributes: 224, isRemoteWakeup: true, isSelfPowered: true, maxPower: 0, name: "1-1", interfaces: [ { id: 0, protocol: 0, clazz: 9, subClass: 0, alternateSetting: 0, name: "1-1", endpoints: [ { address: 129, attributes: 3, interval: 12, maxPacketSize: 4, direction: 128, number: 1, type: 3, interfaceId: 0, } ] } ] } ] }]/ 复制代码
  2. 获取设备操作权限。

    ts import usb from '@ohos.usbManager'; import { BusinessError } from '@ohos.base'; let deviceName : string = deviceList[0].name;// 申请操作指定的device的操作权限。usb.requestRight(deviceName).then((hasRight : boolean) => { console.info("usb device request right result: " + hasRight);}).catch((error : BusinessError)=> { console.info("usb device request right failed : " + error);});

  3. 打开 Device 设备。

    ts// 复制代码

let pipe : USBDevicePipe = usb.connectDevice(deviceList[0]);

  1. 数据传输。

    import usb from '@ohos.usbManager';
    import { BusinessError } from '@ohos.base';
    /*
    读取数据,在device信息中选取对应数据接收的endpoint来做数据传输
    (endpoint.direction == 0x80);dataUint8Array是要读取的数据,类型为Uint8Array。
    */
    let inEndpoint : USBEndpoint = interface1.endpoints[2];
    let outEndpoint : USBEndpoint = interface1.endpoints[1];
    let dataUint8Array : Array<number> = new Uint8Array(1024);
    usb.bulkTransfer(pipe, inEndpoint, dataUint8Array, 15000).then((dataLength : number) => {
    if (dataLength >= 0) {
    console.info("usb readData result Length : " + dataLength);
    } else {
    console.info("usb readData failed : " + dataLength);
    }
    }).catch((error : BusinessError) => {
    console.info("usb readData error : " + JSON.stringify(error));
    });
    // 发送数据,在device信息中选取对应数据发送的endpoint来做数据传输。(endpoint.direction == 0)
    usb.bulkTransfer(pipe, outEndpoint, dataUint8Array, 15000).then((dataLength : number) => {
    if (dataLength >= 0) {
    console.info("usb writeData result write length : " + dataLength);
    } else {
    console.info("writeData failed");
    }
    }).catch((error : BusinessError) => {
    console.info("usb writeData error : " + JSON.stringify(error));
    });

let inEndpoint : USBEndpoint = interface1.endpoints[2];

  1. 释放接口,关闭设备。

    tsusb.releaseInterface(pipe, interface1);usb.closePipe(pipe);

相关推荐
SameX2 小时前
HarmonyOS Next 安全生态构建与展望
前端·harmonyos
SameX2 小时前
HarmonyOS Next 打造智能家居安全系统实战
harmonyos
Random_index10 小时前
#Uniapp篇:支持纯血鸿蒙&发布&适配&UIUI
uni-app·harmonyos
鸿蒙自习室13 小时前
鸿蒙多线程开发——线程间数据通信对象02
ui·harmonyos·鸿蒙
SuperHeroWu715 小时前
【HarmonyOS】鸿蒙应用接入微博分享
华为·harmonyos·鸿蒙·微博·微博分享·微博sdk集成·sdk集成
zhangjr057518 小时前
【HarmonyOS Next】鸿蒙实用装饰器一览(一)
前端·harmonyos·arkts
诗歌难吟4641 天前
初识ArkUI
harmonyos
SameX1 天前
HarmonyOS Next 设备安全特性深度剖析学习
harmonyos
郭梧悠1 天前
HarmonyOS(57) UI性能优化
ui·性能优化·harmonyos
郝晨妤2 天前
鸿蒙原生应用开发元服务 元服务是什么?和App的关系?(保姆级步骤)
android·ios·华为od·华为·华为云·harmonyos·鸿蒙