사용자 토지의 USB 오디오 장치와 인터페이스하려고합니다. 현재 장치가 완전히 열거되어 있고 인터페이스를 설정하고 0이 아닌 대역폭 대체 인터페이스에 대체 인터페이스를 설정했습니다.사용자 모드 장치 간 USB 등시 전송
먼저 libusb와 같은 것을 사용할 수 없다고 말해야합니다. 필자는 Linux의 USB 장치 파일 시스템을 통해이 작업을 수행했습니다.
그래서 등시성 데이터를 수신 할 준비가되었음을 알 수 있습니다. 그러나 등시 전송을 수행하는 방법에 대한 정보는 거의 찾을 수 없습니다.
내가 말할 수있는 것은 내가 usbdevfs_urb 구조체를 채울 필요가 있지만이 구조체를 정확히 채우는 방법을 정확히 알지 못합니다. 나는이 구조를 작성 일단 또한
, 내가 바로 생각에 나는 다음과 같은 호출해야 이니 일단 내가 사용 완료 요청을 기다릴 수 제출 후
int retSubmit = ioctl(fd, USBDEVFS_SUBMITURB, &usbRequest);
및
USBDEVFS_REAPURBNDELAY
REAPURBNDELAY의 경우 정확히 전달해야하는 매개 변수는 무엇입니까?
내가 올바른 나무를 짖고 있습니까?
모든 정보는 크게 감사하겠습니다.
미리 감사드립니다.
편집 :
usbdevfs_urb& urbRequest = *(usbdevfs_urb*)malloc(384);
urbRequest.type = USBDEVFS_URB_TYPE_ISO;
urbRequest.endpoint = mpEndpoint->GetEndpointAddress();//mpEndpoint->GetEndpointIndex();
urbRequest.status = 0;
urbRequest.flags = USBDEVFS_URB_ISO_ASAP;
urbRequest.buffer = pData;
urbRequest.buffer_length = 0;
urbRequest.actual_length = 0;
urbRequest.start_frame = 0;
urbRequest.number_of_packets = 1;
urbRequest.error_count = 0;
urbRequest.signr = 0;
urbRequest.usercontext = pData;
usbdevfs_iso_packet_desc* pIsoPacketDesc = &urbRequest.iso_frame_desc[0];
pIsoPacketDesc->length = 384;
pIsoPacketDesc->actual_length = 0;
pIsoPacketDesc->status = 0;
Unfgortunately이 나에게 -28 (ENOSPC)의 오류를 제공 다음과 같이
내가 등시성 전송을 시도합니다.
<7>[ 3184.243163] usb 1-1: usbfs: usb_submit_urb returned -28
왜 나는 USB 버스 대역폭이 충분하지 않은지 이해할 수 없습니다. USB 포트는 1 개 뿐이며 내 장치가 유일한 장치입니다.
의견이 있으십니까?
왜 libusb를 사용할 수 없습니까? –
@ 짐 클레이 문제의 특정 플랫폼이 안드로이드이고 오픈 파일 디스크립터가 이미 있는데 권한으로 인해 libusb를 사용하여 장치를 열 수 없습니다 ... – Goz
안녕하세요, 현재 Goz를 해결하려고합니다. 같은 문제 - 안드로이드에서의 등시성 전송의 문제, libusb 피하기. 작업 코드 샘플을 게시하는 방법이 있습니까? 내 고집 포인트는 현재 struct 정의와 요청 값입니다. 너 어디서 소싱하는거야? 미리 감사드립니다. – Gusdor