DEENESPTFRRUARHIKOZHNL

namespace apext::diag::uds_transport

User GuideKI-GENERIERT

Dient der standardisierten Anbindung und Verwaltung externer UDS-Transportprotokolle im Diagnose-Management.
KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: ce8b113ec3f5 Herkunft Offene Fragen (1)
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Dient der standardisierten Anbindung und Verwaltung externer UDS-Transportprotokolle im Diagnose-Management.

Der Namespace apext::diag::uds_transport stellt die C++-Transportschnittstelle zur Entkopplung des generischen Diagnose-Managements von spezifischen UDS-Transportprotokollen bereit AUTOSAR_AP_SWS_Diagnostics §7.1 „UDS Transport Layer“. Protokoll-Plugins leiten sich von der Basisklasse UdsTransportProtocolHandler ab und durchlaufen einen strikten Lebenszyklus aus Konstruktion, Initialisierung, Start und geordnetem Stoppen [SWS_DM_00329]. Eingehende Nachrichten werden über IndicateMessage gemeldet und erhalten bei freien Kapazitäten einen speicherverwalteten UdsMessagePtr zur Nutzdatenübernahme. Eine zentrale Randbedingung ist, dass nach dem Stoppen keine weiteren Aufrufe an das Diagnose-Management außer der Bestätigungsmeldung erfolgen dürfen.

Kontext

Der Namespace apext::diag::uds_transport definiert die standardisierte C++-Transportschnittstelle (Transport Protocol API) für das Diagnose-Management (DM) in der AUTOSAR Adaptive Platform AUTOSAR_AP_SWS_Diagnostics §7.1 „UDS Transport Layer“. Die Architektur trennt den generischen Kern des Diagnose-Managements funktional von konkreten Netzwerk- und Transportschichten ab. Auf diese Weise können standardisierte Protokolle wie DoIP sowie künftige oder herstellerspezifische Transportprotokolle (beispielsweise für CAN, CAN-FD oder FlexRay) als modulare Plugins integriert werden AUTOSAR_AP_SWS_Diagnostics §7.1 „UDS Transport Layer“.

Die zentrale Vermittlungsinstanz bildet die Klasse UdsTransportProtocolMgr, welche die Interaktion zwischen den Instanzen des Diagnostic Server und den angebundenen Transportprotokollen koordiniert. Konkrete Protokoll-Plugins leiten sich von der abstrakten Basisklasse UdsTransportProtocolHandler ab AUTOSAR_AP_SWS_Diagnostics §7.1.1 „Support of UDS Transport Layer“ [SWS_DM_00315]. Einzelne Handler-Instanzen werden über UdsTransportProtocolHandlerID adressiert [SWS_DM_00336], während Kommunikationskanäle über den Typ ChannelID identifiziert werden [SWS_DM_00337]. Zur Unterstützung periodischer Datenabfragen nach ISO-Dienst 0x2A bindet die Schnittstelle zusätzlich die Klasse UdsTransportProtocolPeriodicHandler ein.

Lebenszyklus

Das Diagnose-Management steuert den Lebenszyklus jeder UdsTransportProtocolHandler-Instanz in einer fest vorgegebenen Reihenfolge [SWS_DM_00329]:

  1. Erzeugung: Das DM instanziiert das Protokoll-Plugin über den Konstruktor UdsTransportProtocolHandler::UdsTransportProtocolHandler [SWS_DM_00329].
  2. Initialisierung: Das DM ruft UdsTransportProtocolHandler::Initialize auf [SWS_DM_00329]. Bis auf die Abfrage von GetPeriodicHandler darf das DM vor der erfolgreichen Rückgabe von kInitializeOk keine weiteren Methoden auf dem Handler aufrufen [SWS_DM_01746].
  3. Start und Betrieb: Nach erfolgreicher Initialisierung wird der Handler mit UdsTransportProtocolHandler::Start aktiviert. Erst nach diesem Aufruf verarbeitet das DM Meldungen über reaktivierte Kanäle via UdsTransportProtocolMgr::ChannelReestablished [SWS_DM_01744].
  4. Terminierung: Wechselt das DM in den Zustand ApplicationState.kTerminating, ruft es für alle aktiven Plugins UdsTransportProtocolHandler::Stop auf [SWS_DM_00333]. Nach Rückkehr dieses Aufrufs darf das Plugin ausschließlich UdsTransportProtocolMgr::HandlerStopped aufrufen [SWS_DM_01741]. Das DM wartet aktiv auf diese Bestätigung [SWS_DM_00340].
handler_lifecycle NichtInitialisiert NichtInitialisiert Initialisierend Initialisierend NichtInitialisiert->Initialisierend Konstruktor Initialisiert Initialisiert Initialisierend->Initialisiert Initialize() -> kInitializeOk Fehlgeschlagen Fehlgeschlagen Initialisierend->Fehlgeschlagen Initialize() -> kInitializeFailed Gestartet Gestartet Initialisiert->Gestartet Start() Stoppend Stoppend Gestartet->Stoppend Stop() bei kTerminating Gestoppt Gestoppt Stoppend->Gestoppt HandlerStopped()

Zustandsdiagramm: Lebenszyklusphasen und Übergangsbedingungen einer Transportprotokoll-Handler-Implementierung. Quellen: [SWS_DM_00329], [SWS_DM_00333], [SWS_DM_00340], [SWS_DM_01741], [SWS_DM_01744], [SWS_DM_01745], [SWS_DM_01746]

Nutzungspfad

Im laufenden Betrieb erfolgt die Weiterleitung eingehender Diagnosenachrichten über ein abgestimmtes Zusammenspiel von Handler und Manager:

  1. Nachrichtenindikation: Empfängt der Handler Daten auf einem Kanal (ChannelID [SWS_DM_00337]), ruft er UdsTransportProtocolMgr::IndicateMessage auf. Dabei kann er Vorab-Nutzdaten in payloadInfo übergeben; empfohlen werden mindestens die ersten zwei Bytes zur frühzeitigen Erkennung funktionaler Anfragen AUTOSAR_AP_SWS_Diagnostics §7.1 „UDS Transport Layer“.
  2. Pufferallokation: Ist das DM aufnahmebereit, antwortet IndicateMessage mit einem std::pair aus IndicationResult::kIndicationOk und einem gültigen Smart-Pointer UdsMessagePtr [SWS_DM_00309] [SWS_DM_00385]. Das referenzierte UdsMessage-Objekt besitzt eine Mindestkapazität von einem Byte [SWS_DM_00385]. Der Puffer wird als std::unique_ptr mit einem spezifischen Deleter des DM-Kerns verwaltet und ist nicht threadsicher [SWS_DM_00303]. Für Lesezugriffe existiert das konstante Äquivalent UdsMessageConstPtr [SWS_DM_00304].
  3. Datenübergabe: Der Handler schreibt die empfangenen Diagnosedaten in den bereitgestellten Puffer, dessen Bytefolge über den Typ ByteSpan (Alias für ara::core::Span<ara::core::Byte> [SWS_DM_00338]) typisiert ist. Vermutlich dient die Bereitstellung der separaten Klasse UdsTransportProtocolPeriodicHandler über GetPeriodicHandler der Entkoppelung des periodischen Übertragungsdienstes 0x2A vom regulären UDS-Nachrichtenpfad. Frage Q-230ef0b7c384c594 (offen)
Ablauf der UDS-NachrichtenindikationHandlerUdsTransportProtocolMgrDM-KernIndicateMessage(channelId, payloadInfo)Prüfe Server-Zustand & RessourcenaltDM bereitAllokiere UdsMessagereturn pair(kIndicationOk, UdsMessagePtr)Kopiere Nutzdaten in ByteSpanDM belegtreturn pair(kIndicationOccupied, nullptr)

Sequenzdiagramm: Ablauf der Nachrichtenindikation und Pufferallokation zwischen Handler, Manager und DM-Kern. Quellen: AUTOSAR_AP_SWS_Diagnostics §7.1 „UDS Transport Layer“, [SWS_DM_00303], [SWS_DM_00309], [SWS_DM_00385], [SWS_DM_00386]

Fehlerszenarien

Die Spezifikation definiert konkrete Fehlerzustände und Vorbedingungen für die Transportanbindung:

  • Fehlgeschlagene Initialisierung: Liefert UdsTransportProtocolHandler::Initialize das Ergebnis kInitializeFailed, bricht das DM den Initialisierungsprozess für diesen Handler sofort ab und ruft keine weiteren Methoden an ihm auf [SWS_DM_01745].
  • Abweisung bei belegtem Diagnosekern: Wenn das DM durch eine laufende Servicebearbeitung derselben Tester-Present-Konversation blockiert ist und es sich nicht um ein funktionales Tester-Present mit payloadInfo 0x3E 0x80 handelt, liefert IndicateMessage das Ergebnis kIndicationOccupied zusammen mit einem nullptr anstelle eines Nachrichtenpuffers zurück [SWS_DM_00386].
  • Unerlaubte Aufrufe nach Terminierung: Ruft ein Plugin nach Rückkehr von Stop eine andere Methode von UdsTransportProtocolMgr als HandlerStopped auf, verletzt dies die Protokollvorgaben [SWS_DM_01741]. Ebenso ignoriert das DM Signale wie ChannelReestablished, wenn sie vor dem erfolgreichen Aufruf von Start eingehen [SWS_DM_01744].

Dieser Leitfaden basiert ausschließlich auf den Spezifikationen der AUTOSAR Adaptive Platform Release R25-11.

Themenkarte

KI-gestützte Gruppierung auf Basis der Records und Spezifikationsauszüge; keine Gliederung aus der AUTOSAR-Spezifikation.

Klassendiagramm

Abgerundete Rahmen = Namespace- bzw. Klassen-Scopes; hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); graue Boxen = namespace-fremde bzw. externe Basisklassen. Klicken öffnet die jeweilige Klassen- bzw. cppreference-Seite.

G cluster_ns apext::diag::uds_transport napext__diag__uds_transport__UdsMessage UdsMessage napext__diag__uds_transport__UdsTransportProtocolHandler UdsTransportProtocolHandler napext__diag__uds_transport__UdsTransportProtocolMgr UdsTransportProtocolMgr napext__diag__uds_transport__UdsTransportProtocolPeriodicHandler UdsTransportProtocolPeriodicHandler

Detailansicht

Wähle in der Gliederung einen Eintrag aus.

Nachrichtendaten

class represents an UDS message exchanged between DM generic core (UdsTransport ProtocolMgr) and a specific implementation of UdsTransportPr

ByteSpan type alias

This is the type of ByteSpan.

using ByteSpan = ara::core::Span<ara::core::Byte>;

This is the unique_ptr for constant UdsMessages containing a custom deleter as provided by the generic/core DM part towards the UdsTransportLayer-Plugin.

using UdsMessageConstPtr = std::unique_ptr<const UdsMessage, std::function<void(const UdsMessage*)>>;
UdsMessagePtr type alias

This is the unique_ptr for UdsMessages containing a custom deleter as provided by the generic/ core DM part towards the UdsTransportLayer-Plugin.

using UdsMessagePtr = std::unique_ptr<UdsMessage, std::function<void(UdsMessage*)>>;

Protokoll-Plugins

Abstract Class, which a specific UDS Transport Protocol (plugin) shall subclass.

UdsTransportProtocolPeriodicHandler class to support 0x2A service from ISO.

UdsTransportProtocolHandler are flexible "plugins", which need an identification.

using UdsTransportProtocolHandlerID = std::uint8_t;

Protokollverwaltung

