我意识到没有任何关于使用 isight 光传感器的公开文档,但是诸如 ShadowBook (此处显示)之类的程序能够访问亮度数据,我只是想知道是否有人能够获得类似的结果和知道如何访问这个传感器?谢谢!
1 回答
您可以使用 IOKit 库中的 IOService 访问光传感器。光传感器的名称是“AppleLMUController”。这是一个很好的例子:光传感器。简单地说,像这样获取服务:io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("AppleLMUController"));
然后,使用以下命令连接到服务:
io_connect_t port = 0;
IOServiceOpen(service, mach_task_self(), 0, &port);
使用以下方法获取光照水平:IOConnectMethodScalarIScalarO(port, 0, 0, 2, &left, &right);
Whereleft
和right
是现在保存传感器光照水平的整数。请注意,许多 IOService 方法返回一个kern_return_t
变量,该变量将保持KERN_SUCCESS
,除非该方法失败。还要确保使用释放服务对象IOObjectRelease(service);
编辑:再想一想,IOConnectMethodScalarIScalarO()
似乎已被弃用。相反,使用:
uint32_t outputs = 2;
uint64_t values[outputs];
IOConnectCallMethod(port, 0, nil, 0, nil, 0, values , &outputs, nil, 0);
左值和右值将分别存储在values[0]
和values[1]
中。请注意,并非所有 MacBook 都以这种方式工作:在我的 2010 年中期 15'' pro 上,这两个值是相同的,因为光传感器位于 iSight 摄像头中。