Usa la cadena de herramientas de diseño de seguridad para entregar una solución de supervisión de seguridad generada a partir de un documento de diseño de Figma. Usa esta serie de herramientas en secuencia.
El compilador de diseño de seguridad produce artefactos de seguridad para impulsar la generación de código posterior para compilar el monitor de seguridad. La separación entre la compilación del diseño y la generación de código permite que el generador de código alcance una calificación de TCL-3 según la norma ISO-26262.
Figura 1: Cadena de herramientas de diseño de seguridad
Después de que el compilador genera artefactos, la cadena de herramientas crea un informe que un ingeniero de seguridad del OEM puede inspeccionar para validar los artefactos generados a partir del diseño de Figma.
Figura 2: Flujo de trabajo de la cadena de herramientas de diseño de seguridad.
Diseña entradas del compilador
El documento de diseño serializado representa un diseño de IU importado desde una herramienta de diseño y procesado con un esquema de kit de herramientas. El archivo contiene la siguiente información analizada del diseño:
- Árbol de nodos completo de un diseño
- Imágenes y componentes
- Metadatos como el nombre, la versión y la fecha de la última modificación
Los nodos raíz del diseño deben definirse en la lista de nodos y deben ser los nodos raíz de los elementos relevantes para la seguridad identificados en el diseño.
Este archivo se integra en el SO Android Automotive para renderizar el panel de instrumentos y mostrar los elementos no relacionados con la seguridad con un renderizador de alta disponibilidad (HAR) que se ejecuta en SDV Media como una superposición para mostrar los elementos relacionados con la seguridad al usuario.
El compilador de diseño usa personalizaciones de DesignCompose para generar resultados que activan o desactivan la visibilidad de los elementos críticos para la seguridad en el diseño. El diseño se renderiza sin interfaz gráfica con Impeller. Entre los cambios de personalización, el sistema emite comandos de captura de pantalla al backend de renderización para generar artefactos de imágenes.
Figura 3: Archivo de diseño de Figma de muestra para crear un monitor de seguridad.
Directorio de salida
Esta es la ubicación en el sistema de archivos local donde el compilador almacena los artefactos generados.
Archivo de configuración JSON
Por lo general, un ingeniero de seguridad del OEM crea el archivo de configuración JSON, que contiene metadatos que capturan la información relevante para la seguridad del vehículo que no se captura en un diseño de IU. Este archivo contiene los siguientes datos:
Elemento de diseño designado como raíz de la pantalla relevante para la seguridad. Este elemento de diseño tiene el tamaño adecuado para la pantalla del vehículo. El tamaño debe tener la misma resolución que la pantalla. Todos los elementos relevantes para la seguridad deben ser descendientes de este elemento. No es necesario que sean descendientes directos, sino que pueden estar anidados en nodos intermedios. Esta raíz es el objeto del nodo raíz, y su nombre debe coincidir con un nodo del documento de diseño.
Pantalla objetivo para el diseño. Para admitir IU con elementos en varias pantallas, el archivo de configuración puede especificar más de un diseño, y cada uno de ellos está orientado a mostrarse en una pantalla separada.
Diccionario de nombres de indicadores de bus del vehículo y elementos de la IU asociados. Las claves y los valores de este diccionario son los siguientes:
Claves: Nombre del indicador del bus del vehículo que contiene significado para que, cuando este indicador esté activo, se muestre el elemento de la IU asociado. Cuando el indicador está inactivo, no se muestra el elemento de la IU asociado.
Valores: ID de nodo de Figma para el elemento relevante para la seguridad que se rige por el indicador del bus del vehículo.
Consulta este archivo de configuración JSON de ejemplo:
{
"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
}
]
}
Ejecuta el compilador de diseño
Para ejecutar el compilador de diseño, haz lo siguiente:
/path/to/safety-design-compiler -c path/to/<input-file>.json
-o path/to/output_directory
Las entradas del compilador de diseño se describen en esta tabla:
| Entrada | Versión breve | Tipo | Descripción |
|---|---|---|---|
| Configuración | -c |
string | Es la ruta de acceso en la que se guardará el archivo JSON de configuración de seguridad. |
| Salida | -o |
string | Ruta de acceso en la que se guardarán los artefactos generados. |
Diseña el resultado del compilador
El compilador de diseño genera y guarda el resultado en el directorio de salida especificado cuando invocas la herramienta del compilador. Este resultado genera los archivos de encabezado que se usan para definir las pruebas de píxeles en el tiempo de ejecución en el monitor de seguridad y para generar el informe legible. El resultado del compilador de diseño se proporciona en un archivo ZIP que contiene lo siguiente:
Archivo de metadatos
data.jsonen la raíz de los recursos exportados para describir la estructura del diseño exportado Todas las rutas de acceso del archivo son relativas a este archivo.Serie de imágenes aisladas de elementos de la IU para mostrar elementos de la IU relevantes para la seguridad en el estado activo que se usan durante la generación de código posterior. El canal alfa de estas imágenes contiene información de píxeles que no afecta la seguridad.
Serie de imágenes de la IU completa para mostrar elementos de la IU relevantes para la seguridad en estados activos e inactivos para usar durante las pruebas del código generado.
Es la versión actualizada del documento serializado de Figma que el compilador utiliza como entrada. El HAR marca y actualiza los nodos indicadores especificados en
Config.jsonpara su posterior procesamiento configurando la marcaRenderOptions::PixelPerfecten el esquema del kit de herramientas.
En esta figura, se muestra un archivo de diseño de Figma.
Figura 4: Contenido del archivo ZIP
Crea el archivo de entrada
Crea un archivo de entrada data.json para el generador de supervisión de seguridad. El resultado se estructura como un array para contener datos dimensionales y un vínculo de imagen para cada elemento de visualización pertinente para la seguridad. La estructura de este archivo de salida se describe en la siguiente tabla:
| Elemento | Tipo | Unidades | Descripción |
|---|---|---|---|
static_ui_elements |
Diccionario | N/A | Estructura que contiene metadatos para todos los elementos de la IU relevantes para la seguridad extraídos del documento de Figma. |
x |
int | píxeles | Es la coordenada horizontal del elemento relevante para la seguridad. |
y |
int | píxeles | Es la coordenada vertical del elemento relevante para la seguridad. |
width |
int | píxeles | Ancho del elemento relevante para la seguridad |
height |
int | píxeles | Altura del elemento relevante para la seguridad. |
name |
string | N/A | Nombre del elemento de la IU relevante para la seguridad, extraído del documento de Figma. Representa la ruta relativa a las imágenes generadas con este elemento. |
screen |
Es un diccionario para describir la pantalla a la que se dirige la IU. | ||
width |
int | píxeles | Ancho de la IU del documento de Figma. |
height |
int | píxeles | Altura de la IU del documento de Figma. |
build |
Diccionario que contiene información de compilación para esta invocación del compilador de diseño. | ||
figma_document_id |
string | N/A | Es el ID del documento de Figma que se usó para generar el conjunto de artefactos. |
design_compiler_version |
string | N/A | Es la versión de Design Compiler que se usó para generar el conjunto de artefactos. |
En esta sección, se proporciona una muestra de un archivo data.json generado:
{
"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"
}
}
Imágenes de diseño exportadas
El sistema renderiza y guarda imágenes de los nodos relevantes para la seguridad en una estructura de directorios anidada según su denominación en el documento de diseño serializado.
Figura 5: Imágenes de verificación.
El sistema genera imágenes con información de los elementos relevantes para la seguridad de cada indicador especificado. Estas imágenes contienen los píxeles esperados del elemento crítico para la seguridad cuando se ve en la pantalla. Es posible que el monitor de seguridad ignore los píxeles transparentes de estas imágenes para los fines de las pruebas de píxeles en el tiempo de ejecución.
El sistema también genera imágenes de verificación y pruebas de la IU. Renderiza capturas de pantalla de la IU completa con cada señal individual y las proporciona para generar un informe legible para los humanos, de modo que los ingenieros de seguridad puedan revisar y aprobar la configuración de seguridad.
También puedes usar estas imágenes para realizar pruebas posteriores del monitor de seguridad. El sistema genera imágenes de verificación para todas las luces testigo en los estados de encendido y apagado.
En estas imágenes, se ilustra el diseño con todos los elementos relevantes para la seguridad, tanto activos como inactivos.
Figura 6 y Figura 7. Elementos activos e inactivos relevantes para la seguridad
En la figura 8, se muestra la imagen de información relevante para la seguridad de la luz testigo de no usar el cinturón de seguridad:
Figura 8: Luz de advertencia del cinturón de seguridad
La figura 9 muestra la imagen de prueba y verificación de la IU para la luz testigo.
Figura 9: Pruebas y verificación de la IU para el indicador.
El sistema genera imágenes de verificación para cada elemento de la carpeta de artefactos compilados. El sistema procesa estas imágenes en el paso de generación de código y las agrega a un archivo de encabezado para que se usen en las pruebas de píxeles en tiempo de ejecución en el monitor de seguridad.
Generador de informes legible por humanos
Después de generar los artefactos a partir de un documento de Figma, puedes generar un informe legible. El generador de informes se encuentra en utils/human-readable-report-generator.
El sistema resume los artefactos de los nodos relevantes para la seguridad que genera el compilador de diseño en un archivo HTML, incluida una captura de pantalla de la IU con el nodo activo. Puedes revisar los artefactos compilados antes de compilar el monitor de seguridad.
Ejecuta el generador de informes desde la línea de comandos:
cargo run --bin human-readable-report-generator -- -d /path/to/data.json
-o /path/to/output_folder
En esta tabla, se describen las entradas del generador de informes legibles por humanos.
| Entrada | Versión breve | Tipo | Descripción |
|---|---|---|---|
data_folder |
-d |
string | Ubicación de data.json generado por el compilador de seguridad. |
output_path |
-o |
string | Ruta de acceso para guardar el informe generado. |
Herramienta de aprobación de seguridad
Para generar un token de aprobación, después de revisar el informe legible, un ingeniero de seguridad puede ejecutar la secuencia de comandos de aprobación de seguridad en output.json.
Esta herramienta también se encuentra en utils/human-readable-report-generator.
Por ejemplo:
cargo run --bin approve-hrr -- -f /path/to/compiler_inspection_output.html -n
"Your Name" -e youremail@domain.com -o output/path
Figura 10: Ejemplo de informe HTML.
En esta sección, se describen las entradas de la herramienta de aprobación de seguridad.
| Entrada | Versión breve | Tipo | Descripción |
|---|---|---|---|
file_path |
-f |
string | Es la ruta de acceso al informe legible. |
approver_name |
-n |
string | Nombre del ingeniero aprobador. |
approver_email |
-e |
string | Dirección de correo electrónico del ingeniero aprobador. |
output_path |
-o |
string | Es el destino del resultado generado. |
En esta sección, se muestra una muestra de 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 de seguridad de referencia
El monitor de seguridad de referencia es un servicio basado en Rust que se encuentra en reference/safety-monitor. El monitor usa los artefactos generados por el compilador de diseño para supervisar el estado del sistema y garantizar el cumplimiento de la seguridad de la pantalla.
El monitor se ejecuta como un archivo binario independiente (har_safety_monitor) y toma la ruta de acceso al archivo data.json y la ruta de acceso base para los artefactos como argumentos.
/path/to/har_safety_monitor --data-json-path /path/to/data.json
--artifact-base-path /path/to/artifacts
El monitor realiza las siguientes tareas:
- Carga de artefactos: Carga
data.jsonpara identificar los elementos de la IU relevantes para la seguridad y sus posiciones y dimensiones esperadas. - Comparación de imágenes doradas: Compara el contenido de la pantalla actual con imágenes doradas de elementos críticos para la seguridad generadas por el compilador.
- Integración de datos del vehículo: Se conecta a las fuentes de datos del vehículo para determinar el estado esperado de cada luz indicadora.
- Detección de discrepancias: Registra un error si hay una discrepancia entre lo que se espera según los datos del vehículo y lo que se ve en la pantalla.
El monitor de seguridad está diseñado para compilarse y, luego, implementarse como parte de la imagen del sistema, por lo general, dentro de un APEX dedicado.