已在 remove_tray_recognition 分支完成“程序设置 → 高级设置 → 去掉辅助餐盘识别”功能,并根据实机诊断完成串口生命周期修正。应用复用 YoukateHardwareManager 已持有的 /dev/ttyS5、115200连接发送14字节命令 3E5343414E30363030303035803C,不重复打开或关闭共享串口。
目标设备已确认 /dev/ttyS5 具备读写权限。代码构建和本地单元测试已通过;串口抓包、模块实际关闭效果、返回主页后的持续称重和断电保持情况仍需完成新版本实机验收。
| 项目 | 实现 |
|---|---|
| 设置入口 | 高级设置顶部增加“去掉辅助餐盘识别” |
| 操作性质 | 一次性硬件配置,不保存本地开关状态 |
| 串口 | /dev/ttyS5 |
| 波特率 | 115200 |
| 命令 | 3E 53 43 41 4E 30 36 30 30 30 30 35 80 3C |
| 发送规则 | 发送14个原始字节,不发送十六进制文本,不追加 CR/LF |
| 安全控制 | 确认弹框、执行中防重复、后台线程、失败提示、共享串口单一持有 |
hardware/AuxiliaryTrayRecognitionController.java:保存固定命令,委托统一硬件管理器发送,不直接创建或关闭串口。activity/SetActivity.java:绑定入口、确认执行、后台发送、结果提示和本地日志。hardware/YoukateHardwareManager.java:直接停止 SDK 读取线程并保留输入输出流,增加共享串口发送能力,校验初始化状态并串行写入。activity/HomeActivity.java:进入后台时由释放串口调整为暂停称重监听。res/layout/activity_set.xml:增加高级设置操作项和分割线。res/values/strings.xml:增加设置名称、确认提示和执行中提示。未复用当前扫码调试弹窗,因为其串口、波特率选择控件没有接入实际打开逻辑。
当前 DeviceSDK 的 PC681ScaleManager 已确认默认映射为 /dev/ttyS5、115200。本次通过 YoukateHardwareManager 复用现有输出流,不直接创建第二个 SerialPort。
实机崩溃缓冲区证明当前 SDK 的 SerialPort.close() 存在 JNI 字段不匹配,调用后会触发 NoSuchFieldError 和 SIGABRT。因此串口按应用进程生命周期单一持有。
“命令发送成功”只表示输出流完成写入和刷新。需求未提供硬件确认回包,不能据此宣称模块已经应用配置。
JAVA_HOME=$(/usr/libexec/java_home -v 1.8) ./gradlew --no-daemon :app:assembleDebug :app:testDebugUnitTest
结果:BUILD SUCCESSFUL in 18s,28个任务中7个执行、21个为最新状态。
3E 53 43 41 4E 30 36 30 30 30 30 35 80 3C。0x80。write(byte[]) 和 flush()。SerialPort,未调用 SerialPort.close()。HomeActivity.onStop() 只暂停称重监听,保留共享串口。git diff --check 通过。remove_tray_recognition。