เซ็นเซอร์ AIDL HAL

เลเยอร์นามธรรมฮาร์ดแวร์เซ็นเซอร์ (HAL) คืออินเทอร์เฟซระหว่าง เฟรมเวิร์กเซ็นเซอร์ Android และเซ็นเซอร์ของอุปกรณ์ เช่น ตัวตรวจวัดความเร่ง หรือ เครื่องวัดการหมุน HAL ของเซ็นเซอร์จะกำหนดฟังก์ชันที่จำเป็นต้องใช้งาน ทำให้เฟรมเวิร์กควบคุมเซ็นเซอร์ได้

Sensors AIDL HAL พร้อมใช้งานใน Android 13 และ ที่สูงกว่าสำหรับอุปกรณ์ใหม่และอุปกรณ์ที่อัปเกรด Sensors AIDL HAL ซึ่งอิงตาม เซ็นเซอร์ HAL 2.1 ใช้ อินเทอร์เฟซ AIDL HAL และ จะแสดงอุปกรณ์ติดตามศีรษะและเซ็นเซอร์ IMU แบบจำกัดแกน

อินเทอร์เฟซ AIDL HAL

แหล่งข้อมูลหลักของเอกสารสำหรับ Sensors AIDL HAL อยู่ใน HAL ที่ ฮาร์ดแวร์/อินเทอร์เฟซ/เซ็นเซอร์/aidl/android/hardware/sensors/ISensors.aidl

ใช้งาน Sensors AIDL HAL

ในการใช้ Sensors AIDL HAL วัตถุต้องขยาย ISensors ของอินเทอร์เฟซและใช้ฟังก์ชันทั้งหมดที่กำหนดไว้ใน ฮาร์ดแวร์/อินเทอร์เฟซ/เซ็นเซอร์/aidl/android/hardware/sensors/ISensors.aidl

เริ่มต้น HAL

HAL ของเซ็นเซอร์ต้องเริ่มต้นโดยเฟรมเวิร์กเซ็นเซอร์ของ Android ก่อน เท่านั้น เฟรมเวิร์กนี้จะเรียกใช้ฟังก์ชัน initialize() เพื่อมอบฟังก์ชัน ไปยัง HAL ของเซ็นเซอร์ ได้แก่ ตัวบอก FMQ 2 ตัว และตัวชี้ 1 ตัวไปยัง ISensorsCallback ออบเจ็กต์

HAL ใช้ตัวบ่งชี้แรกเพื่อสร้าง Event FMQ ที่ใช้เขียนเซ็นเซอร์ เข้ากับเฟรมเวิร์ก HAL ใช้ตัวบ่งชี้ที่ 2 ในการสร้าง Wake ล็อก FMQ ที่ใช้ซิงค์ข้อมูลเมื่อ HAL ปล่อย Wake Lock สำหรับ WAKE_UP เหตุการณ์เซ็นเซอร์ HAL ต้องบันทึกตัวชี้ไปยังออบเจ็กต์ ISensorsCallback เพื่อให้ อาจมีการเรียกใช้ฟังก์ชัน Callback ที่จำเป็น

ฟังก์ชัน initialize() ต้องเป็นฟังก์ชันแรกที่ถูกเรียกเมื่อเริ่มต้น HAL ของเซ็นเซอร์

แสดงเซ็นเซอร์ที่ใช้ได้

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

หากเซ็นเซอร์หลายตัวใช้เซ็นเซอร์ประเภทเดียวกันและคุณสมบัติการปลุกระบบเดียวกัน เซ็นเซอร์ เซ็นเซอร์แรกในรายการเรียกว่าเซ็นเซอร์เริ่มต้น และจะส่งกลับไปยัง แอปที่ใช้ getDefaultSensor(int sensorType, bool wakeUp)

ความเสถียรของรายการเซ็นเซอร์

หลังจากรีสตาร์ทเซ็นเซอร์ HAL หาก getSensorsList() แสดงผลข้อมูล แสดงถึงการเปลี่ยนแปลงที่สำคัญเมื่อเทียบกับรายการเซ็นเซอร์ที่ดึงข้อมูลก่อน เฟรมเวิร์กจะเริ่มต้นใหม่ รันไทม์ของ Android การเปลี่ยนแปลงที่สำคัญในรายการเซ็นเซอร์รวมถึงกรณีที่ เซ็นเซอร์ที่มีแฮนเดิลหนึ่งๆ หายไปหรือมีการเปลี่ยนแปลงแอตทริบิวต์ หรือ เริ่มใช้เซ็นเซอร์ แม้ว่าการรีสตาร์ทรันไทม์ของ Android จะทำให้เกิดการหยุดชะงัก จำเป็นเพราะเฟรมเวิร์กของ Android ไม่สามารถเป็นไปตาม สัญญา Android API ที่ว่าเซ็นเซอร์แบบคงที่ (ไม่ใช่ไดนามิก) จะไม่มีการเปลี่ยนแปลงในระหว่าง ตลอดอายุของแอป ซึ่งอาจทำให้ไม่สามารถเริ่มต้นเฟรมเวิร์กนี้อีกครั้ง คำขอเซ็นเซอร์ที่ใช้งานอยู่จากแอปต่างๆ ดังนั้น ขอแนะนำให้ผู้ให้บริการ HAL ซึ่งป้องกันการเปลี่ยนแปลง รายการเซ็นเซอร์ที่หลีกเลี่ยงได้

เพื่อให้แฮนเดิลของเซ็นเซอร์เสถียรภาพ HAL จะต้องแมป เซ็นเซอร์ทางกายภาพของอุปกรณ์เข้ากับมือจับ แม้ว่าจะไม่มีการติดตั้งใช้งานที่เฉพาะเจาะจง ได้รับคำสั่งจากอินเทอร์เฟซ HAL ของเซ็นเซอร์ นักพัฒนาซอฟต์แวร์มีตัวเลือกมากมาย ทำตามข้อกำหนดนี้ได้

เช่น สามารถจัดเรียงรายการเซ็นเซอร์โดยใช้ค่าต่างๆ ของเซ็นเซอร์แต่ละตัวรวมกัน แอตทริบิวต์ที่คงที่ เช่น ผู้ให้บริการ รุ่น และประเภทเซ็นเซอร์ อีกตัวเลือกหนึ่งต้องใช้ จากข้อเท็จจริงที่ว่าชุดเซ็นเซอร์ตรวจจับการเคลื่อนไหวของอุปกรณ์จะยึดอยู่กับที่ในฮาร์ดแวร์ ดังนั้น HAL ต้องการทราบว่าเซ็นเซอร์ที่คาดไว้ทั้งหมดจะเริ่มทำงานเสร็จสมบูรณ์แล้วก่อน ที่กลับมาจาก getSensorsList() รายการนี้ เซ็นเซอร์ที่คาดหมายสามารถคอมไพล์ไว้ในไบนารี HAL หรือเก็บไว้ใน ลงในระบบไฟล์และใช้ลำดับที่ปรากฏได้ เพื่อสร้างแฮนเดิลที่เสถียร แม้ว่าวิธีแก้ปัญหาที่ดีที่สุดจะขึ้นอยู่กับ HAL รายละเอียดการใช้งานที่เฉพาะเจาะจง ข้อกำหนดที่สำคัญคือเซ็นเซอร์ต้องจัดการกับ ไม่มีการเปลี่ยนแปลงในการรีสตาร์ท HAL

กำหนดค่าเซ็นเซอร์

ก่อนที่จะเปิดใช้งานเซ็นเซอร์ ต้องกำหนดค่าเซ็นเซอร์ด้วยการสุ่มตัวอย่าง ระยะเวลาและเวลาในการตอบสนองสูงสุดของการรายงานโดยใช้ฟังก์ชัน batch()

เซ็นเซอร์จะต้องกำหนดค่าใหม่ได้ทุกเมื่อโดยใช้ batch() โดยไม่มี การสูญเสียข้อมูลเซ็นเซอร์

ระยะเวลาการสุ่มตัวอย่าง

ระยะเวลาการสุ่มตัวอย่างจะมีความหมายต่างกัน ตามประเภทเซ็นเซอร์ที่ กำลังกำหนดค่า:

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

หากต้องการเรียนรู้เกี่ยวกับการโต้ตอบระหว่างระยะเวลาการสุ่มตัวอย่างกับเซ็นเซอร์ โหมดการรายงาน โปรดดูโหมดการรายงาน

เวลาในการตอบสนองสูงสุดของการรายงาน

เวลาในการตอบสนองการรายงานสูงสุดจะตั้งเวลาสูงสุดเป็นหน่วยนาโนวินาที กิจกรรมอาจล่าช้าและจัดเก็บไว้ในฮาร์ดแวร์ FIFO ก่อนที่จะเขียนถึง Event FMQ ผ่าน HAL ขณะที่ SoC ยังทำงานอยู่

ค่า 0 หมายความว่าต้องรายงานเหตุการณ์ทันทีที่ ไม่ว่าจะข้าม FIFO ไปเลย หรือละทิ้ง FIFO ทันที มีเหตุการณ์หนึ่งจากเซ็นเซอร์ปรากฏใน FIFO

ตัวอย่างเช่น ตัวตรวจวัดความเร่งที่เปิดใช้งานที่ 50 Hz พร้อมการรายงานสูงสุด เวลาในการตอบสนอง ของทริกเกอร์ 0 รายการรบกวน 50 ครั้งต่อวินาทีเมื่อ SoC ทำงานอยู่

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

แต่ละเหตุการณ์จะมีการประทับเวลาที่เกี่ยวข้องอยู่ ชะลอเวลาการ การรายงานเหตุการณ์ต้องไม่ส่งผลกระทบต่อการประทับเวลาเหตุการณ์ การประทับเวลาต้องเป็น ถูกต้องและสอดคล้องกับเวลาที่เหตุการณ์เกิดขึ้น ไม่ใช่ เวลาที่มีการรายงาน

สําหรับข้อมูลเพิ่มเติมและข้อกำหนดเกี่ยวกับการรายงานเหตุการณ์เซ็นเซอร์กับ เวลาในการตอบสนองของการรายงานสูงสุดที่ไม่ใช่ 0 โปรดดูการรวมกลุ่ม

เปิดใช้งานเซ็นเซอร์

เฟรมเวิร์กจะเปิดใช้และปิดใช้เซ็นเซอร์โดยใช้ฟังก์ชัน activate() ก่อนที่จะเปิดใช้งานเซ็นเซอร์ เฟรมเวิร์กจะต้องกำหนดค่าเซ็นเซอร์ก่อน ด้วย batch()

หลังจากปิดใช้งานเซ็นเซอร์แล้ว เหตุการณ์อื่นๆ ของเซ็นเซอร์จากเซ็นเซอร์นั้นจะต้องไม่ เขียนไปยัง Event FMQ

เซ็นเซอร์ล้างพิษ

หากมีการกำหนดค่าเซ็นเซอร์ให้รวมข้อมูลเซ็นเซอร์เป็นกลุ่ม เฟรมเวิร์กจะบังคับ ระบบจะล้างเหตุการณ์เซ็นเซอร์แบบกลุ่มโดยทันทีด้วยการเรียกใช้ flush() ซึ่งทำให้ เหตุการณ์เซ็นเซอร์แบบกลุ่มสำหรับแฮนเดิลเซ็นเซอร์ที่ระบุทันที เขียนไว้ใน Event FMQ HAL ของเซ็นเซอร์ต้องต่อท้ายเหตุการณ์การล้างที่เสร็จสมบูรณ์ ที่ส่วนท้ายของเหตุการณ์เซ็นเซอร์ที่เขียนขึ้นจากการที่เรียก flush()

การล้างจะเกิดขึ้นไม่พร้อมกัน (กล่าวคือ ฟังก์ชันนี้จะต้องคืนค่า ทันที) หากการใช้งานใช้ FIFO ตัวเดียวสำหรับเซ็นเซอร์หลายตัว FIFO นั้น ล้าง และเพิ่มเหตุการณ์การล้างอย่างสมบูรณ์แล้วสำหรับเซ็นเซอร์ที่ระบุเท่านั้น

หากเซ็นเซอร์ที่ระบุไม่มี FIFO (ไม่สามารถบัฟเฟอร์ได้) หรือ FIFO ว่างเปล่าในขณะที่โทร flush() ยังคงต้องสำเร็จและส่ง Flush ของเหตุการณ์สำหรับเซ็นเซอร์นั้น การตั้งค่านี้มีผลกับเซ็นเซอร์ทั้งหมดที่ไม่ใช่ช็อต 1 ช็อต เซ็นเซอร์

หากมีการเรียก flush() สำหรับเซ็นเซอร์แบบภาพเดียว flush() ต้องกลับไป BAD_VALUE และไม่สร้างเหตุการณ์ล้างโดยสมบูรณ์

เขียนเหตุการณ์เซ็นเซอร์ไปยัง FMQ

HAL เซ็นเซอร์ใช้ Event FMQ เพื่อพุชเหตุการณ์ของเซ็นเซอร์เข้าไปใน Android เฟรมเวิร์กของเซ็นเซอร์

