/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.nfc; import android.nfc.NdefMessage; import android.os.Bundle; import java.io.IOException; public interface DeviceHost { public interface DeviceHostListener { public void onRemoteEndpointDiscovered(TagEndpoint tag); /** * Notifies transaction */ public void onCardEmulationDeselected(); /** * Notifies transaction */ public void onCardEmulationAidSelected(byte[] aid); /** * Notifies P2P Device detected, to activate LLCP link */ public void onLlcpLinkActivated(NfcDepEndpoint device); /** * Notifies P2P Device detected, to activate LLCP link */ public void onLlcpLinkDeactivated(NfcDepEndpoint device); public void onRemoteFieldActivated(); public void onRemoteFieldDeactivated(); public void onSeApduReceived(byte[] apdu); public void onSeEmvCardRemoval(); public void onSeMifareAccess(byte[] block); } public interface TagEndpoint { boolean connect(int technology); boolean reconnect(); boolean disconnect(); boolean presenceCheck(); boolean isPresent(); void startPresenceChecking(); int[] getTechList(); void removeTechnology(int tech); // TODO remove this one Bundle[] getTechExtras(); byte[] getUid(); int getHandle(); byte[] transceive(byte[] data, boolean raw, int[] returnCode); boolean checkNdef(int[] out); byte[] readNdef(); boolean writeNdef(byte[] data); NdefMessage[] findAndReadNdef(); boolean formatNdef(byte[] key); boolean isNdefFormatable(); boolean makeReadOnly(); int getConnectedTechnology(); } public interface NfceeEndpoint { // TODO flesh out multi-EE and use this } public interface NfcDepEndpoint { /** * Peer-to-Peer Target */ public static final short MODE_P2P_TARGET = 0x00; /** * Peer-to-Peer Initiator */ public static final short MODE_P2P_INITIATOR = 0x01; /** * Invalid target mode */ public static final short MODE_INVALID = 0xff; public byte[] receive(); public boolean send(byte[] data); public boolean connect(); public boolean disconnect(); public byte[] transceive(byte[] data); public int getHandle(); public int getMode(); public byte[] getGeneralBytes(); } public interface LlcpSocket { public void connectToSap(int sap) throws IOException; public void connectToService(String serviceName) throws IOException; public void close() throws IOException; public void send(byte[] data) throws IOException; public int receive(byte[] recvBuff) throws IOException; public int getRemoteMiu(); public int getRemoteRw(); public int getLocalSap(); public int getLocalMiu(); public int getLocalRw(); } public interface LlcpServerSocket { public LlcpSocket accept() throws IOException, LlcpException; public void close() throws IOException; } /** * Called at boot if NFC is disabled to give the device host an opportunity * to check the firmware version to see if it needs updating. Normally the firmware version * is checked during {@link #initialize()}, but the firmware may need to be updated after * an OTA update. * * <p>This is called from a thread * that may block for long periods of time during the update process. */ public void checkFirmware(); public boolean initialize(); public boolean deinitialize(); public void enableDiscovery(); public void disableDiscovery(); public int[] doGetSecureElementList(); public void doSelectSecureElement(); public void doDeselectSecureElement(); public int doGetLastError(); public LlcpServerSocket createLlcpServerSocket(int nSap, String sn, int miu, int rw, int linearBufferLength) throws LlcpException; public LlcpSocket createLlcpSocket(int sap, int miu, int rw, int linearBufferLength) throws LlcpException; public boolean doCheckLlcp(); public boolean doActivateLlcp(); public void resetTimeouts(); public boolean setTimeout(int technology, int timeout); public int getTimeout(int technology); public void doAbort(); boolean canMakeReadOnly(int technology); int getMaxTransceiveLength(int technology); String dump(); }