* 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 namespace android {
24 namespace hardware {
25 // ----------------------------------------------------------------------
26
27 class IInterface : public virtual RefBase
28 {
29 public:
30 IInterface();
31 static sp<IBinder> asBinder(const IInterface*);
32 static sp<IBinder> asBinder(const sp<IInterface>&);
33 protected:
34 virtual ~IInterface();
35 virtual IBinder* onAsBinder() = 0;
36 };
37
38 // ----------------------------------------------------------------------
39
40 template<typename INTERFACE>
41 class BpInterface : public INTERFACE, public IInterface, public BpHwRefBase
42 {
43 public:
44 explicit BpInterface(const sp<IBinder>& remote);
45 virtual IBinder* onAsBinder();
46 };
47
48 // ----------------------------------------------------------------------
49
50 // ----------------------------------------------------------------------
51 // No user-serviceable parts after this...
52
53
54 template<typename INTERFACE>
55 inline BpInterface<INTERFACE>::BpInterface(const sp<IBinder>& remote)
56 : BpHwRefBase(remote)
57 {
58 }
59
60 template<typename INTERFACE>
61 inline IBinder* BpInterface<INTERFACE>::onAsBinder()
62 {
63 return remote();
64 }
65
66 // ----------------------------------------------------------------------
67
68 } // namespace hardware
69 } // namespace android
70
71 #endif // ANDROID_HARDWARE_IINTERFACE_H
* 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 #define LOG_TAG "hw-IInterface"
18 #include <utils/Log.h>
19 #include <hwbinder/IInterface.h>
20
21 namespace android {
22 namespace hardware {
23
24 // ---------------------------------------------------------------------------
25
26 IInterface::IInterface()
27 : RefBase() {
28 }
29
30 IInterface::~IInterface() {
31 }
32
33 // static
34 sp<IBinder> IInterface::asBinder(const IInterface* iface)
35 {
36 if (iface == nullptr) return nullptr;
37 return const_cast<IInterface*>(iface)->onAsBinder();
38 }
39
40 // static
41 sp<IBinder> IInterface::asBinder(const sp<IInterface>& iface)
42 {
43 if (iface == nullptr) return nullptr;
44 return iface->onAsBinder();
45 }
46
47
48 // ---------------------------------------------------------------------------
49
50 } // namespace hardware
51 } // namespace android
52