Sensors Multi-HAL

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

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

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

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

Sensors 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 แทนที่จะเป็น FMQ 2 รายการและ ISensorsCallback
  • HAL ย่อยต้องใช้ฟังก์ชันการแก้ไขข้อบกพร่องเพื่อให้ข้อมูลการแก้ไขข้อบกพร่องในรายงานข้อบกพร่อง
  • HAL ย่อยต้องใช้ฟังก์ชันชื่อเพื่อให้ HAL ย่อยที่โหลดได้ แตกต่างจาก HAL ย่อยอื่นๆ

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

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

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

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

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

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

  • 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 ในสถานการณ์ต่อไปนี้

ใช้ Sensors Multi-HAL กับ Sensors AIDL HAL

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

เลเยอร์ชิม HAL หลายรายการของ AIDL ช่วยให้คุณแสดงประเภทเซ็นเซอร์ IMU ของแทร็กเกอร์ศีรษะและเซ็นเซอร์แกนจำกัดใน Sensors 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

พอร์ตจาก Sensors 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 เนื่องจากวิธีการเหล่านี้ใช้ ประเภทใหม่ที่เพิ่มเข้ามาในเวอร์ชัน 2.1 ของข้อกำหนด ISensors.hal
  • HAL ย่อยต้องแสดง sensorsHalGetSubHal_2_1 แทน sensorsHalGetSubHal สำหรับ Multi-HAL จะถือเป็นเวอร์ชัน 2.1 HAL ย่อย

พอร์ตจาก 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() ส่ง Callback เดียวที่ต้องใช้เพื่อโพสต์ เหตุการณ์เซ็นเซอร์ รับ Wake Lock และแจ้งเตือนเกี่ยวกับการเชื่อมต่อเซ็นเซอร์แบบไดนามิก และ และการยกเลิกการเชื่อมต่อ

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

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

กิจกรรม WAKE_UP

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

พอร์ตจาก Sensors HAL 1.0

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

เริ่มต้น HAL

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

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

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

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

ในเซ็นเซอร์ HAL 2.0 โดยไม่ต้องรอให้มีการเรียก poll() กลับเรียก HAL ย่อย ต้องเขียนเหตุการณ์เซ็นเซอร์โดยไม่ต้องขอ IHalProxyCallback เมื่อใดก็ตามที่มีเหตุการณ์เซ็นเซอร์พร้อมใช้งาน

กิจกรรม WAKE_UP

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

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

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

พอร์ตจาก Sensors 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 Multi-HAL 2.0

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

เรียกใช้ VTS

เมื่อคุณผสานรวม HAL ย่อยอย่างน้อย 1 รายการกับเซ็นเซอร์หลายเฮล 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

หากกำลังใช้เลเยอร์ shim ของ AIDL Multi-HAL ให้เรียกใช้ VtsAidlHalSensorsTargetTest

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

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

การทดสอบหน่วยใน HalProxy_test.cpp ทดสอบ HalProxy โดยใช้ HAL ย่อยจำลองซึ่งสร้างขึ้นในการทดสอบหน่วยและไม่ได้โหลดแบบไดนามิก เมื่อสร้าง 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. เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างและพุชปลอม 3 แบบที่แตกต่างกัน HAL ย่อยของอุปกรณ์:

    $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 คือ จำนวนมาก (1000 หรือมากกว่า) แสดงว่ามีเหตุการณ์มากมายที่รอการเขียนไปยังเซ็นเซอร์ นี่เป็นการบ่งชี้ว่าบริการเซ็นเซอร์ติดตายหรือขัดข้อง และ ไม่ประมวลผลเหตุการณ์เซ็นเซอร์ หรือเหตุการณ์ที่เซ็นเซอร์จำนวนมาก เพิ่งโพสต์จาก HAL ย่อย

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

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