commit | 0ab8265105a0061ad202d23939acc8f9198f391f | [log] [tgz] |
---|---|---|
author | Nirav Atre <natre@google.com> | Mon Jun 04 11:49:14 2018 -0700 |
committer | Nirav Atre <natre@google.com> | Thu Jun 14 22:01:53 2018 +0000 |
tree | 28133a9dee43d1c6d1fc7ca478f8d7077f774de8 | |
parent | 89463bd50359c28429fd5e6a8825e2a229f889c9 [diff] |
Implementing Discriminated Unions in HIDL This change augments hidl-gen to generate C++ 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 C++ code is: struct SafeUnion final { public: enum class hidl_discriminator : uint8_t { a, b, hidl_no_init }; SafeUnion(); ~SafeUnion(); SafeUnion(const SafeUnion&); void a(uint8_t); uint8_t& a(); uint8_t a() const; void b(const ::android::hardware::hidl_string&); ::android::hardware::hidl_string& b(); const ::android::hardware::hidl_string& b() const; // Utility method hidl_discriminator getDiscriminator() const; private: void hidl_destructUnion(); union hidl_union final { uint8_t a __attribute__ ((aligned(1))); ::android::hardware::hidl_string b __attribute__ ((aligned(8))); hidl_union(); ~hidl_union(); } u; hidl_discriminator d __attribute__ ((aligned(1)))\ {hidl_discriminator::hidl_no_init}; }; Also synthesizes the appropriate toString, operator== and {read,write}Embedded{From,To}Parcel methods. Bug: 79878527 Test: Ran the existing hidl_test suite, tested safe_union get/set methods on a test HAL. Change-Id: I894c144204ab3bdbe446022b2805a64a211d28b3 Merged-In: I894c144204ab3bdbe446022b2805a64a211d28b3
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