Permite al entorno de tiempo de ejecución de diagnóstico recuperar progresivamente datos de archivos y directorios desde una aplicación.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: a81aee002281ProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
Permite al entorno de tiempo de ejecución de diagnóstico recuperar progresivamente datos de archivos y directorios desde una aplicación.
La clase ara::diag::DataTransferReadByPullHandler sirve para proporcionar datos de archivos o directorios que la capa de diagnóstico AraDiag recupera activamente de la aplicación en el marco de una operación de lectura UDS ([SWS_DM_01506]). El flujo comprende la recuperación progresiva de datos mediante Read() hasta la finalización definitiva de la sesión mediante ExitRead(). Como condición estricta del ciclo de vida, una instancia del manejador asignada exactamente a una única sesión de transferencia no debe destruirse en ningún caso antes de la invocación de ExitRead() ([SWS_DM_01510]).
Contexto
La clase ara::diag::DataTransferReadByPullHandler ([SWS_DM_01506], AUTOSAR_AP_SWS_Diagnostics §8.10.2 «Class: DataTransferReadByPullHandler») gestiona transferencias de datos iniciadas por solicitudes de diagnóstico para la lectura de archivos o directorios (como RequestReadFile o RequestReadDirectory). La arquitectura se basa en un procedimiento pull en el que la capa de diagnóstico AraDiag solicita («pulled») activamente a la implementación los datos que se van a transmitir.
En la interacción intervienen tres componentes: el cliente UDS externo (tester de diagnóstico), el subsistema de diagnóstico AraDiag y la implementación del manejador específica de la aplicación. El cliente externo envía solicitudes de lectura, tras lo cual AraDiag invoca los métodos del manejador para suministrar secuencialmente fragmentos de datos y transmitirlos al cliente UDS ([SWS_DM_01513]).
Ciclo de vida
El ciclo de vida de una instancia del manejador está vinculado exclusivamente a una única sesión de transferencia de archivos. El constructor por defecto está declarado protected ([SWS_DM_01507]). Interpretación: por tanto, es probable que la aplicación concreta implemente e instancie una subclase derivada. Pregunta Q-cb78bc4a1d40968b (abierta)
Las operaciones de copia están completamente deshabilitadas: el constructor de copia ([SWS_DM_01509]) y el operador de asignación por copia ([SWS_DM_01512]) están especificados como eliminados (=delete), ya que los manejadores están destinados a un uso de una sola vía dentro de una sesión («only one way usage i.e. per single file transfer session»). En cambio, las operaciones de movimiento (constructor de movimiento y asignación por movimiento) están definidas como implementación estándar y declaradas como noexcept ([SWS_DM_01508], [SWS_DM_01511], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.1.1 «Move Constructor»).
Para la liberación rige una condición previa estricta: una instancia de la clase no debe destruirse bajo ninguna circunstancia antes de que se haya invocado el método ExitRead() ([SWS_DM_01510], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.1.2 «Destructor»). En lo que respecta a la concurrencia, los métodos de interfaz Read() y ExitRead() están definidos como no seguros para hilos («not thread-safe»), pero seguros ante excepciones (noexcept) ([SWS_DM_01513], [SWS_DM_01514]).
Ruta de uso
El flujo regular de una recuperación de datos se divide en los siguientes pasos:
Inicialización: la aplicación instancia la clase de manejador derivada para la sesión de transferencia pendiente.
Recuperación de datos: para proporcionar los bloques de datos, AraDiag invoca el método Read() ([SWS_DM_01513], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.2 «Read»). La aplicación recibe una vista de memoria response_data (del tipo ara::core::Span<const ara::core::Byte>) sobre un búfer preasignado por AraDiag, lo llena con el siguiente contenido del archivo y completa el ara::core::Future<std::uint32_t> con el número de bytes escritos. AraDiag inserta estos datos tras el contador de secuencia de bloque (blockSequenceCounter) como transferResponseParameterRecord en la respuesta UDS positiva ([SWS_DM_01513]). Este paso se repite para los fragmentos posteriores.
Finalización de sesión: para concluir la transmisión de forma regular, AraDiag invoca ExitRead() ([SWS_DM_01514], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.1 «ExitRead»). Se transfieren el motivo de finalización exit_type, parámetros específicos del fabricante (transfer_request_parameter_record), meta_info y un cancellation_handler. La implementación acusa recibo de esto mediante un ara::core::Future<ara::core::Vector<ara::core::Byte>>, cuyos valores de retorno se transmiten tras el SID en la respuesta positiva ([SWS_DM_01514]).
Liberación: el objeto manejador solo puede destruirse una vez realizada la invocación de ExitRead() ([SWS_DM_01510]).
Diagrama de secuencias: flujo típico de recuperación de datos mediante el procedimiento pull a través de AraDiag. Fuentes: [SWS_DM_01513], [SWS_DM_01514]
Escenarios de error
Si se producen errores durante la preparación de los datos o al finalizar, la aplicación lo notifica a través del Future devuelto proporcionándolo con un código de error UDS (DiagUdsNrcErrc según ISO 14229-1) ([SWS_DM_01513], [SWS_DM_01514]). A continuación, AraDiag genera la respuesta negativa de UDS (NRC) correspondiente hacia el tester.
Para la cancelación anticipada se transfiere a ambos métodos un CancellationHandler ([SWS_DM_01513], [SWS_DM_01514]). La aplicación puede comprobar mediante cancellation_handler.IsCanceled() si la conversación se ha cancelado o registrar una función de devolución de llamada a través de cancellation_handler.SetNotifier(). Los búferes proporcionados (response_data y transfer_request_parameter_record) permanecen válidos hasta el cumplimiento del promise o hasta la cancelación a través del manejador.
Si la instancia se destruye antes de la invocación de ExitRead(), se produce una infracción del requisito de la especificación ([SWS_DM_01510]), lo que puede dar lugar a sesiones de transferencia incompletas y a estados indefinidos del sistema.
Esta guía de clases se basa en la especificación AUTOSAR Adaptive R25-11 y resume los requisitos para la interfaz 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.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 7a822a7b2a3dProcedencia
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
El método virtual puro ExitRead finaliza una sesión de transferencia de datos en curso en el marco de ara::diag::DataTransferReadByPullHandler[SWS_DM_01514] (AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.1 «ExitRead»). Recibe como parámetros el motivo de finalización exit_type (tipo DataTransferExitType), parámetros específicos del fabricante del vehículo en transfer_request_parameter_record (como ara::core::Span<const ara::core::Byte>), el contexto de solicitud meta_info, así como un cancellation_handler. El parámetro transfer_request_parameter_record permanece válido hasta que se cumpla la Promise correspondiente o se cancele la ejecución mediante el CancellationHandler [SWS_DM_01514].
La llamada se realiza de forma asíncrona y devuelve un ara::core::Future<ara::core::Vector<ara::core::Byte>>[SWS_DM_01514]:
En caso de éxito, el Future se proporciona para un mensaje de respuesta positiva; en este proceso, los datos de OperationOutput.response_data se colocan como transferResponseParameterRecord después del ID de servicio.
En caso de error, el Future se cumple con un código de error UDS (NRC) según ISO 14229-1 procedente de DiagUdsNrcErrc para un mensaje de respuesta negativa.
La función está declarada como noexcept y con seguridad frente a excepciones (exception safe), pero no es segura para subprocesos (not thread-safe) [SWS_DM_01514]. A través del cancellation_handler, se puede consultar el estado de cancelación mediante cancellation_handler.IsCanceled() o registrar mediante cancellation_handler.SetNotifier() una función de notificación para una cancelación de la conversación [SWS_DM_01514].
En cuanto al orden de ejecución, una instancia de DataTransferReadByPullHandler no debe destruirse bajo ninguna circunstancia antes de que se haya llamado a ExitRead()[SWS_DM_01510]. Paralelamente, existen funciones de finalización y condiciones de destructor correspondientes para ara::diag::DataTransferReadSharedDataHandler::ExitRead[SWS_DM_01505] ([SWS_DM_01499]) y ara::diag::DataTransferReadByPushHandler::ExitRead[SWS_DM_01523] ([SWS_DM_01519]).
Este texto fue generado por una IA; el documento vinculante es la especificación.
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.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 104f857aa59eProcedencia
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
Uso y semántica de llamada
El método Read de la clase ara::diag::DataTransferReadByPullHandler sirve para que la aplicación lea bloques de datos en el marco de la transferencia de datos UDS [SWS_DM_01513]. La aplicación ensambla el primer bloque o los bloques posteriores del contenido del archivo o directorio y los copia en el búfer response_data (tipo ara::core::Span<const ara::core::Byte>) transferido por ara::diag hasta como máximo el tamaño del span.
La llamada se realiza de forma asíncrona y devuelve un ara::core::Future<std::uint32_t>[SWS_DM_01513]. En caso de éxito, el future se completa con la cantidad de bytes efectivamente provista; estos datos se sitúan en la respuesta UDS positiva después del blockSequenceCounter como transferResponseParameterRecord. A través del parámetro cancellation_handler, la aplicación puede consultar el estado de cancelación mediante IsCanceled() o registrar una función de notificación para una cancelación mediante SetNotifier().
Tratamiento de errores y condiciones límite
En caso de error, el future se concluye con un NRC de UDS aplicable de DiagUdsNrcErrc conforme a ISO 14229-1 [SWS_DM_01513]. Si una interfaz no se proporciona o ya no se proporciona mediante offer(), el DM responde con NRC 0x94 (ResourceTemporarilyNotAvailable) [SWS_DM_01257].
Concurrencia e interacción
La interfaz está especificada como no segura para hilos (not thread-safe), pero segura frente a excepciones (exception safe) [SWS_DM_01513]. El área de memoria de response_data solo permanece válida hasta que se cumpla la promise asociada o se cancele el proceso. Como alternativa al patrón pull, para la transferencia de datos existen el método push mediante DataTransferReadByPushHandler::Read[SWS_DM_01522], así como la transferencia con propiedad compartida mediante DataTransferReadSharedOwnershipHandler::Read[SWS_DM_01504].
Esta nota de uso se generó de forma automatizada a partir de los documentos de especificación de 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 en alemán