harmony 鸿蒙扩展外设管理开发指导
扩展外设管理开发指导
场景介绍
扩展外设主要是指通过物理接口连入主设备的配件设备,如手写板、打印机和扫描仪等。应用通过扩展外设管理能力可以查询绑定扩展外设,从而使用扩展外设驱动提供的定制能力来使用扩展外设,如打印机的配套软件。
支持PC, Tablet等可接入扩展外设的设备,暂不支持手机。
接口说明
扩展外设管理主要提供的功能有:查询扩展外设列表、绑定和解绑查询到的设备。
扩展外设管理开放能力如下,具体请查阅API参考文档。
表1 扩展外设管理开放能力接口
接口名 | 描述 |
---|---|
queryDevices(busType?: number): Array<Readonly<Device>> | 查询扩展外设列表 |
bindDevice(deviceId: number, onDisconnect: AsyncCallback<number>, callback: AsyncCallback<{deviceId: number, remote: rpc.IRemoteObject}>): void | 绑定设备,绑定成功后返回设备驱动的IRemoteObject通信对象,通过该对象与设备驱动进行交互。 |
bindDevice(deviceId: number, onDisconnect: AsyncCallback<number>): Promise<{deviceId: number, remote: rpc.IRemoteObject}> | 绑定设备的Promise形式。 |
unbindDevice(deviceId: number, callback: AsyncCallback<number>): void | 解绑设备。 |
unbindDevice(deviceId: number): Promise<number> | 解绑设备的Promise形式。 |
开发步骤
应用可通过查询绑定扩展外设,从而使用扩展外设的定制驱动能力。开发示例如下:
- 查询设备列表。
import deviceManager from '@ohos.driver.deviceManager';
import { BusinessError } from '@ohos.base';
let matchDevice : deviceManager.USBDevice|null = null;
try {
let devices : Array<deviceManager.Device> = deviceManager.queryDevices(deviceManager.BusType.USB);
for (let item of devices) {
let device : deviceManager.USBDevice = item as deviceManager.USBDevice;
// 通过productId和vendorId来匹配要使用的USB设备
if (device.productId == 1234 && device.vendorId === 2345) {
matchDevice = device;
break;
}
}
} catch (error) {
let errCode = (error as BusinessError).code;
let message = (error as BusinessError).message;
console.error(`Failed to query device. Code is ${errCode}, message is ${message}`);
}
if (!matchDevice) {
console.error('No match device');
}
- 绑定相应的设备。
import deviceManager from '@ohos.driver.deviceManager';
import { BusinessError } from '@ohos.base';
import rpc from '@ohos.rpc'
let remoteObject : rpc.IRemoteObject;
try {
// 12345678为示例deviceId,应用开发时可以通过queryDevices查询到相应设备的deviceId作为入参
deviceManager.bindDevice(12345678, (error : BusinessError, data : number) => {
console.error('Device is disconnected');
}, (error : BusinessError, data : {
deviceId : number;
remote : rpc.IRemoteObject;
}) => {
if (error) {
console.error(`bindDevice async fail. Code is ${error.code}, message is ${error.message}`);
return;
}
console.info('bindDevice success');
remoteObject = data.remote;
});
} catch (error) {
let errCode = (error as BusinessError).code;
let message = (error as BusinessError).message;
console.error(`bindDevice fail. Code is ${errCode}, message is ${message}`);
}
if (!remoteObject) {
console.error('Bind device failed');
}
- 绑定成功后使用设备驱动能力。
import { BusinessError } from '@ohos.base';
import rpc from '@ohos.rpc'
let option : rpc.MessageOption = new rpc.MessageOption();
let data : rpc.MessageSequence = rpc.MessageSequence.create();
let reply : rpc.MessageSequence = rpc.MessageSequence.create();
data.writeString('hello');
let code = 1;
// remoteObject应用可以通过绑定设备获取到
let remoteObject : rpc.IRemoteObject;
// code和data内容取决于驱动提供的接口
remoteObject.sendMessageRequest(code : number, data : rpc.MessageSequence, reply : rpc.MessageSequence, option : rpc.MessageOption)
.then(() => {
console.info('sendMessageRequest finish.');
}).catch((error : BusinessError) => {
let errCode = (error as BusinessError).code;
console.error('sendMessageRequest fail. code:' + errCode);
});
- 设备使用完成,解绑设备。
import deviceManager from '@ohos.driver.deviceManager';
import { BusinessError } from '@ohos.base';
try {
// 12345678为示例deviceId,应用开发时可以通过queryDevices查询到相应设备的deviceId作为入参
deviceManager.unbindDevice(12345678, (error : BusinessError, data : number) => {
if (error) {
let errCode = (error as BusinessError).code;
let message = (error as BusinessError).message;
console.error(`unbindDevice async fail. Code is ${errCode}, message is ${message}`);
return;
}
console.info(`unbindDevice success`);
});
} catch (error) {
let errCode = (error as BusinessError).code;
let message = (error as BusinessError).message;
console.error(`unbindDevice fail. Code is ${errCode}, message is ${message}`);
}
你可能感兴趣的鸿蒙文章
0
赞
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