## 串口配置
- 波特率:115200
- 数据位:8
- 停止位:1
- 奇偶检验:无
- 流控制:无
## 消息格式
主控和模块通讯的基本格式如下表所示,字节序为 **大端字节序(Big Endian)**:
| SyncWord | MsgID | DataSize | Data | ParityCheck |
| -------- | ------ | -------- | ------- | ----------- |
| 2 bytes | 1 byte | 2 bytes | N bytes | 1 byte |
下表是对上述各个字段的详细说明:
| 字段 | 长度 | 说明 |
| ----------- | ------- | ------------------------------------------------------------ |
| SyncWord | 2 bytes | 固定的消息开头同步字:0xEF 0xAA |
| MsgID | 1 byte | 消息ID(例如 MID_VERIFY) |
| DataSize | 2 bytes | Data数据的长度,0 ≤ size ≤ 65535 |
| Data | N bytes | 消息(MsgID)对应的数据内容,长度 N 为 DataSize 。
0表示此消息无参数 |
| ParityCheck | 1 byte | 协议的奇偶检验码。
去除SyncWord,对 MsgID、DataSize、Data 的内容字节做XOR运算 |
## 消息列表
| MsgID | Code | 说明 |
| ----------------------- | ---- | ------------------------------------------------------------ |
| MID_REPLY | 0x00 | 模组对主控发送出的命令的应答,对于主控下发的每条命令,模组最终都会使用 MID_REPLY 进行结果应答上报 |
| MID_NOTE | 0x01 | 摸组主动上报给主控的信息,根据 NID 判断消息类型和对应的 Data 结构(详细内容见下文) |
| MID_VERIFY | 0x12 | 掌静脉识别比对 |
| MID_ENROLL_SINGLE | 0x1D | 掌静脉录入(单帧) |
| MID_DELUSER | 0x20 | 删除一个已注册的掌静脉 |
| MID_DELALL | 0x21 | 删除所有已注册的掌静脉 |
| MID_ENROLL_PALM_FEATUTE | 0xF9 | 主控下发掌静脉特征值给模组进行注册 |
| MID_GET_PALM_FEATUTE | 0xFA | 主控请求获取指定用户掌静脉特征值 |
### 设备初始化完成
模组上电初始化完成后,会通过串口向主控发送一条 NID 为 NID_READY 的 MID_NOTE 消息: 0xEF 0xAA 0x01 0x00 0x01 0x00 0x00。(消息详细解释见 `模组状态上报(MID_NOTE)`)。
主机在接收到握手信号后,可以和模组进行指令交互。
### 掌静脉识别(MID_VERIFY)
主控下发该指令给模组,模组开始识别掌静脉进行比对,指令下发携带的参数 msg_verify_data 定义如下:
```c++
struct msg_verify_data {
uint8_t pd_rightaway;
uint8_t timeout;
};
```
参数说明:
- pd_rightaway:表示是否在识别完成后立刻关机(预留参数),默认设 00。
- timeout:识别超时时间,默认为10s,用户可以自行设置(最大不超过255s)。**主控等待模组录入应答的超时时间应大于此参数设置值。**
主控下发消息格式如下:
SyncWord | MsgID | DataSize | Data | ParityCheck | |
---|---|---|---|---|---|
2 bytes | 1 byte | 2 bytes | 2 bytes | 1 byte | |
0xEF 0xAA | MID_VERIFY (0x12) |
0x02 | pd_rightaway (1 byte) |
timeout (1 byte) |
SyncWord | MsgID | DataSize | Data | ParityCheck | RID | Result | ResultData | ||
---|---|---|---|---|---|---|---|---|---|
2 bytes | 1 byte | 2 bytes | N bytes | 1 byte | |||||
0xEF 0xAA | MID_REPLY (0x00) |
0x26 | MID_VERIFY (0x12) |
Result (1 byte) |
user_id (2 byte) |
username (32 byte) |
admin (1 byte) |
unlockStatus (1 byte) |
SyncWord | MsgID | DataSize | Data | ParityCheck | ||
---|---|---|---|---|---|---|
2 bytes | 1 byte | 2 bytes | N bytes | 1 byte | ||
0xEF 0xAA | MID_REPLY(0x00) | RID(1 byte) | Result(1 byte) | ResultData( N-2 bytes) |
SyncWord | MsgID | DataSize | Data | ParityCheck | ||
---|---|---|---|---|---|---|
2 bytes | 1 byte | 2 bytes | N bytes | 1 byte | ||
0xEF 0xAA | MID_NOTE(0x01) | NID(1 byte) | NoteData( N-1 bytes) |