NfcB.java revision 4e21e1d21a877cce4db5ec8c5786604cc10f2d7e
16be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton/* 26be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * Copyright (C) 2010 The Android Open Source Project 36be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * 46be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * Licensed under the Apache License, Version 2.0 (the "License"); 56be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * you may not use this file except in compliance with the License. 66be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * You may obtain a copy of the License at 76be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * 86be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * http://www.apache.org/licenses/LICENSE-2.0 96be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * 106be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * Unless required by applicable law or agreed to in writing, software 116be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * distributed under the License is distributed on an "AS IS" BASIS, 126be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * See the License for the specific language governing permissions and 146be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * limitations under the License. 156be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton */ 166be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton 174e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamiltonpackage android.nfc.tech; 186be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton 196be655c768a82716612c00fdd156254d8dc00f42Jeff Hamiltonimport android.nfc.Tag; 206be655c768a82716612c00fdd156254d8dc00f42Jeff Hamiltonimport android.os.Bundle; 216be655c768a82716612c00fdd156254d8dc00f42Jeff Hamiltonimport android.os.RemoteException; 226be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton 23ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamiltonimport java.io.IOException; 24ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton 256be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton/** 266be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * A low-level connection to a {@link Tag} using the NFC-B technology, also known as 276be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * ISO1443-3B. 286be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * 294e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton * <p>You can acquire this kind of connection with {@link #get}. 306be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * Use this class to send and receive data with {@link #transceive transceive()}. 316be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * 326be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * <p>Applications must implement their own protocol stack on top of 336be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * {@link #transceive transceive()}. 346be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * 356be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * <p class="note"><strong>Note:</strong> 366be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * Use of this class requires the {@link android.Manifest.permission#NFC} 376be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * permission. 386be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton */ 396be655c768a82716612c00fdd156254d8dc00f42Jeff Hamiltonpublic final class NfcB extends BasicTagTechnology { 406be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton /** @hide */ 41a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen public static final String EXTRA_APPDATA = "appdata"; 42a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen /** @hide */ 43a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen public static final String EXTRA_PROTINFO = "protinfo"; 446be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton 45a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen private byte[] mAppData; 46a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen private byte[] mProtInfo; 476be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton 484e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton /** 494e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton * Returns an instance of this tech for the given tag. If the tag doesn't support 504e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton * this tech type null is returned. 514e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton * 524e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton * @param tag The tag to get the tech from 534e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton */ 544e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton public static NfcB get(Tag tag) { 554e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton if (!tag.hasTech(TagTechnology.NFC_B)) return null; 564e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton try { 574e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton return new NfcB(tag); 584e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton } catch (RemoteException e) { 594e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton return null; 604e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton } 614e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton } 624e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton 63ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton /** @hide */ 644e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton public NfcB(Tag tag) throws RemoteException { 654e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton super(tag, TagTechnology.NFC_B); 664e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton Bundle extras = tag.getTechExtras(TagTechnology.NFC_B); 67a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen mAppData = extras.getByteArray(EXTRA_APPDATA); 68a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen mProtInfo = extras.getByteArray(EXTRA_PROTINFO); 69a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen } 70a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen 71a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen /** 72a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen * Returns the Application Data bytes from the ATQB/SENSB_RES 73a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen * bytes discovered at tag discovery. 74a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen */ 75a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen public byte[] getApplicationData() { 76a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen return mAppData; 776be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton } 786be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton 796be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton /** 80a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen * Returns the Protocol Info bytes from the ATQB/SENSB_RES 81a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen * bytes discovered at tag discovery. 826be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton */ 83a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen public byte[] getProtocolInfo() { 84a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen return mProtInfo; 856be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton } 86a559aa4759309606cd201e7e39844c3363a72b24Martijn Coenen 87ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton /** 88ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton * Send data to a tag and receive the response. 89ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton * <p> 90ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton * This method will block until the response is received. It can be canceled 91ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton * with {@link #close}. 92ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton * <p>Requires {@link android.Manifest.permission#NFC} permission. 93ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton * 94ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton * @param data bytes to send 95ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton * @return bytes received in response 96ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton * @throws IOException if the target is lost or connection closed 97ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton */ 98ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton public byte[] transceive(byte[] data) throws IOException { 99ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton return transceive(data, true); 100ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton } 1016be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton} 102