Binder.h revision 83c0446f27b9542d6c2e724817b2b2d8d1f55085
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License.
6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and
14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License.
15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_BINDER_H
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_BINDER_H
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
20c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/IBinder.h>
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass BBinder : public IBinder
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                        BBinder();
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
3083c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian    virtual const String16& getInterfaceDescriptor() const;
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual bool        isBinderAlive() const;
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t    pingBinder();
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t    dump(int fd, const Vector<String16>& args);
34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t    transact(   uint32_t code,
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                    const Parcel& data,
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                    Parcel* reply,
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                    uint32_t flags = 0);
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t    linkToDeath(const sp<DeathRecipient>& recipient,
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                    void* cookie = NULL,
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                    uint32_t flags = 0);
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t    unlinkToDeath(  const wp<DeathRecipient>& recipient,
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                        void* cookie = NULL,
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                        uint32_t flags = 0,
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                        wp<DeathRecipient>* outRecipient = NULL);
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void        attachObject(   const void* objectID,
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                        void* object,
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                        void* cleanupCookie,
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                        object_cleanup_func func);
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void*       findObject(const void* objectID) const;
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void        detachObject(const void* objectID);
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual BBinder*    localBinder();
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprotected:
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual             ~BBinder();
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t    onTransact( uint32_t code,
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                    const Parcel& data,
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                    Parcel* reply,
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                                    uint32_t flags = 0);
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                        BBinder(const BBinder& o);
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            BBinder&    operator=(const BBinder& o);
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    class Extras;
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Extras*     mExtras;
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void*       mReserved0;
7483c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian    static  String16    sEmptyDescriptor;
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass BpRefBase : public virtual RefBase
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprotected:
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                            BpRefBase(const sp<IBinder>& o);
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual                 ~BpRefBase();
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void            onFirstRef();
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void            onLastStrongRef(const void* id);
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual bool            onIncStrongAttempted(uint32_t flags, const void* id);
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  IBinder*        remote()                { return mRemote; }
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  IBinder*        remote() const          { return mRemote; }
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                            BpRefBase(const BpRefBase& o);
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BpRefBase&              operator=(const BpRefBase& o);
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    IBinder* const          mRemote;
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    RefBase::weakref_type*  mRefs;
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    volatile int32_t        mState;
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_BINDER_H
105