iSight环境传感器

6

我意识到关于使用iSight光传感器没有任何公共文档,但是像ShadowBook(在此处显示)这样的程序能够访问亮度数据,我只是想知道是否有人能够获得类似的结果并知道如何访问该传感器?谢谢!

1个回答

7
您可以使用IOKit库中的IOService访问光线传感器。光线传感器的名称是“AppleLMUController”。以下是一个很好的示例:light sensor。 简单来说,您可以通过以下方式获取服务: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); 其中leftright是整数,它们现在保存着传感器的光线水平。 请注意,许多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摄像头中。

我该如何为这些值返回日志?使用 NSLog(@"right %f", values); ?我该如何格式化左/右? - Grant Wilkinson
还有一个快速的问题,它似乎在我的应用程序启动时只被调用了一次,但我如何持续调用它?尝试使用计时器重新调用该方法,但它不会更新该值。 - Grant Wilkinson
1
记录日志,使用NSLog(@"Left:%i, Right:%i", (int)values[0], (int)values[1]);即可。我认为使用values作为数组可以解决数字不更新的问题。如果还有问题,我可以给你发送一个我制作的快速示例。 - wquist
日志现在工作得很好,谢谢。但是如果不麻烦的话,由于您已经制作好了它,如果您能将其压缩并发送给我,那将是非常有帮助的。我的邮箱是grant@wilkinson-family.com,非常感谢! - Grant Wilkinson
非常感谢您发布代码!这个代码也适用于iOS吗? - AshokPolu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接