เชนเครื่องมือการออกแบบเพื่อความปลอดภัย

ใช้ Toolchain การออกแบบเพื่อความปลอดภัยเพื่อมอบโซลูชันจอมอนิเตอร์เพื่อความปลอดภัยที่สร้างจากเอกสารการออกแบบ Figma โดยใช้เครื่องมือชุดนี้ตามลำดับ

คอมไพเลอร์การออกแบบเพื่อความปลอดภัยจะสร้างอาร์ติแฟกต์ด้านความปลอดภัยเพื่อขับเคลื่อนการสร้างโค้ดในภายหลังสำหรับการสร้างจอมอนิเตอร์เพื่อความปลอดภัย การแยกการคอมไพล์การออกแบบและการสร้างโค้ดช่วยให้เครื่องมือสร้างโค้ดได้รับคะแนน TCL-3 ตามมาตรฐาน ISO-26262

ห่วงโซ่เครื่องมือออกแบบความปลอดภัย

รูปที่ 1 ชุดเครื่องมือการออกแบบเพื่อความปลอดภัย

หลังจากคอมไพเลอร์สร้างอาร์ติแฟกต์แล้ว ชุดเครื่องมือจะสร้างรายงานที่วิศวกรด้านความปลอดภัยของ OEM สามารถตรวจสอบเพื่อยืนยันอาร์ติแฟกต์ที่สร้างจากการออกแบบ Figma

เวิร์กโฟลว์ของเชนเครื่องมือการออกแบบความปลอดภัย

รูปที่ 2 เวิร์กโฟลว์ของชุดเครื่องมือการออกแบบเพื่อความปลอดภัย

อินพุตของคอมไพเลอร์การออกแบบ

เอกสารการออกแบบที่ซีเรียลไลซ์แสดงถึงการออกแบบ UI ที่นำเข้าจากเครื่องมือการออกแบบและประมวลผลด้วยสคีมาของชุดเครื่องมือ ไฟล์ประกอบด้วยข้อมูลนี้ที่แยกวิเคราะห์จากการออกแบบ

  • แผนผังโหนดที่สมบูรณ์ของการออกแบบ
  • รูปภาพและคอมโพเนนต์
  • ข้อมูลเมตา เช่น ชื่อ เวอร์ชัน และวันที่แก้ไขล่าสุด

ต้องกำหนดโหนดรูทของการออกแบบในรายการโหนดและต้องเป็นโหนดรูทสำหรับองค์ประกอบที่เกี่ยวข้องกับความปลอดภัยซึ่งระบุไว้ในการออกแบบ

ไฟล์นี้ผสานรวมกับ Android Automotive OS เพื่อแสดงคลัสเตอร์เครื่องมือและแสดงองค์ประกอบที่ไม่เกี่ยวข้องกับความปลอดภัยด้วยตัวแสดงผลที่มีความพร้อมใช้งานสูง (HAR) ที่ทำงานบน SDV Media เป็นภาพซ้อนทับเพื่อแสดงองค์ประกอบที่เกี่ยวข้องกับความปลอดภัยแก่ผู้ใช้

คอมไพเลอร์การออกแบบใช้การปรับแต่ง DesignCompose เพื่อสร้างเอาต์พุตเพื่อสลับการมองเห็นองค์ประกอบที่สำคัญต่อความปลอดภัยในการออกแบบ การออกแบบจะแสดงผลแบบไม่มีส่วนหัวด้วย Impeller ระหว่างการเปลี่ยนแปลงการปรับแต่ง ระบบจะส่งคำสั่งภาพหน้าจอไปยังแบ็กเอนด์การแสดงผลเพื่อสร้างอาร์ติแฟกต์รูปภาพ

ไฟล์ออกแบบ Figma ตัวอย่างเพื่อสร้างเครื่องมือตรวจสอบความปลอดภัย

รูปที่ 3 ตัวอย่างไฟล์การออกแบบ Figma เพื่อสร้างจอมอนิเตอร์เพื่อความปลอดภัย

ไดเรกทอรีเอาต์พุต

นี่คือตำแหน่งในระบบไฟล์ภายในเครื่องที่คอมไพเลอร์จัดเก็บอาร์ติแฟกต์ที่สร้างขึ้น

ไฟล์การกำหนดค่า JSON

ส่วนใหญ่มักจะเป็นวิศวกรด้านความปลอดภัยของ OEM ที่สร้างไฟล์การกำหนดค่า JSON ซึ่งมีข้อมูลเมตาที่บันทึกข้อมูลที่เกี่ยวข้องกับความปลอดภัยของยานพาหนะซึ่งไม่ได้บันทึกไว้ในการออกแบบ UI ไฟล์นี้มีข้อมูลต่อไปนี้

  • องค์ประกอบการออกแบบที่กำหนดให้เป็นรูทของการแสดงผลที่เกี่ยวข้องกับความปลอดภัย องค์ประกอบการออกแบบนี้มีขนาดเท่ากับจอแสดงผลของยานพาหนะ ขนาดต้องมีความละเอียดเท่ากับจอแสดงผล องค์ประกอบที่เกี่ยวข้องกับความปลอดภัยทั้งหมดต้องเป็นองค์ประกอบย่อยขององค์ประกอบนี้ ไม่จำเป็นต้องเป็นองค์ประกอบย่อยโดยตรง แต่ซ้อนอยู่ในโหนดระดับกลาง รูทนี้คือออบเจ็กต์โหนดรูท และชื่อต้องตรงกับโหนดในเอกสารการออกแบบ

  • จอแสดงผลเป้าหมายสำหรับการออกแบบ หากต้องการรองรับ UI ที่มีองค์ประกอบในจอแสดงผลหลายจอ ไฟล์การกำหนดค่าสามารถระบุการออกแบบได้มากกว่า 1 รายการ โดยแต่ละการออกแบบกำหนดเป้าหมายให้แสดงบนหน้าจอแยกกัน

  • พจนานุกรมชื่อสัญญาณบัสของยานพาหนะกับองค์ประกอบ UI ที่เชื่อมโยง คีย์และค่าของพจนานุกรมนี้มีดังนี้

    • คีย์: ชื่อสัญญาณบัสของยานพาหนะที่มีความหมายเพื่อให้เมื่อสัญญาณนี้ทำงานอยู่ องค์ประกอบ UI ที่เชื่อมโยงจะแสดงขึ้น เมื่อสัญญาณไม่ทำงาน องค์ประกอบ UI ที่เชื่อมโยงจะไม่แสดง

    • ค่า: รหัสโหนด Figma สำหรับองค์ประกอบที่เกี่ยวข้องกับความปลอดภัยซึ่งอยู่ในบังคับของสัญญาณบัสของยานพาหนะ

ดูตัวอย่างไฟล์การกำหนดค่า JSON นี้

{
  "documents" : [
    {
    "rootnode" : "#Stage",
    "display_id" : 1,
    "document_id": "GLJJrR1JI4HVEjL1qB40zq",
    "states" : {
      "abs": "#cluster/telltale/abs",
      "airbag": "#cluster/telltale/airbag",
      "low_tire_pressure": "#cluster/telltale/low-tire-pressure",
      "brake": "#cluster/telltale/brake",
      "traction": "#cluster/telltale/traction",
      "lowbeam": "#cluster/telltale/lowbeam",
      "hibeam": "#cluster/telltale/hibeam",
      "park_lights": "#cluster/telltale/park-lights",
      "fog_lights": "#cluster/telltale/fog-lights",
      "seatbelts" : "#cluster/telltale/no-seatbelt"
    }
    }
  ]
  ,
  "displays": [
    {
      "id": 1,
      "width": 1920,
      "height": 720
    }
  ]
 }

เรียกใช้คอมไพเลอร์การออกแบบ

วิธีเรียกใช้คอมไพเลอร์การออกแบบ

