Позволяет среде выполнения диагностики пошагово запрашивать данные файлов и каталогов из приложения.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: a81aee002281ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Позволяет среде выполнения диагностики пошагово запрашивать данные файлов и каталогов из приложения.
Класс ara::diag::DataTransferReadByPullHandler служит для предоставления данных файлов или каталогов, активно запрашиваемых диагностическим уровнем AraDiag из приложения в рамках операции чтения UDS ([SWS_DM_01506]). Процесс включает пошаговый опрос данных через Read() вплоть до окончательного завершения сеанса через ExitRead(). В качестве строгого условия жизненного цикла экземпляр обработчика, сопоставленный ровно одной сессии передачи, ни в коем случае не должен уничтожаться до вызова ExitRead() ([SWS_DM_01510]).
Контекст
Класс ara::diag::DataTransferReadByPullHandler ([SWS_DM_01506], AUTOSAR_AP_SWS_Diagnostics §8.10.2 «Class: DataTransferReadByPullHandler») обрабатывает передачи данных, инициированные диагностическими запросами на чтение файлов или каталогов (такими как RequestReadFile или RequestReadDirectory). Архитектура основана на методе pull, при котором диагностический уровень AraDiag активно запрашивает («вытягивает») передаваемые данные из реализации.
Во взаимодействии участвуют три компонента: внешний UDS-клиент (диагностический тестер), диагностическая подсистема AraDiag и зависящая от приложения реализация обработчика. Внешний клиент отправляет запросы на чтение, после чего AraDiag вызывает методы обработчика для пошагового предоставления чанков данных и их передачи UDS-клиенту ([SWS_DM_01513]).
Жизненный цикл
Жизненный цикл экземпляра обработчика монопольно привязан к одной сессии передачи файлов. Конструктор по умолчанию объявлен как protected ([SWS_DM_01507]). Интерпретация: конкретное приложение, следовательно, должно реализовывать и инстанциировать производный подкласс. Вопрос Q-cb78bc4a1d40968b (открытый)
Операции копирования полностью отключены: конструктор копирования ([SWS_DM_01509]) и оператор присваивания с копированием ([SWS_DM_01512]) определены как удаленные (=delete), поскольку обработчики предназначены для однократного использования в рамках одной сессии («only one way usage i.e. per single file transfer session»). Напротив, операции перемещения (move-конструктор и move-присваивание) определены как стандартная реализация и объявлены как noexcept ([SWS_DM_01508], [SWS_DM_01511], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.1.1 «Move Constructor»).
Для освобождения действует строгое предусловие: экземпляр класса ни в коем случае не должен уничтожаться до вызова метода ExitRead() ([SWS_DM_01510], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.1.2 «Destructor»). В отношении многопоточности методы интерфейса Read() и ExitRead() определены как потоконебезопасные («not thread-safe»), но обеспечивающие безопасность исключений (noexcept) ([SWS_DM_01513], [SWS_DM_01514]).
Путь использования
Штатная последовательность опроса данных делится на следующие шаги:
Инициализация: приложение инстанциирует производный класс обработчика для предстоящей сессии передачи.
Опрос данных: для предоставления блоков данных AraDiag вызывает метод Read() ([SWS_DM_01513], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.2 «Read»). Приложение получает представление памяти response_data (типа ara::core::Span<const ara::core::Byte>) для предварительно выделенного AraDiag буфера, заполняет его следующим содержимым файла и завершает ara::core::Future<std::uint32_t> с указанием числа записанных байтов. AraDiag вставляет эти данные после счетчика последовательности блоков (blockSequenceCounter) в виде transferResponseParameterRecord в положительный ответ UDS ([SWS_DM_01513]). Этот шаг повторяется для последующих чанков.
Завершение сеанса: для штатного завершения передачи AraDiag вызывает ExitRead() ([SWS_DM_01514], AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.1 «ExitRead»). Передаются причина завершения exit_type, специфичные для производителя параметры (transfer_request_parameter_record), meta_info и cancellation_handler. Реализация подтверждает это через ara::core::Future<ara::core::Vector<ara::core::Byte>>, возвращаемые значения которого передаются после SID в положительном ответе ([SWS_DM_01514]).
Освобождение: объект обработчика разрешается уничтожать только после выполнения вызова ExitRead() ([SWS_DM_01510]).
Диаграмма последовательности: типичный процесс опроса данных по методу pull через AraDiag. Источники: [SWS_DM_01513], [SWS_DM_01514]
Сценарии ошибок
Если при подготовке данных или при завершении возникают ошибки, приложение сообщает об этом через возвращаемый Future, предоставляя его с кодом ошибки UDS (DiagUdsNrcErrc согласно ISO 14229-1) ([SWS_DM_01513], [SWS_DM_01514]). После этого AraDiag формирует соответствующий отрицательный ответ UDS (NRC) тестеру.
Для преждевременной отмены обоим методам передается CancellationHandler ([SWS_DM_01513], [SWS_DM_01514]). Приложение может проверить через cancellation_handler.IsCanceled(), была ли отменена коммуникация, или зарегистрировать функцию обратного вызова через cancellation_handler.SetNotifier(). Предоставленные буферы (response_data и transfer_request_parameter_record) остаются действительными до выполнения promise или до отмены через обработчик.
Уничтожение экземпляра до вызова ExitRead() является нарушением требований спецификации ([SWS_DM_01510]), что может приводить к неполным сессиям передачи и неопределенным состояниям системы.
Это руководство по классу основано на спецификации AUTOSAR Adaptive R25-11 и обобщает требования к интерфейсу 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.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 7a822a7b2a3dПроисхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Чисто виртуальный метод ExitRead завершает текущую сессию передачи данных в рамках ara::diag::DataTransferReadByPullHandler[SWS_DM_01514] (AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.1 «ExitRead»). Он принимает в качестве параметров причину завершения exit_type (тип DataTransferExitType), специфичные для автопроизводителя параметры в transfer_request_parameter_record (как ara::core::Span<const ara::core::Byte>), контекст запроса meta_info, а также cancellation_handler. Параметр transfer_request_parameter_record остаётся действительным до тех пор, пока не будет выполнено соответствующее Promise или выполнение не будет отменено через Cancellation-Handler [SWS_DM_01514].
Вызов выполняется асинхронно и возвращает ara::core::Future<ara::core::Vector<ara::core::Byte>>[SWS_DM_01514]:
В случае успеха Future предоставляется для положительного ответного сообщения; данные из OperationOutput.response_data при этом размещаются как transferResponseParameterRecord после идентификатора сервиса (Service ID).
В случае ошибки Future выполняется с кодом ошибки UDS (NRC) согласно ISO 14229-1 из DiagUdsNrcErrc для отрицательного ответного сообщения.
Функция объявлена как noexcept и исключениебезопасна (exception safe), однако не является потокобезопасной (not thread-safe) [SWS_DM_01514]. Через cancellation_handler можно с помощью cancellation_handler.IsCanceled() запросить статус отмены или через cancellation_handler.SetNotifier() зарегистрировать функцию уведомления для случая отмены сеанса взаимодействия. [SWS_DM_01514].
Что касается порядка выполнения, экземпляр DataTransferReadByPullHandler ни в коем случае не должен уничтожаться до того, как был вызван ExitRead()[SWS_DM_01510]. Соответствующие функции завершения и условия для деструкторов существуют параллельно для ara::diag::DataTransferReadSharedDataHandler::ExitRead[SWS_DM_01505] ([SWS_DM_01499]) и ara::diag::DataTransferReadByPushHandler::ExitRead[SWS_DM_01523] ([SWS_DM_01519]).
Этот текст был создан ИИ; обязательную силу имеет спецификация.
Руководство разработчика реализации в подготовке (сложность I2)
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.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 104f857aa59eПроисхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Использование и семантика вызова
Метод Read класса ara::diag::DataTransferReadByPullHandler служит для считывания блоков данных приложением в рамках передачи данных UDS [SWS_DM_01513]. Приложение компонует первый или последующие блоки содержимого файла или каталога и копирует их в буфер response_data (тип ara::core::Span<const ara::core::Byte>), переданный из ara::diag, максимум до размера span.
Вызов выполняется асинхронно и возвращает ara::core::Future<std::uint32_t>[SWS_DM_01513]. В случае успеха future выполняется с фактически предоставленным количеством байтов; эти данные размещаются в положительном UDS-ответе после blockSequenceCounter как transferResponseParameterRecord. Через параметр cancellation_handler приложение может запросить статус отмены с помощью IsCanceled() или зарегистрировать функцию уведомления об отмене через SetNotifier().
Обработка ошибок и граничные условия
В случае ошибки future завершается с применимым UDS-NRC из DiagUdsNrcErrc согласно ISO 14229-1 [SWS_DM_01513]. Если интерфейс не предоставляется или больше не предоставляется с помощью offer(), DM отвечает с NRC 0x94 (ResourceTemporarilyNotAvailable) [SWS_DM_01257].
Параллелизм и взаимодействие
Интерфейс специфицирован как непотокобезопасный (not thread-safe), однако исключебно-безопасный (exception safe) [SWS_DM_01513]. Область памяти response_data остаётся валидной только до тех пор, пока не будет выполнено соответствующее promise или пока операция не будет отменена. В качестве альтернативы шаблону pull для передачи данных существуют метод push через DataTransferReadByPushHandler::Read[SWS_DM_01522], а также передача с разделяемым владением через DataTransferReadSharedOwnershipHandler::Read[SWS_DM_01504].
Это указание по использованию было создано автоматически на основе спецификационных документов AUTOSAR Adaptive.
Руководство разработчика реализации в подготовке (сложность I1)
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 · Немецкий оригинал