我正在尝试编写一个用户空间设备驱动程序,以从自定义HID设备中提取一些数据。我执行以下操作以将HID管理中设备的引用存储到变量中。
CFSetRef device = IOHIDManagerCopyDevices(HIDManager);
之后,我执行以下操作来注册我的回调,该回调用于设置从设备读取的报告(我正在苦苦挣扎的另一个区域)。
IOHIDDeviceRegisterInputReportCallback(device, report, ReadDailyDataResonposeSize, Handle_IOHIDDeviceIOHIDReportCallback, NULL);
我在参考“设备”的上述功能中遇到错误,提示“传递CFSetRef的指针类型不兼容”
如果我尝试更改设备的类型,尽管在创建设备时我又说了另一句,那就是它必须是CFSetRef。所以我有点困惑,任何人都有建议。我是C语言的新手,也是Mac上的新手。到目前为止,文档对我来说还很简洁。
编辑:这是我其余代码的链接,以供参考。http://pastebin.com/rFsHisdh
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
和你在路过CFSetRef
其provide[s] support for the mathematical concept of a set
作为马丁- [R答案表示。
要获取集合的元素并传递设备(如果有),您应该执行以下操作:
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);
}
希望能帮助到你。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句