ใช้ตัวแสดงผลที่มีความพร้อมใช้งานสูง (HAR) เพื่อแสดงข้อมูลยานพาหนะที่ Android แสดงไม่ได้ ซึ่งอาจเกิดขึ้นได้เนื่องจากปัญหาต่างๆ เช่น การเริ่มต้นใช้งาน ความพร้อมใช้งาน ความปลอดภัย หรือกฎระเบียบ HAR เป็นแอปแบบพกพาในตัวที่เขียนด้วยภาษา Rust
HAR หรือที่เรียกว่าเฟรมเวิร์ก HAR มีโค้ดที่คุณใช้สร้างแอป แอปที่สร้างด้วย HAR คือ แอปที่ใช้ HAR เฟรมเวิร์ก HAR มีส่วนโค้ดสำหรับแพลตฟอร์มต่างๆ ตัวอย่างเช่น ในระบบ Linux คุณจะใช้ไลบรารีต่างๆ เช่น tinyalsa สำหรับเสียง QNX มีไลบรารีเสียงที่เป็นเอกลักษณ์ของตัวเอง
แพลตฟอร์มประกอบด้วยฮาร์ดแวร์ ระบบปฏิบัติการ ไลบรารีระบบ และปัจจัยอื่นๆ โค้ดเฉพาะแพลตฟอร์มมีส่วนที่เรียกว่าระบบย่อย ระบบย่อยแต่ละระบบจะจัดการฟีเจอร์ของแพลตฟอร์ม 1 รายการ เช่น เสียง กล้อง EVS หรือข้อมูลยานพาหนะ เฟรมเวิร์ก HAR ต้องมีการใช้งานระบบย่อยทั้งหมดจึงจะรองรับแพลตฟอร์มได้
โค้ดระบบย่อยเฉพาะแพลตฟอร์มอาจทำงานในกระบวนการเดียวกับแอปที่ใช้ HAR หรือในกระบวนการแยกต่างหาก เมื่อแยกกัน โค้ดนี้จะจัดการการสื่อสารระหว่างกระบวนการ (IPC) เพื่อช่วยยืนยันว่าแพลตฟอร์มรองรับแอป กลไก IPC ที่ซับซ้อนต้องเป็นส่วนหนึ่งของโค้ดเฉพาะแพลตฟอร์ม
ชุดโปรแกรมทดสอบ HAR จะเรียกใช้การทดสอบในระบบย่อยทั้งหมดที่ใช้งานสำหรับแพลตฟอร์ม ใช้ชุดทดสอบนี้เพื่อตรวจสอบว่าแพลตฟอร์มเป็นไปตามข้อกำหนดของ HAR หรือไม่ และเพื่อค้นหาปัญหาใหม่ๆ
คำศัพท์
คำศัพท์ต่อไปนี้อยู่ในหน้านี้
- แอปที่ใช้ HAR
- แอปเฉพาะ OEM หรือเฉพาะฟังก์ชันที่สร้างด้วยเฟรมเวิร์ก HAR แอปจะแตกต่างกันไปตามสถานะของแอปและลักษณะอื่นๆ ที่ปรับแต่งได้
- เฟรมเวิร์ก HAR
- มีชุดเครื่องมือหลักที่ใช้สร้างแอป
- การจัดการแพลตฟอร์ม HAR
- ส่วนหนึ่งของเฟรมเวิร์ก HAR ที่มี API ที่ทราบซึ่งแพลตฟอร์มเป้าหมายทั้งหมดต้องนำไปใช้
- ชุดโปรแกรมทดสอบ HAR
- ชุดการทดสอบที่ทราบเกี่ยวกับการใช้งานแพลตฟอร์ม ซึ่งช่วยยืนยันว่าการใช้งานแพลตฟอร์มรองรับเฟรมเวิร์ก HAR ในแพลตฟอร์มที่กำหนด
ไม่อยู่ในขอบเขต
HAR ไม่ได้จัดการสิ่งต่อไปนี้
การใช้งานแต่ละรายการสำหรับเป้าหมายแพลตฟอร์มทั้งหมด: การใช้งานสำหรับแพลตฟอร์มเป้าหมาย แต่หน้านี้จะอธิบายอินเทอร์เฟซที่การใช้งานแพลตฟอร์มต้องเป็นไปตามข้อกำหนด และชุดโปรแกรมทดสอบต้องเป็นไปตามข้อกำหนด
กรณีทดสอบ: กรณีทดสอบที่เฉพาะเจาะจงสำหรับอินเทอร์เฟซทั้งหมด แต่หน้านี้จะอธิบายฟังก์ชันแต่ละรายการสำหรับอินเทอร์เฟซ ซึ่งรวมถึงอาร์กิวเมนต์ ค่าที่ส่งกลับ ลักษณะการทำงานที่คาดไว้ และผลข้างเคียงที่คาดไว้ หน้านี้จะอธิบายชุดโปรแกรมทดสอบที่คุณสามารถนำกรอบการทดสอบไปใช้และเรียกใช้ได้
โครงสร้างระดับสูงของ Crate การจัดการแพลตฟอร์ม
โปรเจ็กต์ Rust ประกอบด้วย Crate รูปที่ 1 แสดงโครงสร้าง Crate สำหรับเลเยอร์แอบสแตรกชันแพลตฟอร์ม HAR เลเยอร์การจัดการแพลตฟอร์มส่งผลต่อ Crate Rust 2 รายการขึ้นไป ดังนี้
การจัดการ (คำอธิบาย
traitของ Rust) อยู่ใน Crate เฟรมเวิร์ก HARการใช้งานสำหรับแพลตฟอร์มจะอยู่ใน Crate
har-platform-xแยกต่างหาก เช่นhar-platform-linuxหรือhar-platform-android
คุณไม่สามารถสร้างหรือทดสอบ Crate HAR ได้หากไม่มีการใช้งานแพลตฟอร์มที่ระบุ ซึ่งเป็นไปตามที่ตั้งใจไว้เนื่องจากเฟรมเวิร์ก HAR เป็นเฟรมเวิร์ก
แอปที่ระบุแพลตฟอร์มต้องสร้างด้วยเฟรมเวิร์กนี้จึงจะทำงานและทดสอบได้ ความเชื่อมโยงระหว่างเฟรมเวิร์ก HAR กับแพลตฟอร์มแสดงอยู่ในแผนภาพนี้
รูปที่ 1 Crate HAR
โครงสร้างทั่วไปภายใน display-safety
การออกแบบนี้จะเพิ่ม Crate ใหม่หลายรายการลงในที่เก็บ display_safety ดังที่แสดงในรูปที่ 2
รูปที่ 2 โมดูลการจัดการ
ชุดโปรแกรมทดสอบมีโครงสร้างคล้ายกับแอป แต่ขึ้นอยู่กับ Crate การใช้งานแพลตฟอร์มที่กำหนดเท่านั้น ชุดโปรแกรมทดสอบต้องอ้างอิง `trait` และโครงสร้างที่กำหนดไว้ในเฟรมเวิร์ก HAR แต่ไม่ควรอ้างอิงการใช้งานที่ซับซ้อนกว่า
คำอธิบายระดับสูงของเลเยอร์แอบสแตรกชันแพลตฟอร์ม
ตารางนี้อธิบายระบบย่อยเฉพาะแพลตฟอร์มที่กำหนดโดยเลเยอร์แอบสแตรกชันแพลตฟอร์ม HAR
| ชื่อการจัดการ | ฟังก์ชันที่เกี่ยวข้อง | คำอธิบาย | หมายเหตุ |
|---|---|---|---|
OpenGL |
การแสดงผล 2 มิติ | ให้ความสามารถในการแสดงผล OpenGLES 2.0/3.0 แก่ Crate เฟรมเวิร์ก HAR | |
Audio |
การแสดงผลเสียง | มีอินเทอร์เฟซที่คล้ายกับ SoundPool ของ Android เพื่อจัดการและเล่นเสียงของระบบ | |
Camera |
การแสดงกล้องของยานพาหนะ | มีอินเทอร์เฟซที่คล้ายกับ EVS HAL เพื่อจัดการและแสดงข้อมูลกล้องของยานพาหนะ | |
Looper |
ลูปหลักของแอปและการกำหนดค่าการแสดงผล | มีอินเทอร์เฟซที่คล้ายกับ Looper ของ Android เพื่อจัดการลูปหลักของแอปเฉพาะแพลตฟอร์มและการกำหนดค่าการแสดงผล | |
UserInput |
การสัมผัส แป้นพิมพ์ พวงมาลัยหรือตัวควบคุมแบบหมุน และอินพุตอื่นๆ เฉพาะแพลตฟอร์ม | มีอินเทอร์เฟซเพื่อป้อนข้อมูลการสัมผัสและแป้นพิมพ์
ให้กับแอปที่ใช้ HAR การใช้งานอ้างอิงตาม evdev ของ Linux ใน
har-user-input-evdev |
|
VehicleData |
อินพุตสถานะยานพาหนะ | มีอินเทอร์เฟซเพื่อป้อนข้อมูลยานพาหนะแบบสตรีมที่กำหนดเองให้กับแอปที่ใช้ HAR เช่น ข้อมูลที่ VHAL ของ Android หรือ CAN bus ให้ | |
ResourceManager |
เอกสารการออกแบบที่แคชไว้เฉพาะแอป | มีแคชในหน่วยความจำของทรัพยากรที่จำเป็นสำหรับการเริ่มต้นใช้งาน HAR เช่น รูปภาพและเอกสารการออกแบบที่แคชไว้ ยังไม่มีการใช้งานแคชดิสก์ | |
Logging |
การบันทึกและการวัดและส่งข้อมูลระบบ | ให้การรองรับการบันทึกเฉพาะแพลตฟอร์มโดยใช้ระบบการติดตาม ซึ่งช่วยให้สามารถเก็บรวบรวมการวัดและส่งข้อมูลได้ตามที่ แพลตฟอร์มกำหนด | |
Tracing |
System Tracing | มีการจัดการสำหรับการผสานรวมกับระบบการติดตามและการสร้างโปรไฟล์ | |
Monitoring |
การตรวจสอบระบบ | ชุดเครื่องมือสำหรับการตรวจสอบประสิทธิภาพและเวลาในการตอบสนองภายในเฟรมเวิร์ก HAR | |
Commlib |
ข้อมูลยานพาหนะ | การใช้งานอ้างอิงโดยใช้การเรียงอันดับ Protobuf
เลิกใช้งานแล้ว: ใช้ API ที่กำหนดไว้ใน reference/harry-control-api และ
การใช้งาน harry-grpcio-server และ
harry-tonic-server (การใช้งานอ้างอิง) |
|
TestSupport |
ฮุกการรองรับการทดสอบ | รองรับการสร้างและล้างข้อมูลกรณีทดสอบ การสร้างเหตุการณ์ทดสอบ
และการสร้างอาร์ติแฟกต์ทดสอบ เช่น การสร้างเหตุการณ์การสัมผัสจำลอง
เพื่อทดสอบ UserInput และการสร้างภาพหน้าจอเพื่อ
การวิเคราะห์ |
ฟีเจอร์นี้ถูก Rust ล็อกไว้เพื่อป้องกันไม่ให้รวมอยู่ในบิลด์เวอร์ชันที่ใช้งานจริง |
รูปแบบการตั้งชื่อและโครงสร้างเฟรมเวิร์ก
ตารางนี้แสดงชื่อและโครงสร้างต่อไปนี้
อินสแตนซ์
traitของระบบย่อยที่คาดไว้ซึ่งเฟรมเวิร์ก HAR ให้ไว้traitแต่ละรายการแสดงถึงระบบย่อยเฉพาะแพลตฟอร์มที่ต้องนำไปใช้ชื่อที่คาดไว้ของการใช้งานระบบย่อยเฉพาะแพลตฟอร์มใน Crate แพลตฟอร์มใดก็ได้ แอปที่ใช้ HAR คาดหวังว่าจะมีการใช้งานชื่อที่เฉพาะเจาะจงเหล่านี้
อินสแตนซ์
enumและstructของเฟรมเวิร์ก HAR ที่เกี่ยวข้องซึ่งมักใช้เพื่อส่งข้อมูลจากการใช้งานที่เกี่ยวข้องกับแพลตฟอร์มไปยังเฟรมเวิร์ก HAR
| ชื่อ Trait | ชื่อการใช้งาน | Enum และ Struct ของเฟรมเวิร์ก HAR |
|---|---|---|
GlContextFactory |
OpenGL |
trait harry::Rendererharry::DisplayRotation |
AudioApiFactory |
Audio |
harry::AudioApiharry::AudioDeviceharry::VolumeMillibel |
ICameraManager |
Camera |
harry::ICameraDeviceharry::CameraDescriptor |
Looper |
Looper |
harry::LooperMessageharry::LooperOptionsharry::DisplayId |
PlatformVehicleData |
VehicleData |
harry::VehicleDataTypeharry::VehicleDataListener |
ResourceManager (Struct) |
ResourceManager |
harry::ResourceManagerMessageharry::ResourceTokenharry::RawImageData |
PlatformTracing |
Tracing |
ไม่มี |
HarPerformanceMonitor |
Monitoring |
harry::Rendererharry::ResolveLatencyToken |
PlatformTestSupport |
TestSupport |
harry::TestConfigharry::TestDisplayConfig |
ข้อผิดพลาดและการจัดการข้อผิดพลาด
API ที่เสนอใช้ประเภท Result<> ของ Rust Rust กำหนดให้คุณตรวจสอบประเภท Result ที่มีข้อผิดพลาด หากไม่ตรวจสอบ คอมไพเลอร์จะสร้างคำเตือนหรือข้อผิดพลาด การตรวจสอบในเวลาสร้างจะบังคับใช้การตรวจสอบข้อผิดพลาดจากโค้ดเฉพาะแพลตฟอร์ม
ข้อผิดพลาดที่ส่งกลับโดยการใช้งานแพลตฟอร์มเป็นประเภท harry::error::Error หากต้องการยืนยันว่าประเภทข้อผิดพลาดของแพลตฟอร์มไม่ได้รั่วไหลไปยังโค้ดแอป ให้ใช้ประเภทข้อผิดพลาดมาตรฐานที่เฟรมเวิร์ก HAR ให้ไว้
ประเภท harry::error::Error จะขยายเพื่อรวมข้อผิดพลาดที่เฉพาะเจาะจงสำหรับระบบย่อยทั้งหมด
// This is Rust
pub enum Error {
Msg(String), // A generic message string
// Legacy error type, likely to be removed or merged into Msg
Audio(String),
}
ระบบจะส่งกลับข้อผิดพลาดที่ไม่สามารถกู้คืนได้ผ่านอินเทอร์เฟซและฟังก์ชันเรียกกลับที่กำหนดไว้เป็นหลัก
การออกแบบโดยละเอียดของชุดโปรแกรมทดสอบ
ส่วนนี้อธิบายการออกแบบชุดโปรแกรมทดสอบ ซึ่งจะยืนยันการใช้งานเฉพาะแพลตฟอร์มของแอบสแตรกชัน
สร้างการทดสอบชุดทดสอบ
สำหรับการสร้าง Soong (กำหนดโดยไฟล์ Android.bp) ระบบจะคอมไพล์การทดสอบเป็นส่วนหนึ่งของระบบบิลด์แพลตฟอร์ม Android และ atest จะจัดการการดำเนินการ
เรียกใช้ชุดทดสอบ
วิธีทดสอบแพลตฟอร์มแต่ละรายการ
ใช้คำสั่ง atest กับเป้าหมายการทดสอบที่เกี่ยวข้อง (เช่น
atest <module_name>) คำสั่งนี้จะทำให้ใช้งานและเรียกใช้การทดสอบในอุปกรณ์หรือโปรแกรมจำลองของ Android