# 自定义设备协议
在 硬件设备 和 内置硬件协议里面, 我们已经详细介绍硬件设备的基本概念, 以及几种内置的硬件协议使用, 如果你使用的协议, 或者内置的硬件协议不符合你的要求, 你可以尝试这个章节的自定义协议.
# 接口基本概念
在正式讲解自定义设备协议, 之前, 我们先介绍一下硬件协议用到的基本概念, 这样会帮助你理解并且更容易上手
# 面向接口编程
uCode 的硬件协议的开放, 是属于接口开放, 基于面向接口编程, 我们使用了 TypeScript 里面的 Interface 接口来约定了接口的规范
TypeScript Interface 接口
如果你还不太了解接口, 可以参考 TypeScript Interface (opens new window)
DeviceConnectionInterface (点击查看 API 文档) 便是我们定义的设备协议接口
包括内置的硬件协议, 其实也是实现了该接口
例如, 串口协议:
export class SerialPortProtocol implements DeviceConnectionInterface {}
# 硬件设备的生命周期
在 插件生命周期 里面, 我们介绍了硬件设备的实例化的大致声明周期
# DeviceConnectionInterface 接口字段
字段 | 必填 | 类型 | TypeScript 类型定义 | 描述 |
---|---|---|---|---|
connect | ✅ | function | (device: IDiscoverDevice) => Promise<void> | 连接设备 |
disconnect | ✅ | function | () => Promise<void> | 断开设备连接 |
destroy | ✅ | function | () => Promise<void> | 销毁 |
isConnected | ✅ | function | () => boolean | 返回是否断开连接 |
connectStatus | ✅ | number | UCode.DeviceConnectStatusUnionType | 实例化时由上层注入 |
eventbus | object | DeviceEventbusInterface | 实例化时由上层注入 | |
discoverDevice | object | IDiscoverDevice | 扫描传入的对象, 实例化时由上层注入 | |
beforeConnect | function | (device: IDiscoverDevice) => Promise<void> | 连接前的钩子函数 | |
afterConnect | function | (device: IDiscoverDevice) => Promise<void> | 连接后的钩子函数 | |
beforeDisconnect | function | () => Promise<void> | 断开连接前的钩子函数 | |
afterDisconnect | function | () => Promise<void> | 断开连接后的钩子函数 | |
reBindDevice | function | () => Promise<void> | 重新绑定设备, 主要是针对模式不匹配需要重连的情况 | |
enableCheckEnv | function | () => boolean | 是否开启环境检测, 需要和 checkEnv 一起使用 | |
checkEnv | function | () => Promise<void> | 是否开启环境检测 | |
handleError | function | (errorActionId: string) => Promise<boolean> | 错误处理 |
# 字段说明
上面必填的接口, 都是接口必须提供的, 其他的接口根据你的硬件设备的业务来定
# 硬件设备注册
Device 和 积木块 一样,都是由 uCode 进行统一实例化和调度,因此这里只要提供注册器 Register 即可
生成的拓展代码中默认加入了蓝牙、串口和 websocket 连接,可以在 src/index
编辑需要的连接方式:
import { bleRegister } from "./devices/ble-device";
import { spRegister } from "./devices/sp-device";
import { CustomRegister } from "./devices/custom-device";
const register = {
DeviceRegister: [
bleRegister, // 蓝牙连接
spRegister, // 串口连接
CustomRegister, // websocket连接,属自定义连接
],
BlockRegister: ExampleDeviceExtension,
};
DeviceRegister
可以接受一个数组,或者单个 协议注册器,当用户点击连接的那一刻,我们首先会去检查 DeviceRegister
,如果有多个,会弹出这个让用户选择具体的设备类型的窗口,如果只有一个,就直接进入连接流程