问题标签 [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 投票
4 回答
3780 浏览

objective-c - 如何解决 Core Foundation/IO Kit 中较新的多 GPU Apple 笔记本电脑上的 CGDirectDisplayID 更改问题?

在 Mac OS X 中,每个显示器都CGDirectDisplayID分配有一个唯一的编号。您可以使用CGGetActiveDisplayList() 或[NSScreen screens]访问它们等。根据Apple 的文档

显示 ID 可以跨进程和系统重新启动持续存在,并且只要某些显示参数不更改,通常保持不变。

在 2010 年中期更新的 MacBook Pro 上,Apple 开始使用自动切换 Intel/nVidia 显卡。笔记本电脑有两个 GPU,一个低功耗的 Intel 和一个高性能的 nVidia。以前的双 GPU 笔记本电脑(2009 年型号)没有自动 GPU 切换功能,并且需要用户进行设置更改、注销,然后再次登录才能进行 GPU 切换。即使是较旧的系统也只有一个 GPU。

2010 年中期的型号存在一个问题,当显示器从一个 GPU 切换到下一个 GPU 时,CGDirectDisplayID 不会保持不变。例如:

  1. 笔记本电脑开机。
  2. 内置LCD 屏幕由 Intel 芯片组驱动。显示 ID: 30002
  3. 外接显示器已插入。
  4. 内置 LCD 屏幕切换到 nVidia 芯片组。它的显示ID更改: 30004
  5. 外接显示器由 nVidia 芯片组驱动。
  6. ...此时,英特尔芯片组处于休眠状态...
  7. 用户拔下外接显示器
  8. 内置LCD 屏幕切换回 Intel 芯片组。它的显示ID变回原来的:30002

我的问题是,当旧的显示 ID 由于 GPU 更改而改变时,如何将旧显示 ID 与新显示 ID 匹配?


想过:

我注意到显示 ID 仅更改 2,但我没有足够的测试 Mac 可用来确定这是否适用于所有新的 MacBook Pro,或者只是我的。无论如何,如果“只检查彼此相差 +/-2 的显示 ID”,那是一种混搭。


试过:

CGDisplayRegisterReconfigurationCallback(),它在显示将要更改时通知前后,没有匹配的逻辑。将这样的东西放在用它注册的方法中是行不通的:

上面发生的事情是:

  1. 在显示设置更改之前,我正在缓存oldInfoDict 。
  2. 等待显示设置更改
  3. 然后使用比较oldInfoDictnewInfoDictIODisplayMatchDictionaries()
  4. IODisplayMatchDictionaries()返回一个 BOOL,要么是它们相同,要么不它们不同。

不幸的是,IODisplayMatchDictionaries()如果相同的显示器更改了 GPU,则不会返回 YES。这是它正在比较的字典的示例(查看IODisplayLocation键):

如您所见,IODisplayLocation切换 GPU 时键会发生变化,因此IODisplayMatchDictionaries()不起作用。

从理论上讲,我可以只比较DisplayProductIDDisplayVendorID键,但我正在编写最终用户软件,并且担心用户插入两个或多个相同显示器的情况(这意味着它们都将具有相同的 DisplayProductID/DisplayVendorID) . 换句话说,这是一个不太完美的解决方案,可能会出现潜在故障。


任何帮助是极大的赞赏!:)

0 投票
1 回答
2018 浏览

c - 在 mac os x 上检测用户活动

我使用函数“IOPMSchedulePowerEvent”来安排睡眠或唤醒事件,并使用“IORegisterForSystemPower”注册我的守护程序以接收电源状态更改。一切正常!

当系统进入睡眠状态并在预定时间醒来时,我的守护进程会做一些工作,之后系统应该再次进入睡眠状态。

现在我的问题:

  1. 我如何检测系统是由用户唤醒还是在预定时间唤醒?

  2. 如果用户当前正在使用系统,我如何检测,所以守护进程不必将其置于睡眠模式???

谢谢诺比克

0 投票
2 回答
3327 浏览

iphone - 尝试使用 IOKit.framework 在 iphone 上查找 USB 设备

我正在做一个项目,我需要 USB 端口与外部设备通信。我一直在网上寻找示例(Apple 和 /developer/IOKit/usb 示例)并尝试其他一些示例,但我什至找不到该设备。

