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