已将一卡通 USB HID 链路从固定 32 字节改为连接级动态 profile。同一套业务代码会根据读卡器 HID 接口的 Interrupt 端点拓扑选择 32/32 或 64/64 字节,并在未知拓扑下安全拒绝连接。
1 IN + 0 OUT。1 IN + 1 OUT。HidReportProfile,保存一次物理连接不可变的输入、输出报告长度。HidReportProfileSelector,集中维护两种已验证的端点拓扑映射;未知组合返回 UNSUPPORTED_HID_REPORT。AndroidUsbHidTransport 在连接时统计 Interrupt IN/OUT,选择 profile,动态分配接收缓冲区并严格校验收发长度;断开时清除 profile。HidFrameCodec 的组包、分包、继续请求和响应解析改为接受明确的 report 长度。HidTransport 暴露当前 profile;NewcapecProtocol 在一次交换开始时捕获并贯穿全部协议片段。CONTROL_SET_REPORT 写入路径。HidReportProfileSelectorTest 按 TDD 先 RED 后 GREEN,覆盖 1/0 → 32、1/1 → 64 和未知拓扑拒绝。HidFrameCodecTest 覆盖 32/64 字节请求、响应和长度不匹配。NewcapecProtocolReportProfileTest 验证协议初始化的全部报告跟随连接 profile。:app:testDebugUnitTest :app:assembleDebug,结果成功。interruptInputCount=1 interruptOutputCount=1。inputReportBytes=64 outputReportBytes=64 source=USB_ENDPOINT_TOPOLOGY。PROTOCOL_INITIALIZE_SUCCESS。written=64、inputBytes=64,无长度错误或 USB 超时。NO_CARD 属于预期业务结果。DISCONNECT_SUCCESS,接口和连接正常释放。0001A0000001。interruptInputCount=1 interruptOutputCount=0。inputReportBytes=32 outputReportBytes=32 source=USB_ENDPOINT_TOPOLOGY。PROTOCOL_INITIALIZE_SUCCESS。written=32、inputBytes=32,无长度错误或 USB 超时。NO_CARD 属于预期业务结果。USB_CLOSE_SUCCESS 和 DISCONNECT_SUCCESS,接口和连接正常释放。10.128.1.19:80 的人员同步失败属于独立网络问题。