isight 조명 센서 사용에 대한 공개 문서가 없다는 것을 알고 있지만 ShadowBook (shown here)과 같은 프로그램을 사용하면 밝기 데이터에 액세스 할 수 있으며 누군가가 밝기 데이터를 얻을 수 있었는지 궁금합니다. 유사한 결과와이 센서에 액세스하는 방법을 알고 있습니까? 감사!iSight 앰비언트 센서
6
A
답변
7
IOerit 라이브러리에서 IOService를 사용하여 광 센서에 액세스 할 수 있습니다. 광 센서의 이름은 "AppleLMUController"입니다. 좋은 예가 있습니다 : light sensor. 그런 다음 io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("AppleLMUController"));
사용하여 서비스에 연결 : IOConnectMethodScalarIScalarO(port, 0, 0, 2, &left, &right);
어디 left
및 right
이제 센서의 빛 수준을 유지 정수 :
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 카메라에있는 것과 같이 두 값이 동일합니다.
어떻게 그 값에 대한 로그를 반환합니까? 'NSLog (@ "오른쪽 % f", 값); 왼쪽/오른쪽 형식은 어떻게됩니까? –
한 번 더 질문을합니다. 응용 프로그램이 시작될 때 한 번 호출되는 것처럼 보이지만 어떻게 계속 호출 할 수 있습니까? 메서드를 호출하기 위해 타이머를 사용하려했지만 값을 업데이트하지 않습니다. –
NSLog (@ "왼쪽 : % i, 오른쪽 : % i", (int) 값 [0], (int) 값 [1]);'충분합니다. 나는'values'를 배열로 사용하는 것이 업데이트되지 않는 숫자로 문제를 해결할 것이라고 생각합니다. 그렇지 않다면 내가 만든 간단한 예를 보낼 수 있습니다. – wquist