Sensors Multi-HAL

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

  • เมธอดเริ่มต้นจะส่งคลาส IHalProxyCallback instead of 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 ทั้งหมด ซึ่งจะช่วยลดการเรียกใช้การล็อกและการปลดล็อก

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

ใช้ 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

เลเยอร์ชิม AIDL Multi-HAL ช่วยให้คุณแสดงเครื่องมือติดตามการเคลื่อนไหวของศีรษะและเซ็นเซอร์ 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

พอร์ตจากเซ็นเซอร์ 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 ย่อยเป็น HAL ย่อยเวอร์ชัน 2.1

พอร์ตจาก Sensors HAL 2.0

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

เริ่มต้น HAL

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

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

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

เหตุการณ์ WAKE_UP

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

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

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

การทดสอบหน่วยใน 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. เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างและพุช 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 ไปยังเทอร์มินัล ด้านล่างนี้คือตัวอย่างเอาต์พุตของคําสั่งสําหรับออบเจ็กต์ 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