รูปภาพด้านล่างแสดงสแต็กเซ็นเซอร์ของ Android คอมโพเนนต์แต่ละรายการ จะสื่อสารกับคอมโพเนนต์ที่อยู่เหนือและใต้คอมโพเนนต์นั้นๆ เท่านั้น แม้ว่าเซ็นเซอร์บางตัว จะข้ามฮับเซ็นเซอร์ได้หากมีฮับเซ็นเซอร์อยู่ ควบคุมโฟลว์จากแอปพลิเคชันลงไปยังเซ็นเซอร์ และโฟลว์ข้อมูลจากเซ็นเซอร์ขึ้นไปยังแอปพลิเคชัน

รูปที่ 1 เลเยอร์ของสแต็กเซ็นเซอร์ Android และเจ้าของที่เกี่ยวข้อง
SDK
แอปพลิเคชันเข้าถึงเซ็นเซอร์ผ่าน Sensors SDK (ชุดพัฒนาซอฟต์แวร์) API SDK มีฟังก์ชันในการแสดงรายการเซ็นเซอร์ที่พร้อมใช้งานและลงทะเบียนกับเซ็นเซอร์
เมื่อลงทะเบียนกับเซ็นเซอร์ แอปพลิเคชันจะระบุความถี่ในการสุ่มตัวอย่างที่ต้องการ และข้อกำหนดด้านเวลาในการตอบสนอง
- เช่น แอปพลิเคชันอาจลงทะเบียนกับเครื่องวัดความเร่งเริ่มต้น โดยขอเหตุการณ์ที่ 100Hz และอนุญาตให้รายงานเหตุการณ์ที่มีเวลาในการตอบสนอง 1 วินาที
- แอปพลิเคชันจะได้รับเหตุการณ์จากเครื่องวัดความเร่งที่อัตราอย่างน้อย 100Hz และอาจล่าช้าได้สูงสุด 1 วินาที
ดูข้อมูลเพิ่มเติมเกี่ยวกับ SDK ได้ที่เอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์
Framework
เฟรมเวิร์กมีหน้าที่เชื่อมโยงแอปพลิเคชันต่างๆ กับ HAL HAL เองก็เป็นแบบไคลเอ็นต์เดียว หากไม่มีการมัลติเพล็กซ์ที่ระดับเฟรมเวิร์ก แอปพลิเคชันเพียงแอปเดียวเท่านั้นที่จะเข้าถึงเซ็นเซอร์แต่ละตัวได้ในเวลาใดก็ตาม
- เมื่อแอปพลิเคชันแรกลงทะเบียนกับเซ็นเซอร์ เฟรมเวิร์กจะส่งคำขอไปยัง HAL เพื่อเปิดใช้งานเซ็นเซอร์
- เมื่อแอปพลิเคชันเพิ่มเติมลงทะเบียนกับเซ็นเซอร์เดียวกัน เฟรมเวิร์กจะพิจารณา
ข้อกำหนดจากแต่ละแอปพลิเคชันและส่งพารามิเตอร์ที่ขอซึ่งอัปเดตแล้ว
ไปยัง HAL
- ความถี่ในการสุ่มตัวอย่างจะเป็นความถี่ในการสุ่มตัวอย่างสูงสุดที่ขอ ซึ่งหมายความว่าแอปพลิเคชันบางรายการจะได้รับเหตุการณ์ที่มีความถี่สูงกว่าที่ขอ
- เวลาในการรายงานสูงสุดจะเป็นเวลาในการรายงานขั้นต่ำของเวลาที่ขอ หากแอปพลิเคชันหนึ่งขอเซ็นเซอร์ที่มีเวลาในการตอบสนองสูงสุดในการรายงานเป็น 0 แอปพลิเคชันทั้งหมดจะได้รับเหตุการณ์จากเซ็นเซอร์นี้ในโหมดต่อเนื่อง แม้ว่าบางแอปพลิเคชันจะขอเซ็นเซอร์ที่มีเวลาในการตอบสนองสูงสุดในการรายงานที่ไม่ใช่ 0 ก็ตาม ดูรายละเอียดเพิ่มเติมได้ที่การประมวลผลแบบกลุ่ม
- เมื่อแอปพลิเคชันสุดท้ายที่ลงทะเบียนกับเซ็นเซอร์หนึ่งๆ ยกเลิกการลงทะเบียนจากเซ็นเซอร์นั้น เฟรมเวิร์กจะส่งคำขอไปยัง HAL เพื่อปิดใช้งานเซ็นเซอร์เพื่อไม่ให้ใช้พลังงานโดยไม่จำเป็น
ผลกระทบของการมัลติเพล็กซ์
ความจำเป็นในการมีเลเยอร์มัลติเพล็กซ์ในเฟรมเวิร์กนี้อธิบายการตัดสินใจด้านการออกแบบบางอย่าง
- เมื่อแอปพลิเคชันขอความถี่ในการสุ่มตัวอย่างที่เฉพาะเจาะจง จะไม่มีการรับประกันว่าเหตุการณ์จะไม่มาถึงในอัตราที่เร็วกว่า หากแอปพลิเคชันอื่น ขอเซ็นเซอร์เดียวกันในอัตราที่เร็วกว่า แอปพลิเคชันแรกก็จะ ได้รับข้อมูลในอัตราที่เร็วเช่นกัน
- การรับประกันที่ขาดหายไปเช่นเดียวกันนี้ใช้กับเวลาในการรายงานสูงสุดที่ขอด้วย แอปพลิเคชันอาจได้รับเหตุการณ์ที่มีเวลาในการตอบสนองน้อยกว่าที่ขอมาก
- นอกเหนือจากความถี่ในการสุ่มตัวอย่างและความหน่วงเวลาในการรายงานสูงสุดแล้ว แอปพลิเคชันจะกำหนดค่าพารามิเตอร์เซ็นเซอร์ไม่ได้
- ตัวอย่างเช่น ลองนึกถึงเซ็นเซอร์จริงที่ทำงานได้ทั้งในโหมด "ความแม่นยำสูง" และ "ประหยัดพลังงาน"
- คุณใช้ได้เพียงโหมดใดโหมดหนึ่งใน 2 โหมดนี้บนอุปกรณ์ Android เนื่องจาก มิฉะนั้น แอปพลิเคชันหนึ่งอาจขอโหมดความแม่นยำสูง และอีกแอปพลิเคชันหนึ่ง อาจขอโหมดประหยัดพลังงาน ทำให้เฟรมเวิร์กไม่สามารถตอบสนองความต้องการของทั้ง 2 แอปพลิเคชันได้ เฟรมเวิร์กต้องตอบสนองความต้องการของลูกค้าทั้งหมดได้เสมอ ดังนั้น จึงไม่สามารถใช้ตัวเลือกนี้ได้
- ไม่มีกลไกในการส่งข้อมูลจากแอปพลิเคชันไปยังเซ็นเซอร์หรือ ไดรเวอร์ของเซ็นเซอร์ ซึ่งจะช่วยให้มั่นใจได้ว่าแอปพลิเคชันหนึ่งจะไม่สามารถแก้ไขลักษณะการทำงานของ เซ็นเซอร์ ซึ่งจะทำให้แอปพลิเคชันอื่นๆ ทำงานผิดพลาด
การรวมเซ็นเซอร์
เฟรมเวิร์ก Android มีการใช้งานเริ่มต้นสำหรับเซ็นเซอร์แบบผสมบางรายการ เมื่ออุปกรณ์มีเครื่องวัดการหมุน ตัวตรวจวัดความเร่ง และแมกนีโตมิเตอร์ แต่ไม่มีเซ็นเซอร์เวกเตอร์การหมุน แรงโน้มถ่วง และการเร่งความเร็วเชิงเส้น เฟรมเวิร์กจะใช้เซ็นเซอร์เหล่านั้นเพื่อให้แอปพลิเคชัน ยังคงใช้งานได้
การติดตั้งใช้งานเริ่มต้นไม่มีสิทธิ์เข้าถึงข้อมูลทั้งหมดที่การติดตั้งใช้งานอื่นๆ มีสิทธิ์เข้าถึง และต้องทำงานบน SoC จึงไม่แม่นยำและประหยัดพลังงานเท่ากับการติดตั้งใช้งานอื่นๆ ผู้ผลิตอุปกรณ์ควรระบุเซ็นเซอร์แบบรวมของตนเอง (เวกเตอร์การหมุน แรงโน้มถ่วง และความเร่งเชิงเส้น รวมถึงเซ็นเซอร์แบบรวมที่ใหม่กว่า เช่น เวกเตอร์การหมุนของเกม) แทนที่จะใช้การติดตั้งใช้งานเริ่มต้นนี้ ผู้ผลิตอุปกรณ์ยังสามารถขอให้ผู้ให้บริการชิปเซ็นเซอร์จัดหาการติดตั้งใช้งานให้ได้ด้วย
เราไม่ได้ดูแลการใช้งานฟิวชันเซ็นเซอร์เริ่มต้นแล้ว และอาจทำให้อุปกรณ์ที่ใช้ฟิวชันเซ็นเซอร์เริ่มต้นไม่ผ่าน CTS
กลไกภายใน
ส่วนนี้มีไว้เพื่อเป็นข้อมูลเบื้องต้นสำหรับผู้ที่ดูแลโค้ดเฟรมเวิร์กของ Android Open Source Project (AOSP) ไม่เกี่ยวข้องกับ ผู้ผลิตฮาร์ดแวร์
JNI
เฟรมเวิร์กใช้ Java Native Interface (JNI) ที่เชื่อมโยงกับ android.hardware และอยู่ในไดเรกทอรี frameworks/base/core/jni/
โค้ดนี้เรียกใช้โค้ดเนทีฟระดับล่างเพื่อรับสิทธิ์เข้าถึงฮาร์ดแวร์เซ็นเซอร์
เฟรมเวิร์กเนทีฟ
เฟรมเวิร์กเนทีฟกำหนดไว้ใน frameworks/native/
และมีฟังก์ชันเทียบเท่าเนทีฟกับแพ็กเกจ android.hardware เฟรมเวิร์กดั้งเดิมจะเรียกใช้พร็อกซี Binder IPC เพื่อรับสิทธิ์เข้าถึง
บริการเฉพาะเซ็นเซอร์
Binder IPC
พร็อกซี IPC ของ Binder ช่วยให้การสื่อสารข้ามขอบเขตของกระบวนการเป็นไปได้
HAL
API ของ Hardware Abstraction Layer (HAL) ของเซ็นเซอร์คืออินเทอร์เฟซระหว่าง ไดรเวอร์ฮาร์ดแวร์และเฟรมเวิร์ก Android ซึ่งประกอบด้วยอินเทอร์เฟซ HAL หนึ่งรายการ sensors.h และการติดตั้งใช้งาน HAL หนึ่งรายการที่เราเรียกว่า sensors.cpp
อินเทอร์เฟซกำหนดโดยผู้มีส่วนร่วมใน Android และ AOSP ส่วนการ ติดตั้งใช้งานนั้นมาจากผู้ผลิตอุปกรณ์
อินเทอร์เฟซ HAL ของเซ็นเซอร์อยู่ใน hardware/libhardware/include/hardware
ดูรายละเอียดเพิ่มเติมได้ที่ sensors.h
ช่วงปล่อยเพลง
การใช้งาน HAL จะระบุเวอร์ชันของอินเทอร์เฟซ HAL ที่ใช้งานโดยการตั้งค่า your_poll_device.common.version
เวอร์ชันอินเทอร์เฟซ HAL
ที่มีอยู่จะกำหนดไว้ใน sensors.h และฟังก์ชันการทำงานจะเชื่อมโยงกับเวอร์ชันเหล่านั้น
ปัจจุบันเฟรมเวิร์ก Android รองรับเวอร์ชัน 1.0 และ 1.3 แต่จะ ไม่รองรับเวอร์ชัน 1.0 ในเร็วๆ นี้ เอกสารนี้อธิบายลักษณะการทำงานของเวอร์ชัน 1.3 ซึ่งอุปกรณ์ทั้งหมดควรจะอัปเกรดเป็นเวอร์ชันนี้ ดูรายละเอียดเกี่ยวกับวิธีอัปเกรดเป็น 1.3 ได้ที่การเลิกใช้งาน HAL เวอร์ชัน
ไดรเวอร์เคอร์เนล
ไดรเวอร์เซ็นเซอร์จะโต้ตอบกับอุปกรณ์จริง ในบางกรณี การใช้งาน HAL และไดรเวอร์จะเป็นเอนทิตีซอฟต์แวร์เดียวกัน ในกรณีอื่นๆ ผู้รวมฮาร์ดแวร์จะขอให้ผู้ผลิตชิปเซ็นเซอร์จัดหา ไดรเวอร์ให้ แต่ผู้ที่เขียนการติดตั้งใช้งาน HAL คือผู้รวมฮาร์ดแวร์
ในทุกกรณี การติดตั้งใช้งาน HAL และไดรเวอร์เคอร์เนลเป็นความรับผิดชอบของ ผู้ผลิตฮาร์ดแวร์ และ Android ไม่ได้มีแนวทางที่แนะนำในการ เขียนไดรเวอร์เหล่านั้น
ฮับเซ็นเซอร์
สแต็กเซ็นเซอร์ของอุปกรณ์อาจมีฮับเซ็นเซอร์ (ไม่บังคับ) ซึ่งมีประโยชน์ในการ ทำการคำนวณระดับต่ำบางอย่างที่ใช้พลังงานต่ำขณะที่ SoC อยู่ใน โหมดระงับ เช่น การนับก้าวหรือการรวมเซ็นเซอร์สามารถทำได้ในชิปเหล่านั้น นอกจากนี้ยังเป็นที่ที่เหมาะสำหรับการใช้การจัดกลุ่มเซ็นเซอร์ โดยเพิ่ม FIFO ของฮาร์ดแวร์สำหรับเหตุการณ์ของเซ็นเซอร์ ดูข้อมูลเพิ่มเติมได้ที่การประมวลผลแบบกลุ่ม
หมายเหตุ: หากต้องการพัฒนาฟีเจอร์ใหม่ของ ContextHub ที่ ใช้เซ็นเซอร์หรือ LED ใหม่ คุณยังใช้ Neonkey SensorHub ที่เชื่อมต่อกับ บอร์ดพัฒนา Hikey หรือ Hikey960 ได้ด้วย
วิธีสร้างฮับเซ็นเซอร์จะขึ้นอยู่กับสถาปัตยกรรม บางครั้งก็เป็นชิปแยกต่างหาก และบางครั้งก็รวมอยู่ในชิปเดียวกับ SoC ลักษณะสำคัญของฮับเซ็นเซอร์คือควรมีหน่วยความจำเพียงพอสำหรับการประมวลผลแบบกลุ่มและใช้พลังงานน้อยมากเพื่อให้ใช้งานเซ็นเซอร์ Android ที่ใช้พลังงานต่ำได้ ฮับเซ็นเซอร์บางตัวมีไมโครคอนโทรลเลอร์สำหรับการคำนวณทั่วไป และตัวเร่งฮาร์ดแวร์เพื่อให้การคำนวณใช้พลังงานต่ำมากสำหรับ เซ็นเซอร์ที่ใช้พลังงานต่ำ
Android ไม่ได้ระบุว่าควรออกแบบฮับเซ็นเซอร์อย่างไรและควรสื่อสารกับเซ็นเซอร์ และ SoC (บัส I2C, บัส SPI, …) อย่างไร แต่ควรมีเป้าหมาย เพื่อลดการใช้พลังงานโดยรวม
ตัวเลือกหนึ่งที่ดูเหมือนจะมีผลกระทบอย่างมากต่อความเรียบง่ายในการติดตั้งใช้งาน คือการมีเส้นขัดจังหวะ 2 เส้นจากฮับเซ็นเซอร์ไปยัง SoC เส้นหนึ่งสำหรับการขัดจังหวะการปลุก (สำหรับเซ็นเซอร์ปลุก) และอีกเส้นหนึ่งสำหรับการขัดจังหวะที่ไม่ใช่การปลุก (สำหรับเซ็นเซอร์ที่ไม่ใช่การปลุก)
เซ็นเซอร์
นั่นคือชิป MEM ที่จับต้องได้ซึ่งทำการวัด ในหลายกรณี เซ็นเซอร์ทางกายภาพหลายตัวจะอยู่บนชิปเดียวกัน ตัวอย่างเช่น ชิปบางตัว มีตัวตรวจวัดความเร่ง เครื่องวัดการหมุน และเครื่องวัดสนามแม่เหล็ก (โดยทั่วไปชิปดังกล่าวเรียกว่าชิป 9 แกน เนื่องจากเซ็นเซอร์แต่ละตัวให้ข้อมูลใน 3 แกน)
นอกจากนี้ ชิปบางตัวยังมีตรรกะบางอย่างเพื่อทำการคำนวณตามปกติ เช่น การตรวจจับการเคลื่อนไหว การตรวจจับก้าว และการรวมเซ็นเซอร์ 9 แกน
แม้ว่าข้อกำหนดและคำแนะนำด้านความสามารถและความแม่นยำของ CDD จะมุ่งเป้าไปที่เซ็นเซอร์ Android ไม่ใช่เซ็นเซอร์จริง แต่ข้อกำหนดเหล่านั้นก็ส่งผลต่อการเลือกเซ็นเซอร์จริง เช่น ข้อกำหนดด้านความแม่นยำของเวกเตอร์การหมุนของเกม ส่งผลต่อความแม่นยำที่จำเป็นสำหรับไจโรสโคปจริง ผู้ผลิตอุปกรณ์จะเป็นผู้กำหนดข้อกำหนดสำหรับ เซ็นเซอร์ทางกายภาพ