# peripheral-ctrl **Repository Path**: beiente/peripheral-ctrl ## Basic Information - **Project Name**: peripheral-ctrl - **Description**: 一体机上的外设控制服务 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-15 - **Last Updated**: 2026-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 外设控制器 ## 简介 外设主要由两部分组成: 1. 指纹模块 FPM 2. 人脸识别模块 FM 下面涉及交互流程相关的 H : 主控 M : 模组 ## 指纹模块 物理链路为串口,57600,8n1 注册和验证分为通用流程和自动流程 通用流程(模块采用的是XTL0608 需要采集5次) 通用注册流程 1.n=1 发送获取图像指令 GetImage 2.等待返回,成功则进行3;失败则1 3.发送生成特征指令 GenChar 4.等待返回,成功 n+1 n<5时进行1,n>=5时进行5;失败进行1 5.发送合并模板指令 RegModel 6.等待返回,成功则进行7;失败则结束,记录失败信息 7.发送存储模板指令 StoreChar 8.等待返回,成功则结束,记录成功;失败则结束,记录失败 通用验证流程 1.发送获取图像指令 GetImage 2.等待返回,成功则进行3;失败则1 3.发送生成特征指令 4.等待返回,成功则进行5;失败则1 5.发送搜索指纹指令,结束 自动注册流程 1.发送自动注册指令 StartAutoEnroll 2.等待返回,成功进行3;失败则结束 3.n=1 按下手指 返回00 01 0n 4.生成特征成功 返回 00 02 0n 5.手指离开,当次录入成功 返回 00 03 0n 6.n+1,如果n<5,则进行3,如果n>=5,则进行7 7.合并模板成功,返回 00 04 F0 8.指纹重复检测成功 返回 00 05 F1,失败则结束 9.登记模板成功,返回 00 06 F2,失败则结束 自动验证流程 1.发送自动验证指令 StartAutoIdentify 2.等待返回,成功进行3;失败则结束 3.按下手指,采图成功 返回 00 01 4.生成特征成功,指纹对比成功,返回 00 05 指纹模块的上传,是LoadChar之后,再UpChar,两步是分开的 指纹模块的下载,是DownChar之后,再StoreChar,两步是在一个函数进行的。 ## 人脸识别模块 物理链路为串口,115200,8n1 人脸识别模块的回复信息分为3类 1. Reply 回复 2. Note 主动向主控返回一些信息,主要是在以下几种情况发送 开机时模组向主控发送 NID_READY (0) 0xEF 0xAA 0x01 0x00 0x01 0x00 0x00 录入过程中模组向主控发送人脸信息 解锁过程中模组向主控发送人脸信息 3. Image 模组向主控发送人脸图片 使用场景 录入人脸流程 1.H--->M 发送 ReqEnroll,其中携带是否是管理员、用户名、录入方向、超时等信息 2.M--->H 录入过程中,模组向主控发送Note类信息RspNote,此时nid为1,data为FaceState结构,根据结构类型提醒录入人调整姿态 3.M--->H 录入成功或者失败,模组向主控发送Reply类信息RspReply,此时mid为0x13,根据result判断结果,data为Enroll结构 验证人脸流程 1.H--->M 发送 ReqVerify 2.M--->H 验证过程中,模组向主控发送Note类信息RspNote,此时nid为1,data为FaceState结构,根据结构类型提醒录入人调整姿态 3.M--->H 验证成功或者失败,模组向主控发送Reply类信息RspReply,此时mid为0x12,根据result判断结果,data为Verify结构 人脸模块就一个下发图片的功能, 先下发通过数据注册指令(内部包括数据长度,数据的类型), 再分包下发数据(每包最大246字节),每包都有回复,最后一包的回复带注册后的id ## systemd service [Unit] Description=Golang-Web-Server After=network.target [Service] Type=simple WorkingDirectory= ExecStart=/usr/local/bin/golang-web-server Restart=always RestartSec=10 [Install] WantedBy=multi-user.target 添加到系统启动 sudo cp golang-web-server.service /etc/systemd/system/ sudo systemctl enable golang-web-server.service 移除服务 sudo systemctl disable golang-web-server.service sudo systemctl stop golang-web-server.service sudo rm /etc/systemd/system/golang-web-server.service sudo systemctl daemon-reload 相关参考文章 https://www.jianshu.com/p/d35c23404175 https://segmentfault.com/a/1190000043548597 ## changelog 2024-08-08 v0.0.3 将外设配置从程序参量输入改为ini配置文件形式 2024-09-09 v0.0.4 增加海芯物联的RFID模块支持 2024-09-12 v0.0.5 将人脸模块注册从ENrollSingle改为ENrollITG v0.0.6 增加本地IO模块,现阶段实现读取io状态并上传 v0.1.0 将回复统一收缩到clientManager类内 v0.2.0 增加websocket支持 v0.2.1 增加人脸注册时,是否使能重复注册 v0.2.2 指纹模块注册增加读取次数设置