2012-04-08 80 views
6

我意识到没有任何关于使用isight光线传感器的公开文档,但ShadowBook (shown here)等程序能够访问亮度数据,我只是想知道是否有人能够实现类似的结果,并知道如何访问这个传感器?谢谢!iSight环境传感器

回答

7

您可以从IOKit库访问IOService的光传感器。光传感器的名称是“AppleLMUController”。这是一个很好的例子:light sensor。 简单地说,得到这样的服务:io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("AppleLMUController")); 然后,使用连接到服务:IOConnectMethodScalarIScalarO(port, 0, 0, 2, &left, &right);leftright是,现在抱传感器的光线水平的整数:

io_connect_t port = 0; 
IOServiceOpen(service, mach_task_self(), 0, &port); 

利用获取的光照水平。 请注意,许多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英寸专业版中,两个值都相同,因为光线传感器位于iSight相机中。

+0

我将如何返回这些值的日志? NSLog(@“right%f”,values);'?我将如何格式化左/右? – 2012-04-10 04:13:08

+0

还有一个简单的问题,当我的应用程序启动时,它似乎被调用一次,但我怎样才能不断地调用它?试图使用一个计时器来调用该方法,但它不更新值 – 2012-04-10 04:24:21

+1

要记录,NSLog(@“Left:%i,Right:%i”,(int)values [0],(int)values [1] );'就足够了。我认为使用'values'作为数组可以解决您的问题,而数字不会更新。如果没有,我可以给你发一个我做的快速例子。 – wquist 2012-04-10 20:03:56