1b208a24cf521401912cfce16fce550a995cf1250Wink Saville/*
2b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Copyright (C) 2012 The Android Open Source Project
3b208a24cf521401912cfce16fce550a995cf1250Wink Saville *
4b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5b208a24cf521401912cfce16fce550a995cf1250Wink Saville * you may not use this file except in compliance with the License.
6b208a24cf521401912cfce16fce550a995cf1250Wink Saville * You may obtain a copy of the License at
7b208a24cf521401912cfce16fce550a995cf1250Wink Saville *
8b208a24cf521401912cfce16fce550a995cf1250Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9b208a24cf521401912cfce16fce550a995cf1250Wink Saville *
10b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Unless required by applicable law or agreed to in writing, software
11b208a24cf521401912cfce16fce550a995cf1250Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12b208a24cf521401912cfce16fce550a995cf1250Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b208a24cf521401912cfce16fce550a995cf1250Wink Saville * See the License for the specific language governing permissions and
14b208a24cf521401912cfce16fce550a995cf1250Wink Saville * limitations under the License.
15b208a24cf521401912cfce16fce550a995cf1250Wink Saville */
16b208a24cf521401912cfce16fce550a995cf1250Wink Saville
17b208a24cf521401912cfce16fce550a995cf1250Wink Savillepackage android.telephony;
18b208a24cf521401912cfce16fce550a995cf1250Wink Saville
19b208a24cf521401912cfce16fce550a995cf1250Wink Savilleimport android.os.Parcel;
20b208a24cf521401912cfce16fce550a995cf1250Wink Savilleimport android.os.Parcelable;
21599a90c2a02645a5f2d189b9065b863397a4076eWink Savilleimport android.telephony.Rlog;
22b208a24cf521401912cfce16fce550a995cf1250Wink Saville
237d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammeeimport java.util.Objects;
247d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee
25b208a24cf521401912cfce16fce550a995cf1250Wink Saville/**
26b208a24cf521401912cfce16fce550a995cf1250Wink Saville * CellIdentity is to represent a unique LTE cell
27b208a24cf521401912cfce16fce550a995cf1250Wink Saville */
28c6e4917adda19beb780386bcc26b652748b8ab13Wink Savillepublic final class CellIdentityLte implements Parcelable {
29b208a24cf521401912cfce16fce550a995cf1250Wink Saville
30b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private static final String LOG_TAG = "CellIdentityLte";
31b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private static final boolean DBG = false;
32b208a24cf521401912cfce16fce550a995cf1250Wink Saville
33b208a24cf521401912cfce16fce550a995cf1250Wink Saville    // 3-digit Mobile Country Code, 0..999
34b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private final int mMcc;
35b208a24cf521401912cfce16fce550a995cf1250Wink Saville    // 2 or 3-digit Mobile Network Code, 0..999
36b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private final int mMnc;
37b208a24cf521401912cfce16fce550a995cf1250Wink Saville    // 28-bit cell identity
38b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private final int mCi;
39b208a24cf521401912cfce16fce550a995cf1250Wink Saville    // physical cell id 0..503
40b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private final int mPci;
41b208a24cf521401912cfce16fce550a995cf1250Wink Saville    // 16-bit tracking area code
42b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private final int mTac;
430c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe    // 18-bit Absolute RF Channel Number
440c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe    private final int mEarfcn;
45b208a24cf521401912cfce16fce550a995cf1250Wink Saville
46b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
47b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
48b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
49b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public CellIdentityLte() {
50b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mMcc = Integer.MAX_VALUE;
51b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mMnc = Integer.MAX_VALUE;
52b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCi = Integer.MAX_VALUE;
53b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mPci = Integer.MAX_VALUE;
54b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mTac = Integer.MAX_VALUE;
550c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        mEarfcn = Integer.MAX_VALUE;
56b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
57b208a24cf521401912cfce16fce550a995cf1250Wink Saville
58b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
59b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
60b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @param mcc 3-digit Mobile Country Code, 0..999
61b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @param mnc 2 or 3-digit Mobile Network Code, 0..999
62b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @param ci 28-bit Cell Identity
63b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @param pci Physical Cell Id 0..503
64b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @param tac 16-bit Tracking Area Code
65b208a24cf521401912cfce16fce550a995cf1250Wink Saville     *
66b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * @hide
67b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
68b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public CellIdentityLte (int mcc, int mnc, int ci, int pci, int tac) {
690c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        this(mcc, mnc, ci, pci, tac, Integer.MAX_VALUE);
700c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe    }
710c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe
720c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe    /**
730c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     *
740c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     * @param mcc 3-digit Mobile Country Code, 0..999
750c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     * @param mnc 2 or 3-digit Mobile Network Code, 0..999
760c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     * @param ci 28-bit Cell Identity
770c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     * @param pci Physical Cell Id 0..503
780c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     * @param tac 16-bit Tracking Area Code
790c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     * @param earfcn 18-bit LTE Absolute RF Channel Number
800c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     *
810c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     * @hide
820c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     */
830c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe    public CellIdentityLte (int mcc, int mnc, int ci, int pci, int tac, int earfcn) {
84b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mMcc = mcc;
85b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mMnc = mnc;
86b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCi = ci;
87b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mPci = pci;
88b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mTac = tac;
890c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        mEarfcn = earfcn;
90b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
91b208a24cf521401912cfce16fce550a995cf1250Wink Saville
92b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private CellIdentityLte(CellIdentityLte cid) {
93b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mMcc = cid.mMcc;
94b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mMnc = cid.mMnc;
95b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCi = cid.mCi;
96b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mPci = cid.mPci;
97b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mTac = cid.mTac;
980c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        mEarfcn = cid.mEarfcn;
99b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
100b208a24cf521401912cfce16fce550a995cf1250Wink Saville
101b208a24cf521401912cfce16fce550a995cf1250Wink Saville    CellIdentityLte copy() {
102b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return new CellIdentityLte(this);
103b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
104b208a24cf521401912cfce16fce550a995cf1250Wink Saville
105b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
106e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @return 3-digit Mobile Country Code, 0..999, Integer.MAX_VALUE if unknown
107b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
108b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getMcc() {
109b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return mMcc;
110b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
111b208a24cf521401912cfce16fce550a995cf1250Wink Saville
112b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
113e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @return 2 or 3-digit Mobile Network Code, 0..999, Integer.MAX_VALUE if unknown
114b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
115b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getMnc() {
116b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return mMnc;
117b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
118b208a24cf521401912cfce16fce550a995cf1250Wink Saville
119b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
120e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @return 28-bit Cell Identity, Integer.MAX_VALUE if unknown
121b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
122b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getCi() {
123b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return mCi;
124b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
125b208a24cf521401912cfce16fce550a995cf1250Wink Saville
126b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
127e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @return Physical Cell Id 0..503, Integer.MAX_VALUE if unknown
128b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
129b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getPci() {
130b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return mPci;
131b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
132b208a24cf521401912cfce16fce550a995cf1250Wink Saville
133b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
134e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville     * @return 16-bit Tracking Area Code, Integer.MAX_VALUE if unknown
135b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
136b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int getTac() {
137b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return mTac;
138b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
139b208a24cf521401912cfce16fce550a995cf1250Wink Saville
1400c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe    /**
1410c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     * @return 18-bit Absolute RF Channel Number, Integer.MAX_VALUE if unknown
1420c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe     */
1430c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe    public int getEarfcn() {
1440c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        return mEarfcn;
1450c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe    }
1460c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe
147b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
148b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int hashCode() {
1497d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee        return Objects.hash(mMcc, mMnc, mCi, mPci, mTac);
150b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
151b208a24cf521401912cfce16fce550a995cf1250Wink Saville
152b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
153b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public boolean equals(Object other) {
1547d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee        if (this == other) {
1557d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee            return true;
1567d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee        }
1577d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee
1587d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee        if (!(other instanceof CellIdentityLte)) {
159b208a24cf521401912cfce16fce550a995cf1250Wink Saville            return false;
160b208a24cf521401912cfce16fce550a995cf1250Wink Saville        }
1617d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee
1627d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee        CellIdentityLte o = (CellIdentityLte) other;
1637d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee        return mMcc == o.mMcc &&
1647d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee                mMnc == o.mMnc &&
1657d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee                mCi == o.mCi &&
1667d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee                mPci == o.mPci &&
1670c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe                mTac == o.mTac &&
1680c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe                mEarfcn == o.mEarfcn;
169b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
170b208a24cf521401912cfce16fce550a995cf1250Wink Saville
171b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
172b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public String toString() {
173e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville        StringBuilder sb = new StringBuilder("CellIdentityLte:{");
174b208a24cf521401912cfce16fce550a995cf1250Wink Saville        sb.append(" mMcc="); sb.append(mMcc);
175b208a24cf521401912cfce16fce550a995cf1250Wink Saville        sb.append(" mMnc="); sb.append(mMnc);
176b208a24cf521401912cfce16fce550a995cf1250Wink Saville        sb.append(" mCi="); sb.append(mCi);
177b208a24cf521401912cfce16fce550a995cf1250Wink Saville        sb.append(" mPci="); sb.append(mPci);
178b208a24cf521401912cfce16fce550a995cf1250Wink Saville        sb.append(" mTac="); sb.append(mTac);
1790c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        sb.append(" mEarfcn="); sb.append(mEarfcn);
180094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville        sb.append("}");
181b208a24cf521401912cfce16fce550a995cf1250Wink Saville
182b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return sb.toString();
183b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
184b208a24cf521401912cfce16fce550a995cf1250Wink Saville
185b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** Implement the Parcelable interface */
186b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
187b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public int describeContents() {
188b208a24cf521401912cfce16fce550a995cf1250Wink Saville        return 0;
189b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
190b208a24cf521401912cfce16fce550a995cf1250Wink Saville
191b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** Implement the Parcelable interface */
192b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @Override
193b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public void writeToParcel(Parcel dest, int flags) {
194b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("writeToParcel(Parcel, int): " + toString());
195b208a24cf521401912cfce16fce550a995cf1250Wink Saville        dest.writeInt(mMcc);
196b208a24cf521401912cfce16fce550a995cf1250Wink Saville        dest.writeInt(mMnc);
197b208a24cf521401912cfce16fce550a995cf1250Wink Saville        dest.writeInt(mCi);
198b208a24cf521401912cfce16fce550a995cf1250Wink Saville        dest.writeInt(mPci);
199b208a24cf521401912cfce16fce550a995cf1250Wink Saville        dest.writeInt(mTac);
2000c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        dest.writeInt(mEarfcn);
201b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
202b208a24cf521401912cfce16fce550a995cf1250Wink Saville
203b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** Construct from Parcel, type has already been processed */
204b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private CellIdentityLte(Parcel in) {
205b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mMcc = in.readInt();
206b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mMnc = in.readInt();
207b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mCi = in.readInt();
208b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mPci = in.readInt();
209b208a24cf521401912cfce16fce550a995cf1250Wink Saville        mTac = in.readInt();
2100c86efdbd93beba03f29bf4a771bd0917d3af46aSanket Padawe        mEarfcn = in.readInt();
211b208a24cf521401912cfce16fce550a995cf1250Wink Saville        if (DBG) log("CellIdentityLte(Parcel): " + toString());
212b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
213b208a24cf521401912cfce16fce550a995cf1250Wink Saville
214b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /** Implement the Parcelable interface */
215b208a24cf521401912cfce16fce550a995cf1250Wink Saville    @SuppressWarnings("hiding")
216b208a24cf521401912cfce16fce550a995cf1250Wink Saville    public static final Creator<CellIdentityLte> CREATOR =
217b208a24cf521401912cfce16fce550a995cf1250Wink Saville            new Creator<CellIdentityLte>() {
218b208a24cf521401912cfce16fce550a995cf1250Wink Saville        @Override
219b208a24cf521401912cfce16fce550a995cf1250Wink Saville        public CellIdentityLte createFromParcel(Parcel in) {
220c6e4917adda19beb780386bcc26b652748b8ab13Wink Saville            return new CellIdentityLte(in);
221b208a24cf521401912cfce16fce550a995cf1250Wink Saville        }
222b208a24cf521401912cfce16fce550a995cf1250Wink Saville
223b208a24cf521401912cfce16fce550a995cf1250Wink Saville        @Override
224b208a24cf521401912cfce16fce550a995cf1250Wink Saville        public CellIdentityLte[] newArray(int size) {
225b208a24cf521401912cfce16fce550a995cf1250Wink Saville            return new CellIdentityLte[size];
226b208a24cf521401912cfce16fce550a995cf1250Wink Saville        }
227b208a24cf521401912cfce16fce550a995cf1250Wink Saville    };
228b208a24cf521401912cfce16fce550a995cf1250Wink Saville
229b208a24cf521401912cfce16fce550a995cf1250Wink Saville    /**
230b208a24cf521401912cfce16fce550a995cf1250Wink Saville     * log
231b208a24cf521401912cfce16fce550a995cf1250Wink Saville     */
232b208a24cf521401912cfce16fce550a995cf1250Wink Saville    private static void log(String s) {
233599a90c2a02645a5f2d189b9065b863397a4076eWink Saville        Rlog.w(LOG_TAG, s);
234b208a24cf521401912cfce16fce550a995cf1250Wink Saville    }
235b208a24cf521401912cfce16fce550a995cf1250Wink Saville}
236