Encapsule les transferts de données de diagnostic en écriture et coordonne le déroulement via des gestionnaires d'écriture.
GÉNÉRÉ PAR IAnon vérifiéModèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 6f5de6951762ProvenanceQuestions ouvertes (2)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand
Encapsule les transferts de données de diagnostic en écriture et coordonne le déroulement via des gestionnaires d'écriture.
La classe ara::diag::DataTransferWriteSession encapsule les transferts de données de diagnostic en écriture et coordonne l'acheminement vers des gestionnaires d'écriture spécifiques à l'application ([SWS_DM_01555]). Lors de services UDS entrants tels que TransferData (0x36) ou RequestTransferExit (0x37), l'instance du serveur de diagnostic appelle les méthodes Write ou Exit correspondantes des gestionnaires enregistrés ([SWS_DM_01317]). La construction par défaut et la construction par copie étant supprimées, la session existe sous forme d'instance unique sûre face aux exceptions, dont la création s'effectue probablement via des constructeurs modèles. Question (ouverte)
Contexte
La classe ara::diag::DataTransferWriteSession encapsule toutes les variantes de transferts de données en écriture au sein du domaine fonctionnel Adaptive Platform Diagnostics ([SWS_DM_01555]). Elle fait office d'élément de liaison entre l'instance du serveur de diagnostic de la plateforme et les implémentations spécifiques à l'application qui effectuent le transfert en écriture effectif.
Dans le cadre de services de diagnostic tels que RequestFileTransfer (par exemple pour le mode opératoire ReplaceFile (0x03) selon [SWS_DM_01313]), l'instance du serveur de diagnostic reçoit les demandes de transfert. Si, par la suite, des requêtes de diagnostic du service UDS TransferData (0x36) arrivent, le serveur les délègue à la méthode Write de la classe de gestionnaire liée à la DataTransferWriteSession respective ([SWS_DM_01317]). Après le transfert de tous les blocs de données, le service RequestTransferExit (0x37) signale l'achèvement, à la suite de quoi l'instance du serveur de diagnostic appelle la méthode Exit du gestionnaire enregistré ([SWS_DM_01318]).
Diagramme de contexte : interaction entre le serveur de diagnostic, DataTransferWriteSession et la classe de gestionnaire spécifique à l'application. Sources : [SWS_DM_01555], [SWS_DM_01317], [SWS_DM_01318].
Pour imposer une propriété exclusive, DataTransferWriteSession n'est ni copiable ni assignable par copie : le constructeur de copie ([SWS_DM_01559]) ainsi que l'opérateur d'assignation par copie ([SWS_DM_01560]) sont tous deux déclarés comme delete. Les instances existent donc en tant qu'exemplaires uniques exclusifs.
En revanche, la classe prend en charge une sémantique de déplacement complète : le constructeur de déplacement ([SWS_DM_01557]) et l'opérateur d'assignation par déplacement ([SWS_DM_01558]) sont déclarés comme implémentation par défaut et spécifiés comme noexcept ainsi que sûrs face aux exceptions (« exception safe »). Ils permettent le transfert efficace de l'état de session entre contextes de programme. La destruction s'effectue via le destructeur par défaut sûr face aux exceptions (~DataTransferWriteSession() noexcept = default, [SWS_DM_01556]). En ce qui concerne la concurrence, l'utilisation devrait s'effectuer principalement de manière séquentielle au sein du thread de serveur exécutant, car aucun mécanisme de synchronisation pour les accès concurrents n'est documenté. Question Q-2c2278884fa11b21 (ouverte)
Parcours d'utilisation
Le déroulement régulier d'un transfert en écriture s'effectue selon les étapes suivantes :
Initialisation : à la réception d'une demande d'écriture (par exemple RequestFileTransfer avec kReplace selon [SWS_DM_01313]), une DataTransferWriteSession est établie. Le gestionnaire spécifique à l'application pour les opérations d'écriture est alors enregistré via des constructeurs modèles (AUTOSAR_AP_SWS_Diagnostics §8.10 « Context of RequestFileTransfer »).
Transfert de blocs de données : pour chaque requête entrante du service UDS TransferData (0x36), l'instance du serveur de diagnostic appelle la méthode Write de la classe de gestionnaire enregistrée ([SWS_DM_01317]). Cette étape est répétée cycliquement pour tous les blocs du transfert.
Clôture de la session : une fois le transfert entièrement terminé, le serveur de diagnostic reçoit RequestTransferExit (0x37) et appelle ensuite la méthode Exit de la classe de gestionnaire ([SWS_DM_01318]).
Nettoyage : après un achèvement réussi ou en cas d'interruption prématurée, l'objet session est détruit ([SWS_DM_01556]).
Diagramme de séquence : déroulement typique d'un transfert de données en écriture via les instances impliquées. Sources : [SWS_DM_01317], [SWS_DM_01318], [SWS_DM_01556].
Scénarios d'erreur
Le traitement des erreurs et la fiabilité reposent pour ara::diag::DataTransferWriteSession de manière déterminante sur la sécurité statique des types et la sécurité face aux exceptions :
Prévention des états d'objet non valides : la suppression du constructeur par défaut ([SWS_DM_01339]) empêche que des objets session non initialisés puissent exister sans gestionnaire lié. L'interdiction des opérations de copie ([SWS_DM_01559], [SWS_DM_01560]) exclut dès la compilation les états incohérents dus à des relations de possession multiples.
Sécurité face aux exceptions lors du déplacement et de la destruction : la déclaration du constructeur de déplacement ([SWS_DM_01557]), de l'assignation par déplacement ([SWS_DM_01558]) et du destructeur ([SWS_DM_01556]) en tant que noexcept garantit qu'aucune exception n'est levée lors des transferts de ressources et lors de la libération de la session au moment de l'exécution.
Interruption prématurée : si un transfert échoue prématurément, le destructeur noexcept garantit que l'objet session peut être nettoyé de manière fiable, y compris dans le cadre du déroulement d'exception (exception unwinding) ([SWS_DM_01556]).
Ce guide se base sur les documents de spécification de la version R25-11 d'AUTOSAR Adaptive Platform.
gemini-3.8-flash-low· 2026-10-13 · Original allemand