The Android Hardware Abstraction Layer (HAL) is an interface for hardware vendors to implement that allows the Android application/framework to communicate with hardware-specific device drivers. The Android application uses HAL APIs to get service from hardware devices.
Android HAL uses the functions provided by the lower-layer Linux kernel to serve the request from the Android application/framework. Android HAL is a vendor-specific layer implemented in the C/C++ language. The HAL implementation is hardware-specific and varies from vendor to vendor.
Developers need a standardized approach to implement the Android HAL across vendors and hardware to reduce development time, cost and effort. What follows is a discussion of the challenges of implementing the Android HAL for audio, and a general solution for quick HAL implementation for various hardware vendors.
During audio HAL implementation, the developer should carefully analyze the hardware specifications and quality requirements to decide the audio parameters, such as sample rate, period size and format. While designing the input and output buffer, the developer should also consider the sample size, bytes-per-sample and channel number. If available, the audio preprocessing task should be off-loaded to a Digital Signal Processor (DSP), or another hardware accelerator, to achieve the required power and performance index.
Another important parameter when designing an audio system is the calculation of acceptable audio latency. Also, the designer should consider the cumulative delay for all audio modules in the longest audio path. Unnecessary sample conversion should be avoided, and the developer should carefully design the mixing and routing policies as per requirements.
The Audio HAL implementation challenges increase as the number of audio devices-input or output-increases. For example, an audio system with a lone microphone and speaker is much simpler to design than the Android mobile phone system with two microphones, a headphone, two inbuilt speakers and support for audio over Bluetooth, HDMI, etc. The mixing and routing policies become more complex as the number of audio devices increases. The HAL developer needs to take care of the initialization of all devices, buffer allocation for each device, know the number of active devices at a time and maintain inactive devices.
Aricent offers a tool for automating HAL development that takes the hardware inputs and predicts the template HAL code based on the reference implementation. Also, Aricent has developed a reference header file for the device driver migration. This code requires fine tuning by the developer before compiling the code for successful porting. It enables the developer to implement HAL much faster compared to the traditional method of manual porting.
Android HAL implementation is one of the most crucial aspects in Android Porting. It is a challenge for the HAL implementer to move quickly from one hardware platform to another. The implementation cost and time-to-market could be improved significantly by moving from manual to automated porting.
Aricent has deep understanding and capabilities in Android HAL implementation and provides software enablers that support porting of drivers. Aricent also provides end-to-end support for development, porting and maintenance in Android.
Aricent tool improves productivity of HAL development engineers by taking away repetitive and mundane tasks. Click here to know more