Permite a las aplicaciones la monitorización relativa al estado, el antirrebote y la consulta de DTC de eventos de diagnóstico.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 2f3253efefb6ProcedenciaPreguntas abiertas (2)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
Permite a las aplicaciones la monitorización relativa al estado, el antirrebote y la consulta de DTC de eventos de diagnóstico.
La clase ara::diag::Event proporciona en AUTOSAR Adaptive operaciones para la monitorización de eventos de diagnóstico y sus estados de antirrebote y de error. Las aplicaciones instancian el objeto a través de un InstanceSpecifier, registran notificaciones de cambio opcionales y consultan información de diagnóstico y de DTC de forma asíncrona [SWS_DM_00647]. Como restricción central, la instancia no es copiable ni reubicable (movible), y la mayoría de los métodos de consulta requieren sincronización del lado de la aplicación en caso de acceso concurrente debido a la falta de seguridad para hilos [SWS_DM_00649].
Contexto
La clase ara::diag::Event sirve en la AUTOSAR Adaptive Platform como interfaz principal para interactuar con eventos de diagnóstico. Actúa como enlace entre el software específico de la aplicación y la administración central de diagnóstico. A través de esta interfaz, las aplicaciones monitorizan el estado actual de diagnóstico y de antirrebote de un evento o reciben notificaciones sobre cambios de estado.
En el contexto del sistema, en la interacción participan esencialmente tres partes:
Software de aplicación: instancia la clase, inicia consultas de estado y recibe actualizaciones de estado asíncronas.
ara::diag::Event: encapsula el puerto de diagnóstico tipado (PortPrototype de un DiagnosticEventInterface) y proporciona métodos de consulta entre hilos o entre procesos.
Diagnostic Management (DM): ejecuta en el lado del servidor la detección de errores, las asignaciones de DTC y el comportamiento de antirrebote (debouncing).
Diagrama de contexto: integración de la clase Event entre el software de aplicación y Diagnostic Management. Fuentes: [SWS_DM_00647], [SWS_DM_00653]
Ciclo de vida
La instanciación se realiza explícitamente mediante la entrega de un ara::core::InstanceSpecifier[SWS_DM_00647]. El identificador debe hacer referencia a un PortPrototype tipado mediante un DiagnosticEventInterface. El constructor es exception-safe y thread-safe [SWS_DM_00647].
En cuanto a las relaciones de propiedad, ara::diag::Event se define como una instancia única no copiable y no reubicable (movible): tanto el constructor de copia [SWS_DM_01681] como el constructor de movimiento [SWS_DM_01682] y los operadores de asignación asociados ([SWS_DM_01679], [SWS_DM_01680]) están explícitamente eliminados (=delete). Un InstanceSpecifier no debe instanciarse múltiples veces por proceso [SWS_DM_00647].
La destrucción se realiza mediante el destructor ~Event()[SWS_DM_00648]. A diferencia del constructor, el destructor no es thread-safe. Las demás funciones miembro (a excepción de GetDTCNumber) también están especificadas como no thread-safe, por lo que las llamadas paralelas sobre la misma instancia deben sincronizarse del lado de la aplicación. En el Release R25-11 se armonizó la terminología correspondiente de reentrancy a concurrency AUTOSAR_AP_SWS_Diagnostics §1 «Change History».
Ruta de uso
Un caso de uso típico se divide en las siguientes llamadas:
Inicialización: la aplicación crea la instancia a través de su InstanceSpecifier[SWS_DM_00647]. Es probable que la vinculación establezca la conexión con el demonio de diagnóstico en el momento de la inicialización. Pregunta Q-78e4462a0d147cfb (abierta)
Registrar notificador: para la monitorización se registra opcionalmente una devolución de llamada (callback) mediante SetEventStatusChangedNotifier[SWS_DM_00650]. Una llamada posterior sobrescribe el notificador establecido previamente.
Consultas de estado: durante el funcionamiento, la aplicación consulta datos de diagnóstico de forma asíncrona a través de ara::core::Future:
GetEventStatus() determina el byte de estado actual [SWS_DM_00649].
GetDebouncingStatus() devuelve el estado de antirrebote actual [SWS_DM_00654].
GetFaultDetectionCounter() consulta el contador de detección de fallos (FDC) [SWS_DM_00656].
GetTestComplete() comprueba si la prueba se ha completado (el FDC alcanza -128 o 127) [SWS_DM_00655].
GetDTCNumber(dtcFormat) suministra el número de DTC asociado en el formato seleccionado y está implementado como thread-safe [SWS_DM_00653].
Las condiciones de error se manifiestan en forma de violaciones de modelado (Violations) durante la instanciación o como códigos de error en tiempo de ejecución:
Infracciones durante la llamada al constructor [SWS_DM_00647]:
InstanceSpecifierMappingIntegrityViolation: el identificador no se puede resolver en el modelo o no hace referencia a ningún PortPrototype.
PortInterfaceMappingViolation: el PortPrototype referenciado no está tipado como DiagnosticEventInterface.
ProcessMappingViolation: no se encontró ningún contexto modelado adecuado para el proceso.
InstanceSpecifierAlreadyInUseViolation: una instancia activa ya está utilizando el identificador en el mismo proceso.
Códigos de error en tiempo de ejecución a través de ara::core::Result o ara::core::Future:
Register a notifier function which is called if a diagnostic event is changed. A consecutive call of this method will overwrite the previous registered notifier.
InstanceSpeci- InstanceSpecifier either cannot be resolved in the model in the fierMappingIn- context of your executable, or it refers to a model element other tegrityViolation than a PortPrototype. PortInterfaceMap- A PortPrototype that is referenced by a pingViolation DiagnosticEventPortMapping needs to be typed by a DiagnosticEventInterface. ProcessMappingVio- Matching InstanceRef exists, but no matching (modelled) Process lation found that matches the (runtime) process. InstanceSpecifier- Violation message that is sent in case a constructor in the ara AlreadyInUseViola- framework was called with an InstanceSpecifier already in use in tion this process.
Parameter (in)
Parameter
Beschreibung
specifier
InstanceSpecifier to a PortPrototype of a DiagnosticEventInterface.
Request a governed re-review of this record. The record is not changed immediately.
Register a notifier function which is called if a diagnostic event is changed. A consecutive call of this method will overwrite the previous registered notifier.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 07bc53ae711cProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
A través del método [SWS_DM_00650] de la clase ara::diag::Event (archivo de cabecera ara/diag/event.h), una Adaptive Application registra una función de retrollamada del tipo EventStatusByteNotifier. Tras un registro correcto, Diagnostic Management (DM) llama a este notificador con cada cambio de estado del evento de diagnóstico asociado [SWS_DM_01029]. Una llamada consecutiva al método sobrescribe el notificador registrado previamente [SWS_DM_00650]. La función posee la firma ara::core::Result<void> SetEventStatusChangedNotifier(EventStatusByteNotifier notifier) noexcept y, en caso de éxito, devuelve un resultado vacío [SWS_DM_00650].
Si se produce un error durante el procesamiento, el método devuelve el código de error DiagErrc::kInvalidArgument[SWS_DM_00650]. Aunque la interfaz está declarada como segura frente a excepciones (exception safe), se considera explícitamente no segura para subprocesos (not thread-safe) [SWS_DM_00650]. Interpretación: Los accesos concurrentes a la misma instancia deben sincronizarse en la aplicación; por lo tanto, es de suponer que el registro debería realizarse preferentemente durante la fase de inicialización de la aplicación. Pregunta Q-d8ed099eaed6b197 (abierta)
gemini-3.8-flash-low· 2026-10-13 · Original en alemán