เลเยอร์แอบสแตรกชันของแพลตฟอร์ม HAR

ใช้ตัวแสดงผลที่มีความพร้อมใช้งานสูง (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 กับแพลตฟอร์มแสดงอยู่ในแผนภาพนี้

กรง HAR

รูปที่ 1 Crate HAR

โครงสร้างทั่วไปภายใน display-safety

การออกแบบนี้จะเพิ่ม Crate ใหม่หลายรายการลงในที่เก็บ display_safety ดังที่แสดงในรูปที่ 2

ลัง HAR, เฟรมเวิร์ก และแอป

รูปที่ 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::Renderer
harry::DisplayRotation
AudioApiFactory Audio harry::AudioApi
harry::AudioDevice
harry::VolumeMillibel
ICameraManager Camera harry::ICameraDevice
harry::CameraDescriptor
Looper Looper harry::LooperMessage
harry::LooperOptions
harry::DisplayId
PlatformVehicleData VehicleData harry::VehicleDataType
harry::VehicleDataListener
ResourceManager (Struct) ResourceManager harry::ResourceManagerMessage
harry::ResourceToken
harry::RawImageData
PlatformTracing Tracing ไม่มี
HarPerformanceMonitor Monitoring harry::Renderer
harry::ResolveLatencyToken
PlatformTestSupport TestSupport harry::TestConfig
harry::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