Я принял /Developer/Examples/IOKit/usb/USBSimple Example
и изменил его так, что он фактически передает некоторые данные (и, надеюсь, в ближайшее время) с устройства.Приложение Mac зависает на ReadPipe с устройства USB
Вот моя 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, но сегодня я почти без труда проверил это наизнанку.
быстрый Google и увидел, что некоторые проблемы вокруг этого материала довольно сложны. Может потребоваться некоторое время для того, чтобы кто-то справился с этим ... Меня интересует этот вопрос, потому что я хотел немного написать код USB для Mac, поэтому, если я получу какое-то время, я мог бы взглянуть глубже. В то же время я нашел ссылку, в которой указывалось, что значение numBytesRead может быть значительным. Я думаю, для вас может быть важно понять устройство, с которым вы разговариваете, а также программное обеспечение для драйверов Mac. –
Я не знаю ответа, но если вам не повезло здесь, отличным местом для этого вопроса будет список рассылки Apple USB. [http://lists.apple.com/mailman/listinfo/usb](http://lists.apple.com/mailman/listinfo/usb) Это довольно активный список адресов электронной почты и хорошо укомплектован отличным USB-устройством Apple USB инженеры. –