410 二维码改进 · 等待方案 Review

PC681 SDK修复合同与验收入口

当前AAR:DeviceSDK-80.1.10.12.20260129.aar;SHA256 adabb1f0f4750081abe131a3baa6f76057ff931e05d7264c56bf6fba5d99aeec。真实硬件介质为二维码,rfidData/rfidLen只保留厂商字段名。

本文件是本地准备材料。用户review与外发授权前不发送给厂商、不运行新包。

当前已证明的缺陷与输入

现象 证据方法/输入 新包要求
一次feed合包只排1帧 parseCacheData、ReceiveThread空的checkPackageTimeout;旧harness T02–04 同次排全部完整帧/FIFO/每帧一次,只留半帧
声明码长7/实有6仍回空 parseFrameData,外层校验自洽构造帧 明确字段异常,不生成正常空码;后续好帧可恢复
checksum为0x3C被误截尾 旧harness checksum-0x3c-mistaken-as-frame-footer 按长度/协议找尾,校验字节不当帧尾
短响应不可达并吞后续好帧 包内7字节ERR处理与主组帧最小29字节矛盾 控制响应单独分流,不吞称重帧;真实响应语义需厂家确认
无新鲜度/有限恢复能力 ScaleData没有源时间/序号、raw、checksum;native close有契约风险 正式说明线程/更新时间/错误/关闭行为,提供受支持验证入口

构造边界帧示例:3e0a0d303030303130303030303031303030303030303100c730363132333435363c3c。SDK外层校验通过,但温度字段0x00C7在设备上的业务范围未确认。厂家需提供其合法业务范围内同类碰撞用例;不能删除整个边界覆盖,也不能说该人工帧已在现场出现。

原始构造算法与11项输入:../sdk-verification/harness/ParserAudit.java。保留旧文件不变,候选另建正确行为测试。

厂家交付物V1–V7

  1. V1:增量组帧持续排空完整帧,帧序、半帧、溢出/重同步可验证。
  2. V2:帧长/尾部/校验规范;不会因负载或checksum出现0x3C提前结束。
  3. V3:合法零码、非数字长度、声明与负载不符、校验失败分别报告;不得将错误吞为正常空码。
  4. V4:零点/ERR/控制响应协议与数据帧分流,响应错误/未知前导不吞后续帧。
  5. V5:受支持的公开字节注入/诊断入口或厂商源码内测试包;读取完成时间、长度、错误、解析序列可回读。不得只交截图“已修复”。
  6. V6:两ABI的初始化/关闭/重开兼容,native字段混淆风险说明和真实FD/线程证据。
  7. V7:扫码头与秤体实际周期、FRQ命令ACK/生效、同码重复/NoRead语义、可用独立红外状态与源时间/序号。缺字段就标不支持,不用hostSeq伪造。

附新版AAR文件名/版本、SHA、变更说明、设备/固件适用范围、测试入口、测试报告。依赖图只允许一份当前AAR;旧版在外部制品位置保存,不并列依赖。

两条执行路线

B01首选厂家修包: 拿到公开注入入口后,在JDK17 Docker里验证不涉及JNI的真实parser;没有入口时使用经批准的串口回放台/410设备。旧harness用反射是冻结取证,不要求候选保留私有方法名,不把“私有方法改名”当成候选解析失败;分类为验证接口需适配。

B02备用应用接管: 仅选择此路线后创建App自己的parser/transport。真实可用低层API是SerialPort(File,int,int)、getInputStream()、getOutputStream();没有五参数open方法。PC681旧reader及所有命令入口必须退出,App成为唯一读写owner。SerialCommImpl会按CRLF拆删字节,不是raw替代品。禁止双读同流、双开同端口、同名覆盖AAR类、生产反射私有cache/thread。

仅由SDK反编译推导的数据帧实验布局为:头3E 0A 0D;25–26为ASCII长度N;27起为码;checksum位27+N;尾28+N;总长29+N。纯parser可使用它写特征/假传输测试,真实接管仍需正式协议。未知短响应/半帧超时不硬套300ms,也不能以预期错误长度整段吞掉后面的好帧。

端口默认初始化映射可到ttyS5/115200,构造默认又有ttyMSM2;必须取设备确认值,不按任一默认全型号硬编码。设频率、置零、RGB/灯、辅助识别都走同一owner;不得只迁读通道而留下旧SDK写通道。native close安全未验证前不真实启用旁路;没有特权Docker或模拟器可以替代该设备验证。

旧基线与新验收的区别

旧11项特征 候选正确行为
合法单帧/trim/分片 保持原有效输入兼容,不重复、不丢失
双帧只回1、idle留缓存、下次回旧尾 改为当前feed全部依次回,后续不重发
长度异常正常回空 改为字段/边界错误,无正常空回调
5字符可回码 parser如实表示;App拒码分型,不计物理空
0x3C校验被截 完整帧只解析一次,按合法业务范围复核输入
短响应吞好帧 响应与数据各自一次,后续恢复

完整执行oracle见test-matrix.csv的SDK-01–07/TRANSPORT-01–02。候选parser合格后还需命令/线程/重量单位/ABI、App集成和真实取餐测试;绝不只以JVM PASS宣布现场修复。