IInterface 学习笔记

 * 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  








posted @ 2021-09-09 11:02  zhougong12  阅读(178)  评论(0)    收藏  举报