问题标签 [iokit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1507 浏览

objective-c - IOKit IOPowerSources 的烦恼

我在使用 IOPowerSources 及其文档时遇到了很大的困难。

我的问题是,我无法弄清楚 IOPowerSources 的该死进口。我正在阅读:

http://developer.apple.com/library/mac/#documentation/Darwin/Reference/IOKit/IOPowerSources_h/index.html

找不到所需的进口商品,这让我很生气。有人可以告诉我要导入什么以便我可以开始使用 IOPowerSources 吗?谢谢 :)

0 投票
1 回答
253 浏览

objective-c - 目标 C 回调失败

我有发布通知处理程序的代码

而这个回调处理程序

但我的回调函数永远不会被调用。我用 USB 闪存驱动器尝试了这个,但没有成功。我哪里错了?

0 投票
4 回答
2450 浏览

cocoa - OSX上的高分辨率和高帧率鼠标坐标?(或其他解决方案?)

我想在 OSX 上获得高分辨率和高帧率的鼠标移动。

“高帧率”= 60 fps 或更高(最好 > 120)
“高分辨率”= 子像素值

问题
我有一个以显示器刷新率运行的opengl 视图,所以它是~60 fps。我用鼠标环顾四周,所以我隐藏了鼠标光标,我依赖于鼠标增量值。

问题是鼠标事件的帧率太低,并且值被捕捉到整数(整个像素)。这会导致“断断续续”的观看体验。这是鼠标增量值随时间变化的可视化:

这是一条典型的(缩短的)曲线,用户将鼠标向右移动一点。每个 x 代表每一帧的 deltaX 值,并且由于 deltaX 值四舍五入为整数,因此该图实际上非常准确。正如我们所看到的,deltaX 值将在一帧为 0.000,下一帧为 1.000,但随后又为 0.000,然后是 2.000,然后又是 0.000,然后是 3.000、0.000,以此类推。

这意味着视图将在一帧旋转 2.000 个单位,然后在下一帧旋转 0.000 个单位,然后再旋转 3.000 个单位。当鼠标以或多或少的恒定速度拖动时会发生这种情况。不用说,这看起来像废话。

那么,我怎样才能 1)增加鼠标的事件帧率?和 2) 获得亚像素值?

到目前为止
,我已经尝试了以下方法:

嗯,这个很明显。dx这是浮点数,但值总是四舍五入(0.000、1.000 等)。这将创建上面的图表。

所以下一步是在鼠标事件进入 WindowServer 之前尝试点击鼠标事件,我想。所以我创建了一个 CGEventTrap:

仍然值是n.000,尽管我相信事件触发率要高一些。但它仍然不是60 fps。我仍然得到上面的图表。

我还尝试将鼠标灵敏度设置得非常高,然后在我这边按比例缩小值。但似乎 OSX 增加了某种加速或其他东西——这些值变得非常“不稳定”,因此无法使用,而且射速仍然太低。

没有运气,我开始跟踪兔子洞的鼠标事件,我已经到达了 IOKit。这对我来说很可怕。这是疯帽子。Apple 文档变得很奇怪,似乎在说“如果你如此深入,那么你真正需要的只是头文件”。

所以我一直在阅读头文件。我发现了一些有趣的花絮。

<IOKit/hidsystem/IOLLEvent.h>第 377 行有这个结构:

看,它说的是亚像素位置!好的。然后在第 73 行<IOKit/hidsystem/IOLLParameter.h>

唔。

总而言之,我感觉 OSX 深知亚像素鼠标坐标,并且必须有一种方法可以读取每一帧的原始鼠标移动,但我只是不知道如何获得这些值。

问题
呃,那么,我在问什么?

  • 有没有办法在 OSX 中获得高帧率鼠标事件?(示例代码?)
  • 有没有办法在 OSX 中获取亚像素鼠标坐标?(示例代码?)
  • 有没有办法每帧读取“原始”鼠标增量?(即依赖事件。)
  • 或者,我如何获取 NXEvents 或设置 HIDParameters?示例代码?(所以我可以自己更深入地研究这个......)

(抱歉发了这么长的帖子)

0 投票
2 回答
1323 浏览

objective-c - Objective-C 中的 C 回调 (IOKIT)

我正在尝试在 Objective C 中编写一些与 USB 设备交互的代码,但我一直在为传入报告设置回调函数。就我而言,它是一个 IOKIT 函数,但我认为这个问题更普遍,因为我(显然)不知道如何在 Objective-C 中正确设置 C 回调函数。我有一个处理 io 函数的“USBController”类

USB控制器.m:

所有函数也在头文件中声明。

我想我做的和我在这里找到的差不多,但它不起作用。该项目编译得很好,一切正常,直到有输入和回调函数被调用。然后我收到“EXC_BAD_ACCESS”错误。函数的前三个参数是正确的。我不太确定上下文..我做错了什么?

0 投票
1 回答
320 浏览

c++ - 覆盖另一个kext定义的方法?

我需要重写一个由 kext 定义的方法来进行我自己的处理并返回我自己的值,所以每当 kext 调用该方法时,它都会被路由到我的。所以我要做的就是在我自己的内核扩展中定义这个方法,然后加载它。问题是我不知道如何交换方法,所以我的方法被调用了

是否有捷径可寻?我知道有一种方法可以通过VTables来实现,因为所有内核扩展都在同一个地址空间中运行(我认为这是唯一的方法,但我不确定如何去做)。

0 投票
1 回答
660 浏览

xcode - Mac Snow Leopard 上的 USBPrivateDataSample

我需要创建每次插入或拔出 USB 时都会收到通知的应用程序,并且还可以访问它。首先,我尝试使用 USBPrivateDataSample 应用程序作为示例:

http://developer.apple.com/library/mac/#samplecode/USBPrivateDataSample/Listings/USBPrivateDataSample_c.html#//apple_ref/doc/uid/DTS10000456-USBPrivateDataSample_c-DontLinkElementID_4

为了编译它,我将 SDK 更改为 10.6,因为 Snow Leopard 不支持 10.4。该程序已编译并成功运行,但是,插入 USB 时我没有收到呼叫/事件。换句话说,从未调用函数 DeviceAdded。

这个程序是否应该在 Snow 中运行?它看起来很旧,也许有些电话已被弃用?

有人可以建议其他方式来接收 USB 设备通知吗?

谢谢!

0 投票
2 回答
5326 浏览

macos - 使用 IOHIDManager 获取修饰符键事件

我正在尝试使用 IOHIDManager 来获取修饰键事件,因为缺少 Cocoa flagsChanged 事件(很难区分按下/释放、左/右是否都按下等)这是我创建管理器并注册回调的代码.

但是,回调永远不会运行。我错过了什么吗?

我不完全了解 HID 使用页面,所以我不知道是否使用带有键盘使用 ID (06) 的通用桌面页面 (0x01) 或带有个人使用 ID 的键盘/键盘页面 (0x07)键。也许这与它有关?

0 投票
1 回答
2452 浏览

macos - 无代码kext加载问题

我创建了一个无代码 kext,这样我的一个 USB 设备就不会被 AppleUSBUHCI 驱动程序绑架。当我插入一个时,它应该加载不同的驱动程序。FTDI 和 CSR 设备都会发生这种情况。

我把我的 kext 放在一起,info.plist 看起来很像这里的示例:http: //www.projectosx.com/forum/index.php? showtopic=798只是具有不同的 VID/PID。我用 -entZ 运行了 kextutil,唯一的警告是我的个性有不同的 CFBundleId。我按照此处的说明,在 Mac 上读取和写入 USB (HID) 中断端点来加载它。

当我加载 kext 时,它说它加载成功,但是我用 kextstat 看不到它,当我插入我的设备时,它仍然被劫持。当我尝试执行 kextunload 时,它说未加载 kext。

任何帮助,将不胜感激。

0 投票
1 回答
1091 浏览

macos - 通过 IOUSBDeviceInterface245 收集有关挂起的 USB 设备的信息

我正在尝试通过IOUSBDeviceInterface245(来自 Mac OS X 上的 IOKit)获取一些信息(例如产品名称):
代码 #1

此代码适用于所有正在工作的设备,但不适用于暂停(“睡眠”)
设备(product_name只是一个空白字符串)。

但是,如果我使用此代码:
代码 #2

这对所有设备都有效(我不知道为什么)。

我尝试通过此代码唤醒暂停的设备(与代码 #1 一起使用):

但它什么也没改变。

我注意到的一件事 - 代码 #1 完全适用于睡眠设备的所有属性,除了字符串值(通过字符串的索引获取)。

UPDATE:
So, my question is how can I unsuspend a device for using with the first code block?
Thank you.

0 投票
1 回答
3143 浏览

objective-c - 如何以编程方式调暗 Mac 背光键盘

有没有办法以编程方式使 Mac 上的背光键盘变暗?