Генератор конфигураций показателей (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 для проверки и вывода типа.