차량 속성

VHAL(차량 하드웨어 추상화 계층) 인터페이스는 OEM이 구현할 수 있는 속성을 정의하고 속성 메타데이터를 포함합니다(예: 속성이 int인지 여부 및 허용되는 변경 모드). VHAL 인터페이스는 특정 기능에 대한 추상화인 속성 액세스(읽기, 쓰기, 구독)를 기반으로 합니다.

HAL 인터페이스

VHAL은 다음 인터페이스를 사용합니다.

  • getAllPropConfigs() 생성 (vec<VehiclePropConfig>propConfigs)
    VHAL에서 지원하는 모든 속성의 구성을 나열합니다. CarService는 지원되는 속성만 사용합니다.
  • getPropConfigs(vec<int32_t> props)(StatusCode status,vec<VehiclePropConfig> propConfigs);
    선택한 속성의 구성을 반환합니다.
  • set(VehiclePropValue propValue)(StatusCodestatus);
    속성에 값을 씁니다. 쓰기 결과는 속성별로 정의됩니다.
  • subscribe(IVehicleCallback callback, vec<SubscribeOptions> options) 생성 (StatusCode status);
    속성 값 변경 모니터링을 시작합니다. 구역 속성의 경우 unsubscribe(IVehicleCallback callback, int32_t propId)(StatusCode status);

VHAL은 다음 콜백 인터페이스를 사용합니다.

  • oneway onPropertyEvent(vec<VehiclePropValue>propValues);
    차량 속성 값 변경을 알립니다. 등록된 속성에 대해서만 수행해야 합니다.
  • oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
    전역 VHAL 수준 오류 또는 속성별 오류를 반환합니다. 전역 오류로 인해 HAL이 다시 시작되어 다른 구성요소(응용 프로그램 포함)가 다시 시작될 수 있습니다.

차량 속성

속성은 읽기 전용, 쓰기 전용(VHAL 수준에 정보를 전달하는 데 사용) 또는 읽기 및 쓰기(대부분의 속성 지원은 선택 사항)일 수 있습니다. 각 속성은 int32 키로 고유하게 식별되며 미리 정의된 유형( value_type )을 가집니다.

  • BYTES
  • BOOLEAN
  • EPOCH_TIME
  • FLOAT
  • FLOAT[]
  • INT32
  • INT32[]
  • INT64
  • INT64[]
  • STRING
  • MIXED

구역 속성은 속성에서 지원하는 구역 수에 따라 둘 이상의 값을 가질 수 있습니다.

영역 유형

VHAL은 여러 영역 유형을 정의합니다.

면적 유형 설명
GLOBAL 이 속성은 단일 항목이며 여러 영역이 없습니다.
WINDOW 창 기반 영역은 VehicleAreaWindow 열거형을 사용합니다.
MIRROR 미러 기반 영역은 VehicleAreaMirror 열거형을 사용합니다.
SEAT 좌석을 기반으로 하는 면적은 VehicleAreaSeat 열거형을 사용합니다.
DOOR 문을 기반으로 하는 영역으로 VehicleAreaDoor 열거형을 사용합니다.
WHEEL 휠 기반 영역, VehicleAreaWheel 열거형을 사용합니다.

각 구역 속성은 미리 정의된 영역 유형을 사용해야 합니다. 각 영역 유형에는 영역 유형에 대한 열거형에 정의된 비트 플래그 세트가 있습니다. 예를 들어 SEAT 영역은 VehicleAreaSeat 열거형을 정의합니다.

  • ROW_1_LEFT = 0x0001
  • ROW_1_CENTER = 0x0002
  • ROW_1_RIGHT = 0x0004
  • ROW_2_LEFT = 0x0010
  • ROW_2_CENTER = 0x0020
  • ROW_2_RIGHT = 0x0040
  • ROW_3_LEFT = 0x0100
  • ...

영역 ID

구역 속성은 영역 ID를 통해 주소가 지정됩니다. 각 구역 속성은 하나 이상의 영역 ID를 지원할 수 있습니다. 영역 ID는 해당 열거형의 하나 이상의 플래그로 구성됩니다. 예를 들어 VehicleAreaSeat 를 사용하는 속성은 다음 영역 ID를 사용할 수 있습니다.

안건 설명
ROW_1_LEFT | ROW_1_RIGHT Area ID는 앞좌석 모두에 적용됩니다.
ROW_2_LEFT 뒷좌석 좌측에만 적용됩니다.
ROW_2_RIGHT 뒷좌석 우측에만 적용됩니다.

부동산 상태

모든 속성 값은 VehiclePropertyStatus 값과 함께 제공됩니다. 속성의 현재 상태를 나타냅니다.

