You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					106 lines
				
				3.6 KiB
			
		
		
			
		
	
	
					106 lines
				
				3.6 KiB
			| 
								 
											6 years ago
										 
									 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Copyright (C) 2008 The Android Open Source Project
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Licensed under the Apache License, Version 2.0 (the "License");
							 | 
						||
| 
								 | 
							
								 * you may not use this file except in compliance with the License.
							 | 
						||
| 
								 | 
							
								 * You may obtain a copy of the License at
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *      http://www.apache.org/licenses/LICENSE-2.0
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Unless required by applicable law or agreed to in writing, software
							 | 
						||
| 
								 | 
							
								 * distributed under the License is distributed on an "AS IS" BASIS,
							 | 
						||
| 
								 | 
							
								 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
							 | 
						||
| 
								 | 
							
								 * See the License for the specific language governing permissions and
							 | 
						||
| 
								 | 
							
								 * limitations under the License.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef ANDROID_BINDER_H
							 | 
						||
| 
								 | 
							
								#define ANDROID_BINDER_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <stdatomic.h>
							 | 
						||
| 
								 | 
							
								#include <stdint.h>
							 | 
						||
| 
								 | 
							
								#include <binder/IBinder.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								namespace android {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class BBinder : public IBinder
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								                        BBinder();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    virtual const String16& getInterfaceDescriptor() const;
							 | 
						||
| 
								 | 
							
								    virtual bool        isBinderAlive() const;
							 | 
						||
| 
								 | 
							
								    virtual status_t    pingBinder();
							 | 
						||
| 
								 | 
							
								    virtual status_t    dump(int fd, const Vector<String16>& args);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    virtual status_t    transact(   uint32_t code,
							 | 
						||
| 
								 | 
							
								                                    const Parcel& data,
							 | 
						||
| 
								 | 
							
								                                    Parcel* reply,
							 | 
						||
| 
								 | 
							
								                                    uint32_t flags = 0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    virtual status_t    linkToDeath(const sp<DeathRecipient>& recipient,
							 | 
						||
| 
								 | 
							
								                                    void* cookie = NULL,
							 | 
						||
| 
								 | 
							
								                                    uint32_t flags = 0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    virtual status_t    unlinkToDeath(  const wp<DeathRecipient>& recipient,
							 | 
						||
| 
								 | 
							
								                                        void* cookie = NULL,
							 | 
						||
| 
								 | 
							
								                                        uint32_t flags = 0,
							 | 
						||
| 
								 | 
							
								                                        wp<DeathRecipient>* outRecipient = NULL);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    virtual void        attachObject(   const void* objectID,
							 | 
						||
| 
								 | 
							
								                                        void* object,
							 | 
						||
| 
								 | 
							
								                                        void* cleanupCookie,
							 | 
						||
| 
								 | 
							
								                                        object_cleanup_func func);
							 | 
						||
| 
								 | 
							
								    virtual void*       findObject(const void* objectID) const;
							 | 
						||
| 
								 | 
							
								    virtual void        detachObject(const void* objectID);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    virtual BBinder*    localBinder();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								    virtual             ~BBinder();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    virtual status_t    onTransact( uint32_t code,
							 | 
						||
| 
								 | 
							
								                                    const Parcel& data,
							 | 
						||
| 
								 | 
							
								                                    Parcel* reply,
							 | 
						||
| 
								 | 
							
								                                    uint32_t flags = 0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								                        BBinder(const BBinder& o);
							 | 
						||
| 
								 | 
							
								            BBinder&    operator=(const BBinder& o);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    class Extras;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    atomic_uintptr_t    mExtras;  // should be atomic<Extras *>
							 | 
						||
| 
								 | 
							
								            void*       mReserved0;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class BpRefBase : public virtual RefBase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								protected:
							 | 
						||
| 
								 | 
							
								                            BpRefBase(const sp<IBinder>& o);
							 | 
						||
| 
								 | 
							
								    virtual                 ~BpRefBase();
							 | 
						||
| 
								 | 
							
								    virtual void            onFirstRef();
							 | 
						||
| 
								 | 
							
								    virtual void            onLastStrongRef(const void* id);
							 | 
						||
| 
								 | 
							
								    virtual bool            onIncStrongAttempted(uint32_t flags, const void* id);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    inline  IBinder*        remote()                { return mRemote; }
							 | 
						||
| 
								 | 
							
								    inline  IBinder*        remote() const          { return mRemote; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								                            BpRefBase(const BpRefBase& o);
							 | 
						||
| 
								 | 
							
								    BpRefBase&              operator=(const BpRefBase& o);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IBinder* const          mRemote;
							 | 
						||
| 
								 | 
							
								    RefBase::weakref_type*  mRefs;
							 | 
						||
| 
								 | 
							
								    volatile int32_t        mState;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}; // namespace android
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // ANDROID_BINDER_H
							 |