2017-02-14 8 views
1

MaxFeatureReportSize = 263을 표시하는 장치가 있습니다. 장치와 통신하기위한 프로토콜에 정확히 263 바이트 길이의 기능 보고서를 보내야합니다. 이 Windows에서 잘 작동하지만 Mac에서 이상한 문제가 발생했습니다 - IOHIDDeviceSetReport OS X 10.11 및 10.12 IOKit 헤더에서 추론 할 수없는 암호 오류 0xe0005000 반환하고 해당 드라이버 (IOUSBHostHIDDevice) 코드는 closedsource 있습니다.Mac에서 64 바이트를 초과하는 HID 기능 보고서를 보낼 수 없습니다.

추가 조사는 64 바이트 이하의 요청을 보낼 때

  1. 이 오류가 나타나지 않는 것으로 나타났다. 불행히도 프로토콜이 돌로 설정되어 있고 변경할 수 없기 때문에 이것은 실제로 도움이되지 않습니다. 263 바이트를 보내야합니다.
  2. 0xe0005000 대신 이전 IOUSBHIDDriver을 사용하는 OS X 10.10에서 0xe000404f 오류가 발생합니다. 이것은 kIOUSBPipeStalled이지만, 64 바이트 이상을 보내려고 할 때마다 여전히 얻습니다.

이것은 내가 얻은 것입니다. 지금 OS X 10.8을 다운로드하고 IOUSBFamily를 디버깅하여 64 바이트 이상의 보고서를 처리 할 수없는 이유를 확인하려고합니다. Apple이 OS X 10.9 이상에서 IOUSBFamily 소스를 제거하기로 결정한 것은 부끄러운 일입니다.

답변

0

하드웨어 프로토콜 분석기가 마침내 Mac 패킷의 문제점을 밝혀 냈습니다. 모든 Mac 패킷은 263 바이트 길이 (정확히 내가 설정 한 것)이고 일부 Windows 패킷은 64 바이트로 잘립니다 (시스템에 의해!). Mac에서 이러한 패킷을 자르려면 해킹을 추가하자마자 완벽하게 작동했습니다.

이유는 Windows가 특정 보고서 ID (설명자의 내용)로 인해 또는 아마 실제 패킷 길이가 20 바이트를 넘지 않았고 다른 모든 것이 패딩 이었기 때문입니다. 그러나이 이상한 행동은 실제로 장치가 기대했던 것입니다.

1

IOKit/usb/IOUSBHostFamily.h (Xcode.app 안에 있어야 함) 오류 0xe0005000kUSBHostReturnPipeStalled으로 정의합니다.

  • 하드웨어 프로토콜 분석기를 사용하여 어떤 상황이 발생했는지 확인할 수 있습니까?
  • 애플이 더 디버깅을 허용 IOUSBFamily의 (downloadable here) "릴리스를 기록"하는 데 사용됩니다. 마지막 버전은 10.9.4에 대한했다가 10.9를 얻고 설치하는 것이 도움이 될 수 있습니다.
  • lists.apple.com 사이트가 다운되었습니다 며칠이지만 USB 목록에있는 누군가가 도울 수 있습니다. 제목이나 본문에 "help"를 이메일로 보내면 목록에 지금 가입 할 수 있습니다. [email protected]
  • 이 스레드를 찾을 수 있었으므로 찾고 있었습니까? 유용합니다 (HID 관리자 수준 아래에서 작동하지만). Stall reported by ReadPipe, but no stall in USB Protocol Capture
+0

답을 보내 주셔서 감사합니다. 프로토콜 분석기가 나왔습니다. 나는 나의 발견과 함께 내 자신의 대답을 올렸다. 또한, IOUSBFamily 10.9.4 릴리스는 코드 누락으로 불완전합니다. OS X 10.9.4에 포함되지 않은 것 같습니다. – prazuber