The UdsTransportProtocolMgr class manages the interaction between the Diagnostic Server instance(s) and various UDS Transport Protocols (e.g

ChannelID type alias

This is the identification of channel on which to transmit.

using ChannelID = std::uint32_t;

Typaliase

type alias ByteSpan [SWS_DM_00338] Upstream: RS_Diag_04147

using ByteSpan = ara::core::Span<ara::core::Byte>;

This is the type of ByteSpan.

Header-Datei#include "apext/diag/uds_transport/protocol_types.h"
Scopenamespace apext::diag::uds_transport
SymbolByteSpan

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/SWS_DM_00338
Status
valid/unmigrated
Version
AUTOSAR/AP/record/SWS_DM_00338@rel:R25-11#3f6b4b55
Content hash
3f6b4b55
Source
https://www.autosar.org/fileadmin/standards/R25-11/AP/AUTOSAR_AP_SWS_Diagnostics.pdf#nameddest=SWS_DM_00338
Status: valid/unmigrated Version: rel:R25-11#1a041728 Versionshistorie & Revisions (1 transition, 8 revision)
Current State
valid/unmigrated
Reason
mechanically backfilled by migriere_status_backfill.py -- no per-field curation history exists yet for this record
Campaign
2026-08-13-status-backfill
Active Version
AUTOSAR/AP/record/SWS_DM_00338@rel:R25-11#1a041728
Point-in-Time History:
Recorded Revisions (8):
  • R25-11rel:R25-11#3f6b4b552026-09-30
  • R19-11rel:R19-11#87b9aa052026-10-14
  • R20-11rel:R20-11#280ab9cb2026-10-14
  • R21-11rel:R21-11#280ab9cb2026-10-14
  • R22-11rel:R22-11#21aad9862026-10-14
  • R23-11rel:R23-11#a3af51d32026-10-14
  • R24-11rel:R24-11#1a0417282026-10-14
  • R25-11rel:R25-11#1a0417282026-10-14 active
DateActorTransitionReason / RationaleCampaign
2026-08-13toolnone → valid/unmigratedmechanically backfilled by migriere_status_backfill.py -- no per-field curation history exists yet for this record2026-08-13-status-backfill

type alias ChannelID [SWS_DM_00337] Upstream: RS_Diag_04147

using ChannelID = std::uint32_t;

This is the identification of channel on which to transmit.

Header-Datei#include "apext/diag/uds_transport/protocol_types.h"
Scopenamespace apext::diag::uds_transport
SymbolChannelID

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/SWS_DM_00337
Status
valid/unmigrated
Version
AUTOSAR/AP/record/SWS_DM_00337@rel:R25-11#a8972619
Content hash
a8972619
Source
https://www.autosar.org/fileadmin/standards/R25-11/AP/AUTOSAR_AP_SWS_Diagnostics.pdf#nameddest=SWS_DM_00337
Status: valid/unmigrated Version: rel:R25-11#1d8116d5 Versionshistorie & Revisions (1 transition, 8 revision)
Current State
valid/unmigrated
Reason
mechanically backfilled by migriere_status_backfill.py -- no per-field curation history exists yet for this record
Campaign
2026-08-13-status-backfill
Active Version
AUTOSAR/AP/record/SWS_DM_00337@rel:R25-11#1d8116d5
Point-in-Time History:
Recorded Revisions (8):
  • R25-11rel:R25-11#a89726192026-09-30
  • R19-11rel:R19-11#a09308352026-10-14
  • R20-11rel:R20-11#6bf394982026-10-14
  • R21-11rel:R21-11#6bf394982026-10-14
  • R22-11rel:R22-11#1855826a2026-10-14
  • R23-11rel:R23-11#3d08977c2026-10-14
  • R24-11rel:R24-11#1d8116d52026-10-14
  • R25-11rel:R25-11#1d8116d52026-10-14 active
DateActorTransitionReason / RationaleCampaign
2026-08-13toolnone → valid/unmigratedmechanically backfilled by migriere_status_backfill.py -- no per-field curation history exists yet for this record2026-08-13-status-backfill

type alias UdsMessageConstPtr [SWS_DM_00304] Upstream: RS_Diag_04147

using UdsMessageConstPtr = std::unique_ptr<const UdsMessage, std::function<void(const UdsMessage*)>>;

This is the unique_ptr for constant UdsMessages containing a custom deleter as provided by the generic/core DM part towards the UdsTransportLayer-Plugin.

Header-Datei#include "apext/diag/uds_transport/uds_message.h"
Scopenamespace apext::diag::uds_transport
SymbolUdsMessageConstPtr
Thread-Sicherheitnot thread-safe
Hinweise: How the exact typedef for UdsMessageConstPtr looks like, is up to the DM product vendor. I.e. how f.i. the deleter signature looks like ... basically the minimal agreement is: UdsMessage ConstPtr shall behave like a std::unique_ptr<const UdsMessage>!

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/SWS_DM_00304
Status
valid/unmigrated
Version
AUTOSAR/AP/record/SWS_DM_00304@rel:R25-11#8e407528
Content hash
8e407528
Source
https://www.autosar.org/fileadmin/standards/R25-11/AP/AUTOSAR_AP_SWS_Diagnostics.pdf#nameddest=SWS_DM_00304
Status: valid/unmigrated Version: rel:R25-11#cbe7d8ab Versionshistorie & Revisions (1 transition, 8 revision)
Current State
valid/unmigrated
Reason
mechanically backfilled by migriere_status_backfill.py -- no per-field curation history exists yet for this record
Campaign
2026-08-13-status-backfill
Active Version
AUTOSAR/AP/record/SWS_DM_00304@rel:R25-11#cbe7d8ab
Point-in-Time History:
Recorded Revisions (8):
  • R25-11rel:R25-11#8e4075282026-09-30
  • R19-11rel:R19-11#f70a6f152026-10-14
  • R20-11rel:R20-11#70977a452026-10-14
  • R21-11rel:R21-11#70977a452026-10-14
  • R22-11rel:R22-11#3632365b2026-10-14
  • R23-11rel:R23-11#ee76163c2026-10-14
  • R24-11rel:R24-11#6389682c2026-10-14
  • R25-11rel:R25-11#cbe7d8ab2026-10-14 active
DateActorTransitionReason / RationaleCampaign
2026-08-13toolnone → valid/unmigratedmechanically backfilled by migriere_status_backfill.py -- no per-field curation history exists yet for this record2026-08-13-status-backfill

type alias UdsMessagePtr [SWS_DM_00303] Upstream: RS_Diag_04147

using UdsMessagePtr = std::unique_ptr<UdsMessage, std::function<void(UdsMessage*)>>;

This is the unique_ptr for UdsMessages containing a custom deleter as provided by the generic/ core DM part towards the UdsTransportLayer-Plugin.

Header-Datei#include "apext/diag/uds_transport/uds_message.h"
Scopenamespace apext::diag::uds_transport
SymbolUdsMessagePtr
Thread-Sicherheitnot thread-safe
Hinweise: How the exact typedef for UdsMessagePtr looks like, is up to the DM product vendor. I.e. how f.i. the deleter signature looks like ... basically the minimal agreement is: UdsMessagePtr shall behave like a std::unique_ptr<UdsMessage>!

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/SWS_DM_00303
Status
valid/unmigrated
Version
AUTOSAR/AP/record/SWS_DM_00303@rel:R25-11#b75a0d13
Content hash
b75a0d13
Source
https://www.autosar.org/fileadmin/standards/R25-11/AP/AUTOSAR_AP_SWS_Diagnostics.pdf#nameddest=SWS_DM_00303
Status: valid/unmigrated Version: rel:R25-11#6be645e6 Versionshistorie & Revisions (1 transition, 8 revision)
Current State
valid/unmigrated
Reason
mechanically backfilled by migriere_status_backfill.py -- no per-field curation history exists yet for this record
Campaign
2026-08-13-status-backfill
Active Version
AUTOSAR/AP/record/SWS_DM_00303@rel:R25-11#6be645e6
Point-in-Time History:
Recorded Revisions (8):
  • R25-11rel:R25-11#b75a0d132026-09-30
  • R19-11rel:R19-11#401203282026-10-14
  • R20-11rel:R20-11#a5dd04072026-10-14
  • R21-11rel:R21-11#a5dd04072026-10-14
  • R22-11rel:R22-11#812335462026-10-14
  • R23-11rel:R23-11#057e29102026-10-14
  • R24-11rel:R24-11#fb6c8d462026-10-14
  • R25-11rel:R25-11#6be645e62026-10-14 active
DateActorTransitionReason / RationaleCampaign
2026-08-13toolnone → valid/unmigratedmechanically backfilled by migriere_status_backfill.py -- no per-field curation history exists yet for this record2026-08-13-status-backfill

type alias UdsTransportProtocolHandlerID [SWS_DM_00336] Upstream: RS_Diag_04147, RS_Diag_04168

using UdsTransportProtocolHandlerID = std::uint8_t;

UdsTransportProtocolHandler are flexible "plugins", which need an identification.

Header-Datei#include "apext/diag/uds_transport/protocol_types.h"
Scopenamespace apext::diag::uds_transport
SymbolUdsTransportProtocolHandlerID

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/SWS_DM_00336
Status
valid/unmigrated
Version
AUTOSAR/AP/record/SWS_DM_00336@rel:R25-11#44559d54
Content hash
44559d54
Source
https://www.autosar.org/fileadmin/standards/R25-11/AP/AUTOSAR_AP_SWS_Diagnostics.pdf#nameddest=SWS_DM_00336
Status: valid/unmigrated Version: rel:R25-11#dbbb3100 Versionshistorie & Revisions (1 transition, 8 revision)
Current State
valid/unmigrated
Reason
mechanically backfilled by migriere_status_backfill.py -- no per-field curation history exists yet for this record
Campaign
2026-08-13-status-backfill
Active Version
AUTOSAR/AP/record/SWS_DM_00336@rel:R25-11#dbbb3100
Point-in-Time History:
Recorded Revisions (8):
  • R25-11rel:R25-11#44559d542026-09-30
  • R19-11rel:R19-11#d727dd482026-10-14
  • R20-11rel:R20-11#7d7439fe2026-10-14
  • R21-11rel:R21-11#7d7439fe2026-10-14
  • R22-11rel:R22-11#c079e14d2026-10-14
  • R23-11rel:R23-11#d98d683b2026-10-14
  • R24-11rel:R24-11#dbbb31002026-10-14
  • R25-11rel:R25-11#dbbb31002026-10-14 active
DateActorTransitionReason / RationaleCampaign
2026-08-13toolnone → valid/unmigratedmechanically backfilled by migriere_status_backfill.py -- no per-field curation history exists yet for this record2026-08-13-status-backfill