鸿蒙开发(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; // 与扩展外设客户端约定请求码 1. 打开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; } } 1. 在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) { console.info('testTag', `onDump, params:` + JSON.stringify(params)); return ['params']; } } 1. 在工程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" } ] } ] } } 1. 完成客户端和驱动示例代码开发后,将Hap导入设备中,并点击hap中的Hello,查看是否会转变为Hello world,即实现ipc通信功能。 ### 扩展设备能力 扩展外设管理提供了HID DDK和USB DDK两种能力,用于驱动开发; ### 应用签名 应用需要配置签名文件才能在设备上运行,并且扩展外设管理客户端开发,需要配置扩展外设的权限:ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER。

相关推荐
SuperHeroWu711 分钟前
【HarmonyOS 5】鸿蒙星闪NearLink详解
华为·蓝牙·harmonyos·nearlink·鸿蒙星闪·绿牙
积跬步DEV2 小时前
RN 鸿蒙混合开发实践(踩坑)
react native·华为·harmonyos
天上路人4 小时前
AI神经网络降噪算法在语音通话产品中的应用优势与前景分析
深度学习·神经网络·算法·硬件架构·音视频·实时音视频
繁依Fanyi6 小时前
我的 PDF 工具箱:CodeBuddy 打造 PDFMagician 的全过程记录
java·pdf·uni-app·生活·harmonyos·codebuddy首席试玩官
Huang兄6 小时前
#跟着若城学鸿蒙# web篇-获取定位
harmonyos
zkmall8 小时前
Java + 鸿蒙双引擎:ZKmall开源商城如何定义下一代B2C商城技术标准?
java·开源·harmonyos
lqj_本人9 小时前
鸿蒙OS&UniApp实现视频播放与流畅加载:打造完美的移动端视频体验#三方框架 #Uniapp
uni-app·音视频·harmonyos
交叉编译之王 hahaha9 小时前
RK3568平台OpenHarmony系统移植可行性评估
华为·harmonyos
搬砖的小码农_Sky10 小时前
FPGA:Lattice的FPGA产品线以及器件选型建议
嵌入式硬件·fpga开发·硬件架构·硬件工程
TOSHIBA-王工10 小时前
TLP5814H是一款高度集成的栅极驱动器光电耦合器
驱动开发