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 19ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huberimport java.util.ArrayList; 20ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huberimport java.util.Arrays; 21ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 22dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huberimport libcore.util.NativeAllocationRegistry; 23dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 24dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber/** @hide */ 25dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huberpublic class HwParcel { 26dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private static final String TAG = "HwParcel"; 27dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 28dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public static final int STATUS_SUCCESS = 0; 29dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public static final int STATUS_ERROR = -1; 30dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 31dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private static final NativeAllocationRegistry sNativeRegistry; 32dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 33dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private HwParcel(boolean allocate) { 34dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber native_setup(allocate); 35dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 36dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber sNativeRegistry.registerNativeAllocation( 37dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber this, 38dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber mNativeContext); 39dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber } 40dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 41dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public HwParcel() { 42dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber native_setup(true /* allocate */); 43dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 44dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber sNativeRegistry.registerNativeAllocation( 45dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber this, 46dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber mNativeContext); 47dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber } 48dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 49dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeInterfaceToken(String interfaceName); 5086635bb45ee1ddeb3059a8a925659964c7858cc3Andreas Huber public native final void writeBool(boolean val); 51dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeInt8(byte val); 52dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeInt16(short val); 53dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeInt32(int val); 54dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeInt64(long val); 55dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeFloat(float val); 56dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeDouble(double val); 57dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeString(String val); 58dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 59ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeBoolVector(boolean[] val); 60ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeInt8Vector(byte[] val); 61ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeInt16Vector(short[] val); 62ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeInt32Vector(int[] val); 63ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeInt64Vector(long[] val); 64ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeFloatVector(float[] val); 65ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeDoubleVector(double[] val); 66ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final void writeStringVector(String[] val); 67ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 68ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeBoolVector(ArrayList<Boolean> val) { 69ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 70ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber boolean[] array = new boolean[n]; 71ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 72ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 73ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 74ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 75ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeBoolVector(array); 76ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 77ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 78ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeInt8Vector(ArrayList<Byte> val) { 79ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 80ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber byte[] array = new byte[n]; 81ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 82ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 83ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 84ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 85ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeInt8Vector(array); 86ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 87ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 88ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeInt16Vector(ArrayList<Short> val) { 89ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 90ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber short[] array = new short[n]; 91ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 92ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 93ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 94ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 95ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeInt16Vector(array); 96ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 97ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 98ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeInt32Vector(ArrayList<Integer> val) { 99ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 100ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber int[] array = new int[n]; 101ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 102ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 103ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 104ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 105ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeInt32Vector(array); 106ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 107ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 108ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeInt64Vector(ArrayList<Long> val) { 109ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 110ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber long[] array = new long[n]; 111ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 112ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 113ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 114ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 115ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeInt64Vector(array); 116ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 117ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 118ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeFloatVector(ArrayList<Float> val) { 119ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 120ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber float[] array = new float[n]; 121ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 122ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 123ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 124ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 125ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeFloatVector(array); 126ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 127ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 128ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeDoubleVector(ArrayList<Double> val) { 129ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber final int n = val.size(); 130ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber double[] array = new double[n]; 131ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber for (int i = 0; i < n; ++i) { 132ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber array[i] = val.get(i); 133ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 134ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 135ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeDoubleVector(array); 136ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 137ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 138ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final void writeStringVector(ArrayList<String> val) { 139ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber writeStringVector(val.toArray(new String[val.size()])); 140ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 141dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 142dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeStrongBinder(IHwBinder binder); 143dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 144dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void enforceInterface(String interfaceName); 14586635bb45ee1ddeb3059a8a925659964c7858cc3Andreas Huber public native final boolean readBool(); 146dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final byte readInt8(); 147dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final short readInt16(); 148dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final int readInt32(); 149dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final long readInt64(); 150dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final float readFloat(); 151dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final double readDouble(); 152dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final String readString(); 153dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 154ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final boolean[] readBoolVectorAsArray(); 155ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final byte[] readInt8VectorAsArray(); 156ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final short[] readInt16VectorAsArray(); 157ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final int[] readInt32VectorAsArray(); 158ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final long[] readInt64VectorAsArray(); 159ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final float[] readFloatVectorAsArray(); 160ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final double[] readDoubleVectorAsArray(); 161ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber private native final String[] readStringVectorAsArray(); 162ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 163ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Boolean> readBoolVector() { 164ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Boolean[] array = HwBlob.wrapArray(readBoolVectorAsArray()); 165ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 166ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Boolean>(Arrays.asList(array)); 167ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 168ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 169ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Byte> readInt8Vector() { 170ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Byte[] array = HwBlob.wrapArray(readInt8VectorAsArray()); 171ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 172ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Byte>(Arrays.asList(array)); 173ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 174ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 175ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Short> readInt16Vector() { 176ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Short[] array = HwBlob.wrapArray(readInt16VectorAsArray()); 177ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 178ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Short>(Arrays.asList(array)); 179ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 180ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 181ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Integer> readInt32Vector() { 182ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Integer[] array = HwBlob.wrapArray(readInt32VectorAsArray()); 183ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 184ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Integer>(Arrays.asList(array)); 185ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 186ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 187ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Long> readInt64Vector() { 188ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Long[] array = HwBlob.wrapArray(readInt64VectorAsArray()); 189ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 190ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Long>(Arrays.asList(array)); 191ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 192ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 193ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Float> readFloatVector() { 194ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Float[] array = HwBlob.wrapArray(readFloatVectorAsArray()); 195ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 196ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Float>(Arrays.asList(array)); 197ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 198ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 199ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<Double> readDoubleVector() { 200ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber Double[] array = HwBlob.wrapArray(readDoubleVectorAsArray()); 201ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 202ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<Double>(Arrays.asList(array)); 203ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 204ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber 205ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber public final ArrayList<String> readStringVector() { 206ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber return new ArrayList<String>(Arrays.asList(readStringVectorAsArray())); 207ef1a565bd4e96646e6848a6a40a53ee4dfe33293Andreas Huber } 208dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 209dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final IHwBinder readStrongBinder(); 210dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 2119266f9928d5b3431982cd04f4d6946b70f40766aAndreas Huber // Handle is stored as part of the blob. 212932b5048655ad746e265be1fd590194f7e930f61Martijn Coenen public native final HwBlob readBuffer(long expectedSize); 2139266f9928d5b3431982cd04f4d6946b70f40766aAndreas Huber 2149266f9928d5b3431982cd04f4d6946b70f40766aAndreas Huber public native final HwBlob readEmbeddedBuffer( 215932b5048655ad746e265be1fd590194f7e930f61Martijn Coenen long expectedSize, long parentHandle, long offset, 216932b5048655ad746e265be1fd590194f7e930f61Martijn Coenen boolean nullable); 2179266f9928d5b3431982cd04f4d6946b70f40766aAndreas Huber 2189266f9928d5b3431982cd04f4d6946b70f40766aAndreas Huber public native final void writeBuffer(HwBlob blob); 2199266f9928d5b3431982cd04f4d6946b70f40766aAndreas Huber 220dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void writeStatus(int status); 221dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void verifySuccess(); 222dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void releaseTemporaryStorage(); 2233d726d16b6c198087dc527d9e5f51f18351a0fa9Martijn Coenen public native final void release(); 224dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 225dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber public native final void send(); 226dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 227dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber // Returns address of the "freeFunction". 228dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private static native final long native_init(); 229dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 230dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private native final void native_setup(boolean allocate); 231dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 232dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber static { 233dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber long freeFunction = native_init(); 234dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 235dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber sNativeRegistry = new NativeAllocationRegistry( 236dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber HwParcel.class.getClassLoader(), 237dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber freeFunction, 238dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 128 /* size */); 239dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber } 240dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 241dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber private long mNativeContext; 242dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber} 243dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 244