/path/to/safety-design-compiler -c path/to/<input-file>.json
-o path/to/output_directory

อินพุตของคอมไพเลอร์การออกแบบอธิบายไว้ในตารางนี้

อินพุต สั้น ประเภท คำอธิบาย
การกำหนดค่า -c สตริง เส้นทางที่จะบันทึกไฟล์ JSON ของการกำหนดค่าด้านความปลอดภัย
เอาต์พุต -o สตริง เส้นทางที่จะบันทึกอาร์ติแฟกต์ที่สร้างขึ้น

เอาต์พุตของคอมไพเลอร์การออกแบบ

คอมไพเลอร์การออกแบบจะสร้างและบันทึกเอาต์พุตลงในไดเรกทอรีเอาต์พุตที่ระบุเมื่อคุณเรียกใช้เครื่องมือคอมไพเลอร์ เอาต์พุตนี้จะสร้างไฟล์ส่วนหัวที่ใช้กำหนดการทดสอบพิกเซลรันไทม์ในจอมอนิเตอร์เพื่อความปลอดภัย และสร้างรายงานที่มนุษย์อ่านได้ เอาต์พุตของคอมไพเลอร์การออกแบบจะอยู่ในไฟล์ ZIP ซึ่งมีสิ่งต่อไปนี้

  • ไฟล์ข้อมูลเมตา data.json ที่รูทของเนื้อหาที่ส่งออกเพื่ออธิบายโครงสร้างของการออกแบบที่ส่งออก เส้นทางทั้งหมดในไฟล์นี้เป็นเส้นทางสัมพัทธ์กับไฟล์นี้

  • ชุดรูปภาพองค์ประกอบ UI ที่แยกกันเพื่อแสดงองค์ประกอบ UI ที่เกี่ยวข้องกับความปลอดภัยในสถานะที่ใช้งานอยู่ ซึ่งใช้ระหว่างการสร้างโค้ดในภายหลัง ช่องอัลฟ่าในรูปภาพเหล่านี้มีข้อมูลพิกเซลที่ไม่ส่งผลต่อความปลอดภัย

  • ชุดรูปภาพ UI แบบเต็มเพื่อแสดงองค์ประกอบ UI ที่เกี่ยวข้องกับความปลอดภัยในสถานะที่ใช้งานอยู่และไม่ใช้งาน เพื่อใช้ขณะทดสอบโค้ดที่สร้างขึ้น

  • เอกสาร Figma ที่ซีเรียลไลซ์เวอร์ชันอัปเดตซึ่งคอมไพเลอร์ใช้เป็นอินพุต HAR จะทำเครื่องหมายและอัปเดตโหนดบอกเล่าที่ระบุไว้ใน Config.json เพื่อให้คอมไพเลอร์ประมวลผลเพิ่มเติมโดยการตั้งค่าแฟล็ก RenderOptions::PixelPerfect ในสคีมาของชุดเครื่องมือ

รูปนี้แสดงไฟล์การออกแบบ Figma

เนื้อหาของไฟล์ ZIP

รูปที่ 4 เนื้อหาของไฟล์ ZIP

สร้างไฟล์อินพุต

สร้างไฟล์อินพุต data.json สำหรับเครื่องมือสร้างจอมอนิเตอร์เพื่อความปลอดภัย เอาต์พุตมีโครงสร้างเป็นอาร์เรย์ที่มีข้อมูลมิติและลิงก์รูปภาพสำหรับองค์ประกอบการแสดงผลที่เกี่ยวข้องกับความปลอดภัยแต่ละรายการ โครงสร้างของไฟล์เอาต์พุตนี้อธิบายไว้ในตารางนี้

