Wenn Sie eine vorhandene HIDL-VHAL-Implementierung zu einer AIDL-VHAL migrieren möchten, verwenden Sie die Struktur der AIDL-Referenzimplementierung, um die IVehicleHardware-Schnittstelle zu implementieren.
Wenn die vorhandene HIDL-Implementierung auch der HIDL-Referenzimplementierung entspricht, hat der Anbieter die VehicleHal-Klasse implementiert. IVehicleHardware ähnelt VehicleHal sehr.
| HIDL-VHAL | AIDL-VHAL |
|---|---|
getAllPropertyConfigs() |
Gleich wie bei VehicleHal.listProperties() |
getValues(callback, requests) |
Kann VehicleHal.get() für jede Anfrage aufrufen und Callbacks aufrufen.
|
dump() |
Gleich wie bei VehicleHal.dump() |
checkHealth() |
Kann VehicleHal.get() zurückgeben |
registerPropertyChangeCallback() |
Ähnlich wie bei der Einstellung VehicleHal.mOnHalEvent |
Typunterschiede in AIDL
Berücksichtigen Sie bei der Migration vom HIDL-VHAL zum AIDL-VHAL die folgenden Unterschiede.
- HIDL generiert eine Headerdatei (
types.h) für alle Typen, die austypes.halgeneriert werden. AIDL generiert für jeden Typ eine Headerdatei. Beispiel:VehiclePropValue.hausVehiclePropValue.aidl.Daher müssen Sie alle Headerdateien für die benötigten Typen einfügen. Eine Hilfsdatei,
VehicleHalTypes.hin derVehicleHalUtils-Bibliothek, enthält die meisten gängigen Typen. - Alle in
types.haldefinierten Typen sind in AIDL identisch, mit Ausnahme der folgenden:SubscribeFlagswurde entfernt, da es nicht verwendet wird, weilonPropertySetentfernt wurdeUserFlagsist jetzt inUserInfo.aidldefiniert und sollte als Flag anstelle eines Enums definiert werden. Ein Nutzerflag-Feld ist eine Ganzzahl, die mehrereUserInfo.USER_FLAG_XXX-Bits enthält, die mit der Bit-ODER-Operation verknüpft sind.RawValueinVehiclePropValuewurde inRawPropValueumbenannt.bytesinRawValuewurde inbyteValuesumbenannt.
| Anstelle von … | Verwenden |
|---|---|
hidl_vec |
std::vector |
hidl_string |
std::string |
android::sp |
std::shared_ptr |
android::wp |
std::weak_ptr |