1dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber/*
2dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * Copyright (C) 2016 The Android Open Source Project
3dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber *
4dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * you may not use this file except in compliance with the License.
6dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * You may obtain a copy of the License at
7dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber *
8dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber *
10dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * Unless required by applicable law or agreed to in writing, software
11dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * See the License for the specific language governing permissions and
14dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * limitations under the License.
15dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber */
16dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber
17dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huberpackage android.os;
18dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber
19dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huberimport libcore.util.NativeAllocationRegistry;
20dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber
21dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber/** @hide */
22dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huberpublic class HwRemoteBinder implements IHwBinder {
23dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber    private static final String TAG = "HwRemoteBinder";
24dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber
25dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber    private static final NativeAllocationRegistry sNativeRegistry;
26dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber
27dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber    public HwRemoteBinder() {
28dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber        native_setup_empty();
29dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber
30dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber        sNativeRegistry.registerNativeAllocation(
31dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber                this,
32dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber                mNativeContext);
33dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber    }
34dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber
3527538df549cb37c4400183cce859cece6f8d8cdaSteven Moreland    @Override
36dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber    public IHwInterface queryLocalInterface(String descriptor) {
37dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber        return null;
38dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber    }
39dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber
4027538df549cb37c4400183cce859cece6f8d8cdaSteven Moreland    @Override
41dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber    public native final void transact(
4227538df549cb37c4400183cce859cece6f8d8cdaSteven Moreland            int code, HwParcel request, HwParcel reply, int flags)
4327538df549cb37c4400183cce859cece6f8d8cdaSteven Moreland        throws RemoteException;
44dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber
45727f7bf84f28765608548a6afe8f54c43a4ccf64Martijn Coenen    public native boolean linkToDeath(DeathRecipient recipient, long cookie);
46727f7bf84f28765608548a6afe8f54c43a4ccf64Martijn Coenen    public native boolean unlinkToDeath(DeathRecipient recipient);
47727f7bf84f28765608548a6afe8f54c43a4ccf64Martijn Coenen
48dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber    private static native final long native_init();
49dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber
50dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber    private native final void native_setup_empty();
51dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber
52dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber    static {
53dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber        long freeFunction = native_init();
54dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber
55dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber        sNativeRegistry = new NativeAllocationRegistry(
56dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber                HwRemoteBinder.class.getClassLoader(),
57dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber                freeFunction,
58dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber                128 /* size */);
59dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber    }
60dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber
61727f7bf84f28765608548a6afe8f54c43a4ccf64Martijn Coenen    private static final void sendDeathNotice(DeathRecipient recipient, long cookie) {
62727f7bf84f28765608548a6afe8f54c43a4ccf64Martijn Coenen        recipient.serviceDied(cookie);
63727f7bf84f28765608548a6afe8f54c43a4ccf64Martijn Coenen    }
64727f7bf84f28765608548a6afe8f54c43a4ccf64Martijn Coenen
65dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber    private long mNativeContext;
6673b6c27a6b89fcbaf1895542222d5b50b66c6b7aYifan Hong
6773b6c27a6b89fcbaf1895542222d5b50b66c6b7aYifan Hong    @Override
6873b6c27a6b89fcbaf1895542222d5b50b66c6b7aYifan Hong    public final native boolean equals(Object other);
6973b6c27a6b89fcbaf1895542222d5b50b66c6b7aYifan Hong    @Override
7073b6c27a6b89fcbaf1895542222d5b50b66c6b7aYifan Hong    public final native int hashCode();
71dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber}
72