1*77b80299SAndroid Build Coastguard Worker /* 2*77b80299SAndroid Build Coastguard Worker * Copyright (C) 2005 The Android Open Source Project 3*77b80299SAndroid Build Coastguard Worker * 4*77b80299SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*77b80299SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*77b80299SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*77b80299SAndroid Build Coastguard Worker * 8*77b80299SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*77b80299SAndroid Build Coastguard Worker * 10*77b80299SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*77b80299SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*77b80299SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*77b80299SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*77b80299SAndroid Build Coastguard Worker * limitations under the License. 15*77b80299SAndroid Build Coastguard Worker */ 16*77b80299SAndroid Build Coastguard Worker 17*77b80299SAndroid Build Coastguard Worker // 18*77b80299SAndroid Build Coastguard Worker #ifndef ANDROID_HARDWARE_IINTERFACE_H 19*77b80299SAndroid Build Coastguard Worker #define ANDROID_HARDWARE_IINTERFACE_H 20*77b80299SAndroid Build Coastguard Worker 21*77b80299SAndroid Build Coastguard Worker #include <hwbinder/Binder.h> 22*77b80299SAndroid Build Coastguard Worker 23*77b80299SAndroid Build Coastguard Worker // WARNING: this code is part of libhwbinder, a fork of libbinder. Generally, 24*77b80299SAndroid Build Coastguard Worker // this means that it is only relevant to HIDL. Any AIDL- or libbinder-specific 25*77b80299SAndroid Build Coastguard Worker // code should not try to use these things. 26*77b80299SAndroid Build Coastguard Worker 27*77b80299SAndroid Build Coastguard Worker namespace android { 28*77b80299SAndroid Build Coastguard Worker namespace hardware { 29*77b80299SAndroid Build Coastguard Worker // ---------------------------------------------------------------------- 30*77b80299SAndroid Build Coastguard Worker 31*77b80299SAndroid Build Coastguard Worker class IInterface : public virtual RefBase 32*77b80299SAndroid Build Coastguard Worker { 33*77b80299SAndroid Build Coastguard Worker public: 34*77b80299SAndroid Build Coastguard Worker IInterface(); 35*77b80299SAndroid Build Coastguard Worker static sp<IBinder> asBinder(const IInterface*); 36*77b80299SAndroid Build Coastguard Worker static sp<IBinder> asBinder(const sp<IInterface>&); 37*77b80299SAndroid Build Coastguard Worker protected: 38*77b80299SAndroid Build Coastguard Worker virtual ~IInterface(); 39*77b80299SAndroid Build Coastguard Worker virtual IBinder* onAsBinder() = 0; 40*77b80299SAndroid Build Coastguard Worker }; 41*77b80299SAndroid Build Coastguard Worker 42*77b80299SAndroid Build Coastguard Worker // ---------------------------------------------------------------------- 43*77b80299SAndroid Build Coastguard Worker 44*77b80299SAndroid Build Coastguard Worker template<typename INTERFACE> 45*77b80299SAndroid Build Coastguard Worker class BpInterface : public INTERFACE, public IInterface, public BpHwRefBase 46*77b80299SAndroid Build Coastguard Worker { 47*77b80299SAndroid Build Coastguard Worker public: 48*77b80299SAndroid Build Coastguard Worker explicit BpInterface(const sp<IBinder>& remote); 49*77b80299SAndroid Build Coastguard Worker virtual IBinder* onAsBinder(); 50*77b80299SAndroid Build Coastguard Worker }; 51*77b80299SAndroid Build Coastguard Worker 52*77b80299SAndroid Build Coastguard Worker // ---------------------------------------------------------------------- 53*77b80299SAndroid Build Coastguard Worker 54*77b80299SAndroid Build Coastguard Worker // ---------------------------------------------------------------------- 55*77b80299SAndroid Build Coastguard Worker // No user-serviceable parts after this... 56*77b80299SAndroid Build Coastguard Worker 57*77b80299SAndroid Build Coastguard Worker 58*77b80299SAndroid Build Coastguard Worker template<typename INTERFACE> BpInterface(const sp<IBinder> & remote)59*77b80299SAndroid Build Coastguard Workerinline BpInterface<INTERFACE>::BpInterface(const sp<IBinder>& remote) 60*77b80299SAndroid Build Coastguard Worker : BpHwRefBase(remote) 61*77b80299SAndroid Build Coastguard Worker { 62*77b80299SAndroid Build Coastguard Worker } 63*77b80299SAndroid Build Coastguard Worker 64*77b80299SAndroid Build Coastguard Worker template<typename INTERFACE> onAsBinder()65*77b80299SAndroid Build Coastguard Workerinline IBinder* BpInterface<INTERFACE>::onAsBinder() 66*77b80299SAndroid Build Coastguard Worker { 67*77b80299SAndroid Build Coastguard Worker return remote(); 68*77b80299SAndroid Build Coastguard Worker } 69*77b80299SAndroid Build Coastguard Worker 70*77b80299SAndroid Build Coastguard Worker // ---------------------------------------------------------------------- 71*77b80299SAndroid Build Coastguard Worker 72*77b80299SAndroid Build Coastguard Worker } // namespace hardware 73*77b80299SAndroid Build Coastguard Worker } // namespace android 74*77b80299SAndroid Build Coastguard Worker 75*77b80299SAndroid Build Coastguard Worker #endif // ANDROID_HARDWARE_IINTERFACE_H 76