鸿蒙开发(NEXT/API 12)【硬件(外设扩展驱动开发)】驱动开发服务

场景介绍

[DriverExtensionAbility]是Driver类型的ExtensionAbility组件,提供驱动相关扩展框架能力。对于部分设备,支持插入外接的硬件模块来扩展设备能力, 此时可以以应用方式安装该硬件模块的驱动程序。通过DriverExtensionAbility可实现此类应用的开发。

[DriverExtensionAbility]可以通过DriverExtensionManager被应用绑定,并根据应用的请求信息在后台处理相关事务。

每个类型的ExtensionAbility都有自己的Context,DriverExtensionAbility通过[DriverExtensionContext]提供相关能力。

环境搭建

其中SDK版本配置的要求如下:

NDK接口 SDK版本
USB DDK API10及以上
HID DDK API11及以上

开发步骤

开发者在实现一个驱动时,需要在DevEco Studio工程中手动新建一个DriverExtensionAbility,具体步骤如下。

  1. 在工程Module对应的ets目录下,右键选择"New > Directory",新建一个目录并命名为driverextability。

  2. 在driverextability目录,右键选择"New > ArkTS File",新建一个文件并命名为DriverExtAbility.ets。

  3. 在文件中导入相关Kit,并定义请求Code。

    import { DriverExtensionAbility } from '@kit.DriverDevelopmentKit';
    import { Want } from '@kit.AbilityKit';
    import { rpc } from '@kit.IPCKit';

    const REQUEST_CODE = 99; // 与扩展外设客户端约定请求码

  4. 打开DriverExtAbility.ets文件,导入[RPC通信模块],重载onRemoteMessageRequest()方法,接收应用传递过来的消息,并将处理的结果返回给应用。REQUEST_VALUE用于校验应用发送的服务请求码。

    class StubTest extends rpc.RemoteObject {
    // 接收应用传递过来的消息处理,以及将处理的结果返回给客户端
    onRemoteMessageRequest(code: number, data: rpc.MessageSequence, reply: rpc.MessageSequence,
    option: rpc.MessageOption) {
    if (code === REQUEST_CODE) {
    // 接收应用传递过来的数据
    // 应用使用多次调用data.writeString()写入多个数据时,驱动可以通过多次调用data.readString()方法接收对应的数据
    let optFir: string = data.readString();
    // 驱动将数据的处理结果返回给应用
    // 示例中为接收了"Hello",并将"Hello World"返回给应用
    reply.writeString(optFir + World);
    }
    return true;
    }
    }

  5. 在DriverExtAbility.ets文件中,增加导入[DriverExtensionAbility]的依赖包,该包提供了onInit()、onRelease()、onConnect()和onDisconnect()生命周期回调,自定义类继承[DriverExtensionAbility]并根据需要重写需要的生命周期回调。

    export default class DriverExtAbility extends DriverExtensionAbility {
    onInit(want: Want) {
    console.info('testTag', onInit, want: ${want.abilityName});
    }

    onRelease() {
    console.info('testTag', onRelease);
    }

    onConnect(want: Want) {
    console.info('testTag', onConnect, want: ${want.abilityName});
    return new StubTest("test");
    }

    onDisconnect(want: Want) {
    console.info('testTag', onDisconnect, want: ${want.abilityName});
    }

    onDump(params: Array<string>) {
    console.info('testTag', onDump, params: + JSON.stringify(params));
    return ['params'];
    }
    }

  6. 在工程Module对应的[module.json5配置文件]中注册DriverExtensionAbility,type标签需要设置为"driver",srcEntry标签表示当前ExtensionAbility组件所对应的代码路径。

    {
    "module": {
    "name": "entry",
    "type": "entry",
    "description": "string:module_desc", "mainElement": "EntryAbility", "deviceTypes": [ "default", "tablet" ], "requestPermissions": [ { "name": "ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER" // 此处为扩展外设相关权限,必须配置 } ], "deliveryWithInstall": true, "installationFree": false, "pages": "profile:main_pages",
    "abilities": [
    {
    "name": "EntryAbility",
    "srcEntry": "./ets/entryability/EntryAbility.ets",
    "description": "string:EntryAbility_desc", "icon": "media:startIcon",
    "label": "string:EntryAbility_label", "startWindowIcon": "media:startIcon",
    "startWindowBackground": "color:start_window_background", "exported": true, "skills": [ { "entities": [ "entity.system.home" ], "actions": [ "action.system.home" ] } ] } ], "extensionAbilities": [ { "name": "DriverExtAbility", "icon": "media:startIcon",
    "description": "driver",
    "type": "driver",
    "exported": true,
    "srcEntry": "./ets/driverextability/DriverExtAbility.ets",
    "metadata": [
    {
    "name": "bus", // 必填项,所属总线
    "value": "USB"
    },
    {
    "name": "desc", // 选填项,必要的驱动描述
    "value": "the sample of driverExtensionAbility"
    },
    {
    "name": "vendor", // 选填项,驱动厂商名称
    "value": "string"
    },
    {
    "name": "vid", // 支持 USB vendor id 列表,填写16进制,此处为4817的16进制
    "value": "0x12D1"
    },
    {
    "name": "pid", // 支持的 USB product id 列表,填写16进制,此处为4258的16进制
    "value": "0x10A2"
    }
    ]
    }
    ]
    }
    }

  7. 完成客户端和驱动示例代码开发后,将Hap导入设备中,并点击hap中的Hello,查看是否会转变为Hello world,即实现ipc通信功能。

扩展设备能力

扩展外设管理提供了HID DDK和USB DDK两种能力,用于驱动开发;

应用签名

应用需要配置签名文件才能在设备上运行,并且扩展外设管理客户端开发,需要配置扩展外设的权限:ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER。

相关推荐
zzlyx994 小时前
HarmonyOS鸿蒙系统开发应用程序,免费开源DevEco Studio开发工具
华为·harmonyos
OH五星上将4 小时前
OpenHarmony(鸿蒙南向)——平台驱动开发【MIPI DSI】
linux·驱动开发·嵌入式硬件·harmonyos·openharmony·鸿蒙开发·鸿蒙内核
Android技术栈7 小时前
鸿蒙开发(NEXT/API 12)【硬件(获取智慧出行连接状态)】车载系统
华为·车载系统·硬件架构·harmonyos·鸿蒙·鸿蒙系统·openharmony
每天的积累7 小时前
Linux下的驱动开发二
linux·驱动开发
OH五星上将8 小时前
【移植】小型系统平台驱动移植
linux·驱动开发·嵌入式硬件·harmonyos·openharmony·鸿蒙南向·鸿蒙内核
PlumCarefree8 小时前
搭建基于H.265编码的RTSP推流云服务器
服务器·华为·交互·h.265
老家大门口的的猴子9 小时前
在新ARM板上移植U-Boot和Linux指南
linux·服务器·驱动开发·系统架构·信息与通信
Android技术栈11 小时前
鸿蒙开发(NEXT/API 12)【硬件(获取出行业务事件信息)】车载系统
车载系统·硬件工程·harmonyos·鸿蒙·鸿蒙系统·openharmony
Android技术栈11 小时前
鸿蒙开发(NEXT/API 12)【硬件(取消注册出行业务事件监听)】车载系统
车载系统·harmonyos·鸿蒙·鸿蒙系统·openharmony