Позволяет приложениям выполнять обобщенную обработку служб UDS RoutineControl с асинхронной передачей данных.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: ed3ab770d945ПроисхождениеОткрытые вопросы (2)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Позволяет приложениям выполнять обобщенную обработку служб UDS RoutineControl с асинхронной передачей данных.
Класс предоставляет обобщенный обработчик для служб UDS RoutineControl и перенаправляет запросы для различных идентификаторов рутин в адаптивные приложения [SWS_DM_00552]. Разработчики реализуют требуемые действия рутин через асинхронные методы, такие как Start, и активируют пересылку сообщений с помощью Offer[SWS_DM_00557]. Поскольку экземпляры нельзя ни копировать, ни перемещать, жизненный цикл и параллелизм должны точно управляться через конструктор и конфигурацию интерфейса. Текущие операции поддерживают совместную отмену, а также стандартизированные коды ошибок UDS.
Контекст
Класс ara::diag::GenericRoutine предоставляет обобщенный интерфейс для обработки диагностических рутин согласно ISO 14229-1 (UDS RoutineControl, служба 0x31) в AUTOSAR Adaptive Platform. Он функционирует как связующее звено между центральным Diagnostic Management (DM) и адаптивным приложением. Экземпляр этого класса привязывается к смоделированному прототипу порта типа DiagnosticRoutineGenericInterface, на который должна присутствовать ссылка через DiagnosticServiceGenericMapping в модели [SWS_DM_00552]. В отличие от типоспецифичных интерфейсов рутин, GenericRoutine передает сырые данные диагностического запроса в виде ara::core::Span<const std::uint8_t> вместе с конкретным идентификатором рутины (routineId) приложению [SWS_DM_00554], [SWS_DM_00555], [SWS_DM_00556]. Благодаря этому один обработчик может гибко обслуживать несколько рутин.
Жизненный цикл
Экземпляры GenericRoutine привязаны к своему специфическому порту и не могут ни копироваться, ни перемещаться; конструкторы копирования и перемещения, а также операторы присваивания явно удалены [SWS_DM_01637], [SWS_DM_01638], [SWS_DM_01635], [SWS_DM_01636]. Инициализация осуществляется через конструктор с указанием ara::core::InstanceSpecifier, а также поведения параллелизма (ConcurrencyType: kConcurrent или kNotConcurrent) [SWS_DM_00552]. Этот параметр определяет, должны ли виртуальные методы выполнения быть реализованы потокобезопасным образом.
После создания DM изначально не пересылает сообщения обработчику. Пересылка активируется только после вызова Offer()[SWS_DM_00557]. С помощью StopOffer() пересылку можно снова деактивировать [SWS_DM_00558] до того, как экземпляр будет освобожден виртуальным деструктором ~GenericRoutine()[SWS_DM_00553]. Хотя конструктор является потокобезопасным, Offer(), StopOffer() и деструктор не являются потокобезопасными и требуют внешней синхронизации [SWS_DM_00552], [SWS_DM_00557], [SWS_DM_00558], [SWS_DM_00553].
Для предоставления обобщенной рутины приложение наследуется от GenericRoutine и переопределяет необходимые виртуальные методы. Метод Start (подфункция UDS 0x01) является чисто виртуальным (pure virtual) и должен быть обязательно реализован [SWS_DM_00554]. Методы Stop (подфункция 0x02) [SWS_DM_00555] и RequestResults (подфункция 0x03) [SWS_DM_00556] представляют собой виртуальные методы; интерпретация: поскольку они не являются чисто виртуальными, их переопределение, вероятно, требуется только тогда, когда соответствующая рутина функционально поддерживает остановку или отдельный опрос результатов. Вопрос (открытый)
Стандартный рабочий процесс включает следующие фазы:
Создание экземпляра: создание производного обработчика со ссылкой на порт и режимом параллелизма [SWS_DM_00552].
Активация: вызов Offer() для предоставления доступа со стороны DM [SWS_DM_00557].
Выполнение: при входящих UDS-запросах DM вызывает Start, Stop или RequestResults. Приложение получает routineId, requestData, metaInfo, а также CancellationHandler и возвращает ara::core::Future<OperationOutput>[SWS_DM_00554], [SWS_DM_00555], [SWS_DM_00556]. Действительность requestData гарантируется до тех пор, пока не будет выполнено соответствующее promise или не будет отменена операция [SWS_DM_00554].
Обработка отмены: приложение может проверить статус отмены через cancellationHandler.IsCanceled() или зарегистрировать обратный вызов через cancellationHandler.SetNotifier()[SWS_DM_00554]. Интерпретация: в случае отмены приложению, вероятно, следует досрочно завершить текущие фоновые действия и своевременно разрешить promise. Вопрос (открытый)
Деактивация: прекращение пересылки через StopOffer()[SWS_DM_00558] перед уничтожением объекта.
Ошибки могут возникать как при конфигурации, так и во время выполнения и обработки:
Нарушения модели и сопоставления: если разрешение InstanceSpecifier в модели завершается сбоем, он не идентифицируется как PortPrototype или отсутствует подходящий DiagnosticServiceGenericMapping, платформа сообщает о нарушениях, таких как InstanceSpecifierMappingIntegrityViolation, PortInterfaceMappingViolation, ProcessMappingViolation или InstanceSpecifierAlreadyInUseViolation[SWS_DM_00552].
Ошибки предоставления: если Offer() вызывается, когда служба уже предлагается, вызов завершается сбоем и возвращает код ошибки DiagOfferErrc::kAlreadyOffered[SWS_DM_00557].
Диагностические коды ошибок (NRC): если операция рутины не может быть успешно завершена или запрос содержит недопустимые параметры, приложение выполняет возвращенный future не с OperationOutput, а с подходящим UDS Negative Response Code (NRC) из DiagUdsNrcErrc согласно ISO 14229-1 [SWS_DM_00554], [SWS_DM_00555], [SWS_DM_00556].
Данное руководство по классу основано на спецификации AUTOSAR Adaptive Platform R25-11 и сформировано автоматически.
InstanceSpeci- InstanceSpecifier either cannot be resolved in the model in the fierMappingIn- context of your executable, or it refers to a model element other tegrityViolation than a PortPrototype. PortInterfaceMap- A PortPrototype that is typed by a pingViolation DiagnosticRoutineGenericInterface needs to be referenced by a DiagnosticServiceGenericMapping. ProcessMappingVio- Matching InstanceRef exists, but no matching (modelled) Process lation found that matches the (runtime) process. InstanceSpecifier- Violation message that is sent in case a constructor in the ara AlreadyInUseViola- framework was called with an InstanceSpecifier already in use in tion this process.
Parameter (in)
Parameter
Beschreibung
specifier
InstanceSpecifier to a PortPrototype of a DiagnosticRoutineGenericInterface.
concurrencyType
Specifies if the interface is implemented as thread safe ( kConcurrent) or non-thread safe (kNotConcurrent).
Request a governed re-review of this record. The record is not changed immediately.
This Offer will enable the DM to forward request messages to this handler.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 36b2772d0811ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Использование
Функция Offer класса ara::diag::GenericRoutine позволяет Diagnostic Management (DM) пересылать входящие сообщения с диагностическими запросами для рутины зарегистрированному обработчику [SWS_DM_00557]. Вызов выполняется синхронно, не принимает параметров и возвращает ara::core::Result<void>[SWS_DM_00557]. Поскольку метод объявлен со спецификацией noexcept, он считается безопасным относительно исключений (exception safe) [SWS_DM_00557].
Обработка ошибок
Если предоставление завершается сбоем, метод возвращает отрицательный результат. Если рутина для данного экземпляра уже предлагалась ранее, метод возвращает специфический код ошибки DiagOfferErrc::kAlreadyOffered[SWS_DM_00557]. Для этого случая ошибки определена семантика отката, так что состояние остается неизменным [SWS_DM_00557]. Идентификатор ошибки kAlreadyOffered также закреплен во внутренних доменах ошибок для диагностических вызовов [SWS_DM_00514].
Параллелизм и ограничения
Интерфейс явно специфицирован как непотокобезопасный (not thread-safe) [SWS_DM_00557]. Если несколько потоков приложения обращаются к одному и тому же обработчику, вызов необходимо синхронизировать. Интерпретация: вызов, вероятно, обычно выполняется во время инициализации, поскольку до выполнения Offer запросы приниматься не могут. Вопрос Q-0c42f415bcb0de20 (открытый)
Взаимодействие
Предоставление функциональных возможностей через Offer представляет собой центральный паттерн в диагностическом кластере AUTOSAR Adaptive; аналогичным образом он используется также для типоспецифических интерфейсов рутин [SWS_DM_00594], универсальных сервисов UDS [SWS_DM_00619] и идентификаторов данных (Data Identifier) [SWS_DM_00638]. Несмотря на совпадение имен с ara::com, это представляет собой специфическую реализацию Diagnostic Management SWS Diagnostics §7.3.4.1.2 «Monitors».
Это указание по использованию составлено ИИ и опирается исключительно на спецификацию AUTOSAR R25-11.
Руководство разработчика реализации в подготовке (сложность I2)
Called for RoutineControl with SubFunction RequestResults (0x03) request for this Diagnostic RoutineIdentifier.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: f4080ca4c8cdПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Метод RequestResults класса ara::diag::GenericRoutine вызывается экземпляром Diagnostic Server для типовой обработки запросов UDS RoutineControl службы 0x31 с подфункцией requestRoutineResults (0x03) для параметризованного идентификатора диагностической рутины ([SWS_DM_00575], [SWS_DM_00556]).
При вызове передаются идентификатор рутины routineId, специфичные для запроса метаданные metaInfo, а также входные данные requestData ([SWS_DM_00556]). Действительность диапазона requestData строго ограничена моментом, пока соответствующее Promise не будет выполнено или выполнение не будет прервано ([SWS_DM_00556]). Переданный cancellationHandler позволяет опрашивать статус отмены через IsCanceled, а также регистрировать функцию уведомления через SetNotifier ([SWS_DM_00556]).
Результат возвращается асинхронно как ara::core::Future<OperationOutput> ([SWS_DM_00556]). Интерпретация: предоставление выходных данных, как правило, должно осуществляться асинхронно через ara::core::Promise на стороне приложения. Вопрос Q-f50c8509d7515e3f (открытый) В случае успеха future предоставляет OperationOutput, тогда как в случае ошибки передается подходящий UDS NRC согласно ISO 14229-1 через DiagUdsNrcErrc ([SWS_DM_00556]). Функция объявлена как noexcept и считается исключениебезопасной ([SWS_DM_00556]).
Что касается параллелизма, потокобезопасность является условной (conditional): должна ли реализация метода быть потокобезопасной, жестко управляется через ConcurrencyType, переданный в конструктор ([SWS_DM_00556]).
Это указание по использованию было сгенерировано автоматически на основе спецификации AUTOSAR.
Руководство разработчика реализации в подготовке (сложность I1)
conditional whether the function has to be implemented thread safe or non-thread safe is determined by the ConcurrencyType given in the constructor
Parameter (in)
Parameter
Beschreibung
routineId
the corresponding RoutineIdentifier
requestData
Content of request message (without RoutineIdentifier), Lifetime: Valid until Promise is fulfilled or the processing is cancelled by the cancellationHandler.
metaInfo
MetaInfo of the request.
cancellationHandler
This parameter is used to • Query the current cancellation status by calling cancellationHandler.IsCanceled. Returns TRUE in case, the current conversation has been cancelled and FALSE otherwise. • Register a notifier function by calling cancellationHandler.SetNotifier. The registered notifier is called if the current conversation is cancelled.
Called for RoutineControl with SubFunction Start (0x01) request for this DiagnosticRoutine Identifier.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 9e819a027940Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Метод Start класса ara::diag::GenericRoutine вызывается, как только поступает диагностический запрос для RoutineControl с субфункцией Start (0x01) для специфицированного routineId[SWS_DM_00554]. В отличие от типизированного интерфейса рутины согласно [SWS_DM_00591], этот универсальный интерфейс принимает необработанные данные сообщения запроса в виде диапазона байтов.
Для реализации действуют следующие требования и свойства интерфейса:
Контекст вызова и параметры: Наряду с routineId и метаданными (metaInfo) передается параметр requestData. Время жизни данных запроса остается действительным до тех пор, пока promise не будет выполнен или обработка не будет отменена со стороны cancellationHandler[SWS_DM_00554].
Обработка отмены: Рутина может запросить текущий статус отмены с помощью cancellationHandler.IsCanceled() или зарегистрировать через cancellationHandler.SetNotifier() функцию-оповеститель, которая вызывается при отмене сеанса взаимодействия [SWS_DM_00554].
Асинхронная семантика: Обработка выполняется неблокирующим образом через ara::core::Future<OperationOutput>. При успешном выполнении OperationOutput предоставляет полезные данные для положительного ответа [SWS_DM_00554].
Обработка ошибок: Если выполнение завершается неудачно, future необходимо завершить с подходящим Negative Response Code (NRC) согласно ISO 14229-1 с использованием DiagUdsNrcErrc[SWS_DM_00554].
Конкурентность: Функция объявлена исключениебезопасной (noexcept). Должно ли предоставление быть потокобезопасным, определяет переданный в конструктор ConcurrencyType[SWS_DM_00554].
Это указание по использованию было сгенерировано автоматически на основе спецификации AUTOSAR.
Руководство разработчика реализации в подготовке (сложность I2)
conditional whether the function has to be implemented thread safe or non-thread safe is determined by the ConcurrencyType given in the constructor
Parameter (in)
Parameter
Beschreibung
routineId
the corresponding RoutineIdentifier
requestData
Content of request message (without RoutineIdentifier). Lifetime: Valid until Promise is fulfilled or the processing is cancelled by the cancellationHandler.
metaInfo
MetaInfo of the request.
cancellationHandler
This parameter is used to • Query the current cancellation status by calling cancellationHandler.IsCanceled. Returns TRUE in case, the current conversation has been cancelled and FALSE otherwise. • Register a notifier function by calling cancellationHandler.SetNotifier. The registered notifier is called if the current conversation is cancelled.
Called for RoutineControl with SubFunction Stop (0x02) request for this DiagnosticRoutine Identifier.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: d8c6cb55284bПроисхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Метод Stop вызывается при UDS-запросе RoutineControl с субфункцией Stop (0x02) для соответствующей универсальной диагностической процедуры [SWS_DM_00555]. В отличие от типизированных интерфейсов процедур [SWS_DM_00592], он принимает идентификатор процедуры routineId, а также данные запроса в виде диапазона необработанных данных requestData[SWS_DM_00555].
При использовании необходимо соблюдать следующие правила для параметров и последовательности выполнения [SWS_DM_00555]:
Время жизни диапазона входных данных: область памяти requestData остается действительной до тех пор, пока соответствующий Promise не будет выполнен или выполнение не будет отменено через cancellationHandler[SWS_DM_00555].
Обработка отмены: приложение может через cancellationHandler.IsCanceled() проверить, была ли отменена текущая диагностическая сессия, или через cancellationHandler.SetNotifier зарегистрировать функцию уведомления, срабатывающую при отмене [SWS_DM_00555].
Асинхронность и возврат: функция работает асинхронно и возвращает ara::core::Future<OperationOutput>, который в случае успеха содержит выходные данные для положительного UDS-ответа [SWS_DM_00555].
Обработка ошибок осуществляется через отрицательные диагностические возвращаемые значения: если остановка процедуры не удалась, фьючер необходимо завершить с подходящим кодом ошибки UDS-NRC согласно ISO 14229-1 через DiagUdsNrcErrc[SWS_DM_00555].
В отношении параллелизма метод специфицирован как noexcept и бессбойный. Должна ли конкретная реализация быть потокобезопасной, зависит от ConcurrencyType, переданного в конструкторе при инстанцировании [SWS_DM_00555].
Это указание по использованию основано исключительно на спецификациях релиза Adaptive AUTOSAR R25-11.
Руководство разработчика реализации в подготовке (сложность I1)
conditional whether the function has to be implemented thread safe or non-thread safe is determined by the ConcurrencyType given in the constructor
Parameter (in)
Parameter
Beschreibung
routineId
the corresponding RoutineIdentifier
requestData
Content of request message (without RoutineIdentifier). Lifetime: Valid until Promise is fulfilled or the processing is cancelled by the cancellationHandler.
metaInfo
MetaData of the request.
cancellationHandler
This parameter is used to • Query the current cancellation status by calling cancellationHandler.IsCanceled. Returns TRUE in case, the current conversation has been cancelled and FALSE otherwise. • Register a notifier function by calling cancellationHandler.SetNotifier. The registered notifier is called if the current conversation is cancelled.
This StopOffer will disable the forwarding of request messages from DM.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 73588f5f0b57ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Использование
Метод ara::diag::GenericRoutine::StopOffer деактивирует пересылку входящих диагностических запросов Diagnostic Management (DM) соответствующему экземпляру рутины [SWS_DM_00558]. Функция имеет сигнатуру void StopOffer() noexcept;, не принимает параметров и не возвращает значения [SWS_DM_00558]. Вызов обрабатывается синхронно и сигнализирует DM, что рутина с этого момента больше не принимает запросы.
Обработка ошибок
Операция специфицирована как exception safe и объявлена с noexcept[SWS_DM_00558]. Коды ошибок или исключения C++ при выполнении не возникают. Специфические сообщения в экземпляры журнала разработки или памяти ошибок (DET/DEM) для этого интерфейса в модуле диагностики не предусмотрены.
Параллелизм и ограничения
В отношении многопоточного поведения метод обозначен как not thread-safe[SWS_DM_00558]. Поэтому параллельные вызовы на одном и том же экземпляре ara::diag::GenericRoutine должны синхронизироваться на стороне приложения. Интерпретация: вызов, вероятно, происходит прежде всего тогда, когда рутина временно инактивируется или работа приложения контролируемо завершается после того, как ранее был выполнен вызов предоставления. Вопрос Q-e110ce01110699e3 (открытый)
Взаимодействие
Именование концептуально следует предоставлению сервисов (service offering) из ara::com, однако представляет собой самостоятельную реализацию в рамках ara::diag и не должно смешиваться с предложениями связи (AUTOSAR_AP_SWS_Diagnostics §7.3.4.1.2 «Monitors»). Тот же паттерн предоставления для деактивации пересылки запросов в масштабах всего модуля используют и другие диагностические классы, такие как ara::diag::GenericUDSService[SWS_DM_00620], ara::diag::GenericDataIdentifier[SWS_DM_00639], интерфейсы рутин [SWS_DM_00595], а также ara::diag::Monitor[SWS_DM_01089].
Этот текст был создан ИИ и основан исключительно на материалах спецификации AUTOSAR R25-11.
Руководство разработчика реализации в подготовке (сложность I2)
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал