2009-12-07 2 views
1

Я принял /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, но сегодня я почти без труда проверил это наизнанку.

+0

быстрый Google и увидел, что некоторые проблемы вокруг этого материала довольно сложны. Может потребоваться некоторое время для того, чтобы кто-то справился с этим ... Меня интересует этот вопрос, потому что я хотел немного написать код USB для Mac, поэтому, если я получу какое-то время, я мог бы взглянуть глубже. В то же время я нашел ссылку, в которой указывалось, что значение numBytesRead может быть значительным. Я думаю, для вас может быть важно понять устройство, с которым вы разговариваете, а также программное обеспечение для драйверов Mac. –

+0

Я не знаю ответа, но если вам не повезло здесь, отличным местом для этого вопроса будет список рассылки Apple USB. [http://lists.apple.com/mailman/listinfo/usb](http://lists.apple.com/mailman/listinfo/usb) Это довольно активный список адресов электронной почты и хорошо укомплектован отличным USB-устройством Apple USB инженеры. –

ответ

3

Я понял.

Проблема заключалась в том, что я получал неправильные номера труб из функции, которая перечисляла их, а затем вызывала эту функцию - это был нетронутый пример кода Apple.

Что-то вроде, я писал на трубку 1 и ожидал ответа на трубу 2. Через тонну проб и ошибок и утилиту Windows, которая позволяла мне отправлять и наблюдать за данными на разных трубах, я понял, что я необходимо записать в трубу 3 и прочитать из трубы 4. Номера труб можно обменять (я не слишком хорош с цифрами), но группировка в порядке - пришлось использовать 3 и 4 вместо 1 и 2.

 Смежные вопросы

  • Нет связанных вопросов^_^