Каталоги сигналов автомобиля

Генератор конфигураций показателей (MCG) проверяет конфигурации показателей, проверяя имена сигналов, выполняя проверку типов выражений и выводя типы выходных данных. Для выполнения этих задач MCG требуется доступ к определениям сообщений буфера протокола (protobuf) для сигналов автомобиля.

В SDV сигналы и сервисы автомобиля определяются с помощью языка VSIDL (Vehicle Service Interface Definition Language). VSIDL использует файлы protobuf для указания сообщений, и эти файлы protobuf формируют основу каталога сигналов.

Чтобы определения сигналов были доступны MCG, необходимо упаковать эти файлы protobuf VSIDL в protobuf FileDescriptorSet и загрузить их в сервис MCG. В MCG для этих загруженных наборов определений с версиями используется термин Каталог сигналов транспортного средства. По сути, это скомпилированная и загруженная форма определений proto-сообщений в вашем каталоге VSIDL.

Что такое каталог сигналов транспортного средства?

Каталог сигналов автомобиля предоставляет MCG определения сигналов для проверки, упакованные в виде protobuf FileDescriptorSet.

В MCG каталоги идентифицируются по строке версии, которую вы назначаете во время загрузки. Это позволяет управлять несколькими различными наборами определений сигналов. Например, у вас могут быть разные версии каталога для разных выпусков ПО (v1.0, v1.1, v2.0) или для разных моделей автомобилей или конфигураций оборудования (suv-my2025, sedan-my2025). В каждой конфигурации показателей используется поле vs_version для ссылки на определенный каталог, который определяет сигналы, доступные в качестве источников данных, и предоставляет определения сигналов для вывода и проверки типов.

Создайте экземпляр FileDescriptorSet

Как описано в разделе Определение сообщений и сервисов RPC, сигналы автомобиля определяются как сообщения protobuf в файлах protobuf. Если вы участвуете в проекте SDV, используйте файлы protobuf из каталога VSIDL проекта, чтобы создать экземпляр FileDescriptorSet.

Чтобы создать каталог для MCG, упакуйте файлы protobuf в двоичный файл FileDescriptorSet с помощью protoc. Если все файлы protobuf находятся в одной папке, выполните следующую команду, чтобы создать файл vehicle_signals.pb:

protoc --include_imports --descriptor_set_out=vehicle_signals.pb path/to/your/protos/*.proto

Загрузка каталогов и управление ими

Загрузив набор определений сигналов в виде каталога, вы сможете ссылаться на него по названию версии в запросах на настройку показателей.

Как добавить или обновить версию каталога

После создания файла каталога vehicle_signals.pb вы можете загрузить его и управлять им с помощью конечных точек MCG API в /api/v2/vs/. Конечная точка для добавления или обновления каталога, POST /api/v2/vs/, требует, чтобы FileDescriptorSet передавался в виде строки в кодировке base64 в полезной нагрузке JSON.

Чтобы закодировать vehicle_signals.pb для использования API, используйте команду base64. Флаг -w 0 отключает перенос строк, чтобы закодированная строка отображалась в одной строке:

VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)

Чтобы загрузить vehicle_signals.pb как новую версию (например, v1.0) или обновить существующую, отправьте запрос POST с контентом, закодированным в base64, конечной точке /api/v2/vs/ с уникальным названием версии.

Тело запроса должно быть объектом JSON, содержащим строку version и строку vehicle_signals в кодировке Base64:

{
  "version": "v1.0",
  "vehicle_signals": "Q2lSb1pYB3jCRkRt..."
}

В примере ниже показано, как загрузить vehicle_signals.pb в качестве версии v1.0 с помощью curl. В примере используется printf для создания полезной нагрузки JSON и передачи ее в curl, что позволяет избежать необходимости создавать файл JSON, содержащий очень длинную однострочную строку base64:

# 1. Encode the FileDescriptorSet to a Base64 string
VEHICLE_SIGNALS_BASE64=$(base64 -w 0 vehicle_signals.pb)

# 2. Define catalog version and build JSON payload
VERSION="v1.0"
JSON_PAYLOAD=$(jq -n --arg v "$VERSION" --arg d "$VEHICLE_SIGNALS_BASE64" \
  '{version: $v, vehicle_signals: $d}')

# 3. POST the data to the API endpoint
echo "$JSON_PAYLOAD" | curl -H "Content-Type: application/json" --data-binary @- "$SERVICE_URL/api/v2/vs/"

Как посмотреть список версий и удалить их

Вы можете посмотреть список всех доступных версий каталога или удалить определенную версию.

  • Чтобы посмотреть список идентификаторов для всех загруженных версий каталога, отправьте запрос GET на адрес /api/v2/vs/. См. GET /api/v2/vs/.

  • Удаление версии. Чтобы удалить каталог, отправьте запрос DELETE на адрес /api/v2/vs/{version}, где {version} – идентификатор, указанный при загрузке каталога (например, v1.0). Подробнее о DELETE /api/v2/vs/{version}…

Подробную информацию обо всех конечных точках можно найти в документации по API.

Как использовать каталог в конфигурациях показателей

После загрузки укажите версию каталога в конфигурациях показателей, используя поле vs_version:

{ "vs_version": "v1.0", ... }

Когда этот объект JSON отправляется в конечные точки /api/v2/generate_metrics_config или /api/v2/validate_metrics_config, MCG использует определения сигналов из каталога v1.0 для проверки и вывода типа.