เลเยอร์นามธรรมฮาร์ดแวร์เซ็นเซอร์ (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