既存の HIDL VHAL 実装を AIDL VHAL 実装に移行するには、AIDL リファレンス実装ストラクチャを使用して IVehicleHardware インターフェースを実装します。
既存の HIDL 実装も HIDL リファレンス実装に則している場合、ベンダーは VehicleHal クラスを実装しています。IVehicleHardware は VehicleHal によく似ています。
| HIDL VHAL | AIDL VHAL |
|---|---|
getAllPropertyConfigs() |
VehicleHal.listProperties() と同じ。 |
getValues(callback, requests) |
リクエストごとに VehicleHal.get() を呼び出せます。また、コールバックを呼び出せます。
|
dump() |
VehicleHal.dump() と同じ。 |
checkHealth() |
VehicleHal.get() を返せます。 |
registerPropertyChangeCallback() |
VehicleHal.mOnHalEvent の設定と類似。 |
AIDL における型の違い
HIDL VHAL から AIDL VHAL に移行する際は、次の差異を考慮してください。
- HIDL は、
types.halから生成されたすべての型についてヘッダー ファイル(types.h)を 1 つ生成します。AIDL は、型ごとに 1 つのヘッダー ファイルを生成します。たとえば、VehiclePropValue.aidlのVehiclePropValue.hです。そのため、必要な型のヘッダー ファイルをすべて含める必要があります。
VehicleHalUtilsライブラリのヘルパー ファイルVehicleHalTypes.hには一般的な型のほとんどが含まれています。 types.halで定義されるすべての型は、AIDL では以下を除いてすべて同じです。onPropertySetが削除されたため、使用されないSubscribeFlagsは削除されます。UserInfo.aidlで定義されるようになったため、UserFlagsは、列挙型の代わりにフラグとして定義される必要があります。ユーザーフラグ フィールドは、複数のUserInfo.USER_FLAG_XXXのビット論理和を組み合わせた整数です。VehiclePropValueのRawValueの名前はRawPropValueに変更されます。RawValueのbytesの名前はbyteValuesに変更されます。
| 移行前 | 移行後 |
|---|---|
hidl_vec |
std::vector |
hidl_string |
std::string |
android::sp |
std::shared_ptr |
android::wp |
std::weak_ptr |