องค์ประกอบ ประเภท หน่วย คำอธิบาย
static_ui_elements พจนานุกรม ไม่มี โครงสร้างที่มีข้อมูลเมตาสำหรับองค์ประกอบ UI ที่เกี่ยวข้องกับความปลอดภัยทั้งหมด ที่แยกจากเอกสาร Figma
x Int พิกเซล พิกัดแนวนอนขององค์ประกอบที่เกี่ยวข้องกับความปลอดภัย
y Int พิกเซล พิกัดแนวตั้งขององค์ประกอบที่เกี่ยวข้องกับความปลอดภัย
width Int พิกเซล ความกว้างขององค์ประกอบที่เกี่ยวข้องกับความปลอดภัย
height Int พิกเซล ความสูงขององค์ประกอบที่เกี่ยวข้องกับความปลอดภัย
name สตริง ไม่มี ชื่อขององค์ประกอบ UI ที่เกี่ยวข้องกับความปลอดภัยตามที่แยกจากเอกสาร Figma ซึ่งแสดงถึงเส้นทางสัมพัทธ์ไปยังรูปภาพที่สร้างด้วยองค์ประกอบนี้
screen พจนานุกรมเพื่ออธิบายหน้าจอที่ UI กำหนดเป้าหมาย
width Int พิกเซล ความกว้างของ UI เอกสาร Figma
height Int พิกเซล ความสูงของ UI เอกสาร Figma
build พจนานุกรมที่มีข้อมูลบิลด์สำหรับการเรียกใช้ คอมไพเลอร์การออกแบบนี้
figma_document_id สตริง ไม่มี รหัสของเอกสาร Figma ที่ใช้สร้างชุดอาร์ติแฟกต์
design_compiler_version สตริง ไม่มี เวอร์ชันของคอมไพเลอร์การออกแบบที่ใช้สร้างชุดอาร์ติแฟกต์

ส่วนนี้แสดงตัวอย่างไฟล์ data.json ที่สร้างขึ้น

{
 "static_ui_elements": [
   {
     "x": 71,
     "y": 663,
     "width": 38,
     "height": 47,
     "name": "cluster/telltale/no-seatbelt"
   },
   {
     "x": 149,
     "y": 667,
     "width": 40,
     "height": 39,
     "name": "cluster/telltale/low-tire-pressure"
   },
      {
     "x": 1727,
     "y": 676,
     "width": 43,
     "height": 27,
     "name": "cluster/telltale/hibeam"
   },
   {
     "x": 1810,
     "y": 675,
     "width": 43,
     "height": 30,
     "name": "cluster/telltale/lowbeam"
   },
  ...
  ...
 ],
 "screen": {
   "width": 1920,
   "height": 720
 },
 "build": {
   "figma_document_id": "taQnsdPS96wZY8dB1TbzOH",
   "design_compiler_version": "0.1.0"
 }
}

รูปภาพการออกแบบที่ส่งออก

ระบบจะแสดงผลและบันทึกรูปภาพของโหนดที่เกี่ยวข้องกับความปลอดภัยในโครงสร้างไดเรกทอรีที่ซ้อนกันตามการตั้งชื่อในเอกสารการออกแบบที่ซีเรียลไลซ์

โครงสร้างไดเรกทอรีของรูปภาพการยืนยันที่สร้างขึ้น

รูปที่ 5 รูปภาพการยืนยัน

ระบบจะสร้างรูปภาพข้อมูลองค์ประกอบที่เกี่ยวข้องกับความปลอดภัยสำหรับโหนดบอกเล่าแต่ละรายการที่ระบุ รูปภาพเหล่านี้มีพิกเซลที่คาดไว้ขององค์ประกอบที่สำคัญต่อความปลอดภัยเมื่อมองเห็นบนหน้าจอ จอมอนิเตอร์เพื่อความปลอดภัยอาจละเว้นพิกเซลโปร่งใสในรูปภาพเหล่านี้เพื่อวัตถุประสงค์ในการทดสอบพิกเซลรันไทม์

นอกจากนี้ ระบบยังสร้างรูปภาพการทดสอบและการยืนยัน UI ด้วย โดยจะแสดงภาพหน้าจอของ UI แบบเต็มพร้อมโหนดบอกเล่าแต่ละรายการและจัดเตรียมรูปภาพเหล่านั้นเพื่อสร้างรายงานที่มนุษย์อ่านได้ เพื่อให้วิศวกรด้านความปลอดภัยตรวจสอบและอนุมัติการกำหนดค่าด้านความปลอดภัย

