Sensors Multi-HAL เป็นเฟรมเวิร์กที่ช่วยให้ HAL ของเซ็นเซอร์ทำงานร่วมกับ HAL ของเซ็นเซอร์อื่นๆ ได้ Multi-HAL ของเซ็นเซอร์จะโหลด HAL ย่อยของเซ็นเซอร์แบบไดนามิกซึ่งจัดเก็บไว้เป็นไลบรารีแบบไดนามิกในพาร์ติชันของผู้ให้บริการ และให้ออบเจ็กต์การเรียกกลับที่จัดการการโพสต์เหตุการณ์ รวมถึงการจับและปล่อยการล็อกการปลุก เซ็นเซอร์ย่อย HAL คือ HAL เซ็นเซอร์ที่สร้างขึ้นในวัตถุที่แชร์ในพาร์ติชันผู้ให้บริการและใช้โดยเฟรมเวิร์ก Multi-HAL HAL ย่อยเหล่านี้ไม่ขึ้นอยู่กับกันหรือโค้ด HAL หลายรายการที่มีฟังก์ชันหลักสำหรับกระบวนการ
Sensors Multi-HAL 2.1 พร้อมให้บริการในอุปกรณ์ที่ใช้ Android 11 ขึ้นไป ซึ่งเป็นเวอร์ชันปรับปรุงของ Sensors Multi-HAL 2.0 ที่รองรับการโหลด HAL ย่อยซึ่งสามารถแสดงประเภทเซ็นเซอร์มุมบานพับ เพื่อให้รองรับเซ็นเซอร์ประเภทนี้ HAL ต้องใช้ API ย่อย HAL ที่กำหนดไว้ในส่วนหัว SubHal
สำหรับอุปกรณ์ที่ใช้ Android 13 ขึ้นไปซึ่งใช้ Sensors AIDL HAL คุณจะใช้เลเยอร์ shim แบบหลาย HAL เพื่ออนุญาตความสามารถในการทำมัลติ HAL ได้ ดูรายละเอียดการใช้งานได้ที่ การใช้ Sensors Multi-HAL กับ Sensors AIDL HAL
ความแตกต่างระหว่าง Sensors Multi-HAL 2 กับ Sensors HAL 2
เซ็นเซอร์ 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 อยู่ที่
ฟังก์ชันเริ่มต้น แทนที่จะให้ FMQ อินเทอร์เฟซ IHalProxyCallback
ก็มี 2 วิธี ได้แก่ วิธีโพสต์เหตุการณ์ของเซ็นเซอร์ไปยังเฟรมเวิร์กของเซ็นเซอร์และอีกวิธีในการสร้าง Wake Lock เบื้องหลัง Multi-HAL ของเซ็นเซอร์จะจัดการการโต้ตอบทั้งหมดกับ FMQ เพื่อให้แน่ใจว่าระบบจะส่งเหตุการณ์เซ็นเซอร์ไปยัง HAL ย่อยทั้งหมดได้ตรงเวลา ขอแนะนำเป็นอย่างยิ่งว่า HAL ย่อยให้ใช้เมธอด createScopedWakelock
เพื่อมอบสิทธิ์ในการจำกัดเวลาล็อกการปลุกระบบให้กับเซ็นเซอร์ Multi-HAL และรวมการใช้งาน Wake Lock แบบรวมศูนย์เป็น Wake Lock ส่วนกลางรายการเดียวสำหรับทั้งเซ็นเซอร์ Multi-HAL ของ Sensors Multi-HAL ซึ่งช่วยลดการล็อกและปลดล็อกการเรียกใช้
เซ็นเซอร์ 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 ในสถานการณ์ต่อไปนี้
- การใช้เซ็นเซอร์ Multi-HAL กับเซ็นเซอร์ 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
ใช้เซ็นเซอร์ Multi-HAL กับเซ็นเซอร์ AIDL HAL
หากต้องการเปิดใช้ความสามารถแบบหลาย HAL กับ Sensors AIDL HAL ให้นําเข้าโมดูลเลเยอร์ชิม AIDL แบบหลาย HAL ซึ่งมีอยู่ใน hardware/interfaces/sensors/aidl/default/multihal/ โมดูลจะจัดการการแปลงระหว่างประเภทคำจำกัดความ HAL ของเซ็นเซอร์ AIDL กับ HIDL และกำหนด Wrapper รอบๆ อินเทอร์เฟซแบบหลาย HAL ตามที่อธิบายไว้ในการใช้เซ็นเซอร์ Multi-HAL 2.1 เลเยอร์ Shim แบบ Multi-HAL ของ AIDL ใช้งานได้กับอุปกรณ์ที่ใช้ Sensors Multi-HAL 2.1
ชั้นชิมภาพแบบ Multi-HAL ของ AIDL ช่วยให้คุณแสดงอุปกรณ์ติดตามศีรษะและเซ็นเซอร์ IMU แบบแกนจำกัดในเซ็นเซอร์ 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 ย่อยในเวอร์ชัน 2.1
พอร์ตจาก Sensors HAL 2.0
เมื่ออัปเกรดเป็น Sensors Multi-HAL 2.0 จาก Sensors HAL 2.0 โปรดตรวจสอบว่าการติดตั้งใช้งาน HAL เป็นไปตามข้อกำหนดต่อไปนี้
เริ่มต้น HAL
เซ็นเซอร์ HAL 2.0 มีฟังก์ชันเริ่มต้นที่ทำให้บริการเซ็นเซอร์ส่ง FMQ และ Callback ของเซ็นเซอร์แบบไดนามิกได้ ใน Sensors Multi-HAL 2.0 ฟังก์ชัน initialize()
จะส่งการเรียกกลับรายการเดียวซึ่งต้องใช้เพื่อโพสต์เหตุการณ์ของเซ็นเซอร์ รับล็อกการปลุก และแจ้งให้ทราบเกี่ยวกับการเชื่อมต่อและยกเลิกการเชื่อมต่อเซ็นเซอร์แบบไดนามิก
โพสต์เหตุการณ์เซ็นเซอร์ไปจนถึงการใช้งาน Multi-HAL
แทนที่จะโพสต์เหตุการณ์เซ็นเซอร์ผ่าน FMQ นั้น HAL ย่อยจะต้องเขียนเหตุการณ์เซ็นเซอร์ไปยัง IHalProxyCallback
เมื่อมีเหตุการณ์เซ็นเซอร์พร้อมใช้งาน
เหตุการณ์ WAKE_UP
ใน Sensors HAL 2.0 HAL จะจัดการ Wake Lock สำหรับการติดตั้งใช้งานได้ ในเซ็นเซอร์ Multi-HAL 2.0 นั้น HAL ย่อยจะช่วยให้การใช้งาน Multi-HAL จัดการ Wake Lock ได้ และอาจขอให้มี Wake Lock ด้วยการเรียกใช้ createScopedWakelock
ต้องรับ Wake Lock ที่กำหนดขอบเขตที่ล็อกและส่งไปยัง postEvents
เมื่อโพสต์เหตุการณ์การปลุกระบบไปยังการใช้งาน Multi-HAL
เซ็นเซอร์แบบไดนามิก
Sensors Multi-HAL 2.0 กำหนดให้เรียก onDynamicSensorsConnected
และ
onDynamicSensorsDisconnected
ใน
IHalProxyCallback
ทุกครั้งที่มีการเปลี่ยนแปลงการเชื่อมต่อเซ็นเซอร์แบบไดนามิก Callback เหล่านี้พร้อมใช้งานโดยเป็นส่วนหนึ่งของตัวชี้ IHalProxyCallback
ที่ให้ไว้ผ่านฟังก์ชัน initialize()
พอร์ตจาก Sensors HAL 1.0
เมื่ออัปเกรดเป็น Sensors Multi-HAL 2.0 จาก Sensors HAL 1.0 โปรดตรวจสอบว่าการติดตั้งใช้งาน HAL เป็นไปตามข้อกำหนดต่อไปนี้
เริ่มต้น HAL
ต้องรองรับฟังก์ชัน initialize()
เพื่อตั้งค่าการติดต่อกลับระหว่าง HAL ย่อยกับการใช้งาน Multi-HAL
แสดงเซ็นเซอร์ที่ใช้ได้
ในเซ็นเซอร์ Multi-HAL 2.0 ฟังก์ชัน getSensorsList()
ต้องแสดงค่าเดียวกันระหว่างการเปิดเครื่องอุปกรณ์เดียว แม้ว่าจะมีการรีสตาร์ท HAL ของเซ็นเซอร์ก็ตาม วิธีนี้ช่วยให้เฟรมเวิร์กสามารถพยายามเริ่มต้นการเชื่อมต่อเซ็นเซอร์อีกครั้งหากเซิร์ฟเวอร์ระบบรีสตาร์ท ค่าที่ getSensorsList()
แสดงอาจเปลี่ยนแปลงหลังจากอุปกรณ์รีบูต
โพสต์เหตุการณ์เซ็นเซอร์ไปยังการติดตั้งใช้งาน Multi-HAL
ใน Sensors HAL 2.0 แทนที่จะรอให้เรียก poll()
มาใช้ HAL ย่อยต้องเขียนเหตุการณ์เซ็นเซอร์ไปยัง IHalProxyCallback
อย่างสม่ำเสมอเมื่อมีเหตุการณ์เซ็นเซอร์
เหตุการณ์ WAKE_UP
ใน Sensors HAL 1.0 HAL จะจัดการ Wake Lock สำหรับการติดตั้งใช้งานได้ ใน เซ็นเซอร์ Multi-HAL 2.0 นั้น HAL ย่อยช่วยให้การใช้งาน Multi-HAL สามารถจัดการ Wake Lock และสามารถขอรับ Wake Lock ได้โดยเรียกใช้ createScopedWakelock
คุณต้องรับการล็อกการตื่นที่มีขอบเขตที่ล็อกไว้และส่งไปยัง postEvents
เมื่อโพสต์เหตุการณ์การตื่นไปยังการใช้งาน Multi-HAL
เซ็นเซอร์แบบไดนามิก
ใน Sensors HAL 1.0 ระบบจะแสดงผลเซ็นเซอร์แบบไดนามิกผ่านฟังก์ชัน poll()
เซ็นเซอร์ Multi-HAL 2.0 กำหนดให้ต้องเรียกใช้ onDynamicSensorsConnected
และ onDynamicSensorsDisconnected
ใน IHalProxyCallback
เมื่อการเชื่อมต่อเซ็นเซอร์แบบไดนามิกมีการเปลี่ยนแปลง การเรียกกลับเหล่านี้จะพร้อมใช้งานเป็นส่วนหนึ่งของพอยน์เตอร์ IHalProxyCallback
ที่ระบุผ่านฟังก์ชัน initialize()
พอร์ตจากเซ็นเซอร์ 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 Mutli-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
เรียกใช้การทดสอบหน่วย
การทดสอบ 1 หน่วยในการทดสอบ HalProxy_test.cpp
HalProxy
โดยใช้ HAL ย่อยปลอมซึ่งสร้างขึ้นในการทดสอบ 1 หน่วยและไม่ได้โหลดแบบไดนามิก เมื่อสร้าง 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
และ 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