2014-12-05 11 views
0

USB 장치에 대한 연결을 생성하고 특정 끝점을 통해 데이터를 수신해야하는 Android 앱이 있습니다. 네이티브 코드에서 데이터 전송 부분을 처리하고 있습니다. 앱에서 기기를 찾고 연결을 열어 필요한 엔드 포인트를 찾을 수 있습니다. 데이터 읽기 부분은 원시 코드에 있습니다. 여기서 ioctl 호출은 while 루프 내에서 이루어집니다.ioctl은 안드로이드 USB 대량 전송에서 -1을 반환합니다.

int bytesTransferred = ioctl(g_fileDescriptor, USBDEVFS_BULK, &ctrl); 

이 g_fileDescriptor는 USB 연결에 대한 설명 자입니다.

두 번째 매개 변수는 대량 전송임을 나타냅니다. I이 사용 개의 USB 장치 시도

-

세번째 매개 변수는 구조 (16킬로바이트, 데이터 자리, 타임 아웃 1000msec 엔드 어드레스는 bufferLength 있음) usbdevfs_bulktransfer있다. 첫 번째 장치가 정상적으로 작동합니다. 데이터를 성공적으로 읽었습니다.

두 번째 장치가 약간의 문제를 일으키는 것으로 보입니다. 내 앱이 기기를 찾아서 연결하여 필요한 엔드 포인트를 찾습니다. 그러나 ioctl 호출은 항상 -1을 반환합니다. 그리고 두 번의 연속적인 ioctl 호출 사이의 시간 간격은 평균적으로 0.99 초 (설정 한 시간 초과 값과 거의 같습니다)에 주목했습니다.

그래서 세 가지 질문이 있습니다.

  1. 시간 초과가 ioctl이 -1을 반환하는 이유라고 결론 지울 수 있습니까?

  2. strerror (errorno)가 정확하게 문제를 찾을 수 있습니까? (ioctl은 에러시 -1을 반환하고 시스템의 'errno'변수에 해당 오류 코드를 설정했기 때문에 읽음)

  3. 대량 전송의 경우 어떤 상황이 발생합니까?

답변

0

1. 시간 초과가 ioctl이 -1을 반환하는 이유라고 결론 내릴 수 있습니까? => ctrl.timeout을 "0"(영)으로 설정하면 무한정 기다릴 수 있습니다. 이것으로, 당신은 당신의 결론을 증명할 수 있습니다.