场景介绍
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