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 23b208a24cf521401912cfce16fce550a995cf1250Wink Saville/** 24b208a24cf521401912cfce16fce550a995cf1250Wink Saville * CellIdentity is to represent a unique LTE cell 25b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 26c6e4917adda19beb780386bcc26b652748b8ab13Wink Savillepublic final class CellIdentityLte implements Parcelable { 27b208a24cf521401912cfce16fce550a995cf1250Wink Saville 28b208a24cf521401912cfce16fce550a995cf1250Wink Saville private static final String LOG_TAG = "CellIdentityLte"; 29b208a24cf521401912cfce16fce550a995cf1250Wink Saville private static final boolean DBG = false; 30b208a24cf521401912cfce16fce550a995cf1250Wink Saville 31b208a24cf521401912cfce16fce550a995cf1250Wink Saville // 3-digit Mobile Country Code, 0..999 32b208a24cf521401912cfce16fce550a995cf1250Wink Saville private final int mMcc; 33b208a24cf521401912cfce16fce550a995cf1250Wink Saville // 2 or 3-digit Mobile Network Code, 0..999 34b208a24cf521401912cfce16fce550a995cf1250Wink Saville private final int mMnc; 35b208a24cf521401912cfce16fce550a995cf1250Wink Saville // 28-bit cell identity 36b208a24cf521401912cfce16fce550a995cf1250Wink Saville private final int mCi; 37b208a24cf521401912cfce16fce550a995cf1250Wink Saville // physical cell id 0..503 38b208a24cf521401912cfce16fce550a995cf1250Wink Saville private final int mPci; 39b208a24cf521401912cfce16fce550a995cf1250Wink Saville // 16-bit tracking area code 40b208a24cf521401912cfce16fce550a995cf1250Wink Saville private final int mTac; 41b208a24cf521401912cfce16fce550a995cf1250Wink Saville 42b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 43b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @hide 44b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 45b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityLte() { 46b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMcc = Integer.MAX_VALUE; 47b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc = Integer.MAX_VALUE; 48b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCi = Integer.MAX_VALUE; 49b208a24cf521401912cfce16fce550a995cf1250Wink Saville mPci = Integer.MAX_VALUE; 50b208a24cf521401912cfce16fce550a995cf1250Wink Saville mTac = Integer.MAX_VALUE; 51b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 52b208a24cf521401912cfce16fce550a995cf1250Wink Saville 53b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 54b208a24cf521401912cfce16fce550a995cf1250Wink Saville * 55b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @param mcc 3-digit Mobile Country Code, 0..999 56b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @param mnc 2 or 3-digit Mobile Network Code, 0..999 57b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @param ci 28-bit Cell Identity 58b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @param pci Physical Cell Id 0..503 59b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @param tac 16-bit Tracking Area Code 60b208a24cf521401912cfce16fce550a995cf1250Wink Saville * 61b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @hide 62b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 63b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityLte (int mcc, int mnc, int ci, int pci, int tac) { 64b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMcc = mcc; 65b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc = mnc; 66b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCi = ci; 67b208a24cf521401912cfce16fce550a995cf1250Wink Saville mPci = pci; 68b208a24cf521401912cfce16fce550a995cf1250Wink Saville mTac = tac; 69b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 70b208a24cf521401912cfce16fce550a995cf1250Wink Saville 71b208a24cf521401912cfce16fce550a995cf1250Wink Saville private CellIdentityLte(CellIdentityLte cid) { 72b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMcc = cid.mMcc; 73b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc = cid.mMnc; 74b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCi = cid.mCi; 75b208a24cf521401912cfce16fce550a995cf1250Wink Saville mPci = cid.mPci; 76b208a24cf521401912cfce16fce550a995cf1250Wink Saville mTac = cid.mTac; 77b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 78b208a24cf521401912cfce16fce550a995cf1250Wink Saville 79b208a24cf521401912cfce16fce550a995cf1250Wink Saville CellIdentityLte copy() { 80b208a24cf521401912cfce16fce550a995cf1250Wink Saville return new CellIdentityLte(this); 81b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 82b208a24cf521401912cfce16fce550a995cf1250Wink Saville 83b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 84e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 3-digit Mobile Country Code, 0..999, Integer.MAX_VALUE if unknown 85b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 86b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getMcc() { 87b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mMcc; 88b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 89b208a24cf521401912cfce16fce550a995cf1250Wink Saville 90b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 91e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 2 or 3-digit Mobile Network Code, 0..999, Integer.MAX_VALUE if unknown 92b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 93b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getMnc() { 94b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mMnc; 95b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 96b208a24cf521401912cfce16fce550a995cf1250Wink Saville 97b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 98e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 28-bit Cell Identity, Integer.MAX_VALUE if unknown 99b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 100b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getCi() { 101b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mCi; 102b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 103b208a24cf521401912cfce16fce550a995cf1250Wink Saville 104b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 105e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return Physical Cell Id 0..503, Integer.MAX_VALUE if unknown 106b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 107b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getPci() { 108b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mPci; 109b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 110b208a24cf521401912cfce16fce550a995cf1250Wink Saville 111b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 112e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 16-bit Tracking Area Code, Integer.MAX_VALUE if unknown 113b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 114b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int getTac() { 115b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mTac; 116b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 117b208a24cf521401912cfce16fce550a995cf1250Wink Saville 118b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 119b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int hashCode() { 120b208a24cf521401912cfce16fce550a995cf1250Wink Saville int primeNum = 31; 121b208a24cf521401912cfce16fce550a995cf1250Wink Saville return (mMcc * primeNum) + (mMnc * primeNum) + (mCi * primeNum) + (mPci * primeNum) + 122b208a24cf521401912cfce16fce550a995cf1250Wink Saville (mTac * primeNum); 123b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 124b208a24cf521401912cfce16fce550a995cf1250Wink Saville 125b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 126b208a24cf521401912cfce16fce550a995cf1250Wink Saville public boolean equals(Object other) { 127b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (super.equals(other)) { 128b208a24cf521401912cfce16fce550a995cf1250Wink Saville try { 129b208a24cf521401912cfce16fce550a995cf1250Wink Saville CellIdentityLte o = (CellIdentityLte)other; 130b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mMcc == o.mMcc && 131b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc == o.mMnc && 132b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCi == o.mCi && 133125cf62d596f544db4cb7b314f94c2757f5afaa7Wink Saville mPci == o.mPci && 134b208a24cf521401912cfce16fce550a995cf1250Wink Saville mTac == o.mTac; 135b208a24cf521401912cfce16fce550a995cf1250Wink Saville } catch (ClassCastException e) { 136b208a24cf521401912cfce16fce550a995cf1250Wink Saville return false; 137b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 138b208a24cf521401912cfce16fce550a995cf1250Wink Saville } else { 139b208a24cf521401912cfce16fce550a995cf1250Wink Saville return false; 140b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 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