2012-04-08 6 views
6

Me doy cuenta de que no hay documentación pública sobre el uso del sensor de luz isight, sin embargo, programas como ShadowBook ​​(shown here) pueden acceder a los datos de brillo y simplemente me preguntaba si alguien ha podido lograr un resultado similar y saber cómo acceder a este sensor? ¡Gracias!iSight Sensor de ambiente

Respuesta

7

Puede acceder al sensor de luz con IOService desde la biblioteca IOKit. El nombre del sensor de luz es "AppleLMUController". Aquí hay un buen ejemplo: light sensor. En pocas palabras, obtener el servicio como este: io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("AppleLMUController")); A continuación, conectarse al servicio usando:

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

obtener los niveles de luz que utilizan: IOConnectMethodScalarIScalarO(port, 0, 0, 2, &left, &right); Dónde left y right son números enteros que ahora ocupan los niveles de luz de los sensores . Tenga en cuenta que muchos métodos IOService devuelven una variable kern_return_t, que contendrá KERN_SUCCESS, a menos que el método falle. También asegúrese de liberar el objeto de servicio utilizando IOObjectRelease(service);

EDITAR: Pensándolo bien, IOConnectMethodScalarIScalarO() parece estar en desuso. su lugar, utilice:

valores
uint32_t outputs = 2; 
uint64_t values[outputs]; 

IOConnectCallMethod(port, 0, nil, 0, nil, 0, values , &outputs, nil, 0); 

La izquierda y la derecha se almacenarán en values[0] y values[1] respectivamente. Tenga en cuenta que no todas las MacBooks funcionan de esta manera: en mi 15 '' pro de mediados de 2010, ambos valores son los mismos, ya que el sensor de luz está en la cámara iSight.

+0

¿cómo puedo devolver un registro para esos valores? 'NSLog (@" right% f ", values);'? ¿Cómo formatearía a la izquierda/derecha? –

+0

una pregunta más rápida Parece que se llama una vez cuando se inicia mi aplicación, pero ¿cómo puedo llamarla continuamente? Intenté usar un temporizador para recuperar el método pero no actualiza el valor –

+1

Para registrar, 'NSLog (@" Izquierda:% i, Derecha:% i ", (int) valores [0], (int) valores [1]); 'sería suficiente. Creo que usar 'values' como matriz arreglará tu problema con los números que no se actualizan. Si no, puedo enviarte un ejemplo rápido que hice. – wquist