นอกจากนี้ คุณยังใช้รูปภาพเหล่านี้สำหรับการทดสอบจอมอนิเตอร์เพื่อความปลอดภัยในภายหลังได้ด้วย ระบบจะสร้างรูปภาพการยืนยันสำหรับโหนดบอกเล่าทั้งหมดในสถานะเปิดและปิด

รูปภาพเหล่านี้แสดงการออกแบบที่มีองค์ประกอบที่เกี่ยวข้องกับความปลอดภัยทั้งหมด ทั้งที่ใช้งานอยู่และไม่ใช้งาน

องค์ประกอบที่เกี่ยวข้องกับความปลอดภัยที่ใช้งานอยู่และไม่ได้ใช้งาน องค์ประกอบที่เกี่ยวข้องกับความปลอดภัยที่ใช้งานอยู่และไม่ได้ใช้งาน

รูปที่ 6 และรูปที่ 7 องค์ประกอบที่เกี่ยวข้องกับความปลอดภัยที่ใช้งานอยู่และไม่ใช้งาน

รูปที่ 8 แสดงรูปภาพข้อมูลที่เกี่ยวข้องกับความปลอดภัยสำหรับโหนดบอกเล่า "ไม่คาดเข็มขัดนิรภัย"

ข้อมูลที่เกี่ยวข้องกับความปลอดภัยสำหรับไฟเตือนไม่คาดเข็มขัดนิรภัย

รูปที่ 8 โหนดบอกเล่า "ไม่คาดเข็มขัดนิรภัย"

รูปที่ 9 แสดงรูปภาพการทดสอบและการยืนยัน UI สำหรับโหนดบอกเล่า

การทดสอบและการยืนยัน UI สำหรับการบอกเล่า

รูปที่ 9 การทดสอบและการยืนยัน UI สำหรับโหนดบอกเล่า

ระบบจะสร้างรูปภาพการยืนยันสำหรับทุกองค์ประกอบในโฟลเดอร์อาร์ติแฟกต์ที่คอมไพล์แล้ว ระบบจะประมวลผลรูปภาพเหล่านี้ในขั้นตอนการสร้างโค้ดและเพิ่มลงในไฟล์ส่วนหัวเพื่อใช้สำหรับการทดสอบพิกเซลรันไทม์ในจอมอนิเตอร์เพื่อความปลอดภัย

เครื่องมือสร้างรายงานที่มนุษย์อ่านได้

หลังจากสร้างอาร์ติแฟกต์จากเอกสาร Figma แล้ว คุณจะสร้างรายงานที่มนุษย์อ่านได้ เครื่องมือสร้างรายงานจะอยู่ใน utils/human-readable-report-generator

ระบบจะสรุปอาร์ติแฟกต์ของโหนดที่เกี่ยวข้องกับความปลอดภัยที่สร้างโดยคอมไพเลอร์การออกแบบในไฟล์ HTML ซึ่งรวมถึงภาพหน้าจอของ UI ที่มีโหนดที่ใช้งานอยู่ คุณสามารถตรวจสอบอาร์ติแฟกต์ที่คอมไพล์แล้วก่อนที่จะสร้างจอมอนิเตอร์เพื่อความปลอดภัย

เรียกใช้เครื่องมือสร้างรายงานจากบรรทัดคำสั่ง

cargo run --bin human-readable-report-generator -- -d /path/to/data.json
-o /path/to/output_folder

ตารางนี้อธิบายอินพุตของเครื่องมือสร้างรายงานที่มนุษย์อ่านได้

อินพุต สั้น ประเภท คำอธิบาย
data_folder -d สตริง ตำแหน่งของ data.json ที่สร้างโดยคอมไพเลอร์ด้านความปลอดภัย
output_path -o สตริง เส้นทางที่จะบันทึกรายงานที่สร้างขึ้น

