# 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.
