Vehicle Hardware Abstraction Layer(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を介してアドレス指定されます。各ゾーンプロパティは、1つ以上のエリアIDをサポートする場合があります。エリアIDは、それぞれの列挙型からの1つ以上のフラグで構成されます。たとえば、 VehicleAreaSeat
を使用するプロパティは、次のエリアIDを使用する場合があります。
アイテム | 説明 |
---|---|
ROW_1_LEFT | ROW_1_RIGHT | エリアIDは両方のフロントシートに適用されます。 |
ROW_2_LEFT | 左後部座席にのみ適用されます。 |
ROW_2_RIGHT | 右後部座席にのみ適用されます。 |
プロパティのステータス
すべてのプロパティ値には、 VehiclePropertyStatus
値が付属しています。これは、プロパティの現在のステータスを示します。
アイテム | 説明 |
---|---|
AVAILABLE | プロパティが使用可能であり、値が有効です。 |
UNAVAILABLE | プロパティ値は現在利用できません。サポートされているプロパティの一時的に無効になっている機能に使用されます。 |
ERROR | このプロパティに問題があります。 |
プロパティの構成
VehiclePropConfig
を使用して、各プロパティの構成情報を提供します。情報は次のとおりです。
変数 | 説明 |
---|---|
access | r 、 w 、 rw |
changeMode | 変更時と継続時のプロパティの監視方法を表します。 |
areaConfigs | areaId 、 min 、およびmax の値。 |
configArray | 追加の構成パラメーター。 |
configString | 文字列として渡される追加情報。 |
minSampleRate | maxSampleRate |
prop | プロパティID、int |
ゾーンプロパティの処理
ゾーン化されたプロパティは、指定されたエリアID値を使用して各サブプロパティにアクセスできる複数のプロパティのコレクションに相当します。
- ゾーンプロパティの
get
呼び出しには、常にエリアIDがリクエストに含まれます。したがって、要求されたエリアIDの現在の値のみが返されます。プロパティがグローバルの場合、エリアIDは0です。 - ゾーンプロパティの
set
には、常にエリアIDがリクエストに含まれます。したがって、要求されたエリアIDのみが変更されます。 -
subscribe
呼び出しは、プロパティのすべてのエリアIDのイベントを生成します。
電話を受ける
初期化中、一致する車両ネットワークメッセージがまだ受信されていないため、プロパティの値がまだ使用できない場合があります。このような場合、 get
呼び出しは-EAGAIN
を返す必要があります。一部のプロパティ(HVACなど)には、個別のオン/オフ電源プロパティがあります。このようなプロパティに対してget
を呼び出すと(電源がオフの場合)、エラーではなくUNAVAILABLE
ステータスが返されます。たとえば、HVAC温度を取得します
図1 。 HVAC温度を取得します(CS = CarService、VHAL = Vehicle HAL)
通話を設定する
set
呼び出しは、要求された変更が行われた後のイベント通知を含む非同期操作です。通常の操作では、 set
コールは車両ネットワーク全体で変更要求を行うことにつながります。一部のset
呼び出しでは、初期データの準備が必要な場合がありますが、初期化中は、そのようなデータがまだ使用できない場合があります。このような場合、 set
呼び出しは-EAGAIN
を返す必要があります。電源のオン/オフが異なる一部のプロパティは、プロパティの電源がオフで設定できない場合に-ESHUTDOWN
を返す必要があります。 set
が有効になるまで、 get
は必ずしも設定されたものと同じ値を返すとは限りません。たとえば、 set HVAC Temperature
ます。
図2 。 HVAC温度を設定します(CS = CarService、VHAL = Vehicle HAL)
カスタムプロパティの処理
パートナー固有のニーズをサポートするために、VHALではシステムアプリに制限されたカスタムプロパティを使用できます。カスタムプロパティを操作するときは、次のガイドラインを使用してください。
- プロパティIDは、次のフィールドを使用して生成する必要があります。
-
VehiclePropertyGroup:VENDOR
VENDOR
グループは、カスタムプロパティにのみ使用されます。 -
VehicleArea
適切なエリアタイプを選択します。 -
VehiclePropertyType
適切なデータ型を選択してください。BYTES
タイプでは、ほとんどの場合に十分な生データを渡すことができます。カスタムプロパティを介してビッグデータを頻繁に送信すると、車両ネットワークアクセス全体の速度が低下する可能性があります。大きなペイロードを追加する場合は注意が必要です。 -
Property ID
カスタムプロパティには4つのニブルIDを選択します。
-
- 生態系の断片化を防ぐために、カスタムプロパティを使用して、( VehiclePropertyIds SDK)にすでに存在する車両プロパティを複製しないでください。
-
VehiclePropConfig.configString
にカスタムプロパティの簡単な説明を入力します。これにより、健全性チェックツールは、既存の車両プロパティの偶発的な複製にフラグを立てることができます。たとえば、「ハザードライト状態」。 -
CarPropertyManager
(Javaコンポーネントの場合)またはVehicle Network Service API(ネイティブの場合)を介してアクセスします。他の車のAPIを変更しないでください。変更すると、将来の互換性の問題が発生する可能性があります。 - ベンダープロパティを実装した後、ベンダープロパティの
VehicleVendorPermission
列挙型でアクセス許可リストのみを選択します。ベンダーの権限をシステムプロパティにマッピングすると、CTSとVTSが破損します。
HVACプロパティの処理
VHALを使用して、HVAC関連のプロパティを設定することでHVACを制御できます。ほとんどのHVACプロパティはゾーン化されたプロパティですが、いくつかはゾーン化されていない(グローバル)プロパティです。定義されたプロパティの例は次のとおりです。
財産 | 目的 |
---|---|
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET | ゾーンごとに温度を設定します。 |
VEHICLE_PROPERTY_HVAC_RECIRC_ON | ゾーンごとの再循環を制御します。 |
HVACプロパティの完全なリストを表示するには、 types.hal
でVEHICLE_PROPERTY_HVAC_*
を検索します。 HVACプロパティがVehicleAreaSeat
を使用する場合、ゾーン化されたHVACプロパティをエリアIDにマッピングするための追加のルールが適用されます。車内で利用可能な各座席は、エリアID配列のエリアIDの一部である必要があります。
例1。車には2つの前部座席( ROW_1_LEFT, ROW_1_RIGHT
)と3つの後部座席( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
)があります。車には、運転席側と助手席側の2つの温度制御ユニットがあります。
-
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。車には3つの座席列があり、前列に2つの座席( ROW_1_LEFT, ROW_1_RIGHT
)、2番目の列に3つの座席( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
)、3番目の列に3つの座席( ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT
)があります。車には、運転席側、助手席側、後部の3つの温度制御ユニットがあります。 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
)を参照してください。
車両マップサービス
Vehicle Map Service(VMS)は、先進運転支援システム(ADAS)などの一般的な車両機能をサポートするために、pub/subインターフェースを介してクライアント間で地図データを交換するメカニズムを提供します。クライアントには、VHALまたは特権AndroidアプリケーションのVMSプロパティを介してインターフェースする車両システムを含めることができます。 VMSで共有されるデータは、車両システムおよびサポートアプリで使用するためのマップデータに限定されることを目的としています。
VMSは、AndroidAutomotiveの実装でのみ使用することを目的としています。 AOSPには、VMSを公開またはサブスクライブするデフォルトのクライアントは含まれていません。 VHALのVMSプロパティの場合、メッセージの種類とデータ構造は、サポートされているVMSメッセージの種類を一覧表示するVmsMessageType
列挙型のVHAL2.0で説明されています。この列挙型は、車両プロパティの整数配列の最初の整数として使用され、メッセージの残りの部分がどのようにデコードされるかを決定します。