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