เซ็นเซอร์ AIDL HAL

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

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

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

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

ใช้ Sensors AIDL HAL

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

เริ่มต้น HAL

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

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

ฟังก์ชัน 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 เหตุการณ์ ต้องตั้งค่าแฟล็กการแจ้งเตือนการเขียนเป็น EventQueueFlagBits::READ_AND_PROCESS ซึ่งจะแจ้งเฟรมเวิร์กว่ามีการเขียนเหตุการณ์ไปยัง Event FMQ

เหตุการณ์ WAKE_UP

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

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

เฟรมเวิร์กจะตั้งค่าWakeLockQueueFlagBits::DATA_WRITTENการเขียน การแจ้งเตือนใน FMQ การปลุกล็อกทุกครั้งที่เขียนข้อมูลไปยัง 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 อยู่ใน 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

แทนที่จะรอเรียกใช้ poll() ใน Sensors AIDL HAL เซ็นเซอร์ HAL ต้องเขียนเหตุการณ์เซ็นเซอร์ไปยัง Event FMQ ด้วยตนเองเมื่อใดก็ตามที่มีเหตุการณ์เซ็นเซอร์เกิดขึ้น นอกจากนี้ 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 ทุกครั้งที่การเชื่อมต่อเซ็นเซอร์แบบไดนามิกมีการเปลี่ยนแปลง Callback เหล่านี้พร้อมใช้งานโดยเป็นส่วนหนึ่งของตัวชี้ ISensorsCallback ที่ให้ไว้ผ่านฟังก์ชัน initialize()

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

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

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

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