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