iSight环境传感器

Gra*_*son 6 macos xcode cocoa isight objective-c

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

wqu*_*ist 7

您可以通过IOKit库中的IOService访问光传感器.光传感器的名称是"AppleLMUController".这是一个很好的例子:光传感器.简单地说,获取这样的服务:io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("AppleLMUController")); 然后,使用以下命令连接到服务:

io_connect_t port = 0;
IOServiceOpen(service, mach_task_self(), 0, &port);
Run Code Online (Sandbox Code Playgroud)

获取使用光照水平:IOConnectMethodScalarIScalarO(port, 0, 0, 2, &left, &right); 在哪里left以及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);
Run Code Online (Sandbox Code Playgroud)

左右值分别存储在values[0]values[1].请注意,并非所有MacBook都以这种方式工作:在我2010年中期的15''专业版中,两个值都是相同的,因为光传感器在iSight摄像头中.