เซนเซอร์ HAL 2

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

เซ็นเซอร์ HAL 2.0 พร้อมใช้งานใน Android 10 ขึ้นไปสำหรับอุปกรณ์ใหม่และที่อัปเกรดแล้ว เซนเซอร์ HAL 2.0 จะขึ้นอยู่กับ เซนเซอร์ HAL 1.0 แต่มีความแตกต่างที่สำคัญหลายอย่างซึ่งป้องกันไม่ให้มันเข้ากันได้ย้อนหลัง เซนเซอร์ HAL 2.0 การใช้งาน ได้อย่างรวดเร็วข้อความคิว (FMQs) ให้ส่งเหตุการณ์เซ็นเซอร์จาก HAL ลงในกรอบเซ็นเซอร์ Android

เซ็นเซอร์ HAL 2.1 พร้อมใช้งานใน Android 11 และสูงกว่าสำหรับอุปกรณ์ใหม่และที่อัปเกรดแล้ว เซนเซอร์ HAL 2.1 ทวนของเซนเซอร์ HAL 2.0 ที่ exposes ที่ HINGE_ANGLE ประเภทของเซนเซอร์และการปรับปรุงวิธีการต่างๆที่จะยอมรับ HINGE_ANGLE ประเภท

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

แหล่งที่มาของเอกสารสำหรับเซนเซอร์ HAL 2.1 อยู่ในความหมายที่ HAL ฮาร์ดแวร์ / อินเตอร์เฟซ / เซ็นเซอร์ / 2.1 / ISensors.hal หากมีความขัดแย้งของความต้องการระหว่างหน้านี้และ ISensors.hal ใช้ความต้องการใน ISensors.hal

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

แหล่งที่มาของเอกสารสำหรับเซนเซอร์ HAL 2.0 อยู่ในความหมายที่ HAL ฮาร์ดแวร์ / อินเตอร์เฟซ / เซ็นเซอร์ / 2.0 / ISensors.hal หากมีความขัดแย้งของความต้องการระหว่างหน้านี้และ ISensors.hal ใช้ความต้องการใน ISensors.hal

การติดตั้งเซ็นเซอร์ HAL 2.0 และ HAL 2.1

ที่จะใช้เซนเซอร์ HAL 2.0 หรือ 2.1 วัตถุต้องขยาย ISensors อินเตอร์เฟซและการดำเนินการทุกฟังก์ชั่นที่กำหนดไว้ใน 2.0/ISensors.hal หรือ 2.1/ISensors.hal

การเริ่มต้นHAL

เซ็นเซอร์ HAL ต้องเริ่มต้นโดยเฟรมเวิร์กเซ็นเซอร์ Android ก่อนจึงจะสามารถใช้งานได้ กรอบการเรียก initialize() ฟังก์ชั่นสำหรับ HAL 2.0 และ initialize_2_1() ฟังก์ชั่นสำหรับ HAL 2.1 เพื่อให้สามพารามิเตอร์กับเซนเซอร์ HAL: สอง FMQ อธิบายและชี้ไปยัง ISensorsCallback วัตถุ

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

initialize() หรือ initialize_2_1() ฟังก์ชั่นจะต้องมีฟังก์ชั่นเป็นครั้งแรกเรียกว่าเมื่อการเริ่มต้นเซนเซอร์ HAL

การเปิดเผยเซ็นเซอร์ที่มีอยู่

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

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

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

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

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

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

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

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

เซ็นเซอร์จะต้องสามารถที่จะรองรับได้ตลอดเวลาโดยใช้ batch() โดยไม่มีการสูญเสียข้อมูลเซ็นเซอร์

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

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

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

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

เวลาแฝงในการรายงานสูงสุด

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

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

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

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

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

สำหรับข้อมูลเพิ่มเติมและข้อกำหนดเกี่ยวกับการรายงานเหตุการณ์ที่เกิดขึ้นมีความล่าช้าเซ็นเซอร์รายงานภัณฑ์สูงสุดเห็น เครื่องผสม

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

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

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

เซ็นเซอร์ล้างน้ำ

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

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

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

ถ้า flush() เรียกว่าสำหรับเซ็นเซอร์หนึ่งยิงแล้ว flush() จะต้องกลับ BAD_VALUE และไม่สร้างเหตุการณ์ที่สมบูรณ์ล้าง

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

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

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

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

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

กิจกรรม WAKE_UP

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

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

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

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

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

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

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

ช่องตรง

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

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

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

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

injectSensorData() ฟังก์ชั่นใน HAL 2.0 และ injectSensorsData_2_1() ฟังก์ชั่นใน HAL 2.0 โดยปกติจะใช้ในการผลักดันการดำเนินงานพารามิเตอร์เข้าสู่เซนเซอร์ HAL ฟังก์ชันนี้ยังสามารถใช้เพื่อฉีดเหตุการณ์ของเซ็นเซอร์ลงในเซ็นเซอร์เฉพาะได้อีกด้วย

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

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

การทดสอบ CTS

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

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

การทดสอบ CTS ตรวจสอบอยู่ใน กะรัต / ปพลิเคชัน / CtsVerifier / src / co.th / Android / กะรัต / ตรวจสอบ / เซ็นเซอร์ การทดสอบเหล่านี้ต้องการการป้อนข้อมูลด้วยตนเองจากผู้ดำเนินการทดสอบ และตรวจสอบว่าเซ็นเซอร์รายงานค่าที่ถูกต้องแม่นยำ

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

การทดสอบ VTS

การทดสอบ VTS สำหรับเซนเซอร์ HAL 2.0 อยู่ใน ฮาร์ดแวร์ / อินเตอร์เฟซ / เซ็นเซอร์ / 2.0 / vts การทดสอบ VTS สำหรับเซนเซอร์ HAL 2.1 อยู่ใน ฮาร์ดแวร์ / อินเตอร์เฟซ / เซ็นเซอร์ / 2.1 / vts การทดสอบเหล่านี้ให้แน่ใจว่าเซนเซอร์ HAL จะดำเนินการอย่างถูกต้องและความต้องการทั้งหมดภายใน ISensors.hal และ ISensorsCallback.hal จะพบได้อย่างถูกต้อง

การอัพเกรดเป็นเซนเซอร์ HAL 2.1 จาก 2.0

เมื่ออัพเกรดเซนเซอร์ HAL 2.1 จาก 2.0 การดำเนินงาน HAL ของคุณต้องมี initialize_2_1() , getSensorsList_2_1() และ injectSensorsData_2_1() วิธีการร่วมกับ HAL 2.1 ประเภท วิธีการเหล่านี้ต้องเป็นไปตามข้อกำหนดเดียวกันที่ระบุไว้สำหรับ HAL 2.0 ด้านบน

เนื่องจาก HAL เวอร์ชันรองต้องรองรับฟังก์ชันทั้งหมดจาก HAL ก่อนหน้า 2.1 HAL ต้องรองรับการกำหนดค่าเริ่มต้นเป็น 2.0 HAL เพื่อหลีกเลี่ยงความซับซ้อนในการรองรับ HAL ทั้งสองเวอร์ชัน ขอแนะนำให้ใช้ Multi-HAL 2.1

สำหรับตัวอย่างของวิธีการใช้เซนเซอร์ของคุณเอง 2.1 HAL ให้ดู Sensors.h

การอัพเกรดเป็นเซนเซอร์ HAL 2.0 จาก 1.0

เมื่ออัปเกรดเป็นเซ็นเซอร์ HAL 2.0 จาก 1.0 ตรวจสอบให้แน่ใจว่าการใช้งาน HAL ของคุณเป็นไปตามข้อกำหนดต่อไปนี้

การเริ่มต้นHAL

initialize() ฟังก์ชั่นจะต้องได้รับการสนับสนุนในการสร้าง FMQs ระหว่างกรอบและ HAL

การเปิดเผยเซ็นเซอร์ที่มีอยู่

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

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

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

กิจกรรม WAKE_UP

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

ในเซนเซอร์ HAL 2.0 ล็อคปลุกค้ำประกันโดยเซนเซอร์ HAL สำหรับ WAKE_UP เหตุการณ์ต้องเริ่มต้นด้วย SensorsHAL_WAKEUP

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

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

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

DATA_INJECTION โหมด WAKE_UP เซ็นเซอร์จะต้องได้รับการสนับสนุนในเซนเซอร์ HAL 2.0

รองรับ Multi-HAL

เซนเซอร์ HAL 2.0 และ 2.1 สนับสนุนหลาย HAL ใช้ กรอบเซนเซอร์หลาย HAL สำหรับรายละเอียดการดำเนินงานให้ดู Porting จากเซนเซอร์ HAL 1.0