나는 /Developer/Examples/IOKit/usb/USBSimple Example
을 가져다가 실제로 일부 데이터를 장치로 전송합니다. 그래서 코드의 읽기 부분 그것이 transferData: ReadPipeFailed, err = e00002ed
출력 때이 장치를 분리 할 때까지 중단USB 응용 프로그램에서 ReadPipe로 Mac 응용 프로그램이 멈 춥니 다
void transferData(IOUSBInterfaceInterface245 **intf, UInt8 inPipeRef, UInt8 outPipeRef)
{
IOReturn err;
CFRunLoopSourceRef cfSource;
err = (*intf)->CreateInterfaceAsyncEventSource(intf, &cfSource);
if(err) {
printf("transferData: unable to create event source, err = %08x\n", err);
return;
}
// this is what I need to send to the device
outBuf[0] = 0;
outBuf[1] = 0;
outBuf[2] = 0x18;
[... snip ...]
// the following works, although I have no confirmation
// that the data actually arrives to the device but err is 0 afterwards
err = (*intf)->WritePipe(intf, outPipeRef, outBuf, 64);
if(err) {
printf("transferData: WritePipeFailed, err = %08x\n", err);
return;
}
UInt32 numBytesRead;
numBytesRead = sizeof(inBuf);
// this hangs until I disconnect the device
err = (*intf)->ReadPipe(intf, inPipeRef, inBuf, &numBytesRead);
if(err) {
printf("transferData: ReadPipeFailed, err = %08x\n", err);
return;
}
}
- 실제로 장치를 듣고/이야기하고있는 것을 확인한다 :
여기에 (주석) 내의 TransferData 기능입니다 .
비동기 방식을 사용하여 문제를 단순화하지만 아무 소용이없는 Apple의 예제와는 달리이 동기식 방식을 사용했습니다. 기기가 응답하지 않습니까? 하지만 메서드를 건너 뛰지 않고 numBytesRead에서 0을 반환하면 안됩니까?
힌트가 있습니까? 나는 내가 Mac OS X 프로그래밍의 초보자라는 것을 인정하지만, 오늘은 하루 종일 운 좋게도 이것을 꺼 냈습니다.
Did 빠른 Google과이 물건 주변의 문제 중 일부는 상당히 복잡하다는 것을 알았습니다. 누군가가 이것을 해결하는 데 시간이 좀 걸릴 수도 있습니다. Mac 용 USB 코드를 작성하고 싶었 기 때문에이 질문에 흥미가 있습니다. 잠시 시간을 내면 좀 더 자세히 살펴 보겠습니다. 한편, numBytesRead의 값이 중요하다는 것을 암시하는 참조를 발견했습니다. Mac 드라이버 소프트웨어만큼 당신이 말하는 장치를 이해하는 것이 중요하다고 생각합니다. –
나는 그 답을 모른다. 그러나 여기에 운이 없다면이 질문을 할 수있는 좋은 곳은 Apple USB 개발 메일 링리스트 일 것이다. [http://lists.apple.com/mailman/listinfo/usb](http://lists.apple.com/mailman/listinfo/usb) 꽤 적극적인 이메일 목록이며 훌륭한 Apple USB 엔지니어. –