Binder.h revision 88b7541d682a6ad402eff15e58c9c792497096d7
1/* 2 * Copyright (C) 2008 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#ifndef ANDROID_BINDER_H 18#define ANDROID_BINDER_H 19 20#include <stdatomic.h> 21#include <binder/IBinder.h> 22 23// --------------------------------------------------------------------------- 24namespace android { 25 26class BBinder : public IBinder 27{ 28public: 29 BBinder(); 30 31 virtual const String16& getInterfaceDescriptor() const; 32 virtual bool isBinderAlive() const; 33 virtual status_t pingBinder(); 34 virtual status_t dump(int fd, const Vector<String16>& args); 35 36 virtual status_t transact( uint32_t code, 37 const Parcel& data, 38 Parcel* reply, 39 uint32_t flags = 0); 40 41 virtual status_t linkToDeath(const sp<DeathRecipient>& recipient, 42 void* cookie = NULL, 43 uint32_t flags = 0); 44 45 virtual status_t unlinkToDeath( const wp<DeathRecipient>& recipient, 46 void* cookie = NULL, 47 uint32_t flags = 0, 48 wp<DeathRecipient>* outRecipient = NULL); 49 50 virtual void attachObject( const void* objectID, 51 void* object, 52 void* cleanupCookie, 53 object_cleanup_func func); 54 virtual void* findObject(const void* objectID) const; 55 virtual void detachObject(const void* objectID); 56 57 virtual BBinder* localBinder(); 58 59protected: 60 virtual ~BBinder(); 61 62 virtual status_t onTransact( uint32_t code, 63 const Parcel& data, 64 Parcel* reply, 65 uint32_t flags = 0); 66 67private: 68 BBinder(const BBinder& o); 69 BBinder& operator=(const BBinder& o); 70 71 class Extras; 72 73 atomic_uintptr_t mExtras; // should be atomic<Extras *> 74 void* mReserved0; 75}; 76 77// --------------------------------------------------------------------------- 78 79class BpRefBase : public virtual RefBase 80{ 81protected: 82 BpRefBase(const sp<IBinder>& o); 83 virtual ~BpRefBase(); 84 virtual void onFirstRef(); 85 virtual void onLastStrongRef(const void* id); 86 virtual bool onIncStrongAttempted(uint32_t flags, const void* id); 87 88 inline IBinder* remote() { return mRemote; } 89 inline IBinder* remote() const { return mRemote; } 90 91private: 92 BpRefBase(const BpRefBase& o); 93 BpRefBase& operator=(const BpRefBase& o); 94 95 IBinder* const mRemote; 96 RefBase::weakref_type* mRefs; 97 volatile int32_t mState; 98}; 99 100}; // namespace android 101 102// --------------------------------------------------------------------------- 103 104#endif // ANDROID_BINDER_H 105