Event FMQ เป็น FMQ ที่ซิงค์ ซึ่งหมายความว่าการพยายามเขียนเพิ่มเติม เหตุการณ์ใน FMQ มากกว่าพื้นที่ที่มีอยู่ ทำให้ เขียน ในกรณีเช่นนี้ HAL ควรเป็นผู้กำหนดว่าจะเขียนชุดปัจจุบันหรือไม่ เหตุการณ์เป็นกลุ่มเหตุการณ์ 2 กลุ่มเล็กๆ หรือเขียนเหตุการณ์ทั้งหมด รวมกันเมื่อมีพื้นที่เพียงพอ

เมื่อ Sensors HAL เขียนจำนวนเหตุการณ์เซ็นเซอร์ที่ต้องการลงในฟังก์ชัน Event FMQ, Sensors HAL ต้องแจ้งเฟรมเวิร์กว่าเหตุการณ์พร้อมใช้งานโดย กำลังเขียนบิต EventQueueFlagBits::READ_AND_PROCESS ไปยังเหตุการณ์ FMQ EventFlag::wake สามารถสร้าง EventFlag ได้จาก Event FMQ โดยใช้ EventFlag::createEventFlag และ getEventFlagWord() ของ FMQ ของเหตุการณ์

Sensors AIDL HAL รองรับทั้ง write และ writeBlocking ใน Event FMQ การใช้งานเริ่มต้นจะให้ข้อมูลอ้างอิงสำหรับการใช้ write หาก ใช้ฟังก์ชัน writeBlocking ต้องตั้งค่าแฟล็ก readNotification เป็น EventQueueFlagBits::EVENTS_READ ซึ่งกำหนดโดยเฟรมเวิร์กเมื่อมีการอ่าน เหตุการณ์จาก Event FMQ ต้องตั้งค่าแฟล็กการแจ้งเตือนการเขียนเป็น EventQueueFlagBits::READ_AND_PROCESS ซึ่งแจ้งเฟรมเวิร์กว่าเหตุการณ์ ได้เขียนไปยัง Event FMQ

กิจกรรม WAKE_UP

WAKE_UP เหตุการณ์คือเหตุการณ์เซ็นเซอร์ที่ทำให้แอปพลิเคชันประมวลผล (AP) ให้ตื่นนอนและจัดการกับเหตุการณ์ในทันที ทุกครั้งที่มีการเขียนกิจกรรม WAKE_UP ที่ Event FMQ นั้น HAL ของเซ็นเซอร์จะต้องรักษาความปลอดภัยขณะล็อกเพื่อให้มั่นใจว่า ระบบจะทำงานจนกว่าเฟรมเวิร์กจะสามารถจัดการกับเหตุการณ์ได้ เมื่อได้รับ WAKE_UP เฟรมเวิร์กนี้จะรักษาความปลอดภัยของ Wake Lock เอง จึงช่วยให้คุณ HAL เซ็นเซอร์จะปล่อย Wake Lock ซิงค์ข้อมูลเมื่อ Sensors HAL ปล่อย Wake Lock ให้ใช้ Wake Lock FMQ

HAL ของเซ็นเซอร์ต้องอ่านค่า Wake Lock FMQ เพื่อระบุจำนวนของ WAKE_UP เหตุการณ์ที่เฟรมเวิร์กได้จัดการ HAL ควรปล่อย Wake Lock เท่านั้น สําหรับ WAKE_UP เหตุการณ์ หากจํานวนเหตุการณ์ WAKE_UP ที่ไม่มีการจัดการทั้งหมดเป็น 0 หลังจากจัดการเหตุการณ์เซ็นเซอร์แล้ว เฟรมเวิร์กจะนับจำนวนเหตุการณ์ที่ ทำเครื่องหมายเป็น WAKE_UP เหตุการณ์และเขียนหมายเลขนี้กลับไปยัง Wake Lock FMQ

เฟรมเวิร์กจะกำหนดการเขียน WakeLockQueueFlagBits::DATA_WRITTEN การแจ้งเตือนบน Wake Lock FMQ เมื่อใดก็ตามที่เขียนข้อมูลไปยัง Wake Lock FMQ

เซ็นเซอร์แบบไดนามิก

เซ็นเซอร์แบบไดนามิกคือเซ็นเซอร์ที่ไม่ได้เป็นส่วนประกอบของอุปกรณ์ แต่สามารถ ใช้เป็นอินพุตของอุปกรณ์ เช่น เกมแพดที่มีตัวตรวจวัดความเร่ง

เมื่อเชื่อมต่อเซ็นเซอร์แบบไดนามิกแล้ว ฟังก์ชัน onDynamicSensorConnected ใน ต้องเรียก ISensorsCallback จาก Sensors HAL ซึ่งจะแจ้งเตือน ของเซ็นเซอร์แบบไดนามิกใหม่ และช่วยให้ เซ็นเซอร์สามารถควบคุม ผ่านเฟรมเวิร์กและให้ลูกค้าใช้เหตุการณ์ของเซ็นเซอร์

ในทำนองเดียวกัน เมื่อตัดการเชื่อมต่อเซ็นเซอร์แบบไดนามิก ต้องเรียกใช้ฟังก์ชัน onDynamicSensorDisconnected ใน ISensorsCallback เฟรมเวิร์กนี้สามารถนำเซ็นเซอร์ที่ใช้แล้วออกได้

แชแนลโดยตรง

ช่องสัญญาณโดยตรงคือวิธีทำงานที่จะเขียนเหตุการณ์เซ็นเซอร์ไปยัง หน่วยความจำที่ต้องการ แทนที่จะเป็น Event FMQ ทำให้ไม่ต้องเซ็นเซอร์ Android กรอบการทำงาน ไคลเอ็นต์ที่ลงทะเบียนช่องทางโดยตรงจะต้องอ่านเหตุการณ์เซ็นเซอร์ โดยตรงจากหน่วยความจำที่ใช้เพื่อสร้างแชแนลโดยตรง และจะไม่ รับเหตุการณ์เซ็นเซอร์ผ่านเฟรมเวิร์ก configDirectReport() จะคล้ายกับ batch() สำหรับการทำงานปกติและกำหนดค่าฟังก์ชัน รายงานแชแนล

ฟังก์ชัน registerDirectChannel() และ unregisterDirectChannel() จะสร้าง หรือทำลายช่องโดยตรงใหม่

โหมดการทำงาน

ฟังก์ชัน setOperationMode() จะช่วยให้เฟรมเวิร์กกำหนดค่าเซ็นเซอร์ได้ เพื่อให้เฟรมเวิร์กสามารถแทรกข้อมูลเซ็นเซอร์เข้าไปในเซ็นเซอร์ได้ วิธีนี้เป็นประโยชน์สำหรับ โดยเฉพาะสำหรับอัลกอริทึมที่อยู่ต่ำกว่าเฟรมเวิร์กนั้น

โดยปกติฟังก์ชัน injectSensorData() ใช้เพื่อพุชการดำเนินการ ลงใน Sensors HAL ฟังก์ชันนี้ยังใช้เพื่อแทรกเซ็นเซอร์ได้ด้วย เหตุการณ์ลงในเซ็นเซอร์หนึ่งๆ

การตรวจสอบความถูกต้อง

หากต้องการตรวจสอบการใช้งาน Sensors HAL ให้เรียกใช้ CTS และ VTS ของเซ็นเซอร์ การทดสอบ

การทดสอบ CTS

การทดสอบ CTS เซ็นเซอร์มีอยู่ทั้งในการทดสอบ CTS อัตโนมัติและ CTS Verifier ด้วยตนเอง แอป

การทดสอบอัตโนมัติอยู่ใน cts/tests/sensor/src/android/hardware/cts การทดสอบเหล่านี้จะตรวจสอบฟังก์ชันการทำงานมาตรฐานของเซ็นเซอร์ เช่น การเปิดใช้งาน เซ็นเซอร์ การรวมกลุ่ม และอัตราเหตุการณ์เซ็นเซอร์

การทดสอบ CTS Verifier อยู่ใน cts/apps/CtsVerifier/src/com/android/cts/verifier/sensors การทดสอบเหล่านี้กำหนดให้เจ้าหน้าที่ทดสอบป้อนข้อมูลด้วยตนเอง และตรวจสอบว่าเซ็นเซอร์ รายงานค่าที่ถูกต้อง

การผ่านการทดสอบ CTS เป็นสิ่งสำคัญที่ทำให้มั่นใจได้ว่าอุปกรณ์ที่อยู่ระหว่างการทดสอบเป็นไปตามข้อกำหนด ข้อกำหนดทั้งหมดของ CDD

การทดสอบ VTS

การทดสอบ VTS สำหรับ Sensors AIDL HAL อยู่ใน ฮาร์ดแวร์/อินเทอร์เฟซ/เซ็นเซอร์/aidl/vts/ การทดสอบเหล่านี้ช่วยให้มั่นใจว่ามีการติดตั้ง HAL ของเซ็นเซอร์อย่างถูกต้อง และ เป็นไปตามข้อกำหนดภายใน ISensors.aidl และ ISensorsCallback.aidl อย่างเหมาะสม

เริ่มต้น HAL

ต้องรองรับฟังก์ชัน initialize() เพื่อสร้าง FMQ ระหว่าง และ HAL

แสดงเซ็นเซอร์ที่ใช้ได้

ใน Sensors AIDL HAL ฟังก์ชัน getSensorsList() ต้องแสดงค่าเดียวกัน ระหว่างการเปิดเครื่อง 1 ครั้ง และแม้แต่การรีสตาร์ท HAL ของเซ็นเซอร์ต่างๆ ก็ตาม ข้อกำหนดใหม่ ของฟังก์ชัน getSensorsList() ก็คือจะต้องแสดงผลค่าเดียวกันระหว่าง เปิดเครื่องอุปกรณ์เดียว แม้ใน Sensors HAL จะรีสตาร์ทก็ตาม วิธีนี้ทำให้สามารถ เพื่อพยายามสร้างการเชื่อมต่อเซ็นเซอร์อีกครั้งหากเซิร์ฟเวอร์ระบบ รีสตาร์ท ค่าที่ getSensorsList() แสดงผลอาจเปลี่ยนแปลงได้หลังจากอุปกรณ์ จะรีบูต

เขียนเหตุการณ์เซ็นเซอร์ไปยัง FMQ

แทนที่จะต้องรอให้ poll() เรียกใช้ เซ็นเซอร์ใน Sensors AIDL HAL HAL ต้องเขียนเหตุการณ์ที่เซ็นเซอร์ไปยัง Event FMQ ด้วยตนเองทุกครั้งที่มีเหตุการณ์ของเซ็นเซอร์ พร้อมใช้งาน HAL ยังทำหน้าที่เขียนบิตที่ถูกต้องไปยัง EventFlag เพื่อทำให้อ่าน FMQ ภายในเฟรมเวิร์ก

กิจกรรม WAKE_UP

ในเซ็นเซอร์ HAL 1.0 HAL สามารถปล่อย Wake Lock สำหรับ WAKE_UP เครื่องใดก็ได้ กิจกรรมในการโทรครั้งต่อๆ ไปของ poll() หลังจากโพสต์ WAKE_UP ไปยัง poll() เนื่องจากข้อความนี้ระบุว่าเฟรมเวิร์กได้ประมวลผลเซ็นเซอร์ทั้งหมด และได้การทำงานขณะล็อก หากจำเป็น เนื่องจากในเซ็นเซอร์ AIDL HAL จะไม่มีการแจ้งเตือน HAL อีกต่อไปเมื่อเฟรมเวิร์กมีการประมวลผลเหตุการณ์ Wake Lock FMQ ช่วยให้เฟรมเวิร์กสามารถสื่อสารกับ HAL เมื่อจัดการกิจกรรม WAKE_UP รายการแล้ว

ใน Sensors AIDL HAL ฟีเจอร์ Wake Lock ที่รักษาความปลอดภัยโดย Sensors HAL สำหรับ WAKE_UP กิจกรรมต้องขึ้นต้นด้วย SensorsHAL_WAKEUP

เซ็นเซอร์แบบไดนามิก

ระบบแสดงผลเซ็นเซอร์แบบไดนามิกโดยใช้ฟังก์ชัน poll() ในเซ็นเซอร์ HAL 1.0 Sensors AIDL HAL กําหนดให้ onDynamicSensorsConnected และ ระบบจะเรียก onDynamicSensorsDisconnected ใน ISensorsCallback เมื่อใดก็ตามที่เป็นแบบไดนามิก การเชื่อมต่อเซ็นเซอร์มีการเปลี่ยนแปลง Callback เหล่านี้เป็นส่วนหนึ่งของ ตัวชี้ ISensorsCallback ที่ให้ไว้ผ่านฟังก์ชัน initialize()

โหมดการทำงาน

ต้องรองรับโหมด DATA_INJECTION สำหรับเซ็นเซอร์ WAKE_UP ตัว

รองรับ Multi-HAL

Sensors AIDL HAL รองรับมัลติเฮลโดยใช้เมธอด เฟรมเวิร์ก Multi-HAL ของเซ็นเซอร์ สำหรับ รายละเอียดการใช้งาน โปรดดู การพอร์ตจาก Sensors HAL 2.1