# 自定义设备协议

硬件设备内置硬件协议里面, 我们已经详细介绍硬件设备的基本概念, 以及几种内置的硬件协议使用, 如果你使用的协议, 或者内置的硬件协议不符合你的要求, 你可以尝试这个章节的自定义协议.

# 接口基本概念

在正式讲解自定义设备协议, 之前, 我们先介绍一下硬件协议用到的基本概念, 这样会帮助你理解并且更容易上手

# 面向接口编程

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,如果有多个,会弹出这个让用户选择具体的设备类型的窗口,如果只有一个,就直接进入连接流程