ระดับชั้นการจัดการฮาร์ดแวร์โดยตรง (HAL) ของเซ็นเซอร์คืออินเทอร์เฟซระหว่างเฟรมเวิร์กเซ็นเซอร์ของ Android กับเซ็นเซอร์ของอุปกรณ์ เช่น ตัวตรวจวัดความเร่งหรือเครื่องวัดการหมุน โดย HAL ของเซ็นเซอร์จะกำหนดฟังก์ชันที่ต้องมีการติดตั้งใช้งานเพื่อให้เฟรมเวิร์กควบคุมเซ็นเซอร์ได้
HAL ของเซ็นเซอร์ AIDL พร้อมใช้งานใน Android 13 ขึ้นไปสำหรับอุปกรณ์ใหม่และอุปกรณ์ที่อัปเกรด HAL ของเซ็นเซอร์ AIDL ซึ่งอิงตาม HAL ของเซ็นเซอร์ 2.1 จะใช้อินเทอร์เฟซ HAL ของ AIDL และ แสดงประเภทเซ็นเซอร์ตัวติดตามศีรษะและ IMU แบบจำกัดแกน
อินเทอร์เฟซ HAL ของ AIDL
แหล่งข้อมูลหลักสำหรับ HAL ของเซ็นเซอร์ AIDL อยู่ในคำจำกัดความ HAL ที่ hardware/interfaces/sensors/aidl/android/hardware/sensors/ISensors.aidl
ติดตั้งใช้งาน HAL ของเซ็นเซอร์ AIDL
หากต้องการติดตั้งใช้งาน HAL ของเซ็นเซอร์ AIDL ออบเจ็กต์ต้องขยายISensors
อินเทอร์เฟซและติดตั้งใช้งานฟังก์ชันทั้งหมดที่กำหนดไว้ใน
hardware/interfaces/sensors/aidl/android/hardware/sensors/ISensors.aidl
เริ่มต้น HAL
เฟรมเวิร์กเซ็นเซอร์ของ Android ต้องเริ่มต้น HAL ของเซ็นเซอร์ก่อนจึงจะใช้งานได้ เฟรมเวิร์กจะเรียกฟังก์ชัน initialize() เพื่อส่งพารามิเตอร์ 3 รายการไปยัง HAL ของเซ็นเซอร์ ได้แก่ ตัวอธิบาย FMQ 2 รายการและพอยน์เตอร์ 1 รายการไปยังออบเจ็กต์ ISensorsCallback
HAL จะใช้ตัวอธิบายแรกเพื่อสร้าง Event FMQ ที่ใช้เขียนเหตุการณ์เซ็นเซอร์ไปยังเฟรมเวิร์ก HAL จะใช้ตัวอธิบายที่ 2 เพื่อสร้าง Wake Lock FMQ ที่ใช้ซิงค์เวลาที่ HAL ปล่อย Wake Lock สำหรับเหตุการณ์เซ็นเซอร์ WAKE_UP HAL ต้องบันทึก Pointer ไปยังออบเจ็กต์ ISensorsCallback เพื่อให้เรียกใช้ฟังก์ชัน Callback ที่จำเป็นได้
ฟังก์ชัน initialize() ต้องเป็นฟังก์ชันแรกที่เรียกใช้เมื่อเริ่มต้น HAL ของเซ็นเซอร์
แสดงเซ็นเซอร์ที่พร้อมใช้งาน
หากต้องการดูรายการเซ็นเซอร์แบบคงที่ทั้งหมดที่พร้อมใช้งานในอุปกรณ์ ให้ใช้ฟังก์ชัน getSensorsList() ฟังก์ชันนี้จะแสดงรายการเซ็นเซอร์ ซึ่งแต่ละรายการจะระบุด้วยแฮนเดิลที่ไม่ซ้ำกัน แฮนเดิลของเซ็นเซอร์ที่กำหนดต้องไม่เปลี่ยนแปลงเมื่อกระบวนการที่โฮสต์ HAL ของเซ็นเซอร์รีสตาร์ท แฮนเดิลอาจเปลี่ยนแปลงเมื่อรีบูตอุปกรณ์และเมื่อรีสตาร์ทเซิร์ฟเวอร์ระบบ
หากเซ็นเซอร์หลายรายการใช้ประเภทเซ็นเซอร์และพร็อพเพอร์ตี้ Wake-up เดียวกัน เซ็นเซอร์แรกในรายการจะเรียกว่าเซ็นเซอร์ เริ่มต้น และจะแสดงผลไปยังแอปที่ใช้ฟังก์ชัน getDefaultSensor(int sensorType, bool wakeUp)
ความเสถียรของรายการเซ็นเซอร์
หลังจากรีสตาร์ท HAL ของเซ็นเซอร์ หากข้อมูลที่แสดงผลโดย getSensorsList() บ่งชี้ว่ามีการเปลี่ยนแปลงที่สำคัญเมื่อเทียบกับรายการเซ็นเซอร์ที่ดึงข้อมูลก่อนรีสตาร์ท เฟรมเวิร์กจะทริกเกอร์การรีสตาร์ทรันไทม์ของ Android การเปลี่ยนแปลงที่สำคัญในรายการเซ็นเซอร์ ได้แก่ กรณีที่เซ็นเซอร์ที่มีแฮนเดิลที่กำหนดหายไปหรือมีการเปลี่ยนแปลงแอตทริบิวต์ หรือมีการนำเซ็นเซอร์ใหม่มาใช้ แม้ว่าการรีสตาร์ทรันไทม์ของ Android จะขัดขวางการทำงานของผู้ใช้ แต่ก็จำเป็นเนื่องจากเฟรมเวิร์กของ Android ไม่สามารถปฏิบัติตามข้อตกลง API ของ Android ที่ระบุว่าเซ็นเซอร์แบบคงที่ (ไม่ใช่แบบไดนามิก) จะไม่เปลี่ยนแปลงในระหว่างอายุการใช้งานของแอปได้อีกต่อไป การดำเนินการนี้อาจป้องกันไม่ให้เฟรมเวิร์กสร้างคำขอเซ็นเซอร์ที่ใช้งานอยู่ซึ่งแอปส่งมาอีกครั้ง ดังนั้น เราขอแนะนำให้ผู้จำหน่าย HAL ป้องกันการเปลี่ยนแปลงรายการเซ็นเซอร์ที่หลีกเลี่ยงได้
HAL ต้องกำหนดการแมปเซ็นเซอร์จริงที่กำหนดในอุปกรณ์กับแฮนเดิลของเซ็นเซอร์อย่างชัดเจนเพื่อให้แฮนเดิลของเซ็นเซอร์มีความเสถียร แม้ว่าอินเทอร์เฟซ HAL ของเซ็นเซอร์จะไม่ได้กำหนดการติดตั้งใช้งานที่เฉพาะเจาะจง แต่นักพัฒนาแอปก็มีตัวเลือกมากมายในการปฏิบัติตามข้อกำหนดนี้
ตัวอย่างเช่น คุณสามารถจัดเรียงรายการเซ็นเซอร์โดยใช้แอตทริบิวต์แบบคงที่ของเซ็นเซอร์แต่ละรายการร่วมกัน เช่น ผู้จำหน่าย รุ่น และประเภทเซ็นเซอร์ อีกตัวเลือกหนึ่งคือการใช้ประโยชน์จากข้อเท็จจริงที่ว่าชุดเซ็นเซอร์แบบคงที่ของอุปกรณ์ได้รับการแก้ไขในฮาร์ดแวร์ ดังนั้น HAL จึงต้องทราบว่าเซ็นเซอร์ทั้งหมดที่คาดไว้เริ่มต้นใช้งานเสร็จสมบูรณ์แล้วเมื่อใดก่อนที่จะแสดงผลจาก getSensorsList() คุณสามารถคอมไพล์รายการเซ็นเซอร์ที่คาดไว้ลงในไบนารี HAL หรือจัดเก็บไว้ในไฟล์การกำหนดค่าในระบบไฟล์ และใช้ลำดับการปรากฏเพื่อสร้างแฮนเดิลที่เสถียรได้ แม้ว่าโซลูชันที่ดีที่สุดจะขึ้นอยู่กับรายละเอียดการติดตั้งใช้งานที่เฉพาะเจาะจงของ HAL แต่ข้อกำหนดที่สำคัญคือแฮนเดิลของเซ็นเซอร์ต้องไม่เปลี่ยนแปลงเมื่อรีสตาร์ท HAL
กำหนดค่าเซ็นเซอร์
ก่อนที่จะเปิดใช้งานเซ็นเซอร์ คุณต้องกำหนดค่าเซ็นเซอร์ด้วยระยะเวลาการสุ่มตัวอย่างและเวลาในการตอบสนองสูงสุดในการรายงานโดยใช้ฟังก์ชัน batch()
เซ็นเซอร์ต้องกำหนดค่าใหม่ได้ทุกเมื่อโดยใช้ batch() โดยไม่สูญเสียข้อมูลเซ็นเซอร์
ระยะเวลาการสุ่มตัวอย่าง
ระยะเวลาการสุ่มตัวอย่างมีความหมายแตกต่างกันไปตามประเภทเซ็นเซอร์ที่กำหนดค่า
- ต่อเนื่อง: ระบบจะสร้างเหตุการณ์เซ็นเซอร์ในอัตราต่อเนื่อง
- เมื่อมีการเปลี่ยนแปลง: ระบบจะสร้างเหตุการณ์ไม่เร็วกว่าระยะเวลาการสุ่มตัวอย่าง และอาจสร้างเหตุการณ์ในอัตราที่ช้ากว่าระยะเวลาการสุ่มตัวอย่างหากค่าที่วัดได้ไม่เปลี่ยนแปลง
- ครั้งเดียว: ระบบจะไม่สนใจระยะเวลาการสุ่มตัวอย่าง
- พิเศษ: ดูรายละเอียดเพิ่มเติมได้ที่ ประเภทเซ็นเซอร์
ดูข้อมูลเกี่ยวกับการโต้ตอบระหว่างระยะเวลาการสุ่มตัวอย่างกับโหมดการรายงานของเซ็นเซอร์ได้ที่ โหมดการรายงาน
เวลาในการตอบสนองสูงสุดในการรายงาน
เวลาในการตอบสนองสูงสุดในการรายงานจะกำหนดเวลาสูงสุดเป็นนาโนวินาทีที่เหตุการณ์สามารถล่าช้าและจัดเก็บไว้ใน FIFO ของฮาร์ดแวร์ก่อนที่จะเขียนไปยัง Event FMQ ผ่าน HAL ขณะที่ SoC ทำงานอยู่
ค่าเป็นศูนย์หมายความว่าต้องรายงานเหตุการณ์ทันทีที่วัดได้ โดยข้าม FIFO ไปเลย หรือล้าง FIFO ทันทีที่มีเหตุการณ์จากเซ็นเซอร์ปรากฏใน FIFO
ตัวอย่างเช่น ตัวตรวจวัดความเร่งที่เปิดใช้งานที่ 50 Hz โดยมีเวลาในการตอบสนองสูงสุดในการรายงานเป็นศูนย์จะทริกเกอร์การขัดจังหวะ 50 ครั้งต่อวินาทีเมื่อ SoC ทำงานอยู่
เมื่อเวลาในการตอบสนองสูงสุดในการรายงานมากกว่าศูนย์ คุณไม่จำเป็นต้องรายงานเหตุการณ์เซ็นเซอร์ทันทีที่ตรวจพบ ระบบสามารถจัดเก็บเหตุการณ์ไว้ใน FIFO ของฮาร์ดแวร์ชั่วคราวและรายงานเป็นชุดได้ ตราบใดที่ไม่มีการหน่วงเวลาเหตุการณ์นานกว่าเวลาในการตอบสนองสูงสุดในการรายงาน ระบบจะบันทึกและแสดงผลเหตุการณ์ทั้งหมดตั้งแต่ชุดก่อนหน้าพร้อมกัน ซึ่งจะช่วยลดจำนวนการขัดจังหวะที่ส่งไปยัง SoC และช่วยให้ SoC เปลี่ยนไปใช้โหมดพลังงานต่ำได้ขณะที่เซ็นเซอร์กำลังบันทึกและจัดกลุ่มข้อมูล
แต่ละเหตุการณ์มีการประทับเวลาเชื่อมโยงอยู่ การหน่วงเวลาที่รายงานเหตุการณ์ต้องไม่ส่งผลต่อการประทับเวลาของเหตุการณ์ การประทับเวลาต้องถูกต้องและสอดคล้องกับเวลาที่เกิดเหตุการณ์ขึ้นจริง ไม่ใช่เวลาที่รายงาน
ดูข้อมูลและข้อกำหนดเพิ่มเติมเกี่ยวกับการรายงานเหตุการณ์เซ็นเซอร์ที่มี เวลาในการตอบสนองสูงสุดในการรายงานที่ไม่ใช่ศูนย์ได้ที่การจัดกลุ่ม
เปิดใช้งานเซ็นเซอร์
เฟรมเวิร์กจะเปิดและปิดใช้เซ็นเซอร์โดยใช้ฟังก์ชัน activate()
ก่อนที่จะเปิดใช้งานเซ็นเซอร์ เฟรมเวิร์กต้องกำหนดค่าเซ็นเซอร์โดยใช้ batch() ก่อน
หลังจากปิดใช้งานเซ็นเซอร์แล้ว ระบบต้องไม่เขียนเหตุการณ์เซ็นเซอร์เพิ่มเติมจากเซ็นเซอร์นั้นไปยัง Event FMQ
ล้างเซ็นเซอร์
หากกำหนดค่าเซ็นเซอร์ให้จัดกลุ่มข้อมูลเซ็นเซอร์ เฟรมเวิร์กสามารถบังคับให้ล้างเหตุการณ์เซ็นเซอร์ที่จัดกลุ่มทันทีได้โดยการเรียก flush() การดำเนินการนี้จะทำให้ระบบเขียนเหตุการณ์เซ็นเซอร์ที่จัดกลุ่มสำหรับแฮนเดิลเซ็นเซอร์ที่ระบุไปยัง Event FMQ ทันที HAL ของเซ็นเซอร์ต้องผนวกเหตุการณ์การล้างข้อมูลเสร็จสมบูรณ์ไว้ที่ส่วนท้ายของเหตุการณ์เซ็นเซอร์ที่เขียนขึ้นอันเป็นผลมาจากการเรียก flush()
การล้างข้อมูลจะเกิดขึ้นแบบอะซิงโครนัส (นั่นคือ ฟังก์ชันนี้ต้องแสดงผลทันที) หากการติดตั้งใช้งานใช้ FIFO เดียวสำหรับเซ็นเซอร์หลายรายการ ระบบจะล้าง FIFO นั้นและเพิ่มเหตุการณ์การล้างข้อมูลเสร็จสมบูรณ์สำหรับเซ็นเซอร์ที่ระบุเท่านั้น
หากเซ็นเซอร์ที่ระบุไม่มี FIFO (บัฟเฟอร์ไม่ได้) หรือหาก FIFO ว่างเปล่าในขณะที่เรียกใช้ flush() ฟังก์ชัน flush() จะต้องทำงานสำเร็จและส่งเหตุการณ์การล้างข้อมูลเสร็จสมบูรณ์สำหรับเซ็นเซอร์นั้น การดำเนินการนี้ใช้ได้กับเซ็นเซอร์ทั้งหมด ยกเว้นเซ็นเซอร์แบบครั้งเดียว
หากมีการเรียก flush() สำหรับเซ็นเซอร์แบบครั้งเดียว ฟังก์ชัน flush() จะต้องแสดงผล BAD_VALUE และไม่สร้างเหตุการณ์การล้างข้อมูลเสร็จสมบูรณ์
เขียนเหตุการณ์เซ็นเซอร์ไปยัง FMQ
HAL ของเซ็นเซอร์ใช้ Event FMQ เพื่อพุชเหตุการณ์เซ็นเซอร์ไปยังเฟรมเวิร์กเซ็นเซอร์ของ Android
Event FMQ เป็น FMQ ที่ซิงโครไนซ์ ซึ่งหมายความว่าการพยายามเขียนเหตุการณ์ไปยัง FMQ มากกว่าพื้นที่ว่างที่อนุญาตจะทำให้การเขียนล้มเหลว ในกรณีดังกล่าว HAL ควรพิจารณาว่าจะเขียนชุดเหตุการณ์ปัจจุบันเป็นกลุ่มเหตุการณ์ 2 กลุ่มที่เล็กลง หรือจะเขียนเหตุการณ์ทั้งหมดพร้อมกันเมื่อมีพื้นที่ว่างเพียงพอ
เมื่อ HAL ของเซ็นเซอร์เขียนเหตุการณ์เซ็นเซอร์ตามจำนวนที่ต้องการไปยัง Event FMQ แล้ว HAL ของเซ็นเซอร์ต้องแจ้งให้เฟรมเวิร์กทราบว่าเหตุการณ์พร้อมแล้วโดยการเขียนบิต EventQueueFlagBits::READ_AND_PROCESS ไปยังฟังก์ชัน EventFlag::wake ของ Event FMQ คุณสามารถสร้าง EventFlag จาก Event FMQ ได้โดยใช้ฟังก์ชัน EventFlag::createEventFlag และฟังก์ชัน getEventFlagWord() ของ Event FMQ
HAL ของเซ็นเซอร์ AIDL รองรับทั้ง 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 Lock เพื่อให้ระบบทำงานอยู่จนกว่าเฟรมเวิร์กจะจัดการเหตุการณ์ได้ เมื่อได้รับเหตุการณ์ WAKE_UP เฟรมเวิร์กจะรักษาความปลอดภัย Wake Lock ของตัวเอง ซึ่งช่วยให้ HAL ของเซ็นเซอร์ปล่อย Wake Lock ได้ หากต้องการซิงค์เวลาที่ HAL ของเซ็นเซอร์ปล่อย Wake Lock ให้ใช้ Wake Lock FMQ
HAL ของเซ็นเซอร์ต้องอ่าน Wake Lock FMQ เพื่อกำหนดจำนวนเหตุการณ์ WAKE_UP ที่เฟรมเวิร์กจัดการ HAL ควรปล่อย Wake Lock สำหรับเหตุการณ์ WAKE_UP เท่านั้นหากจำนวนเหตุการณ์ WAKE_UP ที่ยังไม่ได้จัดการทั้งหมดเป็นศูนย์
หลังจากจัดการเหตุการณ์เซ็นเซอร์แล้ว เฟรมเวิร์กจะนับจำนวนเหตุการณ์ที่ทำเครื่องหมายเป็นเหตุการณ์ WAKE_UP และเขียนจำนวนนี้กลับไปยัง Wake Lock FMQ
เฟรมเวิร์กจะตั้งค่าการแจ้งเตือนการเขียน WakeLockQueueFlagBits::DATA_WRITTEN ใน Wake Lock FMQ ทุกครั้งที่เขียนข้อมูลไปยัง Wake Lock FMQ
เซ็นเซอร์แบบไดนามิก
เซ็นเซอร์แบบไดนามิกคือเซ็นเซอร์ที่ไม่ได้เป็นส่วนหนึ่งของอุปกรณ์ทางกายภาพ แต่สามารถใช้เป็นอินพุตของอุปกรณ์ได้ เช่น เกมแพดที่มีตัวตรวจวัดความเร่ง
เมื่อเชื่อมต่อเซ็นเซอร์แบบไดนามิก HAL ของเซ็นเซอร์ต้องเรียกฟังก์ชัน onDynamicSensorConnected ใน ISensorsCallback การดำเนินการนี้จะแจ้งให้เฟรมเวิร์กทราบเกี่ยวกับเซ็นเซอร์แบบไดนามิกใหม่ และช่วยให้ควบคุมเซ็นเซอร์ผ่านเฟรมเวิร์กและให้ไคลเอ็นต์ใช้เหตุการณ์ของเซ็นเซอร์ได้
ในทำนองเดียวกัน เมื่อมีการยกเลิกการเชื่อมต่อเซ็นเซอร์แบบไดนามิก ระบบต้องเรียกฟังก์ชัน onDynamicSensorDisconnected ใน ISensorsCallback เพื่อให้เฟรมเวิร์กนำเซ็นเซอร์ที่ไม่มีให้บริการอีกต่อไปออกได้
แชแนลโดยตรง
แชแนลโดยตรงเป็นวิธีการทำงานที่ระบบจะเขียนเหตุการณ์เซ็นเซอร์ไปยังหน่วยความจำที่เฉพาะเจาะจงแทนที่จะเขียนไปยัง Event FMQ ซึ่งจะข้ามเฟรมเวิร์กเซ็นเซอร์ของ Android ไคลเอ็นต์ที่ลงทะเบียนแชแนลโดยตรงต้องอ่านเหตุการณ์เซ็นเซอร์โดยตรงจากหน่วยความจำที่ใช้สร้างแชแนลโดยตรง และจะไม่ได้รับเหตุการณ์เซ็นเซอร์ผ่านเฟรมเวิร์ก ฟังก์ชัน configDirectReport() มีลักษณะคล้ายกับ batch() สำหรับการทำงานปกติและกำหนดค่าแชแนลการรายงานโดยตรง
ฟังก์ชัน registerDirectChannel() และ unregisterDirectChannel() จะสร้าง
หรือทำลายแชแนลโดยตรงใหม่
โหมดการทำงาน
ฟังก์ชัน setOperationMode() ช่วยให้เฟรมเวิร์กกำหนดค่าเซ็นเซอร์เพื่อให้เฟรมเวิร์กสามารถแทรกข้อมูลเซ็นเซอร์ลงในเซ็นเซอร์ได้ ซึ่งมีประโยชน์สำหรับการทดสอบ โดยเฉพาะอย่างยิ่งสำหรับอัลกอริทึมที่อยู่ใต้เฟรมเวิร์ก
โดยปกติแล้วฟังก์ชัน injectSensorData() จะใช้เพื่อพุชพารามิเตอร์การทำงานไปยัง HAL ของเซ็นเซอร์ นอกจากนี้ ฟังก์ชันนี้ยังใช้เพื่อแทรกเหตุการณ์เซ็นเซอร์ลงในเซ็นเซอร์ที่เฉพาะเจาะจงได้ด้วย
การตรวจสอบ
หากต้องการตรวจสอบการติดตั้งใช้งาน 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 สำหรับ HAL ของเซ็นเซอร์ AIDL จะอยู่ใน
hardware/interfaces/sensors/aidl/vts/
การทดสอบเหล่านี้จะช่วยให้มั่นใจว่ามีการติดตั้งใช้งาน HAL ของเซ็นเซอร์อย่างถูกต้อง และเป็นไปตามข้อกำหนดทั้งหมดภายใน ISensors.aidl และ ISensorsCallback.aidl อย่างเหมาะสม
เริ่มต้น HAL
ต้องรองรับฟังก์ชัน initialize() เพื่อสร้าง FMQ ระหว่างเฟรมเวิร์กกับ HAL
แสดงเซ็นเซอร์ที่พร้อมใช้งาน
ใน HAL ของเซ็นเซอร์ AIDL ฟังก์ชัน getSensorsList() ต้องแสดงผลค่าเดียวกันระหว่างการบูตอุปกรณ์ครั้งเดียว แม้ว่าจะมีการรีสตาร์ท HAL ของเซ็นเซอร์ก็ตาม ข้อกำหนดใหม่ของฟังก์ชัน getSensorsList() คือฟังก์ชันนี้ต้องแสดงผลค่าเดียวกันระหว่างการบูตอุปกรณ์ครั้งเดียว แม้ว่าจะมีการรีสตาร์ท HAL ของเซ็นเซอร์ก็ตาม ซึ่งจะช่วยให้เฟรมเวิร์กพยายามสร้างการเชื่อมต่อเซ็นเซอร์อีกครั้งหากเซิร์ฟเวอร์ระบบรีสตาร์ท ค่าที่แสดงผลโดย getSensorsList() อาจเปลี่ยนแปลงหลังจากที่อุปกรณ์รีบูต
เขียนเหตุการณ์เซ็นเซอร์ไปยัง FMQ
HAL ของเซ็นเซอร์ต้องเขียนเหตุการณ์เซ็นเซอร์ไปยัง Event FMQ อย่างกระตือรือร้นทุกครั้งที่มีเหตุการณ์เซ็นเซอร์พร้อมใช้งาน แทนที่จะรอให้มีการเรียก poll() ใน HAL ของเซ็นเซอร์ AIDL นอกจากนี้ HAL ยังมีหน้าที่เขียนบิตที่ถูกต้องไปยัง EventFlag เพื่อทำให้เกิดการอ่าน FMQ ภายในเฟรมเวิร์ก
เหตุการณ์ WAKE_UP
ใน HAL ของเซ็นเซอร์ 1.0 HAL สามารถปล่อย Wake Lock สำหรับเหตุการณ์ WAKE_UP ใดก็ได้ในการเรียก poll() ครั้งถัดไปหลังจากที่โพสต์ WAKE_UP ไปยัง poll() เนื่องจากสิ่งนี้บ่งชี้ว่าเฟรมเวิร์กได้ประมวลผลเหตุการณ์เซ็นเซอร์ทั้งหมดและได้รับ Wake Lock แล้ว หากจำเป็น เนื่องจากใน HAL ของเซ็นเซอร์ AIDL ระบบจะไม่แจ้งให้ HAL ทราบอีกต่อไปเมื่อเฟรมเวิร์กประมวลผลเหตุการณ์ที่เขียนไปยัง FMQ แล้ว Wake Lock FMQ จึงช่วยให้เฟรมเวิร์กสื่อสารกับ HAL ได้เมื่อจัดการเหตุการณ์ WAKE_UP แล้ว
ใน HAL ของเซ็นเซอร์ AIDL Wake Lock ที่ HAL ของเซ็นเซอร์รักษาความปลอดภัยไว้สำหรับเหตุการณ์ WAKE_UP ต้องขึ้นต้นด้วย SensorsHAL_WAKEUP
เซ็นเซอร์แบบไดนามิก
ระบบแสดงผลเซ็นเซอร์แบบไดนามิกโดยใช้ฟังก์ชัน poll() ใน HAL ของเซ็นเซอร์ 1.0
HAL ของเซ็นเซอร์ AIDL กำหนดให้เรียก onDynamicSensorsConnected และ onDynamicSensorsDisconnected ใน ISensorsCallback ทุกครั้งที่การเชื่อมต่อเซ็นเซอร์แบบไดนามิกเปลี่ยนแปลง Callback เหล่านี้พร้อมใช้งานเป็นส่วนหนึ่งของพอยน์เตอร์ ISensorsCallback ที่ให้ไว้ผ่านฟังก์ชัน initialize()
โหมดการทำงาน
ต้องรองรับโหมด DATA_INJECTION สำหรับเซ็นเซอร์ WAKE_UP
การรองรับ Multi-HAL
HAL ของเซ็นเซอร์ AIDL รองรับ Multi-HAL โดยใช้ เฟรมเวิร์ก Multi-HAL ของเซ็นเซอร์ ดูรายละเอียดการติดตั้งใช้งานได้ที่ การย้ายข้อมูลจาก HAL ของเซ็นเซอร์ 2.1