在我的代码中,我在函数使用函数查找下一个迭代器(实际上是指针)的地方阻塞getNextIterator;但它永远不会返回一个好的值,所以代码是阻塞的。顺便说一句,我正在使用工具链并在我的项目中添加了 IOKit.framework。我现在想要的只是与 USB 总线上的某人通信或执行 ping 操作!我正在阻止FindDevice...我无法进入while循环,因为变量usbDevice始终 = 到 0...我已经在一个小型 mac 程序中测试了我的代码并且它可以工作...

这是我的代码:

0 投票
1 回答
1121 浏览

iphone - iPad (iphone os) 内核扩展

我之前为 Mac OSX 编写了一个包含内核扩展的应用程序。它不驱动任何真正的硬件,而是一个内核 IOKit 服务。现在的任务是确定是否可以在 iPad 上移植整个应用程序,这基本上意味着是否可以为 iPad 编写内核扩展。

我以前从未有过 iPhone OS 开发的经验,所以我对此一无所知。但据我所知,基于 iPhone OS 的设备,尤其是 iPad,是非常封闭的平台。那么是否可以为 iPad 开发和分发内核扩展作为应用程序包的一部分?我必须签署任何特定的苹果开发者计划吗?还有什么我应该知道的吗?

谢谢。

0 投票
3 回答
5734 浏览

iphone - 获取 iPhone 的电池电量

我有一个简单的问题。如何获取 iPhone 的电池电量?

够简单吗?但是有一个小问题-我不能使用 UIKit。这是我到目前为止写的,但我认为它不起作用:

我仍然很确定您必须依靠IOKit才能检索电池电量。我的应用程序不使用 UIKit,因为它是一个无法使用 UIKit 的低级应用程序。以下是我正在使用的框架:

替代文字 http://img837.imageshack.us/img837/1829/screenshot20100718at211.png

0 投票
1 回答
359 浏览

c++ - 在 IOKit 中获取常量或枚举的字符串表示,可能吗?

有没有办法为 IOKit 中定义的常量和枚举获取字符串表示形式?

我在 IOKit 中搜索并尝试通过控制台注销 USB 设备返回的一些参数。但我最终得到了数字列表。还有其他方法可以列出这些含义吗?

例如在 IOHIDKeys.h

或者更糟(对我来说)在 IOHIDUsageTables.h 我不得不查找十六进制值并在标题中找到它......例如:

0 投票
1 回答
2201 浏览

xcode - 使用 iokit 框架在 mac os x 中以编程方式创建块设备

由于我是 mac os x 编程的菜鸟,我在理解这一点时遇到了一些问题。我想在 mac os x leopard 中创建一个块设备,它可以作为 mac os x 中的普通驱动器,之后我想定义根据我在安装期间创建的驱动器,该设备或驱动器的几何形状。由于我正在使用 xcode 并想做驱动程序开发,所以我正在使用 iokit 框架。谁能告诉我应该使用哪些头文件和 API 来完成这项任务。任何帮助,将不胜感激。请帮我!!!铁皮707。

0 投票
2 回答
5288 浏览

ios - iPod/iPhone USB 产品 ID

是否有所有 Apple USB 产品 ID 的列表?我使用 IOKit 来获取连接/分离的 USB 设备的通知,并希望识别设备。目前我得到设备名称并搜索“iPod”和“iPhone”,但我想这并不安全,因为它也可能是一个配件(或者可以吗?)。

0 投票
1 回答
274 浏览

xcode - 在 mac os x Leopard 中创建 IOBlockStorageDriver

如何在 mac os x leopard 中创建一个简单的 IOBlockStorageDriver。任何帮助,将不胜感激。

0 投票
3 回答
3862 浏览

objective-c - 将 IOKit IOReturn 错误代码映射到 String

当我收到错误 0x10 时,我希望能够理解该错误代码。查找 IOReturn.h 和 mach/error.h 并不是特别方便。当我得到 0x22 错误代码时,我迷路了。这真是个愚蠢的问题,但是有没有像 error2String 这样的函数可以将 IOReturn 错误代码映射到描述错误的字符串?