Permite ao ambiente de tempo de execução de diagnóstico a recuperação passo a passo de dados de arquivos e diretórios a partir de uma aplicação.
GERADO POR IAnão revisadoModelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: a81aee002281ProcedênciaPerguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão
Permite ao ambiente de tempo de execução de diagnóstico a recuperação passo a passo de dados de arquivos e diretórios a partir de uma aplicação.
A classe ara::diag::DataTransferReadByPullHandler serve para a disponibilização de dados de arquivos ou diretórios que são recuperados ativamente da aplicação pela camada de diagnóstico AraDiag no âmbito de uma operação de leitura UDS ([SWS_DM_01506]). O fluxo abrange a recuperação passo a passo de dados via Read() até o encerramento final da sessão via ExitRead(). Como condição estrita de ciclo de vida, uma instância de manipulador atribuída a exatamente uma única sessão de transferência não pode, sob hipótese alguma, ser destruída antes da chamada de ExitRead() ([SWS_DM_01510]).
Contexto
A classe ara::diag::DataTransferReadByPullHandler ([SWS_DM_01506], AUTOSAR_AP_SWS_Diagnostics §8.10.2 «Class: DataTransferReadByPullHandler») processa transferências de dados iniciadas por solicitações de diagnóstico para leitura de arquivos ou diretórios (como RequestReadFile ou RequestReadDirectory). A arquitetura baseia-se em um procedimento pull, no qual a camada de diagnóstico AraDiag consulta ativamente ("pulled") os dados a serem transmitidos a partir da implementação.
Três componentes participam da interação: o cliente UDS externo (testador de diagnóstico), o subsistema de diagnóstico AraDiag e a implementação do manipulador específica da aplicação. O cliente externo envia solicitações de leitura, após o que AraDiag chama os métodos do manipulador para disponibilizar passo a passo chunks de dados e transmiti-los ao cliente UDS ([SWS_DM_01513]).
Ciclo de vida
O ciclo de vida de uma instância de manipulador está vinculado exclusivamente a uma única sessão de transferência de arquivos. O construtor padrão está declarado como protected ([SWS_DM_01507]). Interpretação: a aplicação concreta deve, portanto, implementar e instanciar uma subclasse derivada. Pergunta Q-cb78bc4a1d40968b (aberta)
As operações de cópia estão completamente desativadas: o construtor de cópia ([SWS_DM_01509]) e o operador de atribuição por cópia ([SWS_DM_01512]) estão especificados como excluídos (=delete), uma vez que os manipuladores são destinados ao uso descartável dentro de uma sessão ("only one way usage i.e. per single file transfer session"). Em contrapartida, as operações de movimentação (Move Constructor e Move Assignment) estão definidas como implementação padrão e declaradas como noexcept ([SWS_DM_01508], [SWS_DM_01511], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.1.1 «Move Constructor»).
Para a liberação aplica-se uma pré-condição estrita: uma instância da classe não pode, de forma alguma, ser destruída antes que o método ExitRead() tenha sido chamado ([SWS_DM_01510], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.1.2 «Destructor»). No que diz respeito à concorrência, os métodos de interface Read() e ExitRead() estão definidos como não thread-safe ("not thread-safe"), mas com segurança de exceção (noexcept) ([SWS_DM_01513], [SWS_DM_01514]).
Caminho de utilização
O fluxo regular de uma recuperação de dados divide-se nas seguintes etapas:
Inicialização: a aplicação instancia a classe derivada do manipulador para a sessão de transferência iminente.
Recuperação de dados: para disponibilizar os blocos de dados, AraDiag chama o método Read() ([SWS_DM_01513], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.2 «Read»). A aplicação recebe uma visualização de memória response_data (do tipo ara::core::Span<const ara::core::Byte>) para um buffer pré-alocado por AraDiag, preenche-o com os próximos conteúdos do arquivo e conclui o ara::core::Future<std::uint32_t> com a quantidade de bytes gravados. AraDiag insere esses dados após o contador sequencial de blocos (blockSequenceCounter) como transferResponseParameterRecord na resposta positiva UDS ([SWS_DM_01513]). Esta etapa é repetida para os chunks subsequentes.
Encerramento da sessão: para o término regular da transferência, AraDiag chama ExitRead() ([SWS_DM_01514], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.1 «ExitRead»). São passados o motivo do término exit_type, parâmetros específicos do fabricante (transfer_request_parameter_record), meta_info e um cancellation_handler. A implementação confirma isso por meio de um ara::core::Future<ara::core::Vector<ara::core::Byte>>, cujos valores de retorno são transmitidos após o SID na resposta positiva ([SWS_DM_01514]).
Liberação: o objeto manipulador só pode ser destruído após a chamada de ExitRead() ter sido efetuada ([SWS_DM_01510]).
Diagrama de sequência: fluxo típico da recuperação de dados via procedimento pull através de AraDiag. Fontes: [SWS_DM_01513], [SWS_DM_01514]
Cenários de erro
Se ocorrerem erros durante a preparação dos dados ou no encerramento, a aplicação relata isso por meio do Future retornado, fornecendo-o com um código de erro UDS (DiagUdsNrcErrc de acordo com a ISO 14229-1) ([SWS_DM_01513], [SWS_DM_01514]). Em seguida, AraDiag gera a resposta negativa UDS correspondente (NRC) para o testador.
Para o cancelamento prematuro, um CancellationHandler é passado para ambos os métodos ([SWS_DM_01513], [SWS_DM_01514]). A aplicação pode verificar através de cancellation_handler.IsCanceled() se a conversação foi cancelada ou registrar uma função de retorno de chamada via cancellation_handler.SetNotifier(). Os buffers disponibilizados (response_data e transfer_request_parameter_record) permanecem válidos até o cumprimento da promise ou até o cancelamento através do manipulador.
Se a instância for destruída antes da chamada de ExitRead(), ocorre uma violação da diretriz da especificação ([SWS_DM_01510]), o que pode levar a sessões de transferência incompletas e estados indefinidos do sistema.
Este guia de classe baseia-se na especificação AUTOSAR Adaptive R25-11 e sintetiza os requisitos para a 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.
GERADO POR IAnão revisadoModelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 7a822a7b2a3dProcedência
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão
O método puramente virtual ExitRead encerra uma sessão de transferência de dados em andamento no âmbito de ara::diag::DataTransferReadByPullHandler[SWS_DM_01514] (AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.1 «ExitRead»). Ele recebe como parâmetros o motivo de encerramento exit_type (tipo DataTransferExitType), parâmetros específicos do fabricante do veículo em transfer_request_parameter_record (como ara::core::Span<const ara::core::Byte>), o contexto de solicitação meta_info, bem como um cancellation_handler. O parâmetro transfer_request_parameter_record permanece válido até que o Promise associado seja cumprido ou a execução seja cancelada por meio do Cancellation-Handler [SWS_DM_01514].
A chamada ocorre de forma assíncrona e retorna um ara::core::Future<ara::core::Vector<ara::core::Byte>>[SWS_DM_01514]:
Em caso de sucesso, o Future é disponibilizado para uma mensagem de resposta positiva; os dados de OperationOutput.response_data são posicionados como transferResponseParameterRecord após o ID de serviço.
Em caso de erro, o Future é cumprido com um código de erro UDS (NRC) de acordo com a ISO 14229-1 de DiagUdsNrcErrc para uma mensagem de resposta negativa.
A função está declarada como noexcept e é segura contra exceções (exception safe), porém não é segura para threads (not thread-safe) [SWS_DM_01514]. Por meio do cancellation_handler, pode-se consultar o status de cancelamento mediante cancellation_handler.IsCanceled() ou registrar uma função de notificação para um cancelamento da conversação via cancellation_handler.SetNotifier()[SWS_DM_01514].
Em relação à ordem, uma instância de DataTransferReadByPullHandler não deve, de modo algum, ser destruída antes que ExitRead() tenha sido chamado [SWS_DM_01510]. Condições de destrutor e funções de encerramento correspondentes existem paralelamente para ara::diag::DataTransferReadSharedDataHandler::ExitRead[SWS_DM_01505] ([SWS_DM_01499]) e ara::diag::DataTransferReadByPushHandler::ExitRead[SWS_DM_01523] ([SWS_DM_01519]).
Este texto foi criado por uma IA; vinculativa é a especificação.
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.
GERADO POR IAnão revisadoModelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 104f857aa59eProcedência
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão
Uso e semântica de chamada
O método Read da classe ara::diag::DataTransferReadByPullHandler destina-se à leitura de blocos de dados pela aplicação no âmbito da transferência de dados UDS [SWS_DM_01513]. A aplicação compõe o primeiro ou os subsequentes blocos de conteúdo de arquivo ou de diretório e copia-os para o buffer response_data (tipo ara::core::Span<const ara::core::Byte>) passado por ara::diag, até, no máximo, o tamanho do span.
A chamada ocorre de forma assíncrona e retorna um ara::core::Future<std::uint32_t>[SWS_DM_01513]. Em caso de sucesso, a future é satisfeita com o número de bytes efetivamente disponibilizado; esses dados são posicionados como transferResponseParameterRecord na resposta UDS positiva após o blockSequenceCounter. Por meio do parâmetro cancellation_handler, a aplicação pode consultar o status de cancelamento mediante IsCanceled() ou registrar uma função de notificação de cancelamento via SetNotifier().
Tratamento de erros e condições de contorno
Em caso de falha, a future é concluída com um UDS-NRC aplicável de DiagUdsNrcErrc conforme a ISO 14229-1 [SWS_DM_01513]. Se uma interface não estiver disponibilizada, ou não estiver mais disponibilizada, mediante offer(), o DM responde com NRC 0x94 (ResourceTemporarilyNotAvailable) [SWS_DM_01257].
Concorrência e interação
A interface é especificada como não segura para threads (not thread-safe), mas segura para exceções (exception safe) [SWS_DM_01513]. A região de memória de response_data permanece válida apenas até que a promise correspondente seja satisfeita ou a operação seja cancelada. Como alternativa ao padrão pull, existem para a transferência de dados o procedimento push via DataTransferReadByPushHandler::Read[SWS_DM_01522], bem como a transmissão com propriedade compartilhada via DataTransferReadSharedOwnershipHandler::Read[SWS_DM_01504].
Esta nota de uso foi gerada automaticamente com base nos documentos de especificação do 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 em alemão