objective-c - 尝试从 Mac 上的 HID 管理器获取 HID 设备引用时出现不兼容指针错误

标签 objective-c c macos hid

我正在尝试编写用户空间设备驱动程序以从自定义 HID 设备中提取一些数据。我执行以下操作以将 HID 管理中的设备引用存储到变量中。

CFSetRef device = IOHIDManagerCopyDevices(HIDManager);

在此之后,我执行以下操作来注册我的回调,它设置从设备读取的报告(我正在努力解决的另一个领域。)

IOHIDDeviceRegisterInputReportCallback(device, report, ReadDailyDataResonposeSize, Handle_IOHIDDeviceIOHIDReportCallback, NULL);

在上面的函数中,我在引用“设备”时遇到错误,说“传递 CFSetRef 的指针类型不兼容”

如果我在创 build 备时尝试更改该设备的类型,尽管我得到另一种说法,它需要是一个 CFSetRef。所以我有点困惑,任何人都有任何建议。我对 C 以及在 Mac 上工作都很陌生。到目前为止,文档对我来说非常简洁。

编辑:这是我其余代码的链接以供引用。 http://pastebin.com/rFsHisdh

最佳答案

根据 documentation,这是 IOHIDDeviceRegisterInputReportCallback 函数的签名:

CF_EXPORT void IOHIDDeviceRegisterInputReportCallback(
    IOHIDDeviceRef device,
    uint8_t *report,
    CFIndex reportLength,
    IOHIDReportCallback callback,
    void *context) AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER;

如您所见,第一个参数应该是 IOHIDDeviceRef 并且您传入的是 CFSetRefMartin R 的回答所示,[s] 支持集合的数学概念

要获取集合的元素并传递设备(如果有),您应该执行以下操作:

CFSetRef devices = IOHIDManagerCopyDevices(HIDManager);
CFIndex size = CFSetGetCount(devices);
if(size > 0) {
    CFTypeRef array[size]; // array of IOHIDDeviceRef
    CFSetGetValues(devices, array);
    IOHIDDeviceRegisterInputReportCallback((IOHIDDeviceRef)array[0], report, ReadDailyDataResonposeSize, Handle_IOHIDDeviceIOHIDReportCallback, NULL);
}

希望对您有所帮助。

关于objective-c - 尝试从 Mac 上的 HID 管理器获取 HID 设备引用时出现不兼容指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21944327/

相关文章:

macos - 如何在MAC OS中安装sha1sum?

html - MacOS Safari 文本阴影丢失

iphone - 如何创建浮点值的 NSMutableArray

c - GTK 单选按钮组无法正常工作

c - 在 c 中用 1 到 500 之间的随机值初始化给定大小的数组

c - 我如何测量 C 中每个线程的时间?

ios - 安装 Xcode 9.0 Beta 后 Xcode 8.3.2 中缺少模拟器

ios - 为什么NSDate的dateWithTimeIntervalSince1970修改其输入?

objective-c - 从任意进程窃取 NSWindow (或 contentView)

python - wifijammer.py 问题 MacOSx