10799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales/* 20799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * Copyright (C) 2014 The Android Open Source Project 30799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * 40799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * Licensed under the Apache License, Version 2.0 (the "License"); 50799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * you may not use this file except in compliance with the License. 60799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * You may obtain a copy of the License at 70799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * 80799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * http://www.apache.org/licenses/LICENSE-2.0 90799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * 100799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * Unless required by applicable law or agreed to in writing, software 110799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * distributed under the License is distributed on an "AS IS" BASIS, 120799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * See the License for the specific language governing permissions and 140799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * limitations under the License. 150799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales */ 160799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 170799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralespackage com.android.nfc; 180799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 190799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales/** 200799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * Parameters for enabling NFC tag discovery and polling, 210799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales * and host card emulation. 220799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales */ 230799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Moralespublic final class NfcDiscoveryParameters { 240799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 250799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public static class Builder { 260799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 270799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales private NfcDiscoveryParameters mParameters; 280799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 290799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales private Builder() { 300799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales mParameters = new NfcDiscoveryParameters(); 310799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 320799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 330799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public NfcDiscoveryParameters.Builder setTechMask(int techMask) { 340799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales mParameters.mTechMask = techMask; 350799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return this; 360799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 370799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 380799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public NfcDiscoveryParameters.Builder setEnableLowPowerDiscovery(boolean enable) { 390799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales mParameters.mEnableLowPowerDiscovery = enable; 400799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return this; 410799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 420799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 430799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public NfcDiscoveryParameters.Builder setEnableReaderMode(boolean enable) { 440799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales mParameters.mEnableReaderMode = enable; 450799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 460799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (enable) { 470799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales mParameters.mEnableLowPowerDiscovery = false; 480799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 490799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 500799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return this; 510799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 520799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 530799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public NfcDiscoveryParameters.Builder setEnableHostRouting(boolean enable) { 540799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales mParameters.mEnableHostRouting = enable; 550799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return this; 560799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 570799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 5831b0f4653686119d74876cae5d637c5baf52b935Andres Morales public NfcDiscoveryParameters.Builder setEnableP2p(boolean enable) { 5931b0f4653686119d74876cae5d637c5baf52b935Andres Morales mParameters.mEnableP2p = enable; 6031b0f4653686119d74876cae5d637c5baf52b935Andres Morales return this; 6131b0f4653686119d74876cae5d637c5baf52b935Andres Morales } 6231b0f4653686119d74876cae5d637c5baf52b935Andres Morales 630799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public NfcDiscoveryParameters build() { 6431b0f4653686119d74876cae5d637c5baf52b935Andres Morales if (mParameters.mEnableReaderMode && 6531b0f4653686119d74876cae5d637c5baf52b935Andres Morales (mParameters.mEnableLowPowerDiscovery || mParameters.mEnableP2p)) { 6631b0f4653686119d74876cae5d637c5baf52b935Andres Morales throw new IllegalStateException("Can't enable LPTD/P2P and reader mode " + 6731b0f4653686119d74876cae5d637c5baf52b935Andres Morales "simultaneously"); 680799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 690799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return mParameters; 700799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 710799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 720799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 730799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales static final int NFC_POLL_DEFAULT = -1; 740799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 7506c7bbee7c48293406e19e79d28616908c56a45eAndres Morales // NOTE: when adding a new field, don't forget to update equals() and toString() below 760799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales private int mTechMask = 0; 770799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales private boolean mEnableLowPowerDiscovery = true; 780799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales private boolean mEnableReaderMode = false; 790799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales private boolean mEnableHostRouting = false; 8031b0f4653686119d74876cae5d637c5baf52b935Andres Morales private boolean mEnableP2p = false; 810799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 820799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public NfcDiscoveryParameters() {} 830799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 840799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public int getTechMask() { 850799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return mTechMask; 860799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 870799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 880799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public boolean shouldEnableLowPowerDiscovery() { 890799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return mEnableLowPowerDiscovery; 900799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 910799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 920799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public boolean shouldEnableReaderMode() { 930799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return mEnableReaderMode; 940799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 950799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 960799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public boolean shouldEnableHostRouting() { 970799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return mEnableHostRouting; 980799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 990799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 1000799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public boolean shouldEnableDiscovery() { 1010799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return mTechMask != 0 || mEnableHostRouting; 1020799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 1030799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 10431b0f4653686119d74876cae5d637c5baf52b935Andres Morales public boolean shouldEnableP2p() { 10531b0f4653686119d74876cae5d637c5baf52b935Andres Morales return mEnableP2p; 10631b0f4653686119d74876cae5d637c5baf52b935Andres Morales } 10731b0f4653686119d74876cae5d637c5baf52b935Andres Morales 1080799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales @Override 1090799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public boolean equals(Object obj) { 1100799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (obj == this) { 1110799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return true; 1120799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 1130799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 1140799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if ((obj == null) || (obj.getClass() != this.getClass())) { 1150799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return false; 1160799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 1170799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales NfcDiscoveryParameters params = (NfcDiscoveryParameters) obj; 1180799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return mTechMask == params.mTechMask && 1190799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales (mEnableLowPowerDiscovery == params.mEnableLowPowerDiscovery) && 1200799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales (mEnableReaderMode == params.mEnableReaderMode) && 12106c7bbee7c48293406e19e79d28616908c56a45eAndres Morales (mEnableHostRouting == params.mEnableHostRouting) 12206c7bbee7c48293406e19e79d28616908c56a45eAndres Morales && (mEnableP2p == params.mEnableP2p); 1230799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 1240799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 1250799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales @Override 1260799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public String toString() { 1270799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales StringBuilder sb = new StringBuilder(); 1280799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales if (mTechMask == NFC_POLL_DEFAULT) { 1290799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sb.append("mTechMask: default\n"); 1300799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } else { 1310799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sb.append("mTechMask: " + Integer.toString(mTechMask) + "\n"); 1320799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 1330799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sb.append("mEnableLPD: " + Boolean.toString(mEnableLowPowerDiscovery) + "\n"); 1340799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales sb.append("mEnableReader: " + Boolean.toString(mEnableReaderMode) + "\n"); 13506c7bbee7c48293406e19e79d28616908c56a45eAndres Morales sb.append("mEnableHostRouting: " + Boolean.toString(mEnableHostRouting) + "\n"); 13606c7bbee7c48293406e19e79d28616908c56a45eAndres Morales sb.append("mEnableP2p: " + Boolean.toString(mEnableP2p)); 1370799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return sb.toString(); 1380799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 1390799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 1400799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public static NfcDiscoveryParameters.Builder newBuilder() { 1410799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return new Builder(); 1420799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 1430799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales 1440799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales public static NfcDiscoveryParameters getDefaultInstance() { 1450799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales return new NfcDiscoveryParameters(); 1460799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales } 147ffeeef8e8d6d5f7c15f9f041d691cd9b64ddc58bMartijn Coenen 148ffeeef8e8d6d5f7c15f9f041d691cd9b64ddc58bMartijn Coenen public static NfcDiscoveryParameters getNfcOffParameters() { 149ffeeef8e8d6d5f7c15f9f041d691cd9b64ddc58bMartijn Coenen return new NfcDiscoveryParameters(); 150ffeeef8e8d6d5f7c15f9f041d691cd9b64ddc58bMartijn Coenen } 1510799bcbe2469aa6a88c6cbdf0cdee5b50e1994f0Andres Morales} 152