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)