Sensors Multi-HAL เป็นเฟรมเวิร์กที่ช่วยให้ Sensors HAL ทำงานควบคู่ไปกับ Sensors HAL อื่นๆ ได้ โดยจะโหลด Sensors Sub-HAL ที่จัดเก็บเป็นไลบรารีแบบไดนามิกในพาร์ติชันของผู้ให้บริการแบบไดนามิก และมอบออบเจ็กต์การเรียกกลับที่จัดการการโพสต์เหตุการณ์ รวมถึงการรับและการปล่อย Wake Lock ให้ Sensors Sub-HAL คือ Sensors HAL ที่สร้างขึ้นในออบเจ็กต์ที่แชร์ในพาร์ติชันของผู้ให้บริการ และเฟรมเวิร์ก Multi-HAL ใช้ Sub-HAL เหล่านี้ไม่ได้ขึ้นอยู่กับ Sub-HAL อื่นๆ หรือโค้ด Multi-HAL ที่มีฟังก์ชันหลักสำหรับกระบวนการ
Sensors Multi-HAL 2.1 ซึ่งพร้อมใช้งานในอุปกรณ์ที่ใช้ Android 11 ขึ้นไป เป็นเวอร์ชันที่ปรับปรุงจาก Sensors Multi-HAL 2.0 ที่รองรับการโหลด Sub-HAL ซึ่งแสดงประเภทเซ็นเซอร์ มุมบานพับ ได้ Sub-HAL ต้องใช้ Sub-HAL API ที่กำหนดไว้ใน ส่วนหัวของ SubHal 2.1 เพื่อรองรับเซ็นเซอร์ประเภทนี้
สำหรับอุปกรณ์ที่ใช้ Android 13 ขึ้นไปซึ่งใช้ Sensors AIDL HAL คุณสามารถใช้ เลเยอร์ Shim ของ Multi-HAL เพื่อเปิดใช้ความสามารถของ Multi-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 โต้ตอบกับ Sub-HAL ได้
อินเทอร์เฟซ ISensorsSubHal แตกต่างจากอินเทอร์เฟซ
2.1/ISensors.hal
(หรือ
2.0/ISensors.hal)
ในลักษณะต่อไปนี้
- เมธอด Initialize จะส่งคลาส
IHalProxyCallbackแทน FMQ 2 รายการและISensorsCallback - Sub-HAL ต้องใช้ฟังก์ชันการแก้ไขข้อบกพร่องเพื่อระบุข้อมูลการแก้ไขข้อบกพร่องในรายงานข้อบกพร่อง
- Sub-HAL ต้องใช้ฟังก์ชันชื่อเพื่อให้แยก Sub-HAL ที่โหลดแล้วออกจาก Sub-HAL อื่นๆ ได้
ความแตกต่างหลักระหว่าง Sensors Multi-HAL 2 กับ Sensors HAL 2 อยู่ที่ฟังก์ชัน Initialize อินเทอร์เฟซ IHalProxyCallback มี 2 เมธอด ได้แก่ เมธอดสำหรับโพสต์เหตุการณ์เซ็นเซอร์ไปยังเฟรมเวิร์กเซ็นเซอร์ และเมธอดสำหรับสร้าง Wake Lock แทนการระบุ FMQ เบื้องหลัง Sensors Multi-HAL จะจัดการการโต้ตอบทั้งหมดกับ FMQ เพื่อให้มั่นใจว่าเหตุการณ์เซ็นเซอร์จะส่งถึง Sub-HAL ทั้งหมดได้ทันเวลา เราขอแนะนำอย่างยิ่งให้ Sub-HAL ใช้เมธอด createScopedWakelock เพื่อมอบหมายภาระในการหมดเวลาของ Wake Lock ให้ Sensors Multi-HAL และรวมการใช้ Wake Lock ไว้ที่ Wake Lock ทั่วไปรายการเดียวสำหรับ Sensors Multi-HAL ทั้งหมด ซึ่งจะช่วยลดการเรียกใช้การล็อกและการปลดล็อก
นอกจากนี้ Sensors Multi-HAL 2 ยังมีฟีเจอร์ความปลอดภัยในตัวด้วย โดยจะจัดการในกรณีที่ FMQ ของเซ็นเซอร์เต็มหรือในกรณีที่เฟรมเวิร์กเซ็นเซอร์ Android รีสตาร์ทและต้องรีเซ็ตสถานะเซ็นเซอร์ นอกจากนี้ เมื่อมีการโพสต์เหตุการณ์ไปยังคลาส HalProxy แต่เฟรมเวิร์กเซ็นเซอร์ไม่สามารถยอมรับเหตุการณ์ได้ทันที Sensors Multi-HAL จะย้ายเหตุการณ์ไปยังเธรดเบื้องหลังเพื่อให้การทำงานใน Sub-HAL ทั้งหมดดำเนินต่อไปได้ขณะรอให้มีการโพสต์เหตุการณ์
ซอร์สโค้ดและการใช้งานการอ้างอิง
โค้ด Sensors Multi-HAL ทั้งหมดอยู่ใน
hardware/interfaces/sensors/common/default/2.X/multihal/
ต่อไปนี้คือลิงก์ไปยังแหล่งข้อมูลบางส่วน
HalProxy.h: ออบเจ็กต์HalProxyสร้างขึ้นโดย Sensors Multi-HAL และจัดการ การส่งข้อมูลจาก Sub-HAL ไปยังเฟรมเวิร์กเซ็นเซอร์HalProxy.cpp: การใช้งานHalProxyมีตรรกะทั้งหมดที่จำเป็นในการ มัลติเพล็กซ์การสื่อสารระหว่าง Sub-HAL กับเฟรมเวิร์กเซ็นเซอร์SubHal.h: อินเทอร์เฟซISensorsSubHalกำหนดอินเทอร์เฟซที่ Sub-HAL ต้อง ปฏิบัติตามเพื่อให้เข้ากันได้กับHalProxySub-HAL ใช้เมธอด Initialize เพื่อให้ใช้ออบเจ็กต์HalProxyCallbackสำหรับpostEventsและcreateScopedWakelockได้สำหรับการใช้งาน Multi-HAL 2.0 ให้ใช้เวอร์ชัน 2.0 ของ
SubHal.hhardware/interfaces/sensors/common/default/2.X/multihal/tests/: Unit Test เหล่านี้จะตรวจสอบการใช้งานHalProxyhardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/: การใช้งาน Sub-HAL ตัวอย่างนี้ใช้เซ็นเซอร์จำลองเพื่อสร้างข้อมูลจำลอง ซึ่งมีประโยชน์สำหรับการทดสอบวิธีที่ Sub-HAL หลายรายการโต้ตอบกันในอุปกรณ์
การใช้งาน
ส่วนนี้อธิบายวิธีใช้งาน Sensors Multi-HAL ในสถานการณ์ต่อไปนี้
- การใช้ Sensors Multi-HAL กับ Sensors AIDL HAL
- การใช้งาน Sensors Multi-HAL 2.1
- การย้ายข้อมูลจาก Sensors Multi-HAL 2.0 ไปเป็น Multi-HAL 2.1
- การย้ายข้อมูลจาก Sensors HAL 2.0
- การย้ายข้อมูลจาก Sensors HAL 1.0
- การย้ายข้อมูลจาก Sensors Multi-HAL 1.0
ใช้ Sensors Multi-HAL กับ Sensors AIDL HAL
หากต้องการเปิดใช้ความสามารถของ Multi-HAL กับ Sensors AIDL HAL ให้นำเข้าโมดูลเลเยอร์ Shim ของ AIDL Multi-HAL ซึ่งอยู่ใน hardware/interfaces/sensors/aidl/default/multihal/ โมดูลจะจัดการการแปลงระหว่างประเภทคำจำกัดความของ Sensors HAL ของ AIDL และ HIDL และกำหนด Wrapper รอบอินเทอร์เฟซ Multi-HAL ที่อธิบายไว้ใน การใช้งาน Sensors Multi-HAL 2.1 เลเยอร์ Shim ของ AIDL Multi-HAL เข้ากันได้กับอุปกรณ์ที่ใช้งาน Sensors Multi-HAL 2.1
เลเยอร์ Shim ของ AIDL Multi-HAL ช่วยให้คุณแสดงประเภทเซ็นเซอร์ตัวติดตามศีรษะและ IMU แบบจำกัดแกนใน Sensors AIDL HAL ได้ หากต้องการใช้เซ็นเซอร์ประเภทเหล่านี้ที่กำหนดโดยอินเทอร์เฟซ AIDL HAL ให้ตั้งค่าฟิลด์ type ใน Struct SensorInfo ในการใช้งาน getSensorsList_2_1() การดำเนินการนี้ปลอดภัยเนื่องจากฟิลด์ประเภทเซ็นเซอร์ที่ใช้จำนวนเต็มของ Sensors HAL ของ AIDL และ HIDL ไม่ทับซ้อนกัน
ใช้งาน Sensors Multi-HAL 2.1
หากต้องการใช้งาน Sensors Multi-HAL 2.1 ในอุปกรณ์ใหม่ ให้ทำตามขั้นตอนต่อไปนี้
- ใช้งานอินเทอร์เฟฟ
ISensorsSubHalตามที่อธิบายไว้ในSubHal.h - ใช้งานเมธอด
sensorsHalGetSubHal_2_1ในSubHal.h เพิ่มเป้าหมาย
cc_library_sharedเพื่อสร้าง Sub-HAL ที่ใช้งานใหม่ เมื่อเพิ่มเป้าหมาย ให้ทำดังนี้- ตรวจสอบว่าได้พุชเป้าหมายไปยังตำแหน่งใดตำแหน่งหนึ่งในพาร์ติชันของผู้ให้บริการของอุปกรณ์
- ในไฟล์การกำหนดค่าที่อยู่ใน
/vendor/etc/sensors/hals.confให้เพิ่มเส้นทางไปยังไลบรารีในบรรทัดใหม่ สร้างไฟล์hals.confหากจำเป็น
ดูรายการ
Android.bpตัวอย่างสำหรับการสร้างไลบรารี Sub-HAL ได้ที่hardware/interfaces/sensors/common/default/2.X/multihal/tests/Android.bpนำรายการ
android.hardware.sensorsทั้งหมดออกจากไฟล์manifest.xmlซึ่งมีรายการ HAL ที่รองรับในอุปกรณ์นำไฟล์บริการ
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 จะเริ่มต้นทำงาน ค้นหา Sub-HAL ที่ใช้งานใหม่ และ
เริ่มต้น Sub-HAL โดยการเรียกใช้
sensorsHalGetSubHal_2_1
ย้ายข้อมูลจาก Sensors Multi-HAL 2.0 ไปเป็น Multi-HAL 2.1
หากต้องการย้ายข้อมูลจาก Multi-HAL 2.0 ไปเป็น Multi-HAL 2.1 ให้ใช้งานอินเทอร์เฟซ
SubHal
และคอมไพล์ Sub-HAL อีกครั้ง
ความแตกต่างระหว่างอินเทอร์เฟซ SubHal เวอร์ชัน 2.0 กับ 2.1 มีดังนี้
IHalProxyCallbackใช้ประเภทที่สร้างขึ้นในข้อกำหนดISensors.halเวอร์ชัน 2.1- ฟังก์ชัน
initialize()จะส่งใหม่IHalProxyCallbackแทนฟังก์ชันจากอินเทอร์เฟซSubHalเวอร์ชัน 2.0 - 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
ย้ายข้อมูลจาก Sensors HAL 2.0
เมื่ออัปเกรดเป็น Sensors Multi-HAL 2.0 จาก Sensors HAL 2.0 ให้ตรวจสอบว่าการใช้งาน HAL เป็นไปตามข้อกำหนดต่อไปนี้
เริ่มต้น HAL
Sensors HAL 2.0 มีฟังก์ชัน Initialize ที่ช่วยให้บริการเซ็นเซอร์ส่ง FMQ และการเรียกกลับเซ็นเซอร์แบบไดนามิกได้ ใน Sensors Multi-HAL 2.0 ฟังก์ชัน initialize() จะส่งการเรียกกลับรายการเดียวที่ต้องใช้เพื่อโพสต์เหตุการณ์เซ็นเซอร์ รับ Wake Lock และแจ้งเตือนการเชื่อมต่อและการยกเลิกการเชื่อมต่อเซ็นเซอร์แบบไดนามิก
โพสต์เหตุการณ์เซ็นเซอร์ไปยังการใช้งาน Multi-HAL
Sub-HAL ต้องเขียนเหตุการณ์เซ็นเซอร์
ไปยัง
IHalProxyCallback
เมื่อมีเหตุการณ์เซ็นเซอร์ แทนที่จะโพสต์เหตุการณ์เซ็นเซอร์ผ่าน FMQ
เหตุการณ์ WAKE_UP
ใน Sensors HAL 2.0 HAL สามารถจัดการ Wake Lock สำหรับการใช้งานได้ ใน
Sensors Multi-HAL 2.0 Sub-HAL จะอนุญาตให้การใช้งาน Multi-HAL
จัดการ Wake Lock และขอให้รับ Wake Lock ได้โดยการเรียกใช้
createScopedWakelock
ต้องรับ Wake Lock แบบขอบเขตที่ล็อกไว้และส่งไปยัง postEvents เมื่อโพสต์เหตุการณ์ Wake Up ไปยังการใช้งาน 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() เพื่อสร้างการเรียกกลับระหว่าง Sub-HAL กับการใช้งาน Multi-HAL
แสดงเซ็นเซอร์ที่พร้อมใช้งาน
ใน Sensors Multi-HAL 2.0 ฟังก์ชัน getSensorsList() ต้องแสดงผลค่าเดียวกันระหว่างการบูตอุปกรณ์ครั้งเดียว แม้ว่า Sensors 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 เมื่อโพสต์เหตุการณ์ Wake Up ไปยังการใช้งาน Multi-HAL
เซ็นเซอร์แบบไดนามิก
ใน Sensors HAL 1.0 ระบบจะแสดงผลเซ็นเซอร์แบบไดนามิกผ่านฟังก์ชัน poll()
Sensors Multi-HAL 2.0 กำหนดให้ต้องเรียกใช้ onDynamicSensorsConnected และ
onDynamicSensorsDisconnected ใน
IHalProxyCallback
ทุกครั้งที่การเชื่อมต่อเซ็นเซอร์แบบไดนามิกมีการเปลี่ยนแปลง การเรียกกลับเหล่านี้พร้อมใช้งานเป็นส่วนหนึ่งของตัวชี้ IHalProxyCallback ที่ระบุผ่านฟังก์ชัน initialize()
ย้ายข้อมูลจาก Sensors Multi-HAL 1.0
หากต้องการย้ายข้อมูลการใช้งานที่มีอยู่จาก Sensors Multi-HAL 1.0, ให้ทำตามขั้นตอนต่อไปนี้
- ตรวจสอบว่าการกำหนดค่า Sensors HAL อยู่ที่
/vendor/etc/sensors/hals.confซึ่งอาจเกี่ยวข้องกับการย้ายไฟล์ที่อยู่ใน/system/etc/sensors/hals.conf - นำการอ้างอิงถึง
hardware/hardware.hและhardware/sensors.hออก เนื่องจากระบบไม่รองรับการอ้างอิงเหล่านี้สำหรับ HAL 2.0 - ย้ายข้อมูล Sub-HAL ตามที่อธิบายไว้ใน การย้ายข้อมูลจาก Sensors HAL 1.0
- ตั้งค่า Sensors Multi-HAL 2.0 เป็น HAL ที่กำหนดโดยทำตามขั้นตอนที่ 3 และ 4 ในส่วนการใช้งาน Sensors Multi-HAL 2.0
การตรวจสอบ
เรียกใช้ VTS
เมื่อผสานรวม Sub-HAL อย่างน้อย 1 รายการกับ Sensors Multi-HAL 2.1, ให้ใช้ Vendor Test Suite (VTS) เพื่อตรวจสอบว่าการใช้งาน Sub-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
หากใช้เลเยอร์ Shim ของ AIDL Multi-HAL ให้เรียกใช้ VtsAidlHalSensorsTargetTest
vts-tradefed run commandAndExit vts \
--skip-all-system-status-check \
--primary-abi-only \
--skip-preconditions \
--module VtsAidlHalSensorsTargetTest
เรียกใช้ Unit Test
Unit Test ใน HalProxy_test.cpp จะทดสอบ HalProxy โดยใช้ Sub-HAL จำลองที่
สร้างขึ้นใน Unit Test และไม่ได้โหลดแบบไดนามิก เมื่อสร้าง Sub-HAL ใหม่ การทดสอบเหล่านี้ควรเป็นแนวทางในการเพิ่ม Unit Test ที่จะตรวจสอบว่ามีการใช้งาน Sub-HAL ใหม่อย่างถูกต้อง
หากต้องการเรียกใช้การทดสอบ ให้เรียกใช้คำสั่งต่อไปนี้
cd $ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/testsatest
ทดสอบด้วย Sub-HAL จำลอง
Sub-HAL จำลองเป็นการใช้งานอินเทอร์เฟซ ISensorsSubHal แบบจำลอง
Sub-HAL จะแสดงรายการเซ็นเซอร์ที่แตกต่างกัน เมื่อเปิดใช้งานเซ็นเซอร์ เซ็นเซอร์จะโพสต์เหตุการณ์เซ็นเซอร์ที่สร้างขึ้นโดยอัตโนมัติไปยัง HalProxy เป็นระยะตามช่วงเวลาที่ระบุไว้ในคำขอเซ็นเซอร์ที่กำหนด
คุณสามารถใช้ Sub-HAL จำลองเพื่อทดสอบวิธีที่โค้ด Multi-HAL แบบเต็มทำงานร่วมกับ Sub-HAL อื่นๆ ที่โหลดลงในระบบ และเพื่อทดสอบแง่มุมต่างๆ ของโค้ด Sensors Multi-HAL
Sub-HAL จำลอง 2 รายการพร้อมใช้งานที่
hardware/interfaces/sensors/common/default/2.X/multihal/tests/fake_subhal/
หากต้องการสร้างและพุช Sub-HAL จำลองไปยังอุปกรณ์ ให้ทำตามขั้นตอนต่อไปนี้
เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างและพุช Sub-HAL จำลอง 3 รายการที่แตกต่างกันไปยังอุปกรณ์
$ANDROID_BUILD_TOP/hardware/interfaces/sensors/common/default/2.X/multihal/tests/mmaadb 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.soadb 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.soadb 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อัปเดตการกำหนดค่า Sensors HAL ที่
/vendor/etc/sensors/hals.confด้วยเส้นทางสำหรับ Sub-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รีสตาร์ท
HalProxyและโหลด Sub-HAL ใหม่ที่ระบุไว้ในการกำหนดค่าadb shell stopadb shell start
การแก้ไขข้อบกพร่อง
นักพัฒนาแอปสามารถแก้ไขข้อบกพร่องของเฟรมเวิร์กได้โดยใช้คำสั่ง lshal หากต้องการขอเอาต์พุตการแก้ไขข้อบกพร่องของ Sensors HAL ให้เรียกใช้คำสั่งต่อไปนี้
adb rootadb shell lshal debug android.hardware.sensors@2.1::ISensors/default
จากนั้นระบบจะแสดงข้อมูลเกี่ยวกับสถานะปัจจุบันของ HalProxy และ Sub-HAL ในเทอร์มินัล ตัวอย่างเอาต์พุตจากคำสั่งสำหรับออบเจ็กต์ HalProxy และ Sub-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 ขึ้นไป) แสดงว่ามีเหตุการณ์จำนวนมากที่รอเขียนไปยังเฟรมเวิร์กเซ็นเซอร์ ซึ่งบ่งชี้ว่าบริการเซ็นเซอร์ติดขัดหรือขัดข้องและไม่ได้ประมวลผลเหตุการณ์เซ็นเซอร์ หรือมีการโพสต์เหตุการณ์เซ็นเซอร์จำนวนมากจาก Sub-HAL เมื่อเร็วๆ นี้
หากจำนวนการอ้างอิง Wake Lock มากกว่า 0 แสดงว่า HalProxy ได้รับ Wake Lock ค่านี้ควรมากกว่า 0 ก็ต่อเมื่อมีการเก็บ ScopedWakelock ไว้โดยเจตนา หรือมีการส่งเหตุการณ์การปลุกระบบไปยัง HalProxy และเฟรมเวิร์กเซ็นเซอร์ยังไม่ได้ประมวลผล
ระบบจะส่งตัวบอกไฟล์ที่ส่งไปยังเมธอดแก้ไขข้อบกพร่องของ HalProxy ไปยัง Sub-HAL แต่ละรายการ ดังนั้นนักพัฒนาแอปจึงต้องใช้เมธอดแก้ไขข้อบกพร่องเป็นส่วนหนึ่งของอินเทอร์เฟซ ISensorsSubHal