Sensors Multi-HAL เป็นเฟรมเวิร์กที่ช่วยให้ HAL ของเซ็นเซอร์ทำงานร่วมกับ HAL ของเซ็นเซอร์อื่นๆ ได้ เซ็นเซอร์หลาย HAL ของเซ็นเซอร์จะโหลด HAL ย่อยของเซ็นเซอร์แบบไดนามิก จัดเก็บเป็นไลบรารีแบบไดนามิกในพาร์ติชันผู้ให้บริการ และให้ Callback แก่ผู้ให้บริการ ที่สามารถจัดการการโพสต์กิจกรรม ตลอดจนการรับ และปล่อย Wake Lock HAL ย่อยของเซ็นเซอร์คือ HAL ของเซ็นเซอร์ที่สร้างไว้ในออบเจ็กต์ที่แชร์ในพาร์ติชันของผู้ให้บริการและใช้โดยเฟรมเวิร์ก HAL หลายรายการ HAL ย่อยเหล่านี้ไม่ขึ้นอยู่กับกันหรือโค้ด HAL หลายรายการที่มีฟังก์ชันหลักสำหรับกระบวนการ
Sensors Multi-HAL 2.1 พร้อมให้บริการในอุปกรณ์ที่ใช้ Android 11 ขึ้นไป ซึ่งเป็นเวอร์ชันปรับปรุงของ Sensors Multi-HAL 2.0 ที่รองรับการโหลด HAL ย่อยซึ่งสามารถแสดงประเภทเซ็นเซอร์มุมบานพับ และ HAL ย่อยต้องใช้ API แบบ Sub-HAL เพื่อให้รองรับเซ็นเซอร์ประเภทนี้ได้ ที่กำหนดไว้ใน 2.1 ส่วนหัว SubHal
สำหรับอุปกรณ์ที่ใช้ Android 13 ขึ้นไปซึ่งใช้ Sensors AIDL HAL คุณสามารถใช้เลเยอร์ชิม HAL หลายรายการเพื่อเปิดใช้ความสามารถของ HAL หลายรายการ สำหรับรายละเอียดการใช้งาน ดู การใช้เซ็นเซอร์ Multi-HAL กับเซ็นเซอร์ 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
แทนที่จะเป็น 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 ทั้งหมด ซึ่งจะช่วยลดการเรียกใช้การล็อกและการปลดล็อก
เซ็นเซอร์ Multi-HAL 2 ยังมีฟีเจอร์ด้านความปลอดภัยบางอย่างในตัวด้วย โดยจะจัดการกับสถานการณ์ที่ FMQ ของเซ็นเซอร์เต็มหรือที่เฟรมเวิร์กเซ็นเซอร์ Android รีสตาร์ทและจำเป็นต้องรีเซ็ตสถานะเซ็นเซอร์ นอกจากนี้ เมื่อกิจกรรม
โพสต์ไปยังคลาส HalProxy
แต่เฟรมเวิร์กเซ็นเซอร์ยอมรับไม่ได้
เหตุการณ์นั้นเกิดขึ้นทันที เซ็นเซอร์หลาย HAL ของเซ็นเซอร์จะย้ายเหตุการณ์ไปยังพื้นหลัง
เทรดเพื่อให้ทำงานต่อไปใน HAL ย่อยทั้งหมดขณะที่รอ
กิจกรรมที่จะโพสต์
การติดตั้งใช้งานซอร์สโค้ดและการอ้างอิง
รหัส Multi-HAL ของ Sensors ทั้งหมดพร้อมให้บริการใน
hardware/interfaces/sensors/common/default/2.X/multihal/
ต่อไปนี้เป็นคำแนะนำเกี่ยวกับแหล่งข้อมูลบางส่วน
HalProxy.h
: ออบเจ็กต์HalProxy
สร้างขึ้นโดยเซ็นเซอร์ Multi-HAL และจัดการการส่งข้อมูลจาก HAL ย่อยไปยังเฟรมเวิร์กเซ็นเซอร์HalProxy.cpp
: การใช้งานHalProxy
มีตรรกะทั้งหมดที่จำเป็นต่อการรับส่งข้อมูลหลายรายการพร้อมกันระหว่าง HAL ย่อยกับเฟรมเวิร์กเซ็นเซอร์SubHal.h
: อินเทอร์เฟซISensorsSubHal
จะกำหนดอินเทอร์เฟซที่ HAL ย่อยต้องปฏิบัติตามเพื่อให้เข้ากันได้กับHalProxy
HAL ย่อยจะใช้เมธอด เริ่มต้นเมธอดเพื่อให้มีการใช้ออบเจ็กต์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 ย่อยต่างๆ โต้ตอบกันอย่างไรบนอุปกรณ์
การใช้งาน
ส่วนนี้จะอธิบายวิธีใช้ Sensors Multi-HAL ในสถานการณ์ต่อไปนี้
- การใช้ Sensors Multi-HAL กับ Sensors AIDL HAL
- การใช้ Sensors Multi-HAL 2.1
- การโอนจากเซ็นเซอร์ 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
เลเยอร์ชิม HAL หลายรายการของ AIDL ช่วยให้คุณแสดงประเภทเซ็นเซอร์ 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
พอร์ตจาก Sensors 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
เนื่องจากวิธีการเหล่านี้ใช้ ประเภทใหม่ที่เพิ่มเข้ามาในเวอร์ชัน 2.1 ของข้อกำหนดISensors.hal
- HAL ย่อยต้องแสดง
sensorsHalGetSubHal_2_1
แทนsensorsHalGetSubHal
สำหรับ Multi-HAL จะถือเป็นเวอร์ชัน 2.1 HAL ย่อย
พอร์ตจาก 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()
ส่ง Callback เดียวที่ต้องใช้เพื่อโพสต์
เหตุการณ์เซ็นเซอร์ รับ Wake Lock และแจ้งเตือนเกี่ยวกับการเชื่อมต่อเซ็นเซอร์แบบไดนามิก และ
และการยกเลิกการเชื่อมต่อ
โพสต์เหตุการณ์เซ็นเซอร์ไปจนถึงการใช้งาน Multi-HAL
แทนที่จะโพสต์เหตุการณ์เซ็นเซอร์ผ่าน FMQ นั้น HAL ย่อยจะต้องเขียนเซ็นเซอร์
กิจกรรมที่
IHalProxyCallback
เมื่อมีเหตุการณ์เซ็นเซอร์
กิจกรรม 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
เซ็นเซอร์แบบไดนามิก
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
ในเซ็นเซอร์ 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
ต้องรับ 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 รายการกับเซ็นเซอร์หลายเฮล 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
หากกำลังใช้เลเยอร์ shim ของ AIDL Multi-HAL ให้เรียกใช้ 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 ย่อยจำลองไปยังอุปกรณ์ ให้ทำตามขั้นตอนต่อไปนี้
เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างและพุชปลอม 3 แบบที่แตกต่างกัน HAL ย่อยของอุปกรณ์:
$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
คือ
จำนวนมาก (1000 หรือมากกว่า)
แสดงว่ามีเหตุการณ์มากมายที่รอการเขียนไปยังเซ็นเซอร์
นี่เป็นการบ่งชี้ว่าบริการเซ็นเซอร์ติดตายหรือขัดข้อง และ
ไม่ประมวลผลเหตุการณ์เซ็นเซอร์ หรือเหตุการณ์ที่เซ็นเซอร์จำนวนมาก
เพิ่งโพสต์จาก HAL ย่อย
หากจำนวนการอ้างอิง Wake Lock มากกว่า 0
หมายความว่า HalProxy
ทำงานขณะล็อก ค่านี้ควรมากกว่า 0
เฉพาะในกรณีที่มีการจงใจถือ ScopedWakelock
ไว้ หรือมีการส่งเหตุการณ์การปลุกไปยัง HalProxy
และเฟรมเวิร์กเซ็นเซอร์ยังไม่ได้ประมวลผล
ระบบจะส่งตัวระบุไฟล์ที่ส่งไปยังเมธอดแก้ไขข้อบกพร่องของ HalProxy
ไปยัง HAL ย่อยแต่ละรายการ ดังนั้นนักพัฒนาแอปจึงต้องใช้เมธอดแก้ไขข้อบกพร่องเป็นส่วนหนึ่งของอินเทอร์เฟซ ISensorsSubHal