Ermöglicht der Diagnose-Laufzeitumgebung das schrittweise Abrufen von Datei- und Verzeichnisdaten aus einer Applikation.
KI-GENERIERTungeprüftModell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: a81aee002281HerkunftOffene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13
Ermöglicht der Diagnose-Laufzeitumgebung das schrittweise Abrufen von Datei- und Verzeichnisdaten aus einer Applikation.
Die Klasse ara::diag::DataTransferReadByPullHandler dient der Bereitstellung von Datei- oder Verzeichnisdaten, die von der Diagnoseschicht AraDiag im Rahmen einer UDS-Leseoperation aktiv aus der Anwendung abgerufen werden ([SWS_DM_01506]). Der Ablauf umfasst den schrittweisen Datenabruf über Read() bis zum finalen Sitzungsabschluss über ExitRead(). Als strikte Lebenszyklus-Bedingung darf eine Handler-Instanz, die genau einer einzelnen Transfersitzung zugeordnet ist, keinesfalls vor dem Aufruf von ExitRead() zerstört werden ([SWS_DM_01510]).
Kontext
Die Klasse ara::diag::DataTransferReadByPullHandler ([SWS_DM_01506], AUTOSAR_AP_SWS_Diagnostics §8.10.2 „Class: DataTransferReadByPullHandler“) wickelt Datentransfers ab, die durch Diagnoseanforderungen zum Lesen von Dateien oder Verzeichnissen (wie RequestReadFile oder RequestReadDirectory) initiiert wurden. Die Architektur basiert auf einem Pull-Verfahren, bei dem die Diagnoseschicht AraDiag die zu übertragenden Daten aktiv aus der Implementierung abfragt („pulled“).
An der Interaktion sind drei Komponenten beteiligt: der externe UDS-Client (Diagnosetester), das Diagnose-Subsystem AraDiag und die anwendungsspezifische Handler-Implementierung. Der externe Client sendet Leseanfragen, woraufhin AraDiag die Methoden des Handlers aufruft, um schrittweise Datenchunky bereitzustellen und an den UDS-Client zu übermitteln ([SWS_DM_01513]).
Lebenszyklus
Der Lebenszyklus einer Handler-Instanz ist exklusiv an eine einzelne Dateitransfersitzung gebunden. Der Standardkonstruktor ist protected deklariert ([SWS_DM_01507]). Interpretation: Die konkrete Anwendung dürfte daher eine abgeleitete Subklasse implementieren und instanziieren. Frage Q-cb78bc4a1d40968b (offen)
Kopieroperationen sind vollständig deaktiviert: Der Kopierkonstruktor ([SWS_DM_01509]) und der Kopierzuweisungsoperator ([SWS_DM_01512]) sind als gelöscht (=delete) spezifiziert, da Handler für die Einweg-Nutzung innerhalb einer Sitzung bestimmt sind („only one way usage i.e. per single file transfer session“). Verschiebeoperationen (Move Constructor und Move Assignment) sind dagegen als Standardimplementierung definiert und als noexcept deklariert ([SWS_DM_01508], [SWS_DM_01511], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.1.1 „Move Constructor“).
Für die Freigabe gilt eine strikte Vorbedingung: Eine Instanz der Klasse darf keinesfalls zerstört werden, bevor die Methode ExitRead() aufgerufen wurde ([SWS_DM_01510], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.1.2 „Destructor“). Bezüglich der Nebenläufigkeit sind die Schnittstellenmethoden Read() und ExitRead() als nicht threadsicher („not thread-safe“), aber ausnahmesicher (noexcept) definiert ([SWS_DM_01513], [SWS_DM_01514]).
Nutzungspfad
Der reguläre Ablauf eines Datenabrufs gliedert sich in folgende Schritte:
Initialisierung: Die Anwendung instanziiert die abgeleitete Handler-Klasse für die anstehende Transfersitzung.
Datenabruf: Zur Bereitstellung der Datenblöcke ruft AraDiag die Methode Read() auf ([SWS_DM_01513], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.2 „Read“). Die Anwendung erhält eine Speicheransicht response_data (vom Typ ara::core::Span<const ara::core::Byte>) auf einen von AraDiag vorallokierten Puffer, füllt diesen mit den nächsten Dateiinhalten und schließt das ara::core::Future<std::uint32_t> mit der geschriebenen Bytezahl ab. AraDiag fügt diese Daten hinter dem Blocksequenzzähler (blockSequenceCounter) als transferResponseParameterRecord in die positive UDS-Antwort ein ([SWS_DM_01513]). Dieser Schritt wird für nachfolgende Chunks wiederholt.
Sitzungsabschluss: Zum regulären Beenden der Übertragung ruft AraDiagExitRead() auf ([SWS_DM_01514], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.1 „ExitRead“). Übergeben werden der Beendigungsgrund exit_type, herstellerspezifische Parameter (transfer_request_parameter_record), meta_info und ein cancellation_handler. Die Implementierung quittiert dies über ein ara::core::Future<ara::core::Vector<ara::core::Byte>>, dessen Rückgabewerte hinter der SID in der positiven Antwort übermittelt werden ([SWS_DM_01514]).
Freigabe: Erst nach erfolgtem Aufruf von ExitRead() darf das Handler-Objekt zerstört werden ([SWS_DM_01510]).
Sequenzdiagramm: Typischer Ablauf des Datenabrufs per Pull-Verfahren über AraDiag. Quellen: [SWS_DM_01513], [SWS_DM_01514]
Fehlerszenarien
Treten bei der Datenaufbereitung oder beim Abschluss Fehler auf, meldet die Anwendung dies über das zurückgegebene Future, indem sie es mit einem UDS-Fehlercode (DiagUdsNrcErrc nach ISO 14229-1) bereitstellt ([SWS_DM_01513], [SWS_DM_01514]). AraDiag generiert daraufhin die entsprechende negative UDS-Antwort (NRC) an den Tester.
Für den vorzeitigen Abbruch wird beiden Methoden ein CancellationHandler übergeben ([SWS_DM_01513], [SWS_DM_01514]). Die Anwendung kann über cancellation_handler.IsCanceled() prüfen, ob die Konversation abgebrochen wurde, oder via cancellation_handler.SetNotifier() eine Rückruffunktion registrieren. Die bereitgestellten Puffer (response_data und transfer_request_parameter_record) bleiben bis zur Erfüllung des Promises bzw. bis zum Abbruch über den Handler gültig.
Wird die Instanz vor dem Aufruf von ExitRead() zerstört, liegt eine Verletzung der Spezifikationsvorgabe vor ([SWS_DM_01510]), was zu unvollständigen Transfersitzungen und undefinierten Systemzuständen führen kann.
Dieser Klassen-Leitfaden basiert auf der Spezifikation AUTOSAR Adaptive R25-11 und fasst die Anforderungen an die Schnittstelle ara::diag::DataTransferReadByPullHandler zusammen.
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.
KI-GENERIERTungeprüftModell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 7a822a7b2a3dHerkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13
Die rein virtuelle Methode ExitRead beendet eine laufende Datenübertragungssitzung im Rahmen von ara::diag::DataTransferReadByPullHandler[SWS_DM_01514] (AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.1 „ExitRead“). Sie nimmt als Parameter den Beendigungsgrund exit_type (Typ DataTransferExitType), fahrzeugherstellerspezifische Parameter in transfer_request_parameter_record (als ara::core::Span<const ara::core::Byte>), den Anforderungskontext meta_info sowie einen cancellation_handler entgegen. Der Parameter transfer_request_parameter_record bleibt gültig, bis das zugehörige Promise erfüllt oder die Ausführung über den Cancellation-Handler abgebrochen wird [SWS_DM_01514].
Der Aufruf erfolgt asynchron und gibt ein ara::core::Future<ara::core::Vector<ara::core::Byte>> zurück [SWS_DM_01514]:
Im Erfolgsfall wird das Future für eine positive Antwortnachricht bereitgestellt; die Daten aus OperationOutput.response_data werden dabei als transferResponseParameterRecord nach der Service-ID platziert.
Im Fehlerfall wird das Future mit einem UDS-Fehlercode (NRC) gemäß ISO 14229-1 aus DiagUdsNrcErrc für eine negative Antwortnachricht erfüllt.
Die Funktion ist als noexcept deklariert und ausnahmesicher (exception safe), jedoch nicht threadsicher (not thread-safe) [SWS_DM_01514]. Über den cancellation_handler kann mittels cancellation_handler.IsCanceled() der Abbruchstatus abgefragt oder über cancellation_handler.SetNotifier() eine Benachrichtigungsfunktion für einen Abbruch der Konversation registriert werden [SWS_DM_01514].
Hinsichtlich der Reihenfolge darf eine Instanz von DataTransferReadByPullHandler keinesfalls zerstört werden, bevor ExitRead() aufgerufen wurde [SWS_DM_01510]. Entsprechende Beendigungsfunktionen und Destruktorbedingungen existieren parallel für ara::diag::DataTransferReadSharedDataHandler::ExitRead[SWS_DM_01505] ([SWS_DM_01499]) und ara::diag::DataTransferReadByPushHandler::ExitRead[SWS_DM_01523] ([SWS_DM_01519]).
Dieser Text wurde von einer KI erstellt; verbindlich ist die Spezifikation.
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.
KI-GENERIERTungeprüftModell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 104f857aa59eHerkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13
Verwendung und Aufrufsemantik
Die Methode Read der Klasse ara::diag::DataTransferReadByPullHandler dient dem Auslesen von Datenblöcken durch die Anwendung im Rahmen des UDS-Datentransfers [SWS_DM_01513]. Die Anwendung stellt den ersten oder nachfolgende Datei- bzw. Verzeichnisinhaltsblöcke zusammen und kopiert diese in den von ara::diag übergebenen Puffer response_data (Typ ara::core::Span<const ara::core::Byte>) bis maximal zur Größe des Spans.
Der Aufruf erfolgt asynchron und gibt ein ara::core::Future<std::uint32_t> zurück [SWS_DM_01513]. Im Erfolgsfall wird das Future mit der tatsächlich bereitgestellten Bytezahl erfüllt; diese Daten werden in der positiven UDS-Antwort nach dem blockSequenceCounter als transferResponseParameterRecord platziert. Über den Parameter cancellation_handler kann die Anwendung mittels IsCanceled() den Abbruchstatus abfragen oder über SetNotifier() eine Benachrichtigungsfunktion für einen Abbruch registrieren.
Fehlerbehandlung und Randbedingungen
Im Fehlerfall wird das Future mit einem anwendbaren UDS-NRC aus DiagUdsNrcErrc gemäß ISO 14229-1 abgeschlossen [SWS_DM_01513]. Ist eine Schnittstelle nicht oder nicht mehr mittels offer() bereitgestellt, antwortet der DM mit NRC 0x94 (ResourceTemporarilyNotAvailable) [SWS_DM_01257].
Nebenläufigkeit und Zusammenspiel
Die Schnittstelle ist als nicht threadsicher (not thread-safe), jedoch ausnahmesicher (exception safe) spezifiziert [SWS_DM_01513]. Der Speicherbereich von response_data bleibt nur so lange gültig, bis das zugehörige Promise erfüllt oder der Vorgang abgebrochen wird. Alternativ zum Pull-Muster existieren für den Datentransfer das Push-Verfahren über DataTransferReadByPushHandler::Read[SWS_DM_01522] sowie die Übertragung mit geteiltem Besitz über DataTransferReadSharedOwnershipHandler::Read[SWS_DM_01504].
Dieser Nutzungshinweis wurde automatisiert auf Basis der Spezifikationsdokumente von AUTOSAR Adaptive erstellt.
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-medium· 2026-10-13