Sirve como clase base abstracta para plugins de transporte UDS para la transmisión y el reenvío de mensajes de diagnóstico.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 8b34a053e223ProcedenciaPreguntas abiertas (2)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
Sirve como clase base abstracta para plugins de transporte UDS para la transmisión y el reenvío de mensajes de diagnóstico.
La clase abstracta sirve a los plugins de transporte UDS como interfaz base para la conexión estandarizada a la gestión de diagnóstico adaptativa (AUTOSAR_AP_SWS_Diagnostics §7.1.1 «Support of UDS Transport Layer»). Una implementación derivada reenvía los mensajes de diagnóstico recibidos al gestor de protocolos y transmite los mensajes de respuesta generados a través de canales específicos de red hacia el tester de diagnóstico. El ciclo de vida está sujeto a una secuencia estricta compuesta por creación, inicialización separada, inicio asíncrono y parada ordenada ([SWS_DM_00329]). Tras la instanciación, las llamadas a métodos operativos no son seguras para subprocesos (thread-safe) y requieren un control coordinado por parte del núcleo de diagnóstico.
Contexto
La clase apext::diag::uds_transport::UdsTransportProtocolHandler es una clase base abstracta dentro del módulo diag de AUTOSAR Adaptive Platform. Define la interfaz estandarizada a través de la cual se conectan plugins de transporte UDS propietarios o específicos de protocolo a la gestión de diagnóstico adaptativa (DM) (AUTOSAR_AP_SWS_Diagnostics §7.1.1 «Support of UDS Transport Layer», [SWS_DM_00315]). Cada protocolo de transporte concreto —por ejemplo, para diagnóstico a través de medios de red de automoción— implementa esta interfaz como subclase derivada. Es de suponer que el DM posea y gestione en exclusiva la respectiva instancia de manejador a lo largo de todo su ciclo de vida operativo. Pregunta Q-ef308265bfdf6cec (abierta) La interacción entre el núcleo de diagnóstico y el plugin se realiza a través de la referencia transportprotocolManager de tipo UdsTransportProtocolMgr&, que se pasa en el constructor y se almacena de forma protegida ([SWS_DM_09015], [SWS_DM_09025]). Cada manejador se identifica mediante un UdsTransportProtocolHandlerID numérico, que puede consultarse mediante GetHandlerID() ([SWS_DM_00325]).
Ciclo de vida
El ciclo de vida de un manejador de protocolo de transporte UDS está controlado por el DM de forma estrictamente secuencial ([SWS_DM_00329]). Tras la instanciación mediante el constructor UdsTransportProtocolHandler ([SWS_DM_09015]), el método Initialize() separa la inicialización real del protocolo de la creación del objeto ([SWS_DM_00319]). A excepción de una consulta opcional mediante GetPeriodicHandler(), el DM no debe llamar a ningún método en el manejador antes del retorno exitoso de InitializationResult::kInitializeOk ([SWS_DM_01746], [SWS_DM_09017]). Tras una inicialización exitosa, la llamada a Start() pone el manejador en el estado de procesamiento activo ([SWS_DM_00322]). Para minimizar el tiempo de arranque, Start() está concebida como una operación asíncrona; es de suponer que el DM coordine internamente el inicio en paralelo de varios manejadores. Pregunta Q-66e5a53d55e6d812 (abierta) Si el DM pasa al estado ApplicationState.kTerminating durante el apagado, indica al manejador que finalice mediante Stop() ([SWS_DM_00323], [SWS_DM_00333]). El DM espera a la finalización, la cual el manejador confirma mediante la llamada a UdsTransportProtocolMgr::HandlerStopped() ([SWS_DM_00340]). Tras el retorno de Stop(), se prohíbe al plugin cualquier llamada a métodos del gestor excepto HandlerStopped() ([SWS_DM_01741]). La liberación de recursos se realiza finalmente a través del destructor virtual ([SWS_DM_09016]). Mientras que el constructor es seguro para subprocesos (thread-safe), los métodos de interfaz operativos están declarados como no seguros para subprocesos.
En el funcionamiento regular de diagnóstico, el manejador procesa mensajes entrantes y transmite respuestas. Tan pronto como en la interfaz de red se disponga al menos de dirección de origen, dirección de destino, tipo de dirección (física o funcional), longitud total del mensaje y, en caso de datos útiles de varios bytes, los dos primeros bytes (payloadInfo), la implementación notifica la solicitud al gestor a través de UdsTransportProtocolMgr::IndicateMessage() ([SWS_DM_00342], AUTOSAR_AP_SWS_Diagnostics §7.1.1.3 «UDS message transmission on a UDS TransportLayer»). Cada solicitud está asignada a un canal único (AUTOSAR_AP_SWS_Diagnostics §7.1.1.4 «Channel Notifications»). Para responder, el DM transfiere la respuesta de diagnóstico al mismo manejador y canal mediante Transmit(message, channelId) ([SWS_DM_00327], [SWS_DM_00348]). Tras la transmisión física, el manejador devuelve el objeto de mensaje entregado al gestor a través de UdsTransportProtocolMgr::TransmitConfirmation() ([SWS_DM_00327], [SWS_DM_00351]). Una ruta de uso especializada concierne a los reinicios de unidades de control (servicio UDS 0x11) con respuesta positiva tras el reinicio: aquí, antes del reinicio, el DM solicita a través de NotifyReestablishment(channelId) que el manejador guarde de forma no volátil la información de conexión; tras el reinicio y un nuevo Start(), el manejador notifica la restauración del mismo canal mediante ChannelReestablished() ([SWS_DM_00326], [SWS_DM_01744]).
Si la inicialización de la capa de transporte falla y Initialize() devuelve el estado InitializationResult::kInitializeFailed, el DM cancela de inmediato el proceso de arranque de este protocolo y no invoca más métodos en esta instancia ([SWS_DM_01745], [SWS_DM_09017]). Si las transmisiones periódicas no son compatibles con el protocolo de transporte, la llamada a GetPeriodicHandler() proporciona un ara::core::Result con el código de error kConfigurationMismatch ([SWS_DM_01068]). Si no se puede garantizar la restauración del canal solicitada para un reinicio de la ECU, NotifyReestablishment() falla y señaliza esto mediante el valor de retorno false ([SWS_DM_00326]). Por último, si el proceso de envío de una respuesta de diagnóstico falla en la capa de red, el manejador debe comunicarlo al gestor en la confirmación configurando el argumento result en TransmitConfirmation() con el valor kTransmitFailed ([SWS_DM_00351]).
Esta guía se generó automáticamente a partir de la especificación AUTOSAR R25-11.
Initializes UDS Transport Protocol handler. This methods needs to be called before a call of Start(). It is meant to separate the actual initialization of the UDS Transport Protocol handler from the constructor.
Tells the UdsTransportProtocolHandler, to notify the DM core via UdsTransportProtocol Mgr::ChannelReestablished() if the given channel has been re-established after next Uds TransportProtocolHandler::Start(). The main purpose of this method is to allow the DM to provide an ECU-Reset (0x11 service), with configuration option "positive response AFTER reset". In this scenario, the request for 0x11 will be received on a certain channel (GlobalChannel Identifier), then the ECU-Reset takes place and after ECU-Restart, all UdsProtocol Handlers/-plugins get restarted via call to UdsTransportProtocolHandler::Start().
Start processing the UDS Transport Protocol. Within the implementation there might be some stack specific implementation. The method is asynchronous to allow the DM to start multiple UdsTransportProtocolHandler in parallel to reduce startup time.
Method to indicate that this UdsTransportProtocolHandler should terminate. If UdsTransportProtocolHandler has stopped, it shall call UdsTransportProtocolMgr:: HandlerStopped(UdsTransportProtocolHandlerID).
If periodic transmissions are supported on this transport protocol, a reference to UdsTransportProtocolPeriodicHandler is returned, and if not supported, an error (kConfigurationMismatch).
Fehler
Fehlercode
Beschreibung
kConfigurationMismatch
Request a governed re-review of this record. The record is not changed immediately.
Initializes UDS Transport Protocol handler. This methods needs to be called before a call of Start(). It is meant to separate the actual initialization of the UDS Transport Protocol handler from the constructor.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 2d1a514affd8ProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
El método virtual puro Initialize sirve para la inicialización explícita de una instancia de apext::diag::uds_transport::UdsTransportProtocolHandler y separa formalmente este proceso de la construcción del objeto [SWS_DM_00319]. El Diagnostic Manager (DM) lo llama de forma síncrona y sin parámetros, no lanza excepciones (noexcept) y devuelve un InitializationResult[SWS_DM_00319][SWS_DM_09017].
El método señaliza el resultado a través del enumerador InitializationResult::kInitializeOk o InitializationResult::kInitializeFailed[SWS_DM_09017]. El comportamiento posterior del DM depende directamente del valor de retorno:
En caso de un retorno exitoso con kInitializeOk, el DM puede invocar los métodos posteriores del manejador; antes de este valor de retorno exitoso, no se permite ninguna otra llamada a métodos, con la excepción de GetPeriodicHandler[SWS_DM_01746].
Si el manejador devuelve kInitializeFailed, el DM cancela por completo el proceso de inicialización de este protocolo de transporte y no vuelve a invocar ningún otro método en la instancia afectada [SWS_DM_01745].
Este texto ha sido generado por una IA basándose en AUTOSAR R25-11.
Tells the UdsTransportProtocolHandler, to notify the DM core via UdsTransportProtocol Mgr::ChannelReestablished() if the given channel has been re-established after next Uds TransportProtocolHandler::Start(). The main purpose of this method is to allow the DM to provide an ECU-Reset (0x11 service), with configuration option "positive response AFTER reset". In this scenario, the request for 0x11 will be received on a certain channel (GlobalChannel Identifier), then the ECU-Reset takes place and after ECU-Restart, all UdsProtocol Handlers/-plugins get restarted via call to UdsTransportProtocolHandler::Start().
Now there are two expectations, when this method has been called before and returned "TRUE": If the same remote client connects to the UdsProtocolHandler, it shall get a channel identification with the same identifying as the last time. It consecutively calls UdsTransportProtocolMgr::ChannelReestablished(Global ChannelIdentifier).
The detection/decision, whether the "same" client reconnects as before is an UdsProtocol Handler implementation specific decision.
The general expectation is:
If the channel is set up from exactly the same remote network-endpoint, it typically gets the same ChannelID. To support this functionality, the implementation at least has to store non-volatile, that this notification has to be done. Further it might be needed to store some additional connection specific info non-volatile to make sure, that the same ChannelID can be reassigned. This is the case if the mapping of protocol specific channel info -> channelID isn’t a
stable bijective mapping!
Small example:
The underlying network protocol, which UdsProtocolHandler implements is based on TCP. At the point in time, where the 0x11 Service Identifier request is received on channel identified by the DM calls UdsTransportProtocolHandler::NotifyReestablishment() on this ChannelID.
Now the implementation of UdsProtocolHandler stores non-volatile in the context of this call:
• NetworkEndpoint (IP-address and port number) of the channel. • NetworkEndpoint (IP-address and port number) of the local port (because in this example, the UdsTransportProtocolHandler listens on/supports different ports). • ChannelID it has currently assigned. After restart this ChannelID is only reused for a channel with exactly the same Network Endpoint addresses as stored non-volatile.
If this ChannelID then gets reassigned, then UdsTransportProtocolMgr::Channel Reestablished() has to be called.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 677bdfc28d3dProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
El método NotifyReestablishment es llamado de forma síncrona por el Diagnostic Manager (DM) cuando, en el marco de un reinicio de la unidad de control (servicio UDS 0x11), se debe enviar una respuesta positiva únicamente después de haberse efectuado el reinicio ([SWS_DM_00326], [SWS_DM_00360]). A través del parámetro channelId se transfiere el canal de transporte que se va a supervisar ([SWS_DM_00326]).
Con la llamada, se ordena a la implementación del protocolo de transporte que guarde de forma persistente la solicitud de supervisión ([SWS_DM_00359]). Tras el reinicio del sistema y el nuevo arranque de los manejadores, el manejador de protocolo notifica de forma asíncrona la nueva disponibilidad del canal al DM mediante [SWS_DM_00313] ([SWS_DM_00358]). El valor de retorno booleano indica con true que la solicitud de notificación fue aceptada y puede cumplirse; de lo contrario, se devuelve false ([SWS_DM_00326]).
En cuanto a la concurrencia y el tratamiento de errores, se aplica lo siguiente:
La función está especificada como not thread-safe; las llamadas paralelas deben sincronizarse por parte del llamador ([SWS_DM_00326]).
Para poder identificar el mismo canal tras el reinicio, se deben guardar los datos de terminal específicos de la conexión si no existe un mapeo biyectivo estable ([SWS_DM_00326]).
Esta indicación de uso fue creada por una IA sobre la base de la especificación.
The channelID, whose re-establishment shall be notified to Uds TransportProtocolMgr
Rückgabewert
Typ
Beschreibung
bool
TRUE, if notification request is accepted and can be fulfilled, else FALSE
Hinweise: The UdsTransportProtocolHandler will call UdsTransportProtocolMgr::Channel Reestablished() after UdsTransportProtocolHandler::Start() is called and as soon as it detects that the remote client/tester is reachable again.
Request a governed re-review of this record. The record is not changed immediately.
Start processing the UDS Transport Protocol. Within the implementation there might be some stack specific implementation. The method is asynchronous to allow the DM to start multiple UdsTransportProtocolHandler in parallel to reduce startup time.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: b5781ddbed6cProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
El método Start de la interfaz apext::diag::uds_transport::UdsTransportProtocolHandler inicia el procesamiento de protocolo de un plugin de transporte UDS en el Diagnostic Management (DM) según [SWS_DM_00322]. No recibe parámetros y no devuelve ningún valor. La ejecución está diseñada de forma asíncrona para que el DM pueda iniciar múltiples instancias en paralelo y reducir así el tiempo de arranque del sistema global ([SWS_DM_00322]). Dado que la firma declara void, es de prever que el procesamiento asíncrono se gestione de forma específica de la pila mediante mecanismos internos en segundo plano. Pregunta Q-d1023a05a1f3e2ab (abierta)
Precondiciones: antes de la llamada, la inicialización mediante Initialize ([SWS_DM_00319]) debe haberse completado obligatoriamente con el resultado kInitializeOk ([SWS_DM_01746]). Si, por el contrario, la inicialización devuelve kInitializeFailed, el DM cancela el proceso y no debe invocar Start ([SWS_DM_01745]).
Postcondiciones: solo una vez realizada la llamada a Start, el DM puede iniciar funciones posteriores como Transmit o Stop en el manejador ([SWS_DM_01743]). Además, el DM procesa las notificaciones mediante ChannelReestablished ([SWS_DM_00313]) exclusivamente si se ejecutó Start con anterioridad ([SWS_DM_01744]), lo que resulta esencial, entre otros, para escenarios de restablecimiento de la ECU con reconexión ([SWS_DM_00326]).
El método está declarado como noexcept y, por tanto, es seguro frente a excepciones, pero está especificado explícitamente como no seguro para subprocesos (not thread-safe) ([SWS_DM_00322]). Por consiguiente, los emisores de llamadas deben asegurarse de que las llamadas a instancias se realicen de forma sincronizada.
Esta nota de uso fue generada automáticamente a partir de los datos de especificación.
Method to indicate that this UdsTransportProtocolHandler should terminate. If UdsTransportProtocolHandler has stopped, it shall call UdsTransportProtocolMgr:: HandlerStopped(UdsTransportProtocolHandlerID).
After return from Stop(), the handler-plugin shall NOT call to UdsTransportProtocolMgr with any other method but UdsTransportProtocolMgr::HandlerStopped().
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: e507b828b86bProcedencia
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
El método Stop de la interfaz apext::diag::uds_transport::UdsTransportProtocolHandler señaliza a una instancia del protocolo de transporte UDS que debe terminar [SWS_DM_00323]. La llamada la activa Diagnostic Management (DM) tan pronto como este cambia al estado ApplicationState.kTerminating[SWS_DM_00333]. La función no tiene parámetros, no tiene valor de retorno, está declarada como noexcept y especificada como segura contra excepciones (exception safe) [SWS_DM_00323].
Para el contexto de llamada y la concurrencia se aplican las siguientes condiciones:
Concurrencia: La operación está especificada como no segura para subprocesos (not thread-safe) [SWS_DM_00323].
Restricción de llamadas: Tras el retorno de Stop, el plugin manejador no debe llamar a ningún otro método en apext::diag::uds_transport::UdsTransportProtocolMgr, con la única excepción de la confirmación HandlerStopped[SWS_DM_01741][SWS_DM_00323].
La interacción con el DM se produce de forma asíncrona: una vez que el manejador ha cerrado sus conexiones de red y liberado los recursos, debe notificar al DM a través de apext::diag::uds_transport::UdsTransportProtocolMgr::HandlerStopped transmitiendo su handlerId[SWS_DM_00314]. Tras la llamada a Stop, el DM espera obligatoriamente esta retrollamada de confirmación antes de finalizar definitivamente el proceso [SWS_DM_00340].
Este texto se ha generado de forma automatizada sobre la base de la especificación AUTOSAR Adaptive R25-11.
En relación con el orden y el ciclo de vida, el Diagnostic Manager solo puede llamar a Transmit una vez que la inicialización del manejador haya concluido con kInitializeOk ([SWS_DM_01746]) y se haya invocado el método Start ([SWS_DM_01743]). Dado que la operación está especificada como not thread-safe y exception safe ([SWS_DM_00327]), según la interpretación, la coordinación de órdenes de envío paralelas debería tener que realizarse del lado del emisor en el Diagnostic Manager. Pregunta Q-6edd917928b60e55 (abierta)
La función no proporciona ningún valor de retorno de forma síncrona. El manejador de transporte está obligado a devolver el puntero del mensaje al Diagnostic Manager de forma asíncrona a través de apext::diag::uds_transport::UdsTransportProtocolMgr::TransmitConfirmation tras la transmisión ([SWS_DM_00327], [SWS_DM_00312]). Si el envío en la capa de red se realiza con éxito, se notifica el resultado kTransmitOk; de lo contrario, kTransmitFailed ([SWS_DM_00351]).
Esta nota de uso se basa en la especificación AUTOSAR Adaptive R25-11.
The message to be transmitted as a UdsMessage::Ptr (unique_ptr style). UdsTransportProtocolHandler has to give back this Uds Message::Ptr via UdsTransportProtocolMgr::Transmit Confirmation() to signal, that it is done with this message.
channelId
Identification of channel on which to transmit.
Rückgabewert
Typ
Beschreibung
None
Hinweise: This transmit API covers T_Data.req of ISO 14229-2[25] Figure 2.
Request a governed re-review of this record. The record is not changed immediately.
The handler ID used by DM to identify this handler. This is just a number/identification given by the DM core, when instantiating a UdsTransportProtocolHandler instance, to be able to distinguish it from other handler-plugins or built-in UdsTransportProtocolHandler implementation(s).
transportProtocolMgr
Reference to UdsTransportProtocolMgr owned by this DM, with which UdsTransportProtocolHandler instance shall interact.
Request a governed re-review of this record. The record is not changed immediately.
gemini-3.8-flash-low· 2026-10-13 · Original en alemán