1bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen/* 2bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * Copyright (C) 2011, The Android Open Source Project 3bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * 4bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * Licensed under the Apache License, Version 2.0 (the "License"); 5bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * you may not use this file except in compliance with the License. 6bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * You may obtain a copy of the License at 7bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * 8bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * http://www.apache.org/licenses/LICENSE-2.0 9bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * 10bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * Unless required by applicable law or agreed to in writing, software 11bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * distributed under the License is distributed on an "AS IS" BASIS, 12bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * See the License for the specific language governing permissions and 14bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * limitations under the License. 15bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen */ 16bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen 17bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenenpackage android.nfc; 18bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen 19bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenenimport android.os.Parcel; 20bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenenimport android.os.Parcelable; 21bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen 22faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenenimport java.io.IOException; 23faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen 24bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen/** 25bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * Class used to pipe transceive result from the NFC service. 26bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * 27bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen * @hide 28bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen */ 29bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenenpublic final class TransceiveResult implements Parcelable { 30faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen public static final int RESULT_SUCCESS = 0; 31faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen public static final int RESULT_FAILURE = 1; 32faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen public static final int RESULT_TAGLOST = 2; 33faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen public static final int RESULT_EXCEEDED_LENGTH = 3; 34bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen 35faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen final int mResult; 36faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen final byte[] mResponseData; 37bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen 38faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen public TransceiveResult(final int result, final byte[] data) { 39faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen mResult = result; 40faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen mResponseData = data; 41bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen } 42bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen 43faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen public byte[] getResponseOrThrow() throws IOException { 44faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen switch (mResult) { 45faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen case RESULT_SUCCESS: 46faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen return mResponseData; 47faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen case RESULT_TAGLOST: 48faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen throw new TagLostException("Tag was lost."); 49faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen case RESULT_EXCEEDED_LENGTH: 50faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen throw new IOException("Transceive length exceeds supported maximum"); 51faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen default: 52faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen throw new IOException("Transceive failed"); 53faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen } 54bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen } 55bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen 56bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen @Override 57bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen public int describeContents() { 58bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen return 0; 59bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen } 60bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen 61bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen @Override 62bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen public void writeToParcel(Parcel dest, int flags) { 63faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen dest.writeInt(mResult); 64faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen if (mResult == RESULT_SUCCESS) { 65bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen dest.writeInt(mResponseData.length); 66bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen dest.writeByteArray(mResponseData); 67bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen } 68bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen } 69bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen 70bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen public static final Parcelable.Creator<TransceiveResult> CREATOR = 71bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen new Parcelable.Creator<TransceiveResult>() { 72bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen @Override 73bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen public TransceiveResult createFromParcel(Parcel in) { 74faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen int result = in.readInt(); 75bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen byte[] responseData; 76bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen 77faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen if (result == RESULT_SUCCESS) { 78bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen int responseLength = in.readInt(); 79bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen responseData = new byte[responseLength]; 80bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen in.readByteArray(responseData); 81bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen } else { 82bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen responseData = null; 83bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen } 84faca12adc62d148505fadfd286e6a2752c197fa0Martijn Coenen return new TransceiveResult(result, responseData); 85bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen } 86bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen 87bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen @Override 88bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen public TransceiveResult[] newArray(int size) { 89bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen return new TransceiveResult[size]; 90bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen } 91bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen }; 92bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen 93bf34061bb4af12aa9efaab653ae413f2bce4a240Martijn Coenen} 94