补光灯控制走 /dev/ttyS5 @ 9600,原实现里 isConnected() 只根据是否记录了 currentPath 判断是否连接:
app/src/main/java/com/cpt/aidishrecognition/hardware/PlateSensorSerialManager.javacurrentPath != null,就认为串口仍然可用这会导致一种情况:
原先 dev_sendUart() 调用失败时,只是抛出异常,没有立刻把当前连接状态清掉。
这样会导致:
布局里有 btn_fill_light_toggle,但原来的 FillLightActivity 没有给它绑定点击事件。
结果是:
PlateSensorSerialManager.java文件:
app/src/main/java/com/cpt/aidishrecognition/hardware/PlateSensorSerialManager.java修改点:
sendCommand() 中,给 dev_sendUart() 增加了 try/catchdev_sendUart() 抛出 RuntimeException,立即执行 disconnectLocked()dev_sendUart() 返回值不为 0,也立即执行 disconnectLocked()目的:
FillLightController.java文件:
app/src/main/java/com/cpt/aidishrecognition/hardware/FillLightController.java修改点:
reconnect() 方法,内部先 disconnect() 再 connect()setBrightness() 改成每次发送亮度前都主动 reconnect()目的:
FillLightActivity.java文件:
app/src/main/java/com/cpt/aidishrecognition/activity/FillLightActivity.java修改点:
btn_fill_light_toggle 的点击事件lastNonZeroBrightness,用于记住最近一次非 0 亮度0reconnect()pendingBrightness 重新发送一次目的:
已执行编译验证:
./gradlew :app:compileDebugJavaWithJavacBUILD SUCCESSFUL如果页面显示成功、但灯没有变化,优先怀疑串口连接失效或硬件端未响应。
app/src/main/java/com/cpt/aidishrecognition/hardware/FillLightController.javaapp/src/main/java/com/cpt/aidishrecognition/hardware/PlateSensorSerialManager.javaapp/src/main/java/com/cpt/aidishrecognition/activity/FillLightActivity.java建议记录以下信息:
LED080#dev_sendUart() 的返回值RuntimeException/dev/ttyS5 @ 9600这样可以快速区分:
本次修复的核心思路不是改协议,而是增强串口控制的稳定性:
如果后续补光灯再次出现“第一次能控,后来失效”,优先参考本记录继续排查。