Split 'IFoo' into 'IFoo' and 'IHwFoo'

The traditional binder "IFoo" interface is coupled
very tightly with Binder; it inherits from Binder
objects and implements several Binder-only methods.

We want to abstract away the RPC mechanism as much as we can; therefore,
we want to create a "clean" IFoo interface, which contains just the
methods defined in the HIDL interface. Separately, there's an IHwFoo
interface, which implements IFoo as well as the necessary Binder
methods.

Changes in hidl-gen to support this:
- Generates IHwFoo.h
- Moved (DECLARE|IMPLEMENT)_HW_BINDER macros from IFoo to IHwFoo
- Added REGISTER_AND_GET_SERVICE macros to IFoo
- Removed all hwbinder/ include paths from IFoo
- When passing an interface through a HIDL method, wrap a
  BnInterface object around it
- BnFoo's implementation of IFoo calls through the register
  interface implementation
- Updated test code

Tests: hidl_test, hidl_java_test, libhwbinder bench, NFC all work.
Bug: 30588200
Change-Id: Ie7ca4eef905f84aebd06bee971b5f6170e169797
6 files changed
tree: 544d4bf4439e0e5ea21d35c8c726d3d967478a3b
  1. test/
  2. Android.mk
  3. Annotation.cpp
  4. Annotation.h
  5. ArrayType.cpp
  6. ArrayType.h
  7. AST.cpp
  8. AST.h
  9. CompoundType.cpp
  10. CompoundType.h
  11. ConstantExpression.cpp
  12. ConstantExpression.h
  13. Coordinator.cpp
  14. Coordinator.h
  15. EnumType.cpp
  16. EnumType.h
  17. Formatter.cpp
  18. Formatter.h
  19. FQName.cpp
  20. FQName.h
  21. generateCpp.cpp
  22. generateJava.cpp
  23. generateVts.cpp
  24. GenericBinder.cpp
  25. GenericBinder.h
  26. HandleType.cpp
  27. HandleType.h
  28. hidl-gen_l.ll
  29. hidl-gen_y.yy
  30. Interface.cpp
  31. Interface.h
  32. main.cpp
  33. Method.cpp
  34. Method.h
  35. NamedType.cpp
  36. NamedType.h
  37. README.md
  38. ScalarType.cpp
  39. ScalarType.h
  40. Scope.cpp
  41. Scope.h
  42. StringType.cpp
  43. StringType.h
  44. Type.cpp
  45. Type.h
  46. TypeDef.cpp
  47. TypeDef.h
  48. VectorType.cpp
  49. VectorType.h
README.md

hidl-gen user guide

1. Build

croot
make hidl-gen

2. Run

hidl-gen -o output-path -L language (-r interface-root) fqname

output-path: directory to store the output files.
language: output file for given language. e.g.c++, vts..

fqname: fully qualified name of the input files.
For singe file input, follow the format: package@version::fileName
For directory input, follow the format: package@version

interface-root(optional): prefix and root path for fqname.
If not set, use the default prefix: android.hardware and default root path
defined in $TOP.

examples:

hidl-gen -o output -L c++ android.hardware.nfc@1.0::INfc.hal
hidl-gen -o output -L vts android.hardware.nfc@1.0
hidl-gen -o test -L c++ -r android.hardware:/home/android/master/hardware/interfaces android.hardware.nfc@1.0