2012-04-08 41 views
6

मुझे एहसास है कि आइस लाइट सेंसर के उपयोग के बारे में कोई सार्वजनिक दस्तावेज नहीं है, हालांकि शैडोबुक (shown here) जैसे प्रोग्राम चमक डेटा तक पहुंचने में सक्षम हैं और मैं बस सोच रहा था कि कोई भी हासिल करने में सक्षम है या नहीं इसी तरह के परिणाम और पता है कि इस सेंसर का उपयोग कैसे करें? धन्यवाद!iSight परिवेश सेंसर

उत्तर

7

IOKit लाइब्रेरी से 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_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] में संग्रहीत किया जाएगा। ध्यान रखें कि सभी मैकबुक इस तरह से काम नहीं करते हैं: मेरे मध्य 2010 15 'प्रो पर, दोनों मान समान हैं, क्योंकि लाइट सेंसर iSight कैमरे में है।

+0

मैं उन मानों के लिए लॉग कैसे वापस करूँगा? 'एनएसएलओजी (@" दाएं% एफ ", मान);'? मैं बाएं/दाएं कैसे प्रारूपित करूं? –

+0

एक और त्वरित प्रश्न ऐसा लगता है जब मेरा एप्लिकेशन शुरू होता है लेकिन मैं इसे लगातार कैसे कॉल कर सकता हूं? विधि को याद करने के लिए टाइमर का उपयोग करने का प्रयास किया लेकिन यह –

+1

मान को अद्यतन करने के लिए अद्यतन नहीं करता है, 'NSLog (@ "बाएं:% i, दाएं:% i", (int) मान [0], (int) मान [1]); 'पर्याप्त होगा। मुझे लगता है कि सरणी के रूप में 'मानों' का उपयोग करके आपकी समस्या को अद्यतन करने वाले नंबरों के साथ ठीक कर दिया जाएगा। यदि नहीं, तो मैं आपको एक त्वरित उदाहरण भेज सकता हूं। – wquist

संबंधित मुद्दे