Sensors Multi-HAL

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 ต้อง ปฏิบัติตามเพื่อให้เข้ากันได้กับ HalProxy Sub-HAL ใช้เมธอด Initialize เพื่อให้ใช้ออบเจ็กต์ HalProxyCallback สำหรับ postEvents และ createScopedWakelock ได้

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

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

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

การใช้งาน

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

ใช้ 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 ในอุปกรณ์ใหม่ ให้ทำตามขั้นตอนต่อไปนี้

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

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

    ดูรายการ Android.bp ตัวอย่างสำหรับการสร้างไลบรารี Sub-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 จะเริ่มต้นทำงาน ค้นหา 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, ให้ทำตามขั้นตอนต่อไปนี้

  1. ตรวจสอบว่าการกำหนดค่า Sensors HAL อยู่ที่ /vendor/etc/sensors/hals.conf ซึ่งอาจเกี่ยวข้องกับการย้ายไฟล์ที่อยู่ใน /system/etc/sensors/hals.conf
  2. นำการอ้างอิงถึง hardware/hardware.h และ hardware/sensors.h ออก เนื่องจากระบบไม่รองรับการอ้างอิงเหล่านี้สำหรับ HAL 2.0
  3. ย้ายข้อมูล Sub-HAL ตามที่อธิบายไว้ใน การย้ายข้อมูลจาก Sensors HAL 1.0
  4. ตั้งค่า 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/tests
atest

ทดสอบด้วย 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 จำลองไปยังอุปกรณ์ ให้ทำตามขั้นตอนต่อไปนี้

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

    adb shell stop
    adb shell start

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

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

adb root
adb 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