💡
原文中文,约1800字,阅读约需5分钟。
📝
内容提要
作者模仿BLEUnlock开发macOS指纹解锁应用,发现macOS IOKIT在USB HID通信中存在字节缺失问题。调试后发现是多余的Report ID字段导致Payload大小不匹配,最终通过将Report ID设为0解决了问题,并总结了开发经验。
🎯
关键要点
- 作者模仿BLEUnlock开发macOS指纹解锁应用,涉及USB HID通信和CTAP协议处理。
- 在调试过程中发现macOS IOKIT在USB HID通信中存在字节缺失问题,Payload大小不匹配。
- 通过宏定义将包大小减少1个字节来绕过这个问题,初步认为是macOS的Bug。
- 在设备端收到的Payload大小为63字节,预期为64字节,发现第64个字节为0x00。
- 通过对比开源项目U2F Zero的USB HID Descriptor,发现自己项目中多了一个Report ID字段。
- Report ID字段不是必需的,导致Payload中多了一个字节,造成数据缺失。
- 尝试将Report ID改为0,设备端可以完整收到64个字节的数据。
- ESP32-S3 Arduino框架处理消息时没有遇到问题,使用Report ID 0作为默认值。
- 总结认为AI在某些情况下可能会出现错误,开发者应实际参与项目开发以避免误解。
➡️