Permet à l'environnement d'exécution de diagnostic de récupérer pas à pas des données de fichiers et de répertoires à partir d'une application.
GÉNÉRÉ PAR IAnon vérifiéModèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : a81aee002281ProvenanceQuestions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand
Permet à l'environnement d'exécution de diagnostic de récupérer pas à pas des données de fichiers et de répertoires à partir d'une application.
La classe ara::diag::DataTransferReadByPullHandler sert à mettre à disposition des données de fichiers ou de répertoires qui sont récupérées activement ([SWS_DM_01506]) depuis l'application par la couche de diagnostic AraDiag dans le cadre d'une opération de lecture UDS. Le déroulement comprend la récupération progressive des données via Read() jusqu'à la clôture finale de session via ExitRead(). En tant que condition stricte de cycle de vie, une instance de handler associée à exactement une seule session de transfert ne doit en aucun cas être détruite avant l'appel de ExitRead() ([SWS_DM_01510]).
Contexte
La classe ara::diag::DataTransferReadByPullHandler ([SWS_DM_01506], AUTOSAR_AP_SWS_Diagnostics §8.10.2 « Class: DataTransferReadByPullHandler ») traite les transferts de données initiés par des requêtes de diagnostic visant à lire des fichiers ou des répertoires (comme RequestReadFile ou RequestReadDirectory). L'architecture repose sur un mécanisme de pull, dans lequel la couche de diagnostic AraDiag interroge activement (« pulled ») les données à transférer auprès de l'implémentation.
Trois composants participent à l'interaction : le client UDS externe (testeur de diagnostic), le sous-système de diagnostic AraDiag et l'implémentation spécifique du handler dans l'application. Le client externe envoie des requêtes de lecture, à la suite de quoi AraDiag appelle les méthodes du handler pour fournir progressivement des blocs de données (chunks) et les transmettre au client UDS ([SWS_DM_01513]).
Cycle de vie
Le cycle de vie d'une instance de handler est lié exclusivement à une unique session de transfert de fichiers. Le constructeur par défaut est déclaré protected ([SWS_DM_01507]). Interprétation : l'application concrète devrait donc implémenter et instancier une sous-classe dérivée. Question Q-cb78bc4a1d40968b (ouverte)
Les opérations de copie sont totalement désactivées : le constructeur de copie ([SWS_DM_01509]) et l'opérateur d'assignation par copie ([SWS_DM_01512]) sont spécifiés comme supprimés (=delete), car les handlers sont destinés à un usage à sens unique au sein d'une session (« only one way usage i.e. per single file transfer session »). En revanche, les opérations de déplacement (Move Constructor et Move Assignment) sont définies comme des implémentations par défaut et déclarées noexcept ([SWS_DM_01508], [SWS_DM_01511], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.1.1 « Move Constructor »).
Une précondition stricte s'applique à la libération : une instance de la classe ne doit en aucun cas être détruite avant que la méthode ExitRead() ait été appelée ([SWS_DM_01510], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.1.2 « Destructor »). En matière de concurrence, les méthodes d'interface Read() et ExitRead() sont définies comme non thread-safe (« not thread-safe »), mais sûres vis-à-vis des exceptions (noexcept) ([SWS_DM_01513], [SWS_DM_01514]).
Parcours d'utilisation
Le déroulement standard d'une récupération de données se décompose selon les étapes suivantes :
Initialisation : l'application instancie la classe de handler dérivée pour la session de transfert à venir.
Récupération des données : pour la mise à disposition des blocs de données, AraDiag appelle la méthode Read() ([SWS_DM_01513], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.2 « Read »). L'application obtient une vue mémoire response_data (du type ara::core::Span<const ara::core::Byte>) sur un tampon préalloué par AraDiag, le remplit avec les contenus de fichier suivants et conclut le ara::core::Future<std::uint32_t> avec le nombre d'octets écrits. AraDiag insère ces données à la suite du compteur de séquence de blocs (blockSequenceCounter) en tant que transferResponseParameterRecord dans la réponse UDS positive ([SWS_DM_01513]). Cette étape est répétée pour les blocs suivants.
Clôture de session : pour clore le transfert de manière normale, AraDiag appelle ExitRead() ([SWS_DM_01514], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.1 « ExitRead »). Les éléments transmis sont le motif de fin exit_type, des paramètres spécifiques au constructeur (transfer_request_parameter_record), meta_info et un cancellation_handler. L'implémentation accuse réception via un ara::core::Future<ara::core::Vector<ara::core::Byte>>, dont les valeurs de retour sont transmises à la suite du SID dans la réponse positive ([SWS_DM_01514]).
Libération : l'objet handler ne doit être détruit qu'une fois l'appel de ExitRead() effectué ([SWS_DM_01510]).
Diagramme de séquence : déroulement typique de la récupération de données par méthode pull via AraDiag. Sources : [SWS_DM_01513], [SWS_DM_01514]
Scénarios d'erreur
Si des erreurs surviennent lors de la préparation des données ou lors de la clôture, l'application le signale via le Future retourné en le fournissant avec un code d'erreur UDS (DiagUdsNrcErrc selon l'ISO 14229-1) ([SWS_DM_01513], [SWS_DM_01514]). AraDiag génère ensuite la réponse négative UDS (NRC) correspondante vers le testeur.
Pour l'interruption prématurée, un CancellationHandler est passé aux deux méthodes ([SWS_DM_01513], [SWS_DM_01514]). L'application peut vérifier via cancellation_handler.IsCanceled() si la conversation a été interrompue ou enregistrer une fonction de rappel via cancellation_handler.SetNotifier(). Les tampons mis à disposition (response_data et transfer_request_parameter_record) restent valides jusqu'à la résolution de la promesse ou jusqu'à l'interruption via le handler.
Si l'instance est détruite avant l'appel de ExitRead(), il s'agit d'une violation de l'exigence de la spécification ([SWS_DM_01510]), ce qui peut entraîner des sessions de transfert incomplètes et des états système indéfinis.
Ce guide de classe est basé sur la spécification AUTOSAR Adaptive R25-11 et résume les exigences applicables à l'interface ara::diag::DataTransferReadByPullHandler.
Reads data chunk from the application. The first or subsequent file/directory info content chunk to be sent back to the UDS client will be composed by the application and copied into the provided by ara::diag Span with up to the requested Span size.
GÉNÉRÉ PAR IAnon vérifiéModèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 7a822a7b2a3dProvenance
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand
La méthode purement virtuelle ExitRead met fin à une session de transfert de données en cours dans le cadre de ara::diag::DataTransferReadByPullHandler[SWS_DM_01514] (AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.1 « ExitRead »). Elle reçoit en tant que paramètres le motif de fin exit_type (type DataTransferExitType), des paramètres spécifiques au constructeur automobile dans transfer_request_parameter_record (sous forme de ara::core::Span<const ara::core::Byte>), le contexte de requête meta_info ainsi qu'un cancellation_handler. Le paramètre transfer_request_parameter_record reste valide jusqu'à ce que la promise associée soit satisfaite ou que l'exécution soit annulée via le gestionnaire d'annulation [SWS_DM_01514].
L'appel a lieu de manière asynchrone et renvoie un ara::core::Future<ara::core::Vector<ara::core::Byte>>[SWS_DM_01514] :
En cas de succès, le future est mis à disposition pour un message de réponse positive ; les données issues de OperationOutput.response_data sont alors placées comme transferResponseParameterRecord après l'ID de service.
En cas d'erreur, le future est satisfait avec un code d'erreur UDS (NRC) selon l'ISO 14229-1 issu de DiagUdsNrcErrc pour un message de réponse négative.
La fonction est déclarée comme noexcept et est sûre vis-à-vis des exceptions (exception safe), mais non thread-safe (not thread-safe) [SWS_DM_01514]. Via le cancellation_handler, il est possible d'interroger l'état d'annulation au moyen de cancellation_handler.IsCanceled() ou d'enregistrer via cancellation_handler.SetNotifier() une fonction de notification pour une annulation de la conversation [SWS_DM_01514].
Concernant l'ordre, une instance de DataTransferReadByPullHandler ne doit en aucun cas être détruite avant que ExitRead() n'ait été appelée [SWS_DM_01510]. Des fonctions de terminaison et des conditions de destructeur correspondantes existent en parallèle pour ara::diag::DataTransferReadSharedDataHandler::ExitRead[SWS_DM_01505] ([SWS_DM_01499]) et ara::diag::DataTransferReadByPushHandler::ExitRead[SWS_DM_01523] ([SWS_DM_01519]).
Ce texte a été généré par une IA ; seule la spécification fait foi.
This parameter record contains parameter(s), which are required
parameter_record
by the server to support the transfer of data. Format and length of this parameter(s) are vehicle manufacturer specific. Lifetime: Valid until Promise is fulfilled or the processing is cancelled by the cancellationHandler.
meta_info
MetaInfo of the request.
cancellation_handler
This parameter is used to • Query the current cancellation status by calling cancellation_ handler.IsCanceled(). Returns true in case, the current conversation has been cancelled and false otherwise. • Register a notifier function by calling cancellation_handler.Set Notifier(). The registered notifier is called if the current conversation is cancelled.
A Future, which either gets readied to OperationOutput (transfer ResponseParameterRecord for a positive response message) or readied with UDS ErrorCode from DiagUdsNrcErrc (for an negative response message). Data in OperationOutput.response_data will be placed after SID as transferResponseParameterRecord in the positive response.
Fehler
Fehlercode
Beschreibung
Please use an applicable NRC, as defined in ISO 14229-1, using DiagUdsNrcErrc.
Request a governed re-review of this record. The record is not changed immediately.
Reads data chunk from the application. The first or subsequent file/directory info content chunk to be sent back to the UDS client will be composed by the application and copied into the provided by ara::diag Span with up to the requested Span size.
GÉNÉRÉ PAR IAnon vérifiéModèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 104f857aa59eProvenance
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand
Utilisation et sémantique d'appel
La méthode Read de la classe ara::diag::DataTransferReadByPullHandler sert à la lecture de blocs de données par l'application dans le cadre du transfert de données UDS [SWS_DM_01513]. L'application compose le premier bloc ou les blocs suivants de contenu de fichier ou de répertoire et les copie dans le tampon response_data (type ara::core::Span<const ara::core::Byte>) transmis par ara::diag jusqu'à concurrence de la taille de l'empan (span).
L'appel s'effectue de manière asynchrone et renvoie un ara::core::Future<std::uint32_t>[SWS_DM_01513]. En cas de succès, le future est complété avec le nombre d'octets effectivement fournis ; ces données sont placées dans la réponse UDS positive après le blockSequenceCounter sous forme de transferResponseParameterRecord. Grâce au paramètre cancellation_handler, l'application peut interroger le statut d'interruption au moyen de IsCanceled() ou enregistrer une fonction de notification d'interruption via SetNotifier().
Gestion des erreurs et conditions limites
En cas d'erreur, le future est complété avec un NRC UDS applicable issu de DiagUdsNrcErrc conformément à l'ISO 14229-1 [SWS_DM_01513]. Si une interface n'est pas ou n'est plus mise à disposition au moyen de offer(), le DM répond avec le NRC 0x94 (ResourceTemporarilyNotAvailable) [SWS_DM_01257].
Concurrence et interaction
L'interface est spécifiée comme non sûre pour les threads (not thread-safe), mais sûre vis-à-vis des exceptions (exception safe) [SWS_DM_01513]. La zone mémoire de response_data ne reste valide que jusqu'à ce que la promesse associée soit satisfaite ou que l'opération soit interrompue. Comme alternatives au modèle pull, il existe pour le transfert de données le procédé push via DataTransferReadByPushHandler::Read[SWS_DM_01522] ainsi que le transfert avec propriété partagée via DataTransferReadSharedOwnershipHandler::Read[SWS_DM_01504].
Cette note d'utilisation a été générée automatiquement sur la base des documents de spécification d'AUTOSAR Adaptive.
The view over a pre-allocated by AraDiag memory to write in this data chunk. Lifetime: Valid until Promise is fulfilled or the processing is cancelled by the cancellationHandler.
meta_info
MetaInfo of the request.
cancellation_handler
This parameter is used to • Query the current cancellation status by calling cancellation_ handler.IsCanceled(). Returns true in case, the current conversation has been cancelled and false otherwise. • Register a notifier function by calling cancellation_handler.Set Notifier(). The registered notifier is called if the current conversation is cancelled.
A Future, which either gets readied to actual amount of data provided in the Span (for a positive response message) or readied with UDS ErrorCode from DiagUdsNrcErrc (for an negative response message). Data in response_data will be placed after blockSequenceCounter as transferResponseParameterRecord in the positive response.
Fehler
Fehlercode
Beschreibung
Please use an applicable NRC, as defined in ISO 14229-1, using DiagUdsNrcErrc.
Request a governed re-review of this record. The record is not changed immediately.
gemini-3.8-flash-low· 2026-10-13 · Original allemand