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