안건 설명
AVAILABLE 속성을 사용할 수 있으며 값이 유효합니다.
UNAVAILABLE 현재 속성 값을 사용할 수 없습니다. 지원되는 속성에 대해 일시적으로 비활성화된 기능에 사용됩니다.
ERROR 이 속성에 문제가 있습니다.

속성 구성

VehiclePropConfig 를 사용하여 각 속성에 대한 구성 정보를 제공합니다. 정보에는 다음이 포함됩니다.

변하기 쉬운 설명
access r , w , rw
changeMode 속성이 변경될 때와 지속적으로 모니터링되는 방식을 나타냅니다.
areaConfigs areaId , minmax 값.
configArray 추가 구성 매개변수.
configString 추가 정보는 문자열로 전달됩니다.
minSampleRate maxSampleRate
prop 속성 ID, 정수

처리 영역 속성

구역 속성은 지정된 영역 ID 값으로 각 하위 속성에 액세스할 수 있는 여러 속성 모음과 같습니다.

  • 구역 속성에 대한 호출 get 는 요청에 항상 영역 ID를 포함합니다. 따라서 요청한 영역 ID의 현재 값만 반환됩니다. 속성이 전역인 경우 영역 ID는 0입니다.
  • 구역 속성에 대한 호출 set 은 요청에 항상 영역 ID를 포함합니다. 따라서 요청한 Area ID만 변경됩니다.
  • subscribe 호출은 속성의 모든 영역 ID에 대한 이벤트를 생성합니다.

전화 받기

초기화 중에는 일치하는 차량 네트워크 메시지가 아직 수신되지 않았기 때문에 속성 값을 아직 사용하지 못할 수 있습니다. 이러한 경우 get 호출은 -EAGAIN 을 반환해야 합니다. 일부 속성(예: HVAC)에는 별도의 전원 켜기/끄기 속성이 있습니다. 그러한 속성에 대해 get 을 호출하면(전원이 꺼진 경우) 오류를 반환하는 대신 UNAVAILABLE 상태를 반환해야 합니다. 예를 들어 HVAC 온도 가져오기

VHAL HVAC 예제 가져오기

그림 1 . HVAC 온도 가져오기(CS = CarService, VHAL = 차량 HAL)

통화 설정

set 호출은 요청된 변경이 이루어진 후 이벤트 알림을 포함하는 비동기 작업입니다. 일반적인 작업에서 set 호출은 차량 네트워크를 통해 변경 요청을 만듭니다. 일부 set 호출은 초기 데이터를 준비해야 할 수 있지만 초기화 중에는 이러한 데이터를 아직 사용하지 못할 수 있습니다. 이러한 경우에 set 호출은 -EAGAIN 을 반환해야 합니다. 별도의 전원 켜기/끄기가 있는 일부 속성은 속성의 전원이 꺼져 설정을 수행할 수 없는 경우 -ESHUTDOWN 을 반환해야 합니다. set 가 유효해질 때까지 get 은 세트와 동일한 값을 반드시 리턴하지는 않습니다. 예를 들어 set HVAC Temperature 합니다.

VHAL 설정 HVAC 예

그림 2 . HVAC 온도 설정(CS = CarService, VHAL = 차량 HAL)

사용자 정의 속성 처리

파트너별 요구 사항을 지원하기 위해 VHAL은 시스템 앱으로 제한된 사용자 지정 속성을 허용합니다. 사용자 정의 속성으로 작업할 때 다음 지침을 따르십시오.

  • 속성 ID는 다음 필드를 사용하여 생성해야 합니다.
    • VehiclePropertyGroup:VENDOR
      VENDOR 그룹은 사용자 정의 속성에만 사용됩니다.
    • VehicleArea
      적절한 영역 유형을 선택합니다.
    • VehiclePropertyType
      적절한 데이터 유형을 선택하십시오. BYTES 유형은 대부분의 경우 충분한 원시 데이터의 전달을 허용합니다. 사용자 지정 속성을 통해 빅 데이터를 자주 전송하면 전체 차량 네트워크 액세스 속도가 느려질 수 있습니다. 큰 페이로드를 추가할 때는 주의하십시오.
    • Property ID
      사용자 정의 속성에 대해 4개의 니블 ID를 선택하십시오.
  • 생태계 조각화를 방지하기 위해 ( VehiclePropertyIds SDK)에 이미 존재하는 차량 속성을 복제하는 데 사용자 정의 속성을 사용해서는 안됩니다.
  • 사용자 정의 속성에 대한 간단한 설명으로 VehiclePropConfig.configString 을 채우십시오. 이를 통해 온전성 검사 도구가 기존 차량 속성의 우발적인 복제에 플래그를 지정할 수 있습니다. 예: "위험등 상태".
  • CarPropertyManager (Java 구성 요소의 경우) 또는 차량 네트워크 서비스 API(기본의 경우)를 통해 액세스합니다. 다른 자동차 API를 수정하면 향후 호환성 문제가 발생할 수 있으므로 수정하지 마십시오.
  • 공급업체 속성을 구현한 후 공급업체 속성에 대한 VehicleVendorPermission 열거형에서 권한 목록 선택합니다. 공급업체 권한을 시스템 속성에 매핑하면 CTS 및 VTS가 중단됩니다.

