onecard/reader 的 HID 连接、组包和协议配置传递。HidReportProfile.java:保存一次连接的不可变 input/output report 长度。HidReportProfileSelector.java:集中维护端点拓扑到 profile 的安全映射。HidReportProfileSelectorTest.java:覆盖两种已验证拓扑和未知拓扑。NewcapecProtocolReportProfileTest.java:验证协议层始终跟随连接 profile。ReaderError.java:增加 UNSUPPORTED_HID_REPORT。HidFrameCodec.java:组包、分包、继续请求和响应解析接受动态长度。HidTransport.java:暴露当前连接的不可变 profile。NewcapecProtocol.java:每次交换捕获一次 profile 并贯穿所有片段。AndroidUsbHidTransport.java:统计 Interrupt IN/OUT、选择 profile、动态收发并记录日志。HidFrameCodecTest.java:覆盖 32/64 字节和长度不匹配。HidReportDescriptorParser.java 及测试。UsbHidDescriptorParser.java 及测试。删除原因:目标 F700 Android 11 在占用接口前后、使用宽缓冲区和精确声明长度三种方式下,均无法通过 USB Host API 读取 Report Descriptor。保留这些组件会形成不可达死代码。
HidReportProfile,只接受 32 或 64 字节。HidReportProfileSelector:1 IN + 0 OUT → 32/321 IN + 1 OUT → 64/64UNSUPPORTED_HID_REPORTHidTransport 增加 getReportProfile()。NewcapecProtocol.exchange() 开始时捕获一次 profile。source=USB_ENDPOINT_TOPOLOGY。HidReportProfileSelectorTest RED → GREEN。:app:testDebugUnitTest 通过。:app:assembleDebug 通过。执行命令:
JAVA_HOME=/Users/liang/Library/Java/JavaVirtualMachines/corretto-1.8.0_482/Contents/Home \
bash gradlew :app:testDebugUnitTest :app:assembleDebug
interruptInputCount=1 interruptOutputCount=1。inputReportBytes=64 outputReportBytes=64。NO_CARD,未出现长度错误或通信超时。0001A0000001,枚举结果为 1 IN + 0 OUT。inputReportBytes=32 outputReportBytes=32。NO_CARD,未出现长度错误或 USB 超时。DISCONNECT_SUCCESS,接口和连接正常释放。TRANSACTION_OUTCOME_UNKNOWN 保护未修改。10.128.1.19:80 失败属于独立网络环境问题,不纳入读卡器兼容改动。