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 ของเซ็นเซอร์ในสถานการณ์ต่อไปนี้
- การใช้ Multi-HAL ของเซ็นเซอร์กับ HAL ของ AIDL ของเซ็นเซอร์
- การใช้ Multi-HAL 2.1 ของเซ็นเซอร์
- การย้ายข้อมูลจาก Sensors Multi-HAL 2.0 ไปยัง Multi-HAL 2.1
- การพอร์ตจาก HAL 2.0 ของเซ็นเซอร์
- การย้ายข้อมูลจาก Sensors HAL 1.0
- การพอร์ตจาก Sensors Multi-HAL 1.0
ใช้ 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 ในอุปกรณ์ใหม่ ให้ทำตามขั้นตอนต่อไปนี้
- ใช้
ISensorsSubHal
อินเทอร์เฟซตามที่อธิบายไว้ในSubHal.h
- ใช้เมธอด
sensorsHalGetSubHal_2_1
ในSubHal.h
เพิ่ม
cc_library_shared
เป้าหมายเพื่อสร้าง HAL ย่อยที่เพิ่งใช้งาน เมื่อเพิ่มเป้าหมาย ให้ทำดังนี้- ตรวจสอบว่าได้พุชเป้าหมายไปยังที่ใดที่หนึ่งในพาร์ติชันของผู้ให้บริการ ของอุปกรณ์
- ในไฟล์การกำหนดค่าที่อยู่ใน
/vendor/etc/sensors/hals.conf
ให้เพิ่มเส้นทางไปยังไลบรารีในบรรทัดใหม่ หากจำเป็น ให้สร้างไฟล์hals.conf
ดูตัวอย่างรายการ
Android.bp
สำหรับการสร้างไลบรารีย่อย 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
จะเริ่มทำงาน ค้นหา 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.0SubHal
- 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 ให้ทำตามขั้นตอนต่อไปนี้
- ตรวจสอบว่าการกำหนดค่า HAL ของเซ็นเซอร์อยู่ที่
/vendor/etc/sensors/hals.conf
ซึ่งอาจเกี่ยวข้องกับการย้ายไฟล์ที่อยู่ในตำแหน่ง/system/etc/sensors/hals.conf
- นำการอ้างอิงถึง
hardware/hardware.h
และhardware/sensors.h
ออก เนื่องจาก HAL 2.0 ไม่รองรับ - พอร์ต HAL ย่อยตามที่อธิบายไว้ในการพอร์ตจาก Sensors HAL 1.0
- ตั้งค่า 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 ย่อยปลอมไปยังอุปกรณ์ ให้ทำตามขั้นตอนต่อไปนี้
เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างและพุช 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
อัปเดตการกำหนดค่า 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
รีสตาร์ท
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