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; 43b208a24cf521401912cfce16fce550a995cf1250Wink Saville 44b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 45b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @hide 46b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 47b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityLte() { 48b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMcc = Integer.MAX_VALUE; 49b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc = Integer.MAX_VALUE; 50b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCi = Integer.MAX_VALUE; 51b208a24cf521401912cfce16fce550a995cf1250Wink Saville mPci = Integer.MAX_VALUE; 52b208a24cf521401912cfce16fce550a995cf1250Wink Saville mTac = Integer.MAX_VALUE; 53b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 54b208a24cf521401912cfce16fce550a995cf1250Wink Saville 55b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 56b208a24cf521401912cfce16fce550a995cf1250Wink Saville * 57b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @param mcc 3-digit Mobile Country Code, 0..999 58b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @param mnc 2 or 3-digit Mobile Network Code, 0..999 59b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @param ci 28-bit Cell Identity 60b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @param pci Physical Cell Id 0..503 61b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @param tac 16-bit Tracking Area Code 62b208a24cf521401912cfce16fce550a995cf1250Wink Saville * 63b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @hide 64b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 65b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityLte (int mcc, int mnc, int ci, int pci, int tac) { 66b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMcc = mcc; 67b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc = mnc; 68b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCi = ci; 69b208a24cf521401912cfce16fce550a995cf1250Wink Saville mPci = pci; 70b208a24cf521401912cfce16fce550a995cf1250Wink Saville mTac = tac; 71b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 72b208a24cf521401912cfce16fce550a995cf1250Wink Saville 73b208a24cf521401912cfce16fce550a995cf1250Wink Saville private CellIdentityLte(CellIdentityLte cid) { 74b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMcc = cid.mMcc; 75b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc = cid.mMnc; 76b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCi = cid.mCi; 77b208a24cf521401912cfce16fce550a995cf1250Wink Saville mPci = cid.mPci; 78b208a24cf521401912cfce16fce550a995cf1250Wink Saville mTac = cid.mTac; 79b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 80b208a24cf521401912cfce16fce550a995cf1250Wink Saville 81b208a24cf521401912cfce16fce550a995cf1250Wink Saville CellIdentityLte copy() { 82b208a24cf521401912cfce16fce550a995cf1250Wink Saville return new CellIdentityLte(this); 83b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 84b208a24cf521401912cfce16fce550a995cf1250Wink Saville 85b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 86e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 3-digit Mobile Country Code, 0..999, Integer.MAX_VALUE if unknown 87b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 88b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getMcc() { 89b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mMcc; 90b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 91b208a24cf521401912cfce16fce550a995cf1250Wink Saville 92b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 93e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 2 or 3-digit Mobile Network Code, 0..999, Integer.MAX_VALUE if unknown 94b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 95b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getMnc() { 96b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mMnc; 97b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 98b208a24cf521401912cfce16fce550a995cf1250Wink Saville 99b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 100e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 28-bit Cell Identity, Integer.MAX_VALUE if unknown 101b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 102b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getCi() { 103b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mCi; 104b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 105b208a24cf521401912cfce16fce550a995cf1250Wink Saville 106b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 107e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return Physical Cell Id 0..503, Integer.MAX_VALUE if unknown 108b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 109b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getPci() { 110b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mPci; 111b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 112b208a24cf521401912cfce16fce550a995cf1250Wink Saville 113b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 114e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 16-bit Tracking Area Code, Integer.MAX_VALUE if unknown 115b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 116b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getTac() { 117b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mTac; 118b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 119b208a24cf521401912cfce16fce550a995cf1250Wink Saville 120b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 121b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int hashCode() { 1227d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee return Objects.hash(mMcc, mMnc, mCi, mPci, mTac); 123b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 124b208a24cf521401912cfce16fce550a995cf1250Wink Saville 125b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 126b208a24cf521401912cfce16fce550a995cf1250Wink Saville public boolean equals(Object other) { 1277d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee if (this == other) { 1287d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee return true; 1297d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee } 1307d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee 1317d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee if (!(other instanceof CellIdentityLte)) { 132b208a24cf521401912cfce16fce550a995cf1250Wink Saville return false; 133b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 1347d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee 1357d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee CellIdentityLte o = (CellIdentityLte) other; 1367d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee return mMcc == o.mMcc && 1377d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee mMnc == o.mMnc && 1387d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee mCi == o.mCi && 1397d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee mPci == o.mPci && 1407d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee mTac == o.mTac; 141b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 142b208a24cf521401912cfce16fce550a995cf1250Wink Saville 143b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 144b208a24cf521401912cfce16fce550a995cf1250Wink Saville public String toString() { 145e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville StringBuilder sb = new StringBuilder("CellIdentityLte:{"); 146b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mMcc="); sb.append(mMcc); 147b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mMnc="); sb.append(mMnc); 148b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mCi="); sb.append(mCi); 149b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mPci="); sb.append(mPci); 150b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mTac="); sb.append(mTac); 151094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville sb.append("}"); 152b208a24cf521401912cfce16fce550a995cf1250Wink Saville 153b208a24cf521401912cfce16fce550a995cf1250Wink Saville return sb.toString(); 154b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 155b208a24cf521401912cfce16fce550a995cf1250Wink Saville 156b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 157b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 158b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int describeContents() { 159b208a24cf521401912cfce16fce550a995cf1250Wink Saville return 0; 160b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 161b208a24cf521401912cfce16fce550a995cf1250Wink Saville 162b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 163b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 164b208a24cf521401912cfce16fce550a995cf1250Wink Saville public void writeToParcel(Parcel dest, int flags) { 165b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (DBG) log("writeToParcel(Parcel, int): " + toString()); 166b208a24cf521401912cfce16fce550a995cf1250Wink Saville dest.writeInt(mMcc); 167b208a24cf521401912cfce16fce550a995cf1250Wink Saville dest.writeInt(mMnc); 168b208a24cf521401912cfce16fce550a995cf1250Wink Saville dest.writeInt(mCi); 169b208a24cf521401912cfce16fce550a995cf1250Wink Saville dest.writeInt(mPci); 170b208a24cf521401912cfce16fce550a995cf1250Wink Saville dest.writeInt(mTac); 171b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 172b208a24cf521401912cfce16fce550a995cf1250Wink Saville 173b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Construct from Parcel, type has already been processed */ 174b208a24cf521401912cfce16fce550a995cf1250Wink Saville private CellIdentityLte(Parcel in) { 175b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMcc = in.readInt(); 176b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc = in.readInt(); 177b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCi = in.readInt(); 178b208a24cf521401912cfce16fce550a995cf1250Wink Saville mPci = in.readInt(); 179b208a24cf521401912cfce16fce550a995cf1250Wink Saville mTac = in.readInt(); 180b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (DBG) log("CellIdentityLte(Parcel): " + toString()); 181b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 182b208a24cf521401912cfce16fce550a995cf1250Wink Saville 183b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 184b208a24cf521401912cfce16fce550a995cf1250Wink Saville @SuppressWarnings("hiding") 185b208a24cf521401912cfce16fce550a995cf1250Wink Saville public static final Creator<CellIdentityLte> CREATOR = 186b208a24cf521401912cfce16fce550a995cf1250Wink Saville new Creator<CellIdentityLte>() { 187b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 188b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityLte createFromParcel(Parcel in) { 189c6e4917adda19beb780386bcc26b652748b8ab13Wink Saville return new CellIdentityLte(in); 190b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 191b208a24cf521401912cfce16fce550a995cf1250Wink Saville 192b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 193b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityLte[] newArray(int size) { 194b208a24cf521401912cfce16fce550a995cf1250Wink Saville return new CellIdentityLte[size]; 195b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 196b208a24cf521401912cfce16fce550a995cf1250Wink Saville }; 197b208a24cf521401912cfce16fce550a995cf1250Wink Saville 198b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 199b208a24cf521401912cfce16fce550a995cf1250Wink Saville * log 200b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 201b208a24cf521401912cfce16fce550a995cf1250Wink Saville private static void log(String s) { 202599a90c2a02645a5f2d189b9065b863397a4076eWink Saville Rlog.w(LOG_TAG, s); 203b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 204b208a24cf521401912cfce16fce550a995cf1250Wink Saville} 205