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

基本概念

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

运作机制

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

**图 1 **USB 服务运作机制

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

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

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

场景介绍

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

接口说明

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

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

表 1 USB 类的开放能力接口

开发步骤

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

  1. 获取设备列表。

    // 导入USB接口api包。
    import usb from '@ohos.usbManager';
    // 获取设备列表。
    let deviceList : Array<usb.USBDevice> = 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 interface1 = deviceList[0].configs[0].interfaces[0];
    let interface1 : number = deviceList[0].configs[0].interfaces[0];
    /
    打开对应接口,在设备信息(deviceList)中选取对应的interface。interface1为设备配置中的一个接口。
    /
    usb.claimInterface(pipe, interface1, true);

let pipe : USBDevicePipe = usb.connectDevice(deviceList0);

  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 = 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.endpoints2;

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

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

为了能让大家更好的学习鸿蒙 (Harmony OS) 开发技术,这边特意整理了《鸿蒙 (Harmony OS)开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙 (Harmony OS)开发学习手册》

入门必看:https://qr21.cn/FV7h05

  1. 应用开发导读(ArkTS)
  2. 应用开发导读(Java)

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. 构建第一个JS应用
  4. ......

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ......

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ......
相关推荐
zxanz11 分钟前
该怎么去选择 SSL 证书来使用?有什么方法不
服务器·网络协议·ssl
qq_401700414 分钟前
CAN 开源库大全(嵌入式/上位机,适配STM32、Linux、Qt,附带Github地址)
linux·stm32·开源
无风听海5 分钟前
深入理解.NET中的 Lazy<T>
服务器·php·.net
传奇开心果编程18 分钟前
【Compose Multiplatform跨端声明式UI实用技术】第4课:Composable 函数与声明式 UI 思维
移动开发·编程语言理论·开发范式·编程框架·函数式思维·声明式ui·声明式ui思维
小π军20 分钟前
安卓、iOS、鸿蒙三端的理解
android·ios·harmonyos
普通人625 分钟前
宝塔中实现按地区过滤和官网跳转伪静态
服务器·开发语言·nginx·1024程序员节
Raas10031 分钟前
AI网关能做调用审计吗?MAI Gateway(魔芋企业级AI网关)实战能力深度解读
java·服务器·网络·数据库·gateway·prompt·企业级产品
m0_7381858238 分钟前
Flutter 鸿蒙化实战:volume_controller 适配 OpenHarmony,系统音量控制
flutter·华为·harmonyos·鸿蒙
AAA代码批发商44 分钟前
DAYS 56【Linux 驱动深度】SPI 子系统驱动开发全指南:从架构、核心数据结构到设备驱动实战
linux·驱动开发·架构·内核开发·spi 子系统
智恒百亿1 小时前
RTX 5090 多卡集群工程实践:消费旗舰卡搭建 8 卡算力平台的坑与边界
服务器·人工智能·ai算力·rtx5090