Serve para a conexão e o gerenciamento padronizados de protocolos de transporte UDS externos no gerenciamento de diagnóstico.
GERADO POR IAnão revisadoModelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: ce8b113ec3f5ProcedênciaPerguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão
Serve para a conexão e o gerenciamento padronizados de protocolos de transporte UDS externos no gerenciamento de diagnóstico.
O namespace apext::diag::uds_transport fornece a interface de transporte C++ para o desacoplamento do gerenciamento de diagnóstico genérico de protocolos de transporte UDS específicos AUTOSAR_AP_SWS_Diagnostics §7.1 «UDS Transport Layer». Plugins de protocolo derivam da classe base UdsTransportProtocolHandler e passam por um ciclo de vida estrito composto por construção, inicialização, início e parada ordenada [SWS_DM_00329]. Mensagens recebidas são reportadas via IndicateMessage e recebem, quando houver capacidade livre, um UdsMessagePtr gerenciado em memória para a aceitação de dados úteis. Uma condição de contorno central é que, após a parada, nenhuma outra chamada para o gerenciamento de diagnóstico deve ocorrer, exceto a mensagem de confirmação.
Contexto
O namespace apext::diag::uds_transport define a interface de transporte C++ padronizada (Transport Protocol API) para o gerenciamento de diagnóstico (DM) na AUTOSAR Adaptive Platform AUTOSAR_AP_SWS_Diagnostics §7.1 «UDS Transport Layer». A arquitetura separa funcionalmente o núcleo genérico do gerenciamento de diagnóstico de camadas de rede e de transporte concretas. Dessa forma, protocolos padronizados como DoIP, bem como protocolos de transporte futuros ou específicos de fabricantes (por exemplo, para CAN, CAN-FD ou FlexRay), podem ser integrados como plugins modulares AUTOSAR_AP_SWS_Diagnostics §7.1 «UDS Transport Layer».
A instância de mediação central é formada pela classe UdsTransportProtocolMgr, que coordena a interação entre as instâncias do Diagnostic Server e os protocolos de transporte conectados. Plugins de protocolo concretos derivam da classe base abstrata UdsTransportProtocolHandlerAUTOSAR_AP_SWS_Diagnostics §7.1.1 «Support of UDS Transport Layer»[SWS_DM_00315]. Instâncias individuais de manipulador são endereçadas via UdsTransportProtocolHandlerID[SWS_DM_00336], enquanto canais de comunicação são identificados por meio do tipo ChannelID[SWS_DM_00337]. Para dar suporte a consultas periódicas de dados de acordo com o serviço ISO 0x2A, a interface também incorpora a classe UdsTransportProtocolPeriodicHandler.
Ciclo de vida
O gerenciamento de diagnóstico controla o ciclo de vida de cada instância de UdsTransportProtocolHandler em uma sequência estritamente predefinida [SWS_DM_00329]:
Criação: o DM instancia o plugin de protocolo por meio do construtor UdsTransportProtocolHandler::UdsTransportProtocolHandler[SWS_DM_00329].
Inicialização: o DM chama UdsTransportProtocolHandler::Initialize[SWS_DM_00329]. À exceção da consulta de GetPeriodicHandler, o DM não deve chamar outros métodos no manipulador antes do retorno bem-sucedido de kInitializeOk[SWS_DM_01746].
Início e operação: após a inicialização bem-sucedida, o manipulador é ativado com UdsTransportProtocolHandler::Start. Apenas após essa chamada o DM processa mensagens sobre canais reativados via UdsTransportProtocolMgr::ChannelReestablished[SWS_DM_01744].
Terminação: se o DM transitar para o estado ApplicationState.kTerminating, ele chamará UdsTransportProtocolHandler::Stop para todos os plugins ativos [SWS_DM_00333]. Após o retorno dessa chamada, o plugin só poderá chamar UdsTransportProtocolMgr::HandlerStopped[SWS_DM_01741]. O DM aguarda ativamente por essa confirmação [SWS_DM_00340].
Durante a operação contínua, o encaminhamento de mensagens de diagnóstico recebidas ocorre por meio de uma interação coordenada entre o manipulador e o gerenciador:
Indicação de mensagem: se o manipulador receber dados em um canal (ChannelID[SWS_DM_00337]), ele chama UdsTransportProtocolMgr::IndicateMessage. Ao fazer isso, ele pode passar dados úteis preliminares em payloadInfo; recomenda-se fornecer ao menos os dois primeiros bytes para a detecção precoce de requisições funcionais AUTOSAR_AP_SWS_Diagnostics §7.1 «UDS Transport Layer».
Alocação de buffer: se o DM estiver pronto para recebimento, IndicateMessage responde com um std::pair de IndicationResult::kIndicationOk e um smart pointer válido UdsMessagePtr[SWS_DM_00309][SWS_DM_00385]. O objeto UdsMessage referenciado possui uma capacidade mínima de um byte [SWS_DM_00385]. O buffer é gerenciado como std::unique_ptr com um deleter específico do núcleo do DM e não é thread-safe [SWS_DM_00303]. Para acessos de leitura, existe o equivalente constante UdsMessageConstPtr[SWS_DM_00304].
Passagem de dados: o manipulador grava os dados de diagnóstico recebidos no buffer fornecido, cuja sequência de bytes é tipada pelo tipo ByteSpan (alias para ara::core::Span<ara::core::Byte>[SWS_DM_00338]). Presumivelmente, a disponibilização da classe separada UdsTransportProtocolPeriodicHandler via GetPeriodicHandler serve para desacoplar o serviço de transmissão periódica 0x2A do caminho regular de mensagens UDS. Pergunta Q-230ef0b7c384c594 (aberta)
A especificação define estados de erro concretos e pré-condições para a conexão de transporte:
Falha na inicialização: se UdsTransportProtocolHandler::Initialize retornar o resultado kInitializeFailed, o DM aborta imediatamente o processo de inicialização para este manipulador e não chama mais nenhum método nele [SWS_DM_01745].
Rejeição com o núcleo de diagnóstico ocupado: se o DM estiver bloqueado por um processamento de serviço em andamento da mesma conversação de Tester Present e não se tratar de um Tester Present funcional com payloadInfo0x3E 0x80, IndicateMessage retorna o resultado kIndicationOccupied juntamente com um nullptr em vez de um buffer de mensagem [SWS_DM_00386].
Chamadas não permitidas após a terminação: se um plugin chamar qualquer outro método de UdsTransportProtocolMgr além de HandlerStopped após o retorno de Stop, isso violará os requisitos do protocolo [SWS_DM_01741]. Da mesma forma, o DM ignora sinais como ChannelReestablished se eles chegarem antes da chamada bem-sucedida de Start[SWS_DM_01744].
Este guia baseia-se exclusivamente nas especificações da AUTOSAR Adaptive Platform Release R25-11.
KI-gestützte Gruppierung auf Basis der Records und Spezifikationsauszüge; keine Gliederung aus der AUTOSAR-Spezifikation.
Diagrama de classes
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.
This is the unique_ptr for constant UdsMessages containing a custom deleter as provided by the generic/core DM part towards the UdsTransportLayer-Plugin.
This is the unique_ptr for constant UdsMessages containing a custom deleter as provided by the generic/core DM part towards the UdsTransportLayer-Plugin.
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.
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.
gemini-3.8-flash-low· 2026-10-13 · Original em alemão