Chuỗi công cụ thiết kế an toàn

Sử dụng chuỗi công cụ thiết kế an toàn để cung cấp giải pháp giám sát an toàn được tạo từ tài liệu thiết kế Figma. Hãy sử dụng chuỗi công cụ này theo trình tự.

Trình biên dịch thiết kế an toàn tạo ra các cấu phần an toàn để thúc đẩy quá trình tạo mã tiếp theo nhằm xây dựng trình giám sát an toàn. Việc tách biệt giữa quá trình biên dịch thiết kế và tạo mã cho phép công cụ tạo mã đạt được xếp hạng TCL-3 theo tiêu chuẩn ISO-26262.

Chuỗi công cụ thiết kế an toàn

Hình 1. Chuỗi công cụ thiết kế an toàn.

Sau khi trình biên dịch tạo cấu phần, chuỗi công cụ sẽ tạo một báo cáo mà kỹ sư an toàn của OEM có thể kiểm tra để xác thực các cấu phần được tạo từ thiết kế Figma.

Quy trình công việc của chuỗi công cụ thiết kế an toàn

Hình 2. Quy trình làm việc của chuỗi công cụ thiết kế an toàn.

Đầu vào của trình biên dịch thiết kế

Tài liệu thiết kế được tuần tự hoá biểu thị một thiết kế giao diện người dùng được nhập từ một công cụ thiết kế và được xử lý bằng lược đồ bộ công cụ. Tệp này chứa thông tin được phân tích cú pháp từ thiết kế:

  • Cây nút hoàn chỉnh của một thiết kế
  • Hình ảnh và thành phần
  • Siêu dữ liệu như tên, phiên bản và ngày sửa đổi gần đây nhất

Các nút gốc của thiết kế phải được xác định trong danh sách nút và phải là các nút gốc cho các thành phần liên quan đến an toàn được xác định trong thiết kế.

Tệp này tích hợp với Android Automotive OS để kết xuất cụm công cụ và hiển thị các thành phần không liên quan đến an toàn bằng trình kết xuất có độ khả dụng cao (HAR) chạy trên SDV Media dưới dạng lớp phủ để hiển thị các thành phần liên quan đến an toàn cho người dùng.

Trình biên dịch thiết kế sử dụng các tuỳ chỉnh DesignCompose để tạo đầu ra nhằm bật/tắt chế độ hiển thị của các thành phần quan trọng về an toàn trong thiết kế. Thiết kế được kết xuất không có giao diện người dùng bằng Impeller. Giữa các thay đổi về tuỳ chỉnh, hệ thống sẽ gửi các lệnh chụp ảnh màn hình đến phần phụ trợ kết xuất để tạo cấu phần hình ảnh.

Tệp thiết kế mẫu trên Figma để tạo màn hình giám sát an toàn

Hình 3. Tệp thiết kế Figma mẫu để xây dựng trình giám sát an toàn.

Thư mục đầu ra

Đây là vị trí trên hệ thống tệp cục bộ nơi trình biên dịch lưu trữ các cấu phần đã tạo.

Tệp cấu hình JSON

Thông thường, kỹ sư an toàn của OEM sẽ tạo tệp cấu hình JSON. Tệp này chứa siêu dữ liệu ghi lại thông tin liên quan đến an toàn của xe mà không được ghi lại trong thiết kế giao diện người dùng. Tệp này chứa dữ liệu sau:

  • Phần tử thiết kế được chỉ định là gốc của màn hình liên quan đến an toàn. Phần tử thiết kế này có kích thước phù hợp với màn hình xe. Kích thước phải có cùng độ phân giải với màn hình. Tất cả các phần tử liên quan đến an toàn phải là phần tử con của phần tử này. Chúng không cần phải là phần tử con trực tiếp, mà được lồng trong các nút trung gian. Gốc này là đối tượng nút gốc và tên của đối tượng này phải khớp với một nút trong tài liệu thiết kế.

  • Màn hình mục tiêu cho thiết kế. Để hỗ trợ giao diện người dùng có các phần tử trên nhiều màn hình, tệp cấu hình có thể chỉ định nhiều thiết kế, mỗi thiết kế được nhắm mục tiêu để hiển thị trên một màn hình riêng.

  • Từ điển tên tín hiệu bus xe với các phần tử giao diện người dùng được liên kết. Khoá và giá trị của từ điển này là:

    • Khoá: Tên tín hiệu bus xe chứa ý nghĩa để khi tín hiệu này hoạt động, phần tử trên giao diện người dùng được liên kết sẽ xuất hiện. Khi tín hiệu không hoạt động, phần tử trên giao diện người dùng được liên kết sẽ không xuất hiện.

    • Giá trị: Mã nút Figma cho phần tử liên quan đến an toàn chịu sự điều chỉnh của tín hiệu bus xe.

Xem tệp cấu hình JSON mẫu này:

{
  "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
    }
  ]
 }

Chạy trình biên dịch thiết kế

Cách chạy trình biên dịch thiết kế:

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

Đầu vào của trình biên dịch thiết kế được mô tả trong bảng này:

Đầu vào Ngắn Loại Mô tả
Định cấu hình -c chuỗi Đường dẫn để lưu tệp JSON cấu hình an toàn.
Đầu ra -o chuỗi Đường dẫn để lưu các cấu phần đã tạo.

Đầu ra của trình biên dịch thiết kế

Trình biên dịch thiết kế tạo và lưu đầu ra vào thư mục đầu ra được chỉ định khi bạn gọi công cụ trình biên dịch. Đầu ra này tạo các tệp tiêu đề dùng để xác định các bài kiểm tra pixel thời gian chạy trong trình giám sát an toàn và để tạo báo cáo mà con người có thể đọc được. Đầu ra của trình biên dịch thiết kế được cung cấp trong tệp Zip chứa:

  • Tệp siêu dữ liệu data.json ở gốc của các thành phần đã xuất để mô tả cấu trúc của thiết kế đã xuất. Tất cả các đường dẫn trong tệp đều tương ứng với tệp này.

  • Chuỗi hình ảnh phần tử trên giao diện người dùng riêng biệt để hiển thị các phần tử trên giao diện người dùng liên quan đến an toàn ở trạng thái đang hoạt động được dùng trong quá trình tạo mã tiếp theo. Kênh alpha trong các hình ảnh này chứa thông tin pixel không ảnh hưởng đến an toàn.

  • Chuỗi hình ảnh giao diện người dùng đầy đủ để hiển thị các phần tử giao diện người dùng liên quan đến an toàn ở trạng thái đang hoạt động và không hoạt động để sử dụng trong khi kiểm thử mã đã tạo.

  • Phiên bản cập nhật của tài liệu Figma được tuần tự hoá mà trình biên dịch sử dụng làm đầu vào. HAR đánh dấu và cập nhật các nút chỉ báo được chỉ định trong Config.json để xử lý thêm bằng cách đặt cờ RenderOptions::PixelPerfect trong lược đồ bộ công cụ.

Hình này cho thấy một tệp thiết kế Figma.

Nội dung trong tệp ZIP

Hình 4. Nội dung tệp Zip.

Tạo tệp đầu vào

Tạo tệp đầu vào data.json cho trình tạo trình giám sát an toàn. Đầu ra được cấu trúc dưới dạng một mảng chứa dữ liệu theo chiều và đường liên kết của hình ảnh cho từng phần tử hiển thị liên quan đến an toàn. Cấu trúc của tệp đầu ra này được mô tả trong bảng này:

Phần tử Loại Đơn vị Mô tả
static_ui_elements Từ điển Không áp dụng Cấu trúc chứa siêu dữ liệu cho tất cả các phần tử giao diện người dùng liên quan đến an toàn được trích xuất từ tài liệu Figma.
x int pixel Toạ độ ngang của phần tử liên quan đến an toàn.
y int pixel Toạ độ dọc của phần tử liên quan đến an toàn.
width int pixel Chiều rộng của phần tử liên quan đến an toàn
height int pixel Chiều cao của phần tử liên quan đến an toàn.
name chuỗi Không áp dụng Tên của phần tử trên giao diện người dùng liên quan đến an toàn được trích xuất từ tài liệu Figma. Biểu thị đường dẫn tương đối đến các hình ảnh được tạo bằng phần tử này.
screen Từ điển mô tả màn hình mà giao diện người dùng nhắm đến.
width int pixel Chiều rộng của giao diện người dùng tài liệu Figma.
height int pixel Chiều cao của giao diện người dùng tài liệu Figma.
build Từ điển chứa thông tin bản dựng cho lần gọi trình biên dịch thiết kế này.
figma_document_id chuỗi Không áp dụng Mã nhận dạng của tài liệu Figma dùng để tạo tập hợp cấu phần.
design_compiler_version chuỗi Không áp dụng Phiên bản của Trình biên dịch thiết kế dùng để tạo tập hợp cấu phần.

Phần này cung cấp mẫu tệp data.json đã tạo:

{
 "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"
 }
}

Hình ảnh thiết kế đã xuất

Hệ thống kết xuất và lưu hình ảnh của các nút liên quan đến an toàn trong cấu trúc thư mục lồng nhau dựa trên tên của các nút đó trong tài liệu thiết kế được tuần tự hoá.

Cấu trúc thư mục của hình ảnh xác minh được tạo

Hình 5. Hình ảnh xác minh.

Hệ thống tạo hình ảnh thông tin phần tử liên quan đến an toàn cho từng chỉ báo được chỉ định. Các hình ảnh này chứa các pixel dự kiến của phần tử quan trọng về an toàn khi phần tử đó xuất hiện trên màn hình. Trình giám sát an toàn có thể bỏ qua các pixel trong suốt trong các hình ảnh này cho mục đích kiểm thử pixel thời gian chạy.

Hệ thống cũng tạo hình ảnh kiểm thử và xác minh giao diện người dùng. Hệ thống kết xuất ảnh chụp màn hình của toàn bộ giao diện người dùng với từng chỉ báo riêng lẻ và cung cấp các ảnh chụp màn hình đó để tạo báo cáo mà con người có thể đọc được, nhờ đó kỹ sư an toàn có thể xem xét và phê duyệt cấu hình an toàn.

Bạn cũng có thể sử dụng các hình ảnh này để kiểm thử tiếp theo đối với trình giám sát an toàn. Hệ thống tạo hình ảnh xác minh cho tất cả các chỉ báo ở trạng thái Bật và Tắt.

Các hình ảnh này minh hoạ thiết kế với tất cả các phần tử liên quan đến an toàn, đang hoạt động và không hoạt động.

Các phần tử liên quan đến sự an toàn đang hoạt động và không hoạt động Các phần tử liên quan đến sự an toàn đang hoạt động và không hoạt động

Hình 6Hình 7. Các phần tử liên quan đến an toàn đang hoạt động và không hoạt động.

Hình 8 cho thấy hình ảnh thông tin liên quan đến an toàn cho chỉ báo không thắt dây an toàn:

Thông tin liên quan đến an toàn cho đèn báo không thắt dây an toàn

Hình 8. Chỉ báo không thắt dây an toàn.

Hình 9 cho thấy hình ảnh kiểm thử và xác minh giao diện người dùng cho chỉ báo.

Kiểm thử và xác minh giao diện người dùng cho telltale

Hình 9. Kiểm thử và xác minh giao diện người dùng cho chỉ báo.

Hệ thống tạo hình ảnh xác minh cho mọi phần tử trong thư mục cấu phần đã biên dịch. Hệ thống xử lý các hình ảnh này trong bước tạo mã và thêm các hình ảnh đó vào tệp tiêu đề để dùng cho các bài kiểm tra pixel thời gian chạy trong trình giám sát an toàn.

Trình tạo báo cáo mà con người có thể đọc được

Sau khi tạo các cấu phần từ tài liệu Figma, bạn có thể tạo báo cáo mà con người có thể đọc được. Trình tạo báo cáo nằm trong utils/human-readable-report-generator.

Hệ thống tóm tắt các cấu phần của các nút liên quan đến an toàn do Trình biên dịch thiết kế tạo trong tệp HTML, bao gồm cả ảnh chụp màn hình của giao diện người dùng có nút đang hoạt động. Bạn có thể xem xét các cấu phần đã biên dịch trước khi xây dựng trình giám sát an toàn.

Chạy trình tạo báo cáo qua dòng lệnh:

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

Bảng này mô tả các đầu vào của trình tạo báo cáo mà con người có thể đọc được.

Đầu vào Ngắn Loại Mô tả
data_folder -d chuỗi Vị trí của data.json do trình biên dịch an toàn tạo.
output_path -o chuỗi Đường dẫn để lưu báo cáo đã tạo.

Công cụ phê duyệt an toàn

Để tạo mã thông báo phê duyệt, sau khi xem xét báo cáo mà con người có thể đọc được, kỹ sư an toàn có thể chạy tập lệnh phê duyệt an toàn đối với output.json. Công cụ này cũng nằm trong utils/human-readable-report-generator. Ví dụ:

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

Báo cáo mẫu dưới dạng HTML để xem xét

Hình 10. Báo cáo HTML mẫu.

Phần này mô tả các đầu vào của công cụ phê duyệt an toàn.

Đầu vào Ngắn Loại Mô tả
file_path -f chuỗi Đường dẫn tệp đến báo cáo mà con người có thể đọc được.
approver_name -n chuỗi Tên của kỹ sư phê duyệt.
approver_email -e chuỗi Địa chỉ email của kỹ sư phê duyệt.
output_path -o chuỗi Đích đến cho đầu ra đã tạo.

Phần này cho thấy mẫu 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.
}

Trình giám sát an toàn tham chiếu

Trình giám sát an toàn tham chiếu là một dịch vụ dựa trên Rust nằm trong reference/safety-monitor. Trình giám sát sử dụng các cấu phần do Trình biên dịch thiết kế tạo để giám sát trạng thái của hệ thống nhằm đảm bảo tuân thủ an toàn màn hình.

Trình giám sát chạy dưới dạng tệp nhị phân độc lập (har_safety_monitor) và lấy đường dẫn đến tệp data.json và đường dẫn cơ sở cho các cấu phần làm đối số.

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

Trình giám sát thực hiện các tác vụ sau:

  • Tải cấu phần: Tải data.json để xác định các phần tử giao diện người dùng liên quan đến an toàn và vị trí cũng như kích thước dự kiến của các phần tử đó.
  • So sánh hình ảnh chuẩn: So sánh nội dung màn hình hiện tại với hình ảnh chuẩn của các phần tử quan trọng về an toàn do trình biên dịch tạo.
  • Tích hợp dữ liệu xe: Kết nối với các nguồn dữ liệu xe để xác định trạng thái dự kiến của từng chỉ báo.
  • Phát hiện sự không khớp: Ghi lại lỗi nếu có sự không khớp giữa những gì dự kiến dựa trên dữ liệu xe và những gì xuất hiện trên màn hình.

Trình giám sát an toàn được thiết kế để xây dựng và triển khai như một phần của hình ảnh hệ thống, thường là trong APEX chuyên dụng.