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 19f3c53496c055c523c93025e9ddf6eab97de84476Steven Morelandimport java.util.ArrayList; 20c0631d0bb72781b81dabd66064ee5a5dda2d6103Steven Morelandimport java.util.NoSuchElementException; 21dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huberimport libcore.util.NativeAllocationRegistry; 22dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 23dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber/** @hide */ 24dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huberpublic abstract class HwBinder implements IHwBinder { 25dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private static final String TAG = "HwBinder"; 26dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 27dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private static final NativeAllocationRegistry sNativeRegistry; 28dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 29dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public HwBinder() { 30dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber native_setup(); 31dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 32dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber sNativeRegistry.registerNativeAllocation( 33dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber this, 34dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber mNativeContext); 35dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber } 36dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 37e62b1f32f3ab72508daeda63c9be49743e8f8b7eSteven Moreland @Override 38dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public final native void transact( 39e62b1f32f3ab72508daeda63c9be49743e8f8b7eSteven Moreland int code, HwParcel request, HwParcel reply, int flags) 40e62b1f32f3ab72508daeda63c9be49743e8f8b7eSteven Moreland throws RemoteException; 41dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 42dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public abstract void onTransact( 43e62b1f32f3ab72508daeda63c9be49743e8f8b7eSteven Moreland int code, HwParcel request, HwParcel reply, int flags) 44e62b1f32f3ab72508daeda63c9be49743e8f8b7eSteven Moreland throws RemoteException; 45dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 4685d12da977d575a7461867a732084d64488d1502Martijn Coenen public native final void registerService(String serviceName) 47c0631d0bb72781b81dabd66064ee5a5dda2d6103Steven Moreland throws RemoteException; 4835eb7994f81c3507583bccc6f43fc0258f3a1e91Andreas Huber 4935eb7994f81c3507583bccc6f43fc0258f3a1e91Andreas Huber public static native final IHwBinder getService( 50f3c53496c055c523c93025e9ddf6eab97de84476Steven Moreland String iface, 51c0631d0bb72781b81dabd66064ee5a5dda2d6103Steven Moreland String serviceName) 52c0631d0bb72781b81dabd66064ee5a5dda2d6103Steven Moreland throws RemoteException, NoSuchElementException; 53dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 54dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber // Returns address of the "freeFunction". 55dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private static native final long native_init(); 56dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 57dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private native final void native_setup(); 58dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 59dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber static { 60dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber long freeFunction = native_init(); 61dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 62dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber sNativeRegistry = new NativeAllocationRegistry( 63dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber HwBinder.class.getClassLoader(), 64dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber freeFunction, 65dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 128 /* size */); 66dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber } 67dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 68dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private long mNativeContext; 69dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber} 70