เซ็นเซอร์ Multi-HAL

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

Sensors Multi-HAL 2.1 พร้อมให้บริการในอุปกรณ์ที่ใช้ Android 11 ขึ้นไป ซึ่งเป็นเวอร์ชันปรับปรุงของ Sensors Multi-HAL 2.0 ที่รองรับการโหลด HAL ย่อยซึ่งสามารถแสดงประเภทเซ็นเซอร์มุมบานพับ เพื่อให้รองรับเซ็นเซอร์ประเภทนี้ HAL ต้องใช้ API ย่อย HAL ที่กำหนดไว้ในส่วนหัว SubHal

สำหรับอุปกรณ์ที่ใช้ Android 13 ขึ้นไปซึ่งใช้ Sensors AIDL HAL คุณจะใช้เลเยอร์ shim แบบหลาย HAL เพื่ออนุญาตความสามารถในการทำมัลติ HAL ได้ ดูรายละเอียดการใช้งานได้ที่ การใช้ Sensors Multi-HAL กับ Sensors AIDL HAL

ความแตกต่างระหว่าง Sensors Multi-HAL 2 กับ Sensors HAL 2

เซ็นเซอร์ Multi-HAL 2 ที่พร้อมใช้งานในอุปกรณ์ที่ใช้ Android 10 ขึ้นไป จะมีแอบสแตรกต์ต่างๆ เพิ่มเข้ามานอกเหนือจาก Sensors HAL 2 เพื่อให้โต้ตอบกับ HAL API ได้ง่ายขึ้น Sensors Multi-HAL 2 เปิดตัวคลาส HalProxy เพื่อจัดการกับการใช้อินเทอร์เฟซ Sensors HAL 2 และ V2_1/SubHal (หรือ V2_0/SubHal) เพื่ออนุญาตให้ HalProxy โต้ตอบกับ HAL ย่อย

อินเทอร์เฟซ ISensorsSubHal แตกต่างจากอินเทอร์เฟซ 2.1/ISensors.hal (หรือ 2.0/ISensors.hal) ในลักษณะต่อไปนี้

  • เมธอดเริ่มต้นจะส่งคลาส IHalProxyCallback instead of FMQ 2 รายการและ ISensorsCallback
  • HAL ย่อยต้องใช้ฟังก์ชันการแก้ไขข้อบกพร่องเพื่อให้ข้อมูลการแก้ไขข้อบกพร่องในรายงานข้อบกพร่อง
  • HAL ย่อยต้องใช้ฟังก์ชันชื่อเพื่อให้แยก HAL ย่อยที่โหลดออกจาก HAL ย่อยอื่นๆ

ความแตกต่างหลักระหว่าง Sensors Multi-HAL 2 กับ Sensors HAL 2 อยู่ที่ ฟังก์ชันเริ่มต้น แทนที่จะให้ FMQ อินเทอร์เฟซ IHalProxyCallback ก็มี 2 วิธี ได้แก่ วิธีโพสต์เหตุการณ์ของเซ็นเซอร์ไปยังเฟรมเวิร์กของเซ็นเซอร์และอีกวิธีในการสร้าง Wake Lock เบื้องหลัง Multi-HAL ของเซ็นเซอร์จะจัดการการโต้ตอบทั้งหมดกับ FMQ เพื่อให้แน่ใจว่าระบบจะส่งเหตุการณ์เซ็นเซอร์ไปยัง HAL ย่อยทั้งหมดได้ตรงเวลา ขอแนะนำเป็นอย่างยิ่งว่า HAL ย่อยให้ใช้เมธอด createScopedWakelock เพื่อมอบสิทธิ์ในการจำกัดเวลาล็อกการปลุกระบบให้กับเซ็นเซอร์ Multi-HAL และรวมการใช้งาน Wake Lock แบบรวมศูนย์เป็น Wake Lock ส่วนกลางรายการเดียวสำหรับทั้งเซ็นเซอร์ Multi-HAL ของ Sensors Multi-HAL ซึ่งช่วยลดการล็อกและปลดล็อกการเรียกใช้

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

การติดตั้งใช้งานซอร์สโค้ดและข้อมูลอ้างอิง

โค้ด Multi-HAL ของเซ็นเซอร์ทั้งหมดมีอยู่ใน hardware/interfaces/sensors/common/default/2.X/multihal/ ต่อไปนี้เป็นคำแนะนำเกี่ยวกับแหล่งข้อมูลบางส่วน

  • HalProxy.h: ออบเจ็กต์ HalProxy สร้างขึ้นโดยเซ็นเซอร์ Multi-HAL และจัดการการส่งข้อมูลจาก HAL ย่อยไปยังเฟรมเวิร์กเซ็นเซอร์
  • HalProxy.cpp: การใช้งาน HalProxy มีตรรกะทั้งหมดที่จําเป็นต่อการรับส่งข้อมูลแบบหลายช่องสัญญาณระหว่าง HAL ย่อยกับเฟรมเวิร์กเซ็นเซอร์
  • SubHal.h: อินเทอร์เฟซ ISensorsSubHal จะกำหนดอินเทอร์เฟซที่ HAL ย่อยต้องปฏิบัติตามเพื่อให้เข้ากันได้กับ HalProxy HAL ย่อยใช้เมธอด initialize เพื่อให้ใช้ออบเจ็กต์ HalProxyCallback สำหรับ postEvents และ createScopedWakelock ได้

    สำหรับการใช้งาน Multi-HAL 2.0 ให้ใช้ SubHal.h เวอร์ชัน 2.0

  • hardware/interfaces/sensors/common/default/2.X/multihal/tests/: การทดสอบหน่วยเหล่านี้จะช่วยยืนยันการติดตั้งใช้งาน HalProxy

  • hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/: ตัวอย่างการใช้งาน HAL ย่อยนี้ใช้เซ็นเซอร์ปลอมเพื่อสร้างข้อมูลปลอม มีประโยชน์สำหรับการทดสอบวิธีที่ HAL ย่อยหลายรายการโต้ตอบกันในอุปกรณ์

การใช้งาน

ส่วนนี้จะอธิบายวิธีใช้ Sensors Multi-HAL ในสถานการณ์ต่อไปนี้

ใช้เซ็นเซอร์ Multi-HAL กับเซ็นเซอร์ AIDL HAL

หากต้องการเปิดใช้ความสามารถแบบหลาย HAL กับ Sensors AIDL HAL ให้นําเข้าโมดูลเลเยอร์ชิม AIDL แบบหลาย HAL ซึ่งมีอยู่ใน hardware/interfaces/sensors/aidl/default/multihal/ โมดูลจะจัดการการแปลงระหว่างประเภทคำจำกัดความ HAL ของเซ็นเซอร์ AIDL กับ HIDL และกำหนด Wrapper รอบๆ อินเทอร์เฟซแบบหลาย HAL ตามที่อธิบายไว้ในการใช้เซ็นเซอร์ Multi-HAL 2.1 เลเยอร์ Shim แบบ Multi-HAL ของ AIDL ใช้งานได้กับอุปกรณ์ที่ใช้ Sensors Multi-HAL 2.1

ชั้นชิมภาพแบบ Multi-HAL ของ AIDL ช่วยให้คุณแสดงอุปกรณ์ติดตามศีรษะและเซ็นเซอร์ IMU แบบแกนจำกัดในเซ็นเซอร์ AIDL HAL ได้ หากต้องการใช้ประเภทเซ็นเซอร์เหล่านี้ที่กำหนดโดยอินเทอร์เฟซ AIDL HAL ให้ตั้งค่าช่อง type ในโครงสร้าง SensorInfo ในการใช้งาน getSensorsList_2_1() ซึ่งการดำเนินการนี้ปลอดภัยเนื่องจากช่องประเภทเซ็นเซอร์ที่รองรับจำนวนเต็มของ HAL เซ็นเซอร์ AIDL และ HIDL จะไม่ทับซ้อนกัน

ใช้ Sensors Multi-HAL 2.1

