2013-07-03 6 views
0

사용자 지정 USB 장치 (현재 동료가 프로그래밍 한)와 통신 할 Linux 프로그램 (Qt 4.8 및 libusb 1.0 사용)을 작성하고 있습니다.libusb 비동기 대량 전송을 사용하면 유휴 상태 일 때 장치가 수신을 중단합니다.

1 단계는 일정 간격으로 USB를 통해 앞뒤로 움직이는 "하트 비트"를 가져야합니다. 현재 비동기 대량 전송을 사용하고 있습니다.

테스트를 위해 "Send_Heartbeat()"를 버튼 클릭에 넣었습니다. 버튼을 클릭하고 보내려는 메시지를 대기열에 올려 놓으면 대기열을 계속 사용하는 동안 메시지가 계속 전송되고 USB 장치는 계속 메시지를 수신합니다.

몇 초 동안 멈춘 다음 다시 시작하여 메시지를 큐에 추가하면 USB 장치가 수신을 중지합니다.

하지만 내 USB 장치가 수신하지 않아도 내 프로그램의 전송 콜백이 성공을 나타내는 전송 상태 코드 0으로 반환됩니다.

내 질문 : 내 USB 장치가이를 수신을 중지 한 것으로 나타나는 경우

  1. 왜 콜백의 전송 상태가 성공을 표시 하는가?
  2. 이 유형의 행동에 대해 들어 본 사람이 있습니까?

USB 장치를 분리하면 콜백에 올바른 상태 코드가 반환되어 장치가 사라 졌다는 것을 알 수 있습니다.

USB 장치가 연결되어 실행중인 상태에서 다시 연결하고 강제로 다시 연결하고 더 많은 테스트 하트 비트를 보내려고하면 "연결 해제"하고 다시 연결하십시오. USB 장치가 메시지 수신을 다시 시작합니다.

내 "에 달린 것을 빼낸"

는 다음의 호출입니다 : 다음

libusb_release_interface() 
libusb_reset_device() 
libusb_close() 

내 것이다 "첨부"

libusb_get_device_list() 
libusb_get_device_descriptor() 
libusb_open() 
libusb_set_configuration() 
libusb_claim_interface() 

내 다음 단계는 재 구축하고 명령어 libusb를 어떤 좁힐 것입니다 통신.

한편 나는 누군가가 이러한 증상을인지하고 제안을하기를 희망합니다. USB 통신을 처음 프로그래밍하는 과정에서 내가 놓친 근본적인 것이 있는지 궁금합니다.

감사합니다.다음 통화

내 "에 달린 것을 빼낸"입니다 :

+0

는'당신의 분리 통화에서'attach_kernel_driver() 할 필요가 없습니다? –

+0

그리고, 첨부 호출에서'detach_kernel_driver()'를 할 필요가 없습니까? –

답변

0

문제는 여기에 제 생각 엔 당신에 달린 것을 빼낸에서

libusb_release_interface(); , 당신은 커널 드라이버 detatch_kernel_driver(); libusb_reset_device(); libusb_close();

를 연결해야합니다 그런 다음 내 "첨부"는 다음과 같습니다.

libusb_get_device_list(); libusb_get_device_descriptor(); libusb_open(); libusb_set_configuration(); 여기서 커널 드라이버가 활성화되었는지 확인해야합니다. 그래서, 검사가 무엇 attach_kernel_driver(); 반환 및 전화 detatch_kernel_driver(); if needed libusb_claim_interface();