Позволяет опрашивать и отслеживать несколько диагностических событий с помощью дескрипторов событий и уведомлений через обратный вызов.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 4cd8b0cbe34dПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Позволяет опрашивать и отслеживать несколько диагностических событий с помощью дескрипторов событий и уведомлений через обратный вызов.
Класс позволяет приложениям выполнять опрос состояний и мониторинг нескольких диагностических событий через общий интерфейс на основе дескрипторов событий [SWS_DM_01705]. Помимо регистрации обратных вызовов для уведомлений, доступны асинхронные методы для определения статуса события, устранения дребезга, счетчика ошибок и номера DTC [SWS_DM_01707], [SWS_DM_01709]. Экземпляры не могут ни копироваться, ни перемещаться, и из-за непотокобезопасного деструктора требуют корректного завершения активных операций перед освобождением [SWS_DM_01706], [SWS_DM_02067].
Контекст
Класс ara::diag::MultipleEvent предоставляет приложению интерфейсы для опроса и мониторинга диагностических событий через интерфейсы для множественных событий [SWS_DM_01705]. В отличие от классов одиночных событий, операции над экземплярами MultipleEvent обращаются к конкретным событиям через идентификатор типа EventHandleType[SWS_DM_01707], [SWS_DM_01708]. Класс действует как интерфейс между использующим программным компонентом и управлением диагностикой (Diagnostic Management, DM) в Adaptive AUTOSAR AUTOSAR AP SWS Diagnostics, с. 69. Через прототип порта DiagnosticMultipleEventInterface объект привязывается к сконфигурированной диагностической инфраструктуре [SWS_DM_01705].
Жизненный цикл
Экземпляр MultipleEvent создается через явный конструктор с указанием ara::core::InstanceSpecifier[SWS_DM_01705]. Конструктор является потокобезопасным и проверяет смоделированную привязку к прототипу порта с типом интерфейса DiagnosticMultipleEventInterface[SWS_DM_01705]. Если сопоставление завершается сбоем или один и тот же идентификатор экземпляра используется повторно в рамках процесса, платформа сообщает о соответствующих нарушениях, таких как InstanceSpecifierAlreadyInUseViolation или PortInterfaceMappingViolation[SWS_DM_01705].
Операции копирования и перемещения для MultipleEvent полностью заблокированы: как конструкторы копирования и перемещения, так и соответствующие операторы присваивания объявлены удаленными [SWS_DM_02067], [SWS_DM_02068], [SWS_DM_02069], [SWS_DM_02070]. Таким образом, объект обладает строгой идентичностью и остается в месте своего создания. Деструктор ~MultipleEvent() специфицирован как непотокобезопасный [SWS_DM_01706]. Поэтому вызывающие компоненты перед уничтожением должны убедиться, что через данный экземпляр больше не выполняются асинхронные опросы или уведомления AUTOSAR AP SWS Diagnostics, с. 78.
Путь использования
После создания экземпляра приложение обычно регистрирует функцию обратного вызова с помощью SetEventStatusChangedNotifier, чтобы получать информацию об изменениях статуса определенного события (идентифицируемого через EventHandleType) [SWS_DM_01708]. Повторный вызов этого метода для того же события перезаписывает ранее установленный нотификатор [SWS_DM_01708]. Эта функция регистрации не является потокобезопасной [SWS_DM_01708].
Во время работы актуальная диагностическая информация может быть целенаправленно запрошена для каждого дескриптора события. Все операции чтения, связанные с состоянием, возвращают свои данные асинхронно в ara::core::Future:
GetEventStatus возвращает текущий байт статуса события как EventStatusByte[SWS_DM_01707].
GetDebouncingStatus возвращает состояние устранения дребезга (DebouncingState) события [SWS_DM_01710].
GetFaultDetectionCounter возвращает текущий счетчик обнаружения ошибок (FaultDetectionCounter) в виде 8-битного целочисленного значения со знаком [SWS_DM_01711].
GetDTCNumber опрашивает назначенный номер DTC в запрошенном DTCFormatType[SWS_DM_01709].
Диаграмма последовательности: типичный путь использования для наблюдения и опроса диагностических событий через MultipleEvent. Источники: [SWS_DM_01705], [SWS_DM_01707], [SWS_DM_01708], [SWS_DM_01709], [SWS_DM_01710], [SWS_DM_01711]
Сценарии ошибок
Методы MultipleEvent сигнализируют о состояниях ошибок через тип DiagErrc, который передается инкапсулированным либо в ara::core::Result, либо в возвращаемом ara::core::Future[SWS_DM_01707], [SWS_DM_01708], [SWS_DM_01709]. Специфицированы следующие случаи ошибок:
DiagErrc::kNoSuchDTC: сообщается GetDTCNumber, если для запрошенного диагностического события не сконфигурирован или не сопоставлен соответствующий DTC [SWS_DM_01709].
DiagErrc::kServiceNotAvailable: возникает при операциях чтения, если базовые функциональные возможности Diagnostic Management, необходимые для работы, недоступны во время выполнения [SWS_DM_01707], [SWS_DM_01709], [SWS_DM_01710], [SWS_DM_01711].
Register a notifier function which is called if a diagnostic event is changed. A consecutive call of this method will overwrite the previous registered notifier.
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 referenced by a pingViolation DiagnosticMultipleEventPortMapping needs to be typed by a DiagnosticMultipleEventInterface. 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 DiagnosticMultipleEventInterface.
Request a governed re-review of this record. The record is not changed immediately.
Register a notifier function which is called if a diagnostic event is changed. A consecutive call of this method will overwrite the previous registered notifier.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: bd91ad4f4cb5ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Использование
Метод ara::diag::MultipleEvent::SetEventStatusChangedNotifier[SWS_DM_01708] регистрирует функцию обратного вызова типа EventStatusByteNotifier, которая вызывается при изменении состояния диагностического события. Через параметр eventHandle идентифицируется требуемое событие внутри экземпляра. Метод специфицирован как noexcept и возвращает ara::core::Result<void>. Повторный вызов перезаписывает ранее зарегистрированный нотификатор [SWS_DM_01708].
Обработка ошибок
Если при регистрации возникает ошибка, ara::core::Result возвращает соответствующий код ошибки. Специфицирована ошибка DiagErrc::kInvalidArgument, например, в контексте внутреннего дебаунсинга, такого как kPreFailed[SWS_DM_01708].
Параллелизм и ограничения
Операция объявлена как exception safe, однако явно классифицирована как not thread-safe[SWS_DM_01708]. Одновременные вызовы на одном и том же экземпляре поэтому должны синхронизироваться извне.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал