commit | 66842a9cd4483d33a01098874664f21792ba10f2 | [log] [tgz] |
---|---|---|
author | Nirav Atre <natre@google.com> | Thu Jun 28 18:14:13 2018 -0700 |
committer | Nirav Atre <natre@google.com> | Fri Jul 13 17:57:28 2018 +0000 |
tree | 01e3ae6054bd856ca3d79890d1f9629c45a50dea | |
parent | a81096057f499903688b3b324877884e58a2b4c5 [diff] |
Implementing Java bindings for Discriminated Unions in HIDL This change augments hidl-gen to generate Java code for HIDL safe_union constructs. The HIDL declaration is similar to regular structs/unions: safe_union SafeUnion { uint8_t a; string b; } The emitted Java code has the form: public final static class SafeUnion { public static final class hidl_discriminator { public static final byte a = 0; public static final byte b = 1; public static final byte hidl_no_init = 2; } private byte hidl_d = hidl_discriminator.hidl_no_init; private Object hidl_o; public void a(byte a) { hidl_d = hidl_discriminator.a; hidl_o = a; } public byte a() { if (hidl_d != hidl_discriminator.a) { throw new IllegalStateException(); } return ((byte) hidl_o); } ... } Also synthesizes the appropriate methods for serializing/deserializing to/from Parcels. Bug: 79878527 Test: Ran the existing hidl_test_java suite. Implemented additional test-cases to exercise the tests.safeunion@1.0 HAL (included in a separate CL). Change-Id: I744e4bd8f28b93357d0e65df6eb9350c42273a4a
Full documentation can be found here: https://source.android.com/devices/architecture/hidl/
hidl-gen is a compiler for the HIDL (HAL Interface Design Language) which generates C++ and Java endpoints for RPC mechanisms. The main userspace libraries which this compiler uses can be found at system/libhidl.
m hidl-gen
Note that options for hidl-gen expected to be invoked by the build system are marked with 'internal' in the help menu.
hidl-gen -h hidl-gen -o output -L c++-impl -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport android.hardware.nfc@1.0
Some defaults for package roots are also provided
hidl-gen -o output -L c++-impl android.hardware.nfc@1.0 hidl-gen -o output -L vts android.hardware.nfc@1.0 hidl-gen -L hash android.hardware.nfc@1.0
Example command for vendor project
hidl-gen -L c++-impl -r vendor.foo:vendor/foo/interfaces vendor.foo.nfc@1.0
See update-makefiles-helper.sh and update-all-google-makefiles.sh for examples of how to generate HIDL makefiles (using the -Landroidbp option).
This is a helper tool to convert C headers to valid .hal files.
m c2hal && c2hal -h
This tool generates html documentation for hal interfaces.
m hidl-doc && hidl-doc -h