HVAC 속성 처리

VHAL을 사용하여 HVAC 관련 속성을 설정하여 HVAC를 제어할 수 있습니다. 대부분의 HVAC 속성은 구역이 지정된 속성이지만 일부는 구역이 지정되지 않은(전역) 속성입니다. 샘플 정의 속성은 다음과 같습니다.

재산 목적
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET 구역별 온도를 설정합니다.
VEHICLE_PROPERTY_HVAC_RECIRC_ON 구역별 재순환 제어.

HVAC 속성의 전체 목록을 보려면 types.hal에서 types.hal VEHICLE_PROPERTY_HVAC_* 를 검색하세요. HVAC 특성이 VehicleAreaSeat 를 사용하는 경우 구역 HVAC 특성을 영역 ID에 매핑하기 위한 추가 규칙이 적용됩니다. 차량에서 사용 가능한 각 좌석은 Area ID 배열에서 Area ID의 일부여야 합니다.

예 1. 자동차에는 앞좌석 2개( ROW_1_LEFT, ROW_1_RIGHT )와 뒷좌석 3개( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT )가 있습니다. 자동차에는 운전석과 조수석의 두 가지 온도 제어 장치가 있습니다.

  • HVAC_TEMPERATURE SET 에 대한 유효한 지역 ID 매핑 세트는 다음과 같습니다.
    • ROW_1_LEFT | ROW_2_LEFT
    • ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
  • 동일한 하드웨어 구성에 대한 대체 매핑은 다음과 같습니다.
    • ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
    • ROW_1_RIGHT | ROW_2_RIGHT

예 2. 자동차에는 앞줄에 두 개의 좌석( ROW_1_LEFT, ROW_1_RIGHT ), 두 번째 줄에 세 개의 좌석( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT ), 세 번째 줄에 세 개의 좌석( ​​ROW_3_LEFT, ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT , ROW_3_RIGHT )이 있는 세 개의 좌석 열이 있습니다. 자동차에는 운전석, 조수석 및 후면의 세 가지 온도 제어 장치가 있습니다. HVAC_TEMPERATURE_SET 을 영역 ID에 매핑하는 합리적인 방법은 3요소 배열입니다.

  • ROW_1_LEFT
  • ROW_1_RIGHT
  • ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT

센서 속성 처리

VHAL 센서 속성은 실제 센서 데이터 또는 운전 상태와 같은 정책 정보를 나타냅니다. 일부 센서 정보(예: 운전 상태 및 주간/야간 모드)는 안전한 차량 애플리케이션을 구축하기 위해 데이터가 필수이므로 모든 앱에서 제한 없이 액세스할 수 있습니다. 다른 센서 정보(예: 차량 속도)는 더 민감하며 사용자가 관리할 수 있는 특정 권한이 필요합니다.

지원되는 센서 속성( types.hal )을 참조하세요.

차량 지도 서비스

차량 지도 서비스(VMS)는 ADAS(Advanced Driver Assistance Systems) 와 같은 일반적인 차량 기능을 지원하기 위해 pub/sub 인터페이스를 통해 클라이언트 간에 지도 데이터를 교환하는 메커니즘을 제공합니다. 클라이언트는 VHAL 또는 권한 있는 Android 애플리케이션의 VMS 속성을 통해 인터페이스하는 차량 시스템을 포함할 수 있습니다. VMS에서 공유되는 데이터는 차량 시스템 및 지원 앱에서 사용할 지도 데이터로 제한됩니다.

VMS는 Android Automotive 구현에서만 사용하기 위한 것입니다. AOSP에는 VMS를 게시하거나 구독하는 기본 클라이언트가 포함되어 있지 않습니다. VHAL의 VMS 속성에 대해 메시지 유형 및 데이터 구조는 지원되는 VMS 메시지 유형을 나열하는 VmsMessageType 열거형의 VHAL 2.0에 설명되어 있습니다. 이 열거형은 차량 속성 정수 배열의 첫 번째 정수로 사용되며 나머지 메시지가 디코딩되는 방식을 결정합니다.