Deal with split between IFoo and IHwFoo.

Add two macros that allow us to:
- Retrieve an interface instance with
  a specific name and version. The implementation
  of this will try to retrieve the interface from
  the hwservicemanager. If that fails, in the future
  it can try to retrieve a pass-through version.
- Register an interface implementation. The implementation
  of this automatically wraps it in a hwbinder object if
  necessary.

Also changed IServiceManager to work correctly with the new
macros in libhwbinder.

TODO (b/30584126): the versions should not need to be passed in,
but instead be retrieved from the generated interfaces directly.

Bug: 30588200
Change-Id: I0567b6a0d3c34b6c8ee54445bea0a42f41a9fcc4
diff --git a/IServiceManager.cpp b/IServiceManager.cpp
index ccbe28d..477d1dd 100644
--- a/IServiceManager.cpp
+++ b/IServiceManager.cpp
@@ -38,7 +38,7 @@
     {
         AutoMutex _l(gDefaultServiceManagerLock);
         while (gDefaultServiceManager == NULL) {
-            gDefaultServiceManager = interface_cast<IServiceManager>(
+            gDefaultServiceManager = interface_cast<IHwServiceManager>(
                 ProcessState::self()->getContextObject(NULL));
             if (gDefaultServiceManager == NULL)
                 sleep(1);
@@ -50,11 +50,11 @@
 
 // ----------------------------------------------------------------------
 
-class BpServiceManager : public BpInterface<IServiceManager>
+class BpServiceManager : public BpInterface<IHwServiceManager>
 {
 public:
     explicit BpServiceManager(const sp<IBinder>& impl)
-        : BpInterface<IServiceManager>(impl)
+        : BpInterface<IHwServiceManager>(impl)
     {
     }
 
@@ -73,7 +73,7 @@
     virtual sp<IBinder> checkService( const String16& name, const hidl_version& version) const
     {
         Parcel data, reply;
-        data.writeInterfaceToken(IServiceManager::getInterfaceDescriptor());
+        data.writeInterfaceToken(getInterfaceDescriptor());
         data.writeString16(name);
         version.writeToParcel(data);
         remote()->transact(CHECK_SERVICE_TRANSACTION, data, &reply);
@@ -85,7 +85,7 @@
             bool allowIsolated)
     {
         Parcel data, reply;
-        data.writeInterfaceToken(IServiceManager::getInterfaceDescriptor());
+        data.writeInterfaceToken(getInterfaceDescriptor());
         data.writeString16(name);
         data.writeStrongBinder(service);
         version.writeToParcel(data);
@@ -101,7 +101,7 @@
 
         for (;;) {
             Parcel data, reply;
-            data.writeInterfaceToken(IServiceManager::getInterfaceDescriptor());
+            data.writeInterfaceToken(getInterfaceDescriptor());
             data.writeInt32(n++);
             status_t err = remote()->transact(LIST_SERVICES_TRANSACTION, data, &reply);
             if (err != NO_ERROR)