เครื่องมืออนุมัติด้านความปลอดภัย

หากต้องการสร้างโทเค็นการอนุมัติ วิศวกรด้านความปลอดภัยสามารถเรียกใช้สคริปต์การอนุมัติด้านความปลอดภัยกับ output.json หลังจากตรวจสอบรายงานที่มนุษย์อ่านได้ เครื่องมือนี้ยังอยู่ใน utils/human-readable-report-generator ด้วย เช่น

cargo run --bin approve-hrr -- -f /path/to/compiler_inspection_output.html -n
"Your Name" -e youremail@domain.com -o output/path

ตัวอย่างรายงาน HTML สำหรับการตรวจสอบ

รูปที่ 10 ตัวอย่างรายงาน HTML

ส่วนนี้อธิบายอินพุตของเครื่องมืออนุมัติด้านความปลอดภัย

อินพุต สั้น ประเภท คำอธิบาย
file_path -f สตริง เส้นทางไฟล์ไปยังรายงานที่มนุษย์อ่านได้
approver_name -n สตริง ชื่อวิศวกรผู้อนุมัติ
approver_email -e สตริง ที่อยู่อีเมลของวิศวกรผู้อนุมัติ
output_path -o สตริง ปลายทางสำหรับเอาต์พุตที่สร้างขึ้น

ส่วนนี้แสดงตัวอย่าง approval_file.json

{
    "approver_name": //Name of the approver
    "approver_email": //Email of the approver
    "file_hash": //SHA-256 hash generated against the human readable report.
}

จอมอนิเตอร์เพื่อความปลอดภัยอ้างอิง

จอมอนิเตอร์เพื่อความปลอดภัยอ้างอิงเป็นบริการที่ใช้ Rust ซึ่งอยู่ใน reference/safety-monitor จอมอนิเตอร์ใช้ประโยชน์จากอาร์ติแฟกต์ที่สร้างโดยคอมไพเลอร์การออกแบบเพื่อตรวจสอบสถานะของระบบเพื่อให้มั่นใจว่ามีการปฏิบัติตามข้อกำหนดด้านความปลอดภัยในการแสดงผล

จอมอนิเตอร์ทำงานเป็นไบนารีแบบสแตนด์อโลน (har_safety_monitor) และใช้เส้นทางไปยังไฟล์ data.json และเส้นทางฐานสำหรับอาร์ติแฟกต์เป็นอาร์กิวเมนต์

/path/to/har_safety_monitor --data-json-path /path/to/data.json
--artifact-base-path /path/to/artifacts

จอมอนิเตอร์จะทำงานต่อไปนี้

  • การโหลดอาร์ติแฟกต์: โหลด data.json เพื่อระบุองค์ประกอบ UI ที่เกี่ยวข้องกับความปลอดภัย รวมถึงตำแหน่งและขนาดที่คาดไว้
  • การเปรียบเทียบรูปภาพอ้างอิง: เปรียบเทียบเนื้อหาปัจจุบันของหน้าจอด้วยรูปภาพอ้างอิงขององค์ประกอบที่สำคัญต่อความปลอดภัยซึ่งสร้างโดยคอมไพเลอร์
  • การผสานรวมข้อมูลยานพาหนะ: เชื่อมต่อกับแหล่งข้อมูลยานพาหนะเพื่อกำหนดสถานะที่คาดไว้ของโหนดบอกเล่าแต่ละรายการ
  • การตรวจหาความไม่ตรงกัน: บันทึกข้อผิดพลาดหากมีข้อมูลที่คาดไว้ตามข้อมูลยานพาหนะไม่ตรงกับสิ่งที่มองเห็นบนหน้าจอ

จอมอนิเตอร์เพื่อความปลอดภัยได้รับการออกแบบมาให้สร้างและติดตั้งใช้งานเป็นส่วนหนึ่งของอิมเมจระบบ ซึ่งโดยปกติจะอยู่ใน APEX ที่เฉพาะเจาะจง