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