사용자 지정 USB 장치 (현재 동료가 프로그래밍 한)와 통신 할 Linux 프로그램 (Qt 4.8 및 libusb 1.0 사용)을 작성하고 있습니다.libusb 비동기 대량 전송을 사용하면 유휴 상태 일 때 장치가 수신을 중단합니다.
1 단계는 일정 간격으로 USB를 통해 앞뒤로 움직이는 "하트 비트"를 가져야합니다. 현재 비동기 대량 전송을 사용하고 있습니다.
테스트를 위해 "Send_Heartbeat()"를 버튼 클릭에 넣었습니다. 버튼을 클릭하고 보내려는 메시지를 대기열에 올려 놓으면 대기열을 계속 사용하는 동안 메시지가 계속 전송되고 USB 장치는 계속 메시지를 수신합니다.
몇 초 동안 멈춘 다음 다시 시작하여 메시지를 큐에 추가하면 USB 장치가 수신을 중지합니다.
하지만 내 USB 장치가 수신하지 않아도 내 프로그램의 전송 콜백이 성공을 나타내는 전송 상태 코드 0으로 반환됩니다.
내 질문 : 내 USB 장치가이를 수신을 중지 한 것으로 나타나는 경우
- 왜 콜백의 전송 상태가 성공을 표시 하는가?
- 이 유형의 행동에 대해 들어 본 사람이 있습니까?
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 통신을 처음 프로그래밍하는 과정에서 내가 놓친 근본적인 것이 있는지 궁금합니다.
감사합니다.다음 통화
내 "에 달린 것을 빼낸"입니다 :
는'당신의 분리 통화에서'attach_kernel_driver() 할 필요가 없습니다? –
그리고, 첨부 호출에서'detach_kernel_driver()'를 할 필요가 없습니까? –