diff --git a/automotive/vehicle/README.md b/automotive/vehicle/README.md new file mode 100644 index 0000000000..e0f03e224c --- /dev/null +++ b/automotive/vehicle/README.md @@ -0,0 +1,26 @@ +# Vehicle Hardware Abstraction Layer (VHAL) +--- + +This directory stores the VHAL interface definition and VHAL reference +implementation. + +## 2.0 (deprecated) + +HIDL based VHAL interface and reference implementation. + +## aidl + +AIDL based VHAL interfadce and reference implementation. + +## proto + +Protobuf used to pass message between emulator VHAL and emulator. + +## tools + +Dev tools related to VHAL. + +## vts + +VTS test for VHAL. The VTS test works for both AIDL and HIDL VHAL +implementation. Vendor implementation of VHAL must passes VTS. diff --git a/automotive/vehicle/aidl/README.md b/automotive/vehicle/aidl/README.md new file mode 100644 index 0000000000..09f03b434e --- /dev/null +++ b/automotive/vehicle/aidl/README.md @@ -0,0 +1,23 @@ +# AIDL Vehicle Hardware Abstraction Layer (VHAL) +--- + +This directory stores the AIDL VHAL interface and reference implementation. + +## aidl_api + +Auto-generated current and previous versions of AIDL VHAL api. + +## aidl_test + +Contains a test to test that all HIDL VHAL properties are supported in +AIDL VHAL. + +## android + +Contains AIDL VHAL interface definition. The main interface file is +`android/hardware/automotive/vehicle/IVehicle.aidl`. + +## impl + +Reference implementation for AIDL VHAL and useful libraries for implementing +vendor AIDL VHAL. diff --git a/automotive/vehicle/aidl/impl/README.md b/automotive/vehicle/aidl/impl/README.md new file mode 100644 index 0000000000..121ffd15e7 --- /dev/null +++ b/automotive/vehicle/aidl/impl/README.md @@ -0,0 +1,58 @@ +# AIDL VHAL libraries and reference implementation. +--- + +This directory stores the libraries useful for implementing vendor AIDL VHAL. +This directory also stores a reference fake implementation for AIDL VHAL. + +## default_config + +Stores the default vehicle property configurations for reference vehicle HAL. +Vendor implementation could copy this library but must update the configuration +to meet their own requirements, e.g. enable or disable certain properties or +update the initial value for certain properties. + +## fake_impl + +Contains libraries used specifically for the fake reference VHAL implementation. +These libraries are for test only and must not be directly used for vendor +VHAL implementation. + +These libraries contain test-spcific logic and must not run directly on a real +vehicle. + +## grpc + +Stores code for GRPC based VHAL implementation. + +## hardware + +Defines an interface `IVehicleHardware.h` which vendor must implement for +vehicle-specific logic if they want to follow our reference VHAL design. + +## proto + +Stores Some protobuf files translated from AIDL VHAL interface types. These +files are used in GRPC VHAL implementation. + +## utils + +Defines a library `VehicleHalUtils` which provides useful utility functions for +VHAL implementation. Vendor VHAL could use this library. + +## vhal + +Defines a library `DefaultVehicleHal` which provides generic logic for all VHAL +implementations (including reference VHAL). Vendor VHAL implementation could +use this library, along with their own implementation for `IVehicleHardware` +interface. + +Also defines a binary `android.hardware.automotive.vehicle@V1-default-service` +which is the reference VHAL implementation. It implements `IVehicle.aidl` +interface. It uses `DefaultVehicleHal`, along with `FakeVehicleHardware` +(in fake_impl). It simulates the vehicle bus interaction by using an +in-memory map. Meaning that all properties (except for some special ones) are +just written into a hash map and read from a hash map without relying on any +hardware. As a result, the reference implementation can run on emulator or +any host environment. + +Vendor must not directly use the reference implementation for a real vehicle. \ No newline at end of file diff --git a/automotive/vehicle/aidl/impl/fake_impl/README.md b/automotive/vehicle/aidl/impl/fake_impl/README.md new file mode 100644 index 0000000000..e86dceeb9a --- /dev/null +++ b/automotive/vehicle/aidl/impl/fake_impl/README.md @@ -0,0 +1,28 @@ +# Fake reference AIDL VHAL implementation libraries +--- + +This directory stores libraries for implementing a fake reference AIDL VHAL. + +WARNING: All the libraries here are for TEST ONLY. + +## GeneratorHub + +Defines a library `FakeVehicleHalValueGenerators` that could generate fake +vehicle property values for testing. + +## hardware + +Defines a fake implementation for device-specifc interface `IVehicleHardware`: +`FakeVehicleHardware`. This implementation uses a in-memory map for storing +property values and does not communicate with or depending on any specific +vehicle bus. + +## obd2frame + +Defines a library `FakeObd2Frame` that generates fake OBD2 frame for OBD2 +properties. + +## userhal + +Defines a library `FakeUserHal` that emulates a real User HAL behavior by +parsing debug commands. diff --git a/automotive/vehicle/aidl/impl/utils/README.md b/automotive/vehicle/aidl/impl/utils/README.md new file mode 100644 index 0000000000..87bb7e3034 --- /dev/null +++ b/automotive/vehicle/aidl/impl/utils/README.md @@ -0,0 +1,62 @@ +# Utility classes for VHAL implementation +--- + +This directory stores utility classes for VHAL implementation. Vendor +implementation could use utility classes from `common` folder in their +VHAL implementation. + +## common + +Defines common utility libraries. + +### ConcurrentQueue + +Provides a thread-safe concurrent queue object. Useful for adding object to +a queue in one thread (usually binder thread) and handle the objects in a +separate handler thread. + +### ParcelableUtils + +Provides functions to convert between a regular parcelable and a +`LargeParcelabe`. + +A `LargeParcelable` is a parcelable that marshals the payload +into a shared memory file if the payload is too large to pass across binder. +It is used to pass large data across binder. Before sending the data, VHAL +impl should convert a regular parcelabe to a `LargeParcelable`. After receving +data, VHAL impl should convert a `LargeParcelable` back to regular parcelabe. + +### PendingRequestPool + +Defines A class for managing pending requests and automatically call timeout +callback if the request timed-out. + +### PropertyUtils + +Defines some useful constants. + +### RecurrentTimer + +Defines a thread-safe recurrent timer that can call a function periodically. + +### VehicleHalTypes + +Provides a header file that includes many commonly used header files. Useful +when you are using multiple types defined in VHAL interface. + +### VehicleObjectPool + +Defines a reusable in-memory pool for `VehiclePropValue`. + +### VehiclePropertyStore + +Defines an in-memory map for storing vehicle properties. Allows easier insert, +delete and lookup. + +### VehicleUtils + +Defines many useful utility functions. + +## test + +Defines utility libraries for test only.