2017-09-12 43 views
0

저는 libusb를 Ubuntu에서 사용하고 있으며 비동기 대량 전송을 통해 4 바이트의 데이터를 보내려고합니다. 다음 단계를 성공적으로 수행 할 수 있습니다. 1.LIBUSB 비동기 대량 전송 시간 초과 Linux 우분투

  1. libusb_alloc_transfer을 통해 전송을 할당합니다.
  2. libusb_fill_bulk_transfer을 통해 대량 전송을 채 웁니다.
  3. libusb_detach_kernel_driver을 통해 커널 드라이버를 분리하십시오.
  4. libusb_claim_interface을 통해 인터페이스에 대한 소유권을 주장하십시오.
  5. libusb_submit_transfer을 통해 전송을 제출합니다.
  6. 마지막으로 libusb_attach_kernel_driver을 통해 kernal 드라이버를 다시 연결하십시오.

코드는 전송 시간이 초과되고 콜백 함수가 호출 될 때까지 실행됩니다. 다음과 같은 메시지가 libusb를 디버그를 제공 가능 :

[10.033374] [000026fe] libusb를 : 디버그 [libusb_cancel_transfer] 전송 0x55555576de80
[10.036908] [000026fe : timerfd이
[10.033375] [000026fe] libusb를 트리거 [handle_events] 디버그 ] libusb는 : 디버그 [disarm_timerfd]
[10.036919] 000026fe] libusb를 : 디버그 [handle_events] 폴() 에선 0ms
[10.036921] 000026fe] libusb를 타임 아웃 3 FDS : 디버그 [handle_events] 폴()가 리턴 한
[10.036924] libusb : 디버그 [reap_for_handle] urb 유형 = 3 상태 = -2 전송 됨 = 0
,[10.036926] 000026fe] libusb를 : 디버그 [handle_bulk_completion] 벌크 URB의 완료 상태 -2 운반 1/1
[10.036927] 000026fe] libusb를 : 디버그 [handle_bulk_completion 비정상적인 얻을 : URB 상태 -2
[10.036928] [000026fe] libusb를 : 디버그 [handle_bulk_completion 비정상적인 거두 : 디버그 [usbi_handle_transfer_cancellation] 검출 초과 소거
[10.036931] 000026fe] libusb를 : 디버그 [disarm_timerfd]
마지막 URB가
[10.036930] 000026fe] libusb를보고, 처리 [10.036932] [000026fe] libusb : 디버그 [usbi_handle_transfer_completion] 전송 0x55555576de80 콜백 있음 0x7ffff7bd4c78

질문 :

  1. 는 URB 상태의 -2 무엇을 의미합니까?
  2. 지식이나 경험을 토대로 전송이 실제로 진행되는 것을 방해 할 수있는 것은 무엇입니까?

답변

0

libusb 메일 링리스트 (https://sourceforge.net/projects/libusb/lists/libusb-devel 가입)의 도움을 받아 문제를 식별 할 수있었습니다.

그들이 묻는 질문에 따라 필자는 기본 가정 중 일부, 특히 데이터를 보내기 위해 사용했던 끝점 주소를 다시 검사해야만했습니다. IN 종점에서 데이터를 보내려고했습니다. 특히 비트 7 대신 끝점 주소의 비트 0을 검사했습니다.