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