หากต้องการใช้ Sensors Multi-HAL 2.1 ในอุปกรณ์เครื่องใหม่ ให้ทำตามขั้นตอนต่อไปนี้

  1. ใช้อินเทอร์เฟซ ISensorsSubHal ตามที่อธิบายไว้ใน SubHal.h
  2. ใช้เมธอด sensorsHalGetSubHal_2_1 ใน SubHal.h
  3. เพิ่มเป้าหมาย cc_library_shared เพื่อสร้าง HAL ย่อยที่ติดตั้งใช้งานใหม่ เมื่อเพิ่มเป้าหมาย

    1. ตรวจสอบว่าได้พุชเป้าหมายไปยังตำแหน่งใดตำแหน่งหนึ่งในพาร์ติชันของผู้ให้บริการของอุปกรณ์
    2. ในไฟล์การกำหนดค่าที่อยู่ที่ /vendor/etc/sensors/hals.conf ให้เพิ่มเส้นทางไปยังไลบรารีในบรรทัดใหม่ สร้างไฟล์ hals.conf หากจำเป็น

    สำหรับตัวอย่างรายการ Android.bp สำหรับการสร้างไลบรารีย่อย HAL โปรดดู hardware/interfaces/sensors/common/default/2.X/multihal/tests/Android.bp

  4. นำรายการ android.hardware.sensors ทั้งหมดออกจากไฟล์ manifest.xml ซึ่งมีรายการ HAL ที่รองรับในอุปกรณ์

  5. นำบริการ android.hardware.sensors และ service.rc ทั้งหมดออกจากไฟล์ device.mk รวมทั้งเพิ่ม android.hardware.sensors@2.1-service.multihal และ android.hardware.sensors@2.1-service.multihal.rc ลงใน PRODUCT_PACKAGES

เมื่อเปิดเครื่อง HalProxy จะเริ่มต้น มองหา HAL ย่อยที่ติดตั้งใช้งานใหม่ และเริ่มต้น HAL ย่อยดังกล่าวโดยเรียกใช้ sensorsHalGetSubHal_2_1

พอร์ตจากเซ็นเซอร์ Multi-HAL 2.0 ไปยัง Multi-HAL 2.1

หากต้องการย้ายจาก Multi-HAL 2.0 ไปยัง Multi-HAL 2.1 ให้ใช้อินเทอร์เฟซ SubHal และคอมไพล์ HAL ย่อยอีกครั้ง

ความแตกต่างระหว่างอินเทอร์เฟซ SubHal 2.0 และ 2.1 มีดังนี้

  • IHalProxyCallback ใช้ประเภทที่สร้างขึ้นในข้อกําหนด ISensors.hal เวอร์ชัน 2.1
  • ฟังก์ชัน initialize() จะส่ง IHalProxyCallback ใหม่แทนที่จะเป็น SubHal จากอินเทอร์เฟซ 2.0
  • HAL ย่อยต้องใช้ getSensorsList_2_1 และ injectSensorData_2_1 แทน getSensorsList และ injectSensorData เนื่องจากเมธอดเหล่านี้ใช้ประเภทใหม่ที่เพิ่มเข้ามาในข้อกำหนด ISensors.hal เวอร์ชัน 2.1
  • HAL ย่อยจะต้องแสดง sensorsHalGetSubHal_2_1 แทนที่จะเป็น sensorsHalGetSubHal สำหรับ Multi-HAL เพื่อให้ถือว่าเป็น HAL ย่อยในเวอร์ชัน 2.1

พอร์ตจาก Sensors HAL 2.0

เมื่ออัปเกรดเป็น Sensors Multi-HAL 2.0 จาก Sensors HAL 2.0 โปรดตรวจสอบว่าการติดตั้งใช้งาน HAL เป็นไปตามข้อกำหนดต่อไปนี้

เริ่มต้น HAL

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

โพสต์เหตุการณ์เซ็นเซอร์ไปจนถึงการใช้งาน Multi-HAL

แทนที่จะโพสต์เหตุการณ์เซ็นเซอร์ผ่าน FMQ นั้น HAL ย่อยจะต้องเขียนเหตุการณ์เซ็นเซอร์ไปยัง IHalProxyCallback เมื่อมีเหตุการณ์เซ็นเซอร์พร้อมใช้งาน

เหตุการณ์ WAKE_UP

ใน Sensors HAL 2.0 HAL จะจัดการ Wake Lock สำหรับการติดตั้งใช้งานได้ ในเซ็นเซอร์ Multi-HAL 2.0 นั้น HAL ย่อยจะช่วยให้การใช้งาน Multi-HAL จัดการ Wake Lock ได้ และอาจขอให้มี Wake Lock ด้วยการเรียกใช้ createScopedWakelock ต้องรับ Wake Lock ที่กำหนดขอบเขตที่ล็อกและส่งไปยัง postEvents เมื่อโพสต์เหตุการณ์การปลุกระบบไปยังการใช้งาน Multi-HAL

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

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

พอร์ตจาก Sensors HAL 1.0

เมื่ออัปเกรดเป็น Sensors Multi-HAL 2.0 จาก Sensors HAL 1.0 โปรดตรวจสอบว่าการติดตั้งใช้งาน HAL เป็นไปตามข้อกำหนดต่อไปนี้

เริ่มต้น HAL

ต้องรองรับฟังก์ชัน initialize() เพื่อตั้งค่าการติดต่อกลับระหว่าง HAL ย่อยกับการใช้งาน Multi-HAL

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

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

โพสต์เหตุการณ์เซ็นเซอร์ไปยังการติดตั้งใช้งาน Multi-HAL

ใน Sensors HAL 2.0 แทนที่จะรอให้เรียก poll() มาใช้ HAL ย่อยต้องเขียนเหตุการณ์เซ็นเซอร์ไปยัง IHalProxyCallback อย่างสม่ำเสมอเมื่อมีเหตุการณ์เซ็นเซอร์

เหตุการณ์ WAKE_UP

ใน Sensors HAL 1.0 HAL จะจัดการ Wake Lock สำหรับการติดตั้งใช้งานได้ ใน เซ็นเซอร์ Multi-HAL 2.0 นั้น HAL ย่อยช่วยให้การใช้งาน Multi-HAL สามารถจัดการ Wake Lock และสามารถขอรับ Wake Lock ได้โดยเรียกใช้ createScopedWakelock คุณต้องรับการล็อกการตื่นที่มีขอบเขตที่ล็อกไว้และส่งไปยัง postEvents เมื่อโพสต์เหตุการณ์การตื่นไปยังการใช้งาน Multi-HAL

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

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

พอร์ตจากเซ็นเซอร์ Multi-HAL 1.0

หากต้องการโอนการติดตั้งใช้งานที่มีอยู่จาก Sensors Multi-HAL 1.0 ให้ทำตามขั้นตอนต่อไปนี้

  1. ตรวจสอบว่าการกำหนดค่า HAL ของเซ็นเซอร์อยู่ในตำแหน่ง /vendor/etc/sensors/hals.conf ซึ่งอาจเกี่ยวข้องกับการย้ายไฟล์ที่อยู่ใน/system/etc/sensors/hals.conf
  2. นำการอ้างอิงถึง hardware/hardware.h และ hardware/sensors.h ออกเนื่องจาก HAL 2.0 ไม่รองรับ
  3. พอร์ต HAL ย่อยตามที่อธิบายไว้ในการพอร์ตจาก Sensors Hal 1.0
  4. ตั้งค่า Sensors Multi-HAL 2.0 เป็น HAL ที่กำหนดโดยทำตามขั้นตอนที่ 3 และ 4 ในส่วนการใช้งาน Sensors Mutli-HAL 2.0

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

เรียกใช้ VTS

เมื่อผสานรวม HAL ย่อยอย่างน้อย 1 รายการกับ Sensors Multi-Hal 2.1 แล้ว ให้ใช้ ชุดทดสอบของผู้ให้บริการ (VTS) เพื่อให้แน่ใจว่าการติดตั้งใช้งาน HAL ย่อยเป็นไปตามข้อกำหนดทั้งหมดที่กำหนดโดยอินเทอร์เฟซ HAL ของเซ็นเซอร์

หากต้องการเรียกใช้เฉพาะการทดสอบ VTS เซ็นเซอร์เมื่อตั้งค่า VTS ในเครื่องโฮสต์ ให้เรียกใช้คำสั่งต่อไปนี้

vts-tradefed run commandAndExit vts \
    --skip-all-system-status-check \
    --primary-abi-only \
    --skip-preconditions \
    --module VtsHalSensorsV2_0Target && \
  vts-tradefed run commandAndExit vts \
    --skip-all-system-status-check \
    --primary-abi-only \
    --skip-preconditions \
    --module VtsHalSensorsV2_1Target

หากคุณใช้เลเยอร์ชิม Multi-HAL ของ AIDL ให้เรียกใช้ VtsAidlHalSensorsTargetTest

vts-tradefed run commandAndExit vts \
    --skip-all-system-status-check \
    --primary-abi-only \
    --skip-preconditions \
    --module VtsAidlHalSensorsTargetTest

เรียกใช้การทดสอบหน่วย

การทดสอบ 1 หน่วยในการทดสอบ HalProxy_test.cpp HalProxy โดยใช้ HAL ย่อยปลอมซึ่งสร้างขึ้นในการทดสอบ 1 หน่วยและไม่ได้โหลดแบบไดนามิก เมื่อสร้าง HAL ย่อยใหม่ การทดสอบเหล่านี้ควรใช้เป็นแนวทางในการเพิ่มการทดสอบหน่วยที่จะยืนยันว่ามีการใช้ HAL ย่อยใหม่อย่างถูกต้อง

หากต้องการเรียกใช้การทดสอบ ให้เรียกใช้คำสั่งต่อไปนี้

cd $ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/tests
atest

ทดสอบกับ HAL ย่อยจำลอง

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

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

มี HAL ปลอม 2 รายการอยู่ที่ hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/

หากต้องการสร้างและพุช HAL ย่อยจำลองไปยังอุปกรณ์ ให้ทำตามขั้นตอนต่อไปนี้

  1. เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างและพุช HAL ย่อยที่แตกต่างกันทั้ง 3 รายการไปยังอุปกรณ์

    $ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/tests/
    mma
    adb push \
      $ANDROID_BUILD_TOP/out/target/product/<device>/symbols/vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config1.so \
      /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config1.so
    adb push \
      $ANDROID_BUILD_TOP/out/target/product/<device>/symbols/vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config2.so \
      /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config2.so
    adb push \
      $ANDROID_BUILD_TOP/out/target/product/<device>/symbols/vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config3.so \
      /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config3.so
  2. อัปเดตการกำหนดค่า HAL ของเซ็นเซอร์ที่ /vendor/etc/sensors/hals.conf ด้วยเส้นทางสำหรับ HAL ย่อยที่ปลอมแปลง

    /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config1.so
    /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config2.so
    /vendor/lib64/android.hardware.sensors@2.X-fakesubhal-config3.so
    
  3. รีสตาร์ท HalProxy และโหลด HAL ย่อยใหม่ที่อยู่ในการกําหนดค่า

    adb shell stop
    adb shell start

การแก้ไขข้อบกพร่อง

นักพัฒนาซอฟต์แวร์จะแก้ไขข้อบกพร่องของเฟรมเวิร์กได้โดยใช้คําสั่ง lshal หากต้องการขอผลลัพธ์การแก้ไขข้อบกพร่องของ Sensors HAL ให้เรียกใช้คำสั่งต่อไปนี้

adb root
adb shell lshal debug android.hardware.sensors@2.1::ISensors/default

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

Internal values:
  Threads are running: true
  Wakelock timeout start time: 200 ms ago
  Wakelock timeout reset time: 73208 ms ago
  Wakelock ref count: 0
  # of events on pending write queue: 0
  # of non-dynamic sensors across all subhals: 8
  # of dynamic sensors across all subhals: 0
SubHals (2):
  Name: FakeSubHal-OnChange
  Debug dump:
Available sensors:
Name: Ambient Temp Sensor
Min delay: 40000
Flags: 2
Name: Light Sensor
Min delay: 200000
Flags: 2
Name: Proximity Sensor
Min delay: 200000
Flags: 3
Name: Relative Humidity Sensor
Min delay: 40000
Flags: 2
  Name: FakeSubHal-OnChange
  Debug dump:
Available sensors:
Name: Ambient Temp Sensor
Min delay: 40000
Flags: 2
Name: Light Sensor
Min delay: 200000
Flags: 2
Name: Proximity Sensor
Min delay: 200000
Flags: 3
Name: Relative Humidity Sensor
Min delay: 40000
Flags: 2

หากตัวเลขที่ระบุสำหรับ # of events on pending write queue เป็นเลขขนาดใหญ่ (1,000 หรือมากกว่า) แสดงว่ามีเหตุการณ์จำนวนมากรอดำเนินการเขียนลงในเฟรมเวิร์กของเซ็นเซอร์ ซึ่งแสดงว่าบริการเซ็นเซอร์ถูกล็อกหรือขัดข้องและไม่ได้ประมวลผลเหตุการณ์เซ็นเซอร์ หรือมีการโพสต์เหตุการณ์เซ็นเซอร์จำนวนมากจาก HAL ย่อยเมื่อเร็วๆ นี้

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

ระบบจะส่งตัวระบุไฟล์ที่ส่งไปยังเมธอดแก้ไขข้อบกพร่องของ HalProxy ไปยัง HAL ย่อยแต่ละรายการ ดังนั้นนักพัฒนาซอฟต์แวร์จึงต้องใช้เมธอดแก้ไขข้อบกพร่องเป็นส่วนหนึ่งของอินเทอร์เฟซ ISensorsSubHal