Utilizza la toolchain di progettazione della sicurezza per fornire una soluzione di monitoraggio della sicurezza generata da un documento di progettazione Figma. Utilizza questa serie di strumenti in sequenza.
Il compilatore di progettazione della sicurezza produce artefatti di sicurezza per guidare la successiva generazione di codice per la creazione del monitor di sicurezza. La separazione tra la compilazione della progettazione e la generazione di codice consente al generatore di codice di ottenere una classificazione ISO 26262 di TCL-3.
Figura 1. Toolchain di progettazione della sicurezza.
Dopo che il compilatore genera gli artefatti, la toolchain crea un report che un ingegnere della sicurezza OEM può esaminare per convalidare gli artefatti generati dal progetto Figma.
Figura 2. Flusso di lavoro della toolchain di progettazione della sicurezza.
Input del compilatore di progettazione
Il documento di progettazione serializzato rappresenta un progetto UI importato da uno strumento di progettazione e trattato con uno schema del toolkit. Il file contiene queste informazioni analizzate dal progetto:
- Albero dei nodi completo di un progetto
- Immagini e componenti
- Metadati come nome, versione e data dell'ultima modifica
I nodi radice del progetto devono essere definiti nell'elenco dei nodi e devono essere i nodi radice degli elementi rilevanti per la sicurezza identificati nel progetto.
Questo file si integra con Android Automotive OS per eseguire il rendering del quadro strumenti e mostra gli elementi non pertinenti alla sicurezza con un renderer ad alta affidabilità (HAR) in esecuzione su SDV Media come overlay per mostrare all'utente gli elementi pertinenti alla sicurezza.
Il compilatore di progettazione utilizza le personalizzazioni di DesignCompose per generare l'output per attivare/disattivare la visibilità degli elementi critici per la sicurezza nel progetto. Il design viene visualizzato headless con Impeller. Tra le modifiche di personalizzazione, il sistema invia comandi di screenshot al backend di rendering per generare artefatti immagine.
Figura 3. File di progettazione Figma di esempio per creare il monitor di sicurezza.
Directory di output
Questa è la posizione sul file system locale in cui il compilatore archivia gli artefatti generati.
File di configurazione JSON
Molto spesso, un ingegnere della sicurezza OEM crea il file di configurazione JSON, che contiene metadati che acquisiscono le informazioni rilevanti per la sicurezza del veicolo non acquisite in un progetto UI. Questo file contiene i seguenti dati:
Elemento di progettazione designato come radice del display pertinente alla sicurezza. Le dimensioni di questo elemento di design sono adatte al display del veicolo. Le dimensioni devono avere la stessa risoluzione del display. Tutti gli elementi pertinenti alla sicurezza devono essere discendenti di questo elemento. Non devono essere discendenti diretti, ma annidati in nodi intermedi. Questa radice è l'oggetto nodo radice e il suo nome deve corrispondere a un nodo nel documento di progettazione.
Target di visualizzazione per il design. Per supportare le UI con elementi su più display, il file di configurazione può specificare più di un design, ciascuno destinato a essere visualizzato su uno schermo separato.
Dizionario dei nomi degli indicatori del bus del veicolo agli elementi della UI associati. Le chiavi e i valori di questo dizionario sono:
Chiavi:nome del segnale del bus del veicolo che deve contenere un significato in modo che, quando questo segnale è attivo, venga visualizzato l'elemento UI associato. Quando il segnale è inattivo, l'elemento UI associato non viene visualizzato.
Valori: ID nodo Figma per l'elemento pertinente alla sicurezza regolato dal segnale del bus del veicolo.
Consulta questo file di configurazione JSON di esempio:
{
"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
}
]
}
Esegui il compilatore di progettazione
Per eseguire il compilatore di progettazione:
/path/to/safety-design-compiler -c path/to/<input-file>.json
-o path/to/output_directory
Gli input del compilatore di progettazione sono descritti in questa tabella:
| Input | Breve | Tipo | Descrizione |
|---|---|---|---|
| Configurazione | -c |
stringa | Il percorso in cui salvare il file JSON di configurazione della sicurezza. |
| Output | -o |
stringa | Percorso in cui salvare gli artefatti generati. |
Output del compilatore di progettazione
Il compilatore di progettazione genera e salva l'output nella directory di output specificata quando richiami lo strumento del compilatore. Questo output genera i file di intestazione utilizzati per definire i test dei pixel di runtime nel monitor di sicurezza e per generare il report leggibile. L'output del compilatore di progettazione viene fornito in un file zip che contiene:
data.jsonnella cartella principale degli asset esportati per descrivere la struttura del progetto esportato. Tutti i percorsi nel file sono relativi a questo file.Serie di immagini di elementi UI isolati per mostrare elementi UI pertinenti alla sicurezza nello stato attivo utilizzati durante la successiva generazione del codice. Il canale alfa di queste immagini contiene informazioni sui pixel che non influiscono sulla sicurezza.
Serie di immagini dell'intera UI per mostrare gli elementi della UI pertinenti alla sicurezza negli stati attivo e inattivo da utilizzare durante il test del codice generato.
Versione aggiornata del documento Figma serializzato utilizzato dal compilatore come input. HAR contrassegna e aggiorna i nodi indicativi specificati in
Config.jsonper l'ulteriore elaborazione impostando il flagRenderOptions::PixelPerfectnello schema del toolkit.
Questa figura mostra un file di progettazione Figma.
Figura 4. Contenuti del file ZIP.
Crea il file di input
Crea un file di input data.json per il generatore di monitor di sicurezza. L'output è
strutturato come un array per contenere dati dimensionali e un link all'immagine per ogni
elemento di visualizzazione pertinente alla sicurezza. La struttura di questo file di output è descritta
in questa tabella:
| Elemento | Tipo | Unità | Descrizione |
|---|---|---|---|
static_ui_elements |
Dizionario | N/D | Struttura contenente i metadati per tutti gli elementi dell'interfaccia utente pertinenti alla sicurezza estratti dal documento Figma. |
x |
int | pixel | Coordinata orizzontale dell'elemento pertinente alla sicurezza. |
y |
int | pixel | Coordinata verticale dell'elemento pertinente alla sicurezza. |
width |
int | pixel | La larghezza dell'elemento pertinente alla sicurezza |
height |
int | pixel | Altezza dell'elemento rilevante per la sicurezza. |
name |
stringa | N/D | Nome dell'elemento UI pertinente alla sicurezza estratto dal documento Figma. Rappresenta il percorso relativo alle immagini generate con questo elemento. |
screen |
Dizionario per descrivere la schermata a cui è destinata la UI. | ||
width |
int | pixel | Larghezza della UI del documento Figma. |
height |
int | pixel | Altezza dell'interfaccia utente del documento Figma. |
build |
Dizionario contenente le informazioni di build per questa chiamata del compilatore di progettazione. | ||
figma_document_id |
stringa | N/D | ID del documento Figma utilizzato per generare il set di artefatti. |
design_compiler_version |
stringa | N/D | Versione di Design Compiler utilizzata per generare il set di artefatti. |
Questa sezione fornisce un esempio di file data.json generato:
{
"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"
}
}
Immagini del progetto esportate
Il sistema esegue il rendering e salva le immagini dei nodi pertinenti alla sicurezza in una struttura di directory nidificata in base alla loro denominazione nel documento di progettazione serializzato.
Figura 5. Immagini di verifica.
Il sistema genera immagini di informazioni sugli elementi rilevanti per la sicurezza per ogni spia specificata. Queste immagini contengono i pixel previsti dell'elemento critico per la sicurezza quando è visibile sullo schermo. Il monitor di sicurezza potrebbe ignorare i pixel trasparenti in queste immagini ai fini dei test dei pixel in fase di runtime.
Il sistema genera anche immagini di test e verifica dell'interfaccia utente. Esegue il rendering di screenshot dell'intera UI con ogni singolo indicatore e li fornisce per generare un report leggibile in modo che gli ingegneri della sicurezza possano esaminare e approvare la configurazione di sicurezza.
Puoi utilizzare queste immagini anche per i test successivi del monitor di sicurezza. Il sistema genera immagini di verifica per tutte le spie negli stati On e Off.
Queste immagini illustrano il design con tutti gli elementi rilevanti per la sicurezza, attivi e inattivi.
Figura 6 e Figura 7. Elementi attivi e inattivi rilevanti per la sicurezza.
La Figura 8 mostra l'immagine delle informazioni rilevanti per la sicurezza per la spia di mancato allacciamento della cintura di sicurezza:
Immagine 8. Spia cintura di sicurezza.
La figura 9 mostra l'immagine di test e verifica dell'interfaccia utente per l'indicatore.
Figura 9. Test e verifica dell'interfaccia utente per l'indicatore.
Il sistema genera immagini di verifica per ogni elemento nella cartella dell'artefatto compilato. Il sistema elabora queste immagini nel passaggio di generazione del codice e le aggiunge a un file di intestazione da utilizzare per i test dei pixel di runtime nel monitor di sicurezza.
Generatore di report leggibili
Dopo aver generato gli artefatti da un documento Figma, puoi generare un report leggibile. Il generatore di report si trova in
utils/human-readable-report-generator.
Il sistema riassume gli artefatti dei nodi pertinenti alla sicurezza generati dal compilatore di progettazione in un file HTML, incluso uno screenshot dell'interfaccia utente con il nodo attivo. Puoi rivedere gli artefatti compilati prima di creare il monitor di sicurezza.
Esegui il generatore di report dalla riga di comando:
cargo run --bin human-readable-report-generator -- -d /path/to/data.json
-o /path/to/output_folder
Questa tabella descrive gli input del generatore di report leggibili.
| Input | Breve | Tipo | Descrizione |
|---|---|---|---|
data_folder |
-d |
stringa | Posizione di data.json generata dal compilatore di sicurezza. |
output_path |
-o |
stringa | Percorso per salvare il report generato. |
Strumento di approvazione della sicurezza
Per generare un token di approvazione, dopo aver esaminato il report leggibile, un
ingegnere della sicurezza può eseguire lo script di approvazione della sicurezza rispetto a output.json.
Questo strumento si trova anche in utils/human-readable-report-generator.
Ad esempio:
cargo run --bin approve-hrr -- -f /path/to/compiler_inspection_output.html -n
"Your Name" -e youremail@domain.com -o output/path
Figura 10. Report HTML di esempio.
Questa sezione descrive gli input dello strumento di approvazione della sicurezza.
| Input | Breve | Tipo | Descrizione |
|---|---|---|---|
file_path |
-f |
stringa | Percorso del file del report leggibile. |
approver_name |
-n |
stringa | Nome dell'ingegnere responsabile dell'approvazione. |
approver_email |
-e |
stringa | Indirizzo email dell'ingegnere approvatore. |
output_path |
-o |
stringa | Destinazione dell'output generato. |
Questa sezione mostra un esempio di 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.
}
Monitor di riferimento per la sicurezza
Il monitor di sicurezza di riferimento è un servizio basato su Rust che si trova in
reference/safety-monitor. Il monitor utilizza gli artefatti generati dal
compilatore di progettazione per monitorare lo stato del sistema e garantire la conformità
alla sicurezza del display.
Il monitor viene eseguito come binario autonomo (har_safety_monitor) e accetta il percorso del file data.json e il percorso di base per gli artefatti come argomenti.
/path/to/har_safety_monitor --data-json-path /path/to/data.json
--artifact-base-path /path/to/artifacts
Il monitor esegue le seguenti attività:
- Caricamento artefatti: carica
data.jsonper identificare gli elementi dell'interfaccia utente rilevanti per la sicurezza e le loro posizioni e dimensioni previste. - Confronto tra immagini di riferimento: confronta i contenuti dello schermo attuale con le immagini di riferimento degli elementi critici per la sicurezza generate dal compilatore.
- Integrazione dei dati del veicolo: si connette alle origini dati del veicolo per determinare lo stato previsto di ogni spia.
- Rilevamento di mancate corrispondenze:registra un errore se si verifica una mancata corrispondenza tra ciò che è previsto in base ai dati del veicolo e ciò che è visibile sullo schermo.
Il monitor di sicurezza è progettato per essere creato e implementato come parte dell'immagine di sistema, in genere all'interno di un APEX dedicato.