Cadena de herramientas de diseño de seguridad

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.

Cadena de herramientas de diseño de seguridad

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.

Flujo de trabajo de la cadena de herramientas de diseño de seguridad

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.

Archivo de diseño de Figma de muestra para compilar el monitor de seguridad

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.json en 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.json para su posterior procesamiento configurando la marca RenderOptions::PixelPerfect en el esquema del kit de herramientas.

En esta figura, se muestra un archivo de diseño de Figma.

Contenido del archivo ZIP

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.

Estructura de directorios de las imágenes de verificación generadas

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.

Elementos activos e inactivos relevantes para la seguridad Elementos activos e inactivos relevantes para la seguridad

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:

Información relevante para la seguridad de la luz indicadora de falta de 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.

Pruebas y verificación de la IU para el indicador

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

Ejemplo de informe HTML para su revisión

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.json para 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.