Sensors Multi-HAL

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

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

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

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

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

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

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

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

  • HalProxy.h: ออบเจ็กต์ HalProxy จะได้รับการสร้างอินสแตนซ์โดย Multi-HAL ของเซ็นเซอร์และจัดการ การส่งข้อมูลจาก Sub-HAL ไปยังเฟรมเวิร์กของเซ็นเซอร์
  • HalProxy.cpp: การใช้งาน HalProxy มีตรรกะทั้งหมดที่จำเป็นต่อการ มัลติเพล็กซ์การสื่อสารระหว่าง HAL ย่อยกับเฟรมเวิร์กเซ็นเซอร์
  • SubHal.h: อินเทอร์เฟซ ISensorsSubHal กำหนดอินเทอร์เฟซที่ HAL ย่อยต้อง ปฏิบัติตามเพื่อให้เข้ากันได้กับ HalProxy HAL ย่อยจะใช้เมธอด initialize เพื่อให้ใช้ออบเจ็กต์ 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 ย่อยหลายรายการโต้ตอบกันในอุปกรณ์

การใช้งาน

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

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

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

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

ใช้ 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 ย่อยที่เพิ่งติดตั้งใช้งาน และ เริ่มต้นโดยการเรียกใช้ sensorsHalGetSubHal_2_1

พอร์ตจาก Sensors Multi-HAL 2.0 เป็น Multi-HAL 2.1

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

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

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

พอร์ตจาก HAL 2.0 ของเซ็นเซอร์

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

เริ่มต้น HAL

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

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

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

เหตุการณ์ 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

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

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

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

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

เหตุการณ์ WAKE_UP

ใน Sensors HAL 1.0 นั้น HAL สามารถจัดการ Wake Lock สำหรับการใช้งานได้ ใน Sensors Multi-HAL 2.0 นั้น Sub-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 รายการกับ Sensors Multi-Hal 2.1 แล้ว ให้ใช้ Vendor Test Suite (VTS) เพื่อให้แน่ใจว่าการใช้งาน HAL ย่อย เป็นไปตามข้อกำหนดทั้งหมดที่กำหนดโดยอินเทอร์เฟซ Sensors 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

หากคุณเรียกใช้เลเยอร์ AIDL Multi-HAL Shim ให้เรียกใช้ 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 ย่อยปลอม

Sub-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. เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างและพุช fake sub-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 หากต้องการขอ เอาต์พุตการแก้ไขข้อบกพร่องของ 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