2012-04-08 3 views
6

isight 조명 센서 사용에 대한 공개 문서가 없다는 것을 알고 있지만 ShadowBook ​​(shown here)과 같은 프로그램을 사용하면 밝기 데이터에 액세스 할 수 있으며 누군가가 밝기 데이터를 얻을 수 있었는지 궁금합니다. 유사한 결과와이 센서에 액세스하는 방법을 알고 있습니까? 감사!iSight 앰비언트 센서

답변

7

IOerit 라이브러리에서 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_SUCCESS을 포함하는 kern_return_t 변수를 반환합니다. IOObjectRelease(service);

EDIT : 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 (@ "오른쪽 % f", 값); 왼쪽/오른쪽 형식은 어떻게됩니까? –

+0

한 번 더 질문을합니다. 응용 프로그램이 시작될 때 한 번 호출되는 것처럼 보이지만 어떻게 계속 호출 할 수 있습니까? 메서드를 호출하기 위해 타이머를 사용하려했지만 값을 업데이트하지 않습니다. –

+1

NSLog (@ "왼쪽 : % i, 오른쪽 : % i", (int) 값 [0], (int) 값 [1]);'충분합니다. 나는'values'를 배열로 사용하는 것이 업데이트되지 않는 숫자로 문제를 해결할 것이라고 생각합니다. 그렇지 않다면 내가 만든 간단한 예를 보낼 수 있습니다. – wquist