Permet aux applications d'effectuer la surveillance relative à l'état, le filtrage (debouncing) et l'interrogation de DTC d'événements de diagnostic.
GÉNÉRÉ PAR IAnon vérifiéModèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 2f3253efefb6ProvenanceQuestions ouvertes (2)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand
Permet aux applications d'effectuer la surveillance relative à l'état, le filtrage (debouncing) et l'interrogation de DTC d'événements de diagnostic.
Dans AUTOSAR Adaptive, la classe ara::diag::Event fournit des opérations pour la surveillance d'événements de diagnostic ainsi que de leur état de debouncing et de défaut. Les applications instancient l'objet via un InstanceSpecifier, enregistrent des notifications de modification optionnelles et récupèrent les informations de diagnostic et de DTC de manière asynchrone [SWS_DM_00647]. En tant que contrainte fondamentale, l'instance n'est ni copiable ni déplaçable, et la plupart des méthodes d'interrogation nécessitent, en raison de l'absence de sécurité des threads, une synchronisation côté application en cas d'accès concurrent [SWS_DM_00649].
Contexte
Dans l'AUTOSAR Adaptive Platform, la classe ara::diag::Event sert d'interface principale pour l'interaction avec les événements de diagnostic. Elle fait office de passerelle entre le logiciel spécifique à l'application et la gestion centrale du diagnostic. Par l'intermédiaire de cette interface, les applications surveillent l'état actuel de diagnostic et de debouncing d'un événement ou sont informées des modifications d'état.
Dans le contexte système, trois parties principales participent à l'interaction :
Logiciel applicatif : instancie la classe, déclenche les interrogations d'état et reçoit les mises à jour d'état asynchrones.
ara::diag::Event : encapsule le port de diagnostic typé (PortPrototype d'un DiagnosticEventInterface) et fournit des méthodes d'interrogation inter-threads ou inter-processus.
Diagnostic Management (DM) : exécute côté serveur la détection des défauts, les assignations de DTC et le comportement de filtrage (debouncing).
Diagramme de contexte : intégration de la classe Event entre le logiciel applicatif et le Diagnostic Management. Sources : [SWS_DM_00647], [SWS_DM_00653]
Cycle de vie
L'instanciation s'effectue explicitement par la transmission d'un ara::core::InstanceSpecifier[SWS_DM_00647]. L'identifiant doit référencer un PortPrototype typé via un DiagnosticEventInterface. Le constructeur est exception-safe et thread-safe [SWS_DM_00647].
En ce qui concerne les relations de propriété, ara::diag::Event est défini comme une instance unique non copiable et non déplaçable : aussi bien le constructeur de copie [SWS_DM_01681] que le constructeur de déplacement [SWS_DM_01682] ainsi que les opérateurs d'affectation correspondants ([SWS_DM_01679], [SWS_DM_01680]) sont explicitement supprimés (=delete). Un InstanceSpecifier ne doit pas être instancié plusieurs fois par processus [SWS_DM_00647].
La destruction s'effectue via le destructeur ~Event()[SWS_DM_00648]. Contrairement au constructeur, le destructeur n'est pas thread-safe. Les autres fonctions membres (à l'exception de GetDTCNumber) sont également spécifiées comme non thread-safe, raison pour laquelle les appels parallèles sur la même instance doivent être synchronisés côté application. Dans la version R25-11, la terminologie associée est passée de Reentrancy à Concurrency AUTOSAR_AP_SWS_Diagnostics §1 « Change History ».
Parcours d'utilisation
Un cas d'utilisation type se décompose en les appels suivants :
Initialisation : l'application crée l'instance via son InstanceSpecifier[SWS_DM_00647]. La liaison devrait, au moment de l'initialisation, établir la connexion avec le démon de diagnostic. Question Q-78e4462a0d147cfb (ouverte)
Enregistrement du Notifier : pour la surveillance, un callback est enregistré de manière optionnelle via SetEventStatusChangedNotifier[SWS_DM_00650]. Un appel ultérieur écrase le notificateur précédemment défini.
Interrogations d'état : pendant le fonctionnement, l'application interroge les données de diagnostic de manière asynchrone via ara::core::Future :
Les conditions d'erreur surviennent sous la forme de violations de modélisation (Violations) lors de l'instanciation ou de codes d'erreur au moment de l'exécution :
Violations lors de l'appel du constructeur [SWS_DM_00647] :
InstanceSpecifierMappingIntegrityViolation : l'identifiant ne peut pas être résolu dans le modèle ou ne référence aucun PortPrototype.
PortInterfaceMappingViolation : le PortPrototype référencé n'est pas typé en tant que DiagnosticEventInterface.
ProcessMappingViolation : aucun contexte modélisé correspondant au processus n'a été trouvé.
InstanceSpecifierAlreadyInUseViolation : l'identifiant est déjà utilisé dans le même processus par une instance active.
Codes d'erreur à l'exécution via ara::core::Result ou ara::core::Future :
DiagErrc::kServiceNotAvailable : se produit lors de toutes les interrogations d'état ([SWS_DM_00649], [SWS_DM_00653], [SWS_DM_00654], [SWS_DM_00655], [SWS_DM_00656]) si des fonctionnalités d'arrière-plan essentielles du Diagnostic Management ne sont pas disponibles. La communication est vraisemblablement gérée de manière asynchrone via IPC. Question (ouverte)
DiagErrc::kNoSuchDTC : est signalé par GetDTCNumber lorsqu'aucun DTC n'est configuré pour l'événement [SWS_DM_00653].
DiagErrc::kInvalidArgument : est renvoyé par SetEventStatusChangedNotifier, par exemple en cas de valeurs transmises non valides [SWS_DM_00650].
Ce guide repose sur les spécifications de l'AUTOSAR Adaptive Platform dans la version R25-11.
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.
GÉNÉRÉ PAR IAnon vérifiéModèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 07bc53ae711cProvenanceQuestions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand
Via la méthode [SWS_DM_00650] de la classe ara::diag::Event (fichier d'en-tête ara/diag/event.h), une Adaptive Application enregistre une fonction de rappel de type EventStatusByteNotifier. Une fois l'enregistrement réussi, Diagnostic Management (DM) appelle ce notificateur lors de chaque changement d'état de l'événement de diagnostic associé [SWS_DM_01029]. Un appel successif de la méthode écrase le notificateur précédemment enregistré [SWS_DM_00650]. La fonction possède la signature ara::core::Result<void> SetEventStatusChangedNotifier(EventStatusByteNotifier notifier) noexcept et renvoie un résultat vide en cas de succès [SWS_DM_00650].
Si une erreur survient lors du traitement, la méthode renvoie le code d'erreur DiagErrc::kInvalidArgument[SWS_DM_00650]. Bien que l'interface soit déclarée comme sûre vis-à-vis des exceptions (exception safe), elle est explicitement considérée comme non sûre pour les threads (not thread-safe) [SWS_DM_00650]. Interprétation : les accès concurrents à une même instance doivent être synchronisés côté application ; l'enregistrement devrait donc probablement être effectué de préférence durant la phase d'initialisation de l'application. Question Q-d8ed099eaed6b197 (ouverte)
gemini-3.8-flash-low· 2026-10-13 · Original allemand