Предоставляет приложениям связанные с транспортом и протоколом метаданные для текущего диагностического запроса.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 4cec228b1decПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Предоставляет приложениям связанные с транспортом и протоколом метаданные для текущего диагностического запроса.
Класс ara::diag::MetaInfo предоставляет Adaptive Applications релевантную метаинформацию, такую как адрес источника, адрес назначения и контекст протокола текущего диагностического запроса (AUTOSAR_AP_SWS_Diagnostics §7.3.1.1 «MetaInfo class»). Приложения синхронно запрашивают эти значения во время инициированного Diagnostic Management вызова функции обратного вызова через методы инспекции. Гарантированное время жизни объекта при этом строго ограничено временем выполнения активной функции обратного вызова, поэтому сохранение сверх этого вызова приводит к неопределенному поведению ([SWS_DM_01345]).
Контекст
Класс ara::diag::MetaInfo предоставляет стандартизированный механизм для передачи специфичной для транспорта и протокола метаинформации из Diagnostic Management (DM) заинтересованным Adaptive Applications (AUTOSAR_AP_SWS_Diagnostics §7.3.1.1 «MetaInfo class»). В диагностической архитектуре AUTOSAR Adaptive DM действует как посредник между внешними диагностическими клиентами и внутренними функциональными кластерами либо приложениями. Если диагностический запрос поступает через транспортный протокол UDS или SOVD, DM извлекает релевантные данные протокола и передает их при вызовах методов в интерфейсы приложения ([SWS_DM_02094]).
К ключевым задачам ara::diag::MetaInfo относится предоставление контекста вызова, а также специфических пар «ключ-значение». Через интерфейс прикладные сервисы получают информацию об адресе источника (SA) диагностического клиента с помощью ключа kSA ([SWS_DM_02094]), адресе назначения (TA) диагностического сервера через kTA ([SWS_DM_02095]), а также типе адресации UDS (физическая или функциональная) через ключ kTAType ([SWS_DM_02096]). Контекст вызова типизируется через тип ara::diag::MetaInfo::Context ([SWS_DM_00977]). Возможными контекстами являются регулярный диагностический обмен данными kDiagnosticCommunication ([SWS_DM_01342]), доступ к памяти неисправностей kFaultMemory ([SWS_DM_01343]), начальные запросы DoIP, такие как считывание идентификационного номера транспортного средства kDoIP ([SWS_DM_01344]), а также сервисные запросы в контексте SOVD kSovd ([SWS_DM_01818]).
Создание и управление экземплярами ara::diag::MetaInfo полностью возлагается на Diagnostic Management. Стандартный конструктор без параметров явно удален ([SWS_DM_00972]). Следовательно, приложение не может ни напрямую инстанцировать собственные экземпляры, ни дублировать их через операции копирования, так как и конструктор копирования ([SWS_DM_00973]), и оператор копирующего присваивания ([SWS_DM_00975]) удалены. Инстанцирование, предположительно, выполняется внутренне DM перед вызовом функций обратного вызова приложения. Вопрос Q-f695f92296527ce8 (открытый)ara::diag::MetaInfo поддерживает семантику перемещения: доступны конструктор перемещения ([SWS_DM_00974]) и оператор перемещающего присваивания ([SWS_DM_00976]). Уничтожение осуществляется через стандартный деструктор ([SWS_DM_00980]).
Что касается отношений владения и срока действия, действует строгая привязка к активному вызову метода: для каждого направленного от DM к приложению метода с объектом MetaInfo в качестве параметра гарантированное время жизни строго ограничено длительностью этого вызова метода ([SWS_DM_01345], AUTOSAR_AP_SWS_Diagnostics §7.3.1.1.2 «Lifetime of MetaInfo»). После возврата из функции дальнейшее использование или сохранение объекта недопустимо.
Относительно параллелизма методы инспекции для чтения GetContext() ([SWS_DM_00979]) и GetValue() ([SWS_DM_00978]) специфицированы как потокобезопасные и безопасные относительно исключений. Оператор перемещающего присваивания ([SWS_DM_00976]) и деструктор ([SWS_DM_00980]), напротив, не являются потокобезопасными. Если функция обратного вызова согласно конфигурации может вызываться параллельно (AUTOSAR_AP_SWS_Diagnostics §7.3.1.2 «Concurrency of ara::diag interfaces»), DM при каждом вызове предоставляет отдельный объект, действительный на время вызова.
Путь использования
Типичный путь использования простирается от приема диагностического вызова до анализа переданных метаданных:
Вызов со стороны DM: Diagnostic Management вызывает метод обратного вызова приложения и при этом передает ссылку на ara::diag::MetaInfo ([SWS_DM_01345]).
Определение контекста: приложение вызывает GetContext() ([SWS_DM_00979]), чтобы определить, происходит ли вызов, например, в рамках регулярного диагностического обмена данными (kDiagnosticCommunication, [SWS_DM_01342]) или доступа к памяти неисправностей (kFaultMemory, [SWS_DM_01343]).
Запрос значений ключей: с помощью GetValue() ([SWS_DM_00978]) приложение целенаправленно запрашивает необходимые атрибуты, такие как адрес отправителя с kSA ([SWS_DM_02094]), адрес назначения с kTA ([SWS_DM_02095]) или режим адресации с kTAType ([SWS_DM_02096]).
Обработка результата:GetValue() возвращает ara::core::Optional<ara::core::StringView> ([SWS_DM_00978]). Если значение присутствует, приложение синхронно анализирует строку для выполнения проверок доступа или логики адресации.
Завершение вызова: приложение завершает обработку и возвращает управление из метода обратного вызова, вследствие чего время жизни переданных метаданных заканчивается ([SWS_DM_01345]).
При использовании ara::diag::MetaInfo разработчики должны учитывать специфические предусловия и постусловия:
Хранение дольше времени выполнения обратного вызова: если приложение сохраняет объект MetaInfo или возвращенный методом GetValue()ara::core::StringView дольше времени выполнения функции обратного вызова, это приводит к неопределенному поведению ([SWS_DM_01345], AUTOSAR_AP_SWS_Diagnostics §7.3.1.1.2 «Lifetime of MetaInfo»). Значения, требуемые асинхронно или на постоянной основе, должны сохраняться в виде отдельных строковых копий.
Запрос отсутствующих ключей: если передается ключ, который не предоставлен в текущем контексте, GetValue() не генерирует исключение, а возвращает пустой ara::core::Optional ([SWS_DM_00978]). Оба метода доступа объявлены с noexcept и являются исключение-безопасными ([SWS_DM_00978], [SWS_DM_00979]).
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал