内容提要
作者模仿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在某些情况下可能会出现错误,开发者应实际参与项目开发以避免误解。
延伸问答
macOS IOKIT在USB HID通信中存在哪些问题?
macOS IOKIT在USB HID通信中存在字节缺失问题,Payload大小不匹配,导致设备端收到的Payload为63字节,而预期为64字节。
如何解决macOS IOKIT的字节缺失问题?
通过将Report ID字段设为0,减少Payload中的一个字节,从而解决字节缺失问题,使设备端能够完整接收到64字节的数据。
Report ID字段在USB HID通信中有什么作用?
Report ID字段不是必需的,它会存放在数据Payload中,导致Payload大小不匹配,从而造成字节缺失。
ESP32-S3 Arduino框架如何处理USB HID通信?
ESP32-S3 Arduino框架默认使用Report ID 0进行消息处理,如果失败,再使用Payload的第一个字节作为Report ID调用回调。
开发者在调试USB HID通信时应注意什么?
开发者应实际参与项目开发,了解相关知识,以避免因误解而导致的错误,特别是在处理USB HID协议时。
AI在开发过程中可能出现哪些误解?
AI在某些情况下可能会出现错误,导致开发者误认为存在Bug,因此开发者应亲自参与项目以避免误解。