Я взял /Developer/Examples/IOKit/usb/USBSimple Example
и изменил его так, чтобы он действительно передавал некоторые данные (и, надеюсь, скоро) с устройства.
Вот моя функция TransferData (с комментариями):
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: ReadPipeFailed, err = e00002ed
- что подтверждает, что я на самом деле говорю / слушаю устройство.
Я пошел на этот синхронный метод, в отличие от примера Apple, который использует асинхронный подход для упрощения, но безрезультатно. Устройство не отвечает? Но если это не так, то не должен ли метод просто пропустить и вернуть 0 в numBytesRead?
Есть намеки? Я признаю, что я новичок в программировании на Mac OS X, но сегодня я вывернул это наизнанку почти весь день без всякой удачи.