Я портирую архаичную программу C ++ / Carbon на Obj-C и Cocoa. Текущая версия использует асинхронное чтение USB и GetNextEvent для чтения данных.
Когда я пытаюсь скомпилировать это в Objective C, GetNextEvent не найден, потому что он находится в среде Carbon.
Поиск поддержки Apple ничего не дает.
РЕДАКТИРОВАТЬ ДОБАВИТЬ:
Хорошо, я пытаюсь запустить сканер документов через USB. Я настроил USBDeviceInterface и USBInterfaceInterface (который придумал THAT name ???), и я звоню (*usbInterfaceInterface)->WritePipeTO()
, чтобы попросить сканер сканировать. Я считаю, что это работает. По крайней мере, планшетный свет перемещается по странице ...
Затем я пытаюсь использовать *(usbInterfaceInterface))->ReadPipeAsyncTO()
для чтения данных. Я даю этой функции функцию обратного вызова, USBDoneProc()
.
Общая структура:
StartScan()
WaitForScan()
StartScan()
вызывает WritePipeTO
и ReadPipeAsyncTO
WaitForScan()
имеет это:
while (deviceActive) {
EventRecord event;
GetNextEvent(0,&event);
if (gDataPtr != saveDataPtr) { // more data up the timeout
timeoutTicks = TickCount() + 60 * 60;
saveDataPtr = gDataPtr;
}
if (TickCount() > timeoutTicks) {
deviceActive = false;
}
}
Тем временем USBDoneProc
увеличивает значение gDataPtr до конца данных, которые мы до сих пор читали. Насколько я могу судить, он вызывается несколько раз во время асинхронного чтения, автоматически вызывается обратным вызовом.
Если я отключу вызов GetNextEvent()
в РАБОЧЕМ коде, USBDoneProc
не будет вызван до истечения времени асинхронного чтения.
Так что мне кажется, что мне нужно что-то, чтобы вернуть управление обработчику событий, чтобы прерывания USBRead могли фактически прерывать и вызывать USBDoneProc
...
Имеет ли это какой-то смысл?
thanks.