Sensors AIDL HAL

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

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

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

แหล่งข้อมูลหลักของเอกสารประกอบสำหรับ Sensors AIDL HAL อยู่ในคำจำกัดความ HAL ที่ hardware/interfaces/sensors/aidl/android/hardware/sensors/ISensors.aidl

ติดตั้งใช้งาน Sensors AIDL HAL

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

เริ่มต้น HAL

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ระยะเวลาการบันทึกมีความหมายแตกต่างกันไปตามประเภทเซ็นเซอร์ที่กำหนดค่า

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

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

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

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

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

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

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

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

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

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

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

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

เซ็นเซอร์โฟลช

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

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

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

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

เขียนเหตุการณ์เซ็นเซอร์ลงใน FMQ

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

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

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

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

เหตุการณ์ WAKE_UP

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

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

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

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

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

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

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

แชแนลโดยตรง

ช่องทางโดยตรงเป็นวิธีการทํางานที่ระบบจะเขียนเหตุการณ์เซ็นเซอร์ไปยังหน่วยความจําที่เฉพาะเจาะจงแทนที่จะเขียนไปยัง FMQ ของเหตุการณ์โดยข้าม Android Sensors Framework ไคลเอ็นต์ที่ลงทะเบียนช่องทางโดยตรงต้องอ่านเหตุการณ์ของเซ็นเซอร์โดยตรงจากหน่วยความจำที่ใช้สร้างช่องทางโดยตรง และจะไม่รับเหตุการณ์ของเซ็นเซอร์ผ่านเฟรมเวิร์ก ฟังก์ชัน 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 อยู่ใน hardware/interfaces/sensors/aidl/vts/ การทดสอบเหล่านี้ช่วยให้มั่นใจได้ว่ามีการใช้ Sensors HAL อย่างถูกต้องและเป็นไปตามข้อกำหนดทั้งหมดภายใน ISensors.aidl และ ISensorsCallback.aidl

เริ่มต้น HAL

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

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

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

เขียนเหตุการณ์เซ็นเซอร์ลงใน FMQ

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

เหตุการณ์ WAKE_UP

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

ใน Sensors AIDL HAL ล็อกการปลุกที่ปลอดภัยโดย Sensors HAL สำหรับWAKE_UP เหตุการณ์ต้องขึ้นต้นด้วย SensorsHAL_WAKEUP

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

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

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

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

การรองรับ HAL หลายรายการ

Sensors AIDL HAL รองรับ HAL หลายรายการโดยใช้เฟรมเวิร์ก Sensors Multi-HAL ดูรายละเอียดการใช้งานได้ที่การย้ายข้อมูลจาก Sensors HAL 2.1