Я пытаюсь написать некоторый код, который взаимодействует с USB-устройством в Objective C, и я застрял при настройке функции обратного вызова для входящих отчетов. В моем случае это функция IOKIT, но я думаю, что проблема более общая, поскольку я (по-видимому) не знаю, как правильно установить функцию обратного вызова C в Objective-C. У меня есть класс "USBController", который обрабатывает функции IO
USBController.m:
#include <CoreFoundation/CoreFoundation.h>
#include <Carbon/Carbon.h>
#include <IOKit/hid/IOHIDLib.h>
#import "USBController.h"
static void Handle_IOHIDDeviceIOHIDReportCallback(
void * inContext, // context from IOHIDDeviceRegisterInputReportCallback
IOReturn inResult, // completion result for the input report operation
void * inSender, // IOHIDDeviceRef of the device this report is from
IOHIDReportType inType, // the report type
uint32_t inReportID, // the report ID
uint8_t * inReport, // pointer to the report data
CFIndex InReportLength) // the actual size of the input report
{
printf("hello"); //just to see if the function is called
}
@implementation USBController
- (void)ConnectToDevice {
...
IOHIDDeviceRegisterInputReportCallback(tIOHIDDeviceRefs[0], report, reportSize,
Handle_IOHIDDeviceIOHIDReportCallback,(void*)self);
...
}
...
@end
Все функции также объявлены в заголовочном файле.
Я думаю, я сделал почти то же самое, что нашел здесь , но это не работает. Проект хорошо компилируется, и все работает до тех пор, пока не будет введен ввод и не будет вызвана функция обратного вызова. Затем я получаю ошибку «EXC_BAD_ACCESS». Первые три аргумента функции верны. Я не так уверен насчет контекста ..
Что я сделал не так?