Я пытаюсь (пере) написать программу, которая использует USB-сканеры. У меня настроен USBIOInterfaceInterface
, поэтому я могу отправлять и получать сообщения через каналы. Я успешно звоню WritePipeTO
и ReadPipeTO
синхронно, но хочу читать со сканера асинхронно.
Я пытался использовать ReadPipeAsyncTO
, но обратный вызов никогда не вызывается до истечения времени ожидания вызова. Причина в том, что я не регистрирую обратный вызов где-то. Если я добавлю CFRunLoopRun
после асинхронного чтения, то, похоже, он будет работать, но только при наличии множества вложенных вызовов CFRunLoopRun
, что не может быть хорошей идеей.
Я видел функции:
err = (*usbInterfaceInterface)->CreateInterfaceAsyncEventSource(usbInterfaceInterface, &cfSource);
CFRunLoopAddSource(CFRunLoopGetCurrent(), cfSource, kCFRunLoopDefaultMode);
но я не понял, как сообщить Source, какой обратный вызов должен вызываться, когда что-то происходит на этом интерфейсе. Когда я просто создаю источник и вызываю ReadPipeAsyncTO
, обратный вызов не вызывается до истечения времени ожидания.
Есть ли где-то такой же пример кода, чтобы я мог видеть, как эти функции ПРЕДПОЛАГАЕТСЯ работать вместе?