1963db55d59a170f4b17ff907c96615a19ef6fe17John Wang/* 2b208a24cf521401912cfce16fce550a995cf1250Wink Saville * Copyright (C) 2012 The Android Open Source Project 3963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * 4963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * you may not use this file except in compliance with the License. 6963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * You may obtain a copy of the License at 7963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * 8963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * http://www.apache.org/licenses/LICENSE-2.0 9963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * 10963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * Unless required by applicable law or agreed to in writing, software 11963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * distributed under the License is distributed on an "AS IS" BASIS, 12963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * See the License for the specific language governing permissions and 14963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * limitations under the License. 15963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 16963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 17963db55d59a170f4b17ff907c96615a19ef6fe17John Wangpackage android.telephony; 18963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 19963db55d59a170f4b17ff907c96615a19ef6fe17John Wangimport android.os.Parcel; 20963db55d59a170f4b17ff907c96615a19ef6fe17John Wangimport android.os.Parcelable; 21599a90c2a02645a5f2d189b9065b863397a4076eWink Savilleimport android.telephony.Rlog; 22963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 23963db55d59a170f4b17ff907c96615a19ef6fe17John Wang/** 24e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * CellIdentity to represent a unique GSM cell 25963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 26c6e4917adda19beb780386bcc26b652748b8ab13Wink Savillepublic final class CellIdentityGsm implements Parcelable { 27b208a24cf521401912cfce16fce550a995cf1250Wink Saville 28b208a24cf521401912cfce16fce550a995cf1250Wink Saville private static final String LOG_TAG = "CellIdentityGsm"; 29b208a24cf521401912cfce16fce550a995cf1250Wink Saville private static final boolean DBG = false; 30963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 31963db55d59a170f4b17ff907c96615a19ef6fe17John Wang // 3-digit Mobile Country Code, 0..999 32963db55d59a170f4b17ff907c96615a19ef6fe17John Wang private final int mMcc; 33963db55d59a170f4b17ff907c96615a19ef6fe17John Wang // 2 or 3-digit Mobile Network Code, 0..999 34963db55d59a170f4b17ff907c96615a19ef6fe17John Wang private final int mMnc; 35963db55d59a170f4b17ff907c96615a19ef6fe17John Wang // 16-bit Location Area Code, 0..65535 36963db55d59a170f4b17ff907c96615a19ef6fe17John Wang private final int mLac; 37963db55d59a170f4b17ff907c96615a19ef6fe17John Wang // 16-bit GSM Cell Identity described in TS 27.007, 0..65535 38963db55d59a170f4b17ff907c96615a19ef6fe17John Wang private final int mCid; 39963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 40963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 41b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @hide 42b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 43b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityGsm() { 44b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMcc = Integer.MAX_VALUE; 45b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc = Integer.MAX_VALUE; 46b208a24cf521401912cfce16fce550a995cf1250Wink Saville mLac = Integer.MAX_VALUE; 47b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCid = Integer.MAX_VALUE; 48b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 49b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 50963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * public constructor 51963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param mcc 3-digit Mobile Country Code, 0..999 52963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param mnc 2 or 3-digit Mobile Network Code, 0..999 53963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param lac 16-bit Location Area Code, 0..65535 54963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param cid 16-bit GSM Cell Identity or 28-bit UMTS Cell Identity 55b208a24cf521401912cfce16fce550a995cf1250Wink Saville * 56b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @hide 57963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 58e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public CellIdentityGsm (int mcc, int mnc, int lac, int cid) { 59963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mMcc = mcc; 60963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mMnc = mnc; 61963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mLac = lac; 62963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mCid = cid; 63963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 64963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 65b208a24cf521401912cfce16fce550a995cf1250Wink Saville private CellIdentityGsm(CellIdentityGsm cid) { 66963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mMcc = cid.mMcc; 67963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mMnc = cid.mMnc; 68963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mLac = cid.mLac; 69963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mCid = cid.mCid; 70963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 71963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 72b208a24cf521401912cfce16fce550a995cf1250Wink Saville CellIdentityGsm copy() { 73b208a24cf521401912cfce16fce550a995cf1250Wink Saville return new CellIdentityGsm(this); 74b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 75b208a24cf521401912cfce16fce550a995cf1250Wink Saville 76963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 77e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 3-digit Mobile Country Code, 0..999, Integer.MAX_VALUE if unknown 78963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 79963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getMcc() { 80963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mMcc; 81963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 82963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 83963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 84e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 2 or 3-digit Mobile Network Code, 0..999, Integer.MAX_VALUE if unknown 85963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 86963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getMnc() { 87963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mMnc; 88963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 89963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 90963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 91e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 16-bit Location Area Code, 0..65535, Integer.MAX_VALUE if unknown 92963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 93963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getLac() { 94963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mLac; 95963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 96963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 97963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 98963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @return CID 99963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * Either 16-bit GSM Cell Identity described 100e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * in TS 27.007, 0..65535, Integer.MAX_VALUE if unknown 101963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 102963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getCid() { 103963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mCid; 104963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 105963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 106963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 107e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return Integer.MAX_VALUE, undefined for GSM 108963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 109e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville @Deprecated 110963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getPsc() { 111e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville return Integer.MAX_VALUE; 112963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 113963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 114b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 115b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int hashCode() { 116b208a24cf521401912cfce16fce550a995cf1250Wink Saville int primeNum = 31; 117e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville return (mMcc * primeNum) + (mMnc * primeNum) + (mLac * primeNum) + (mCid * primeNum); 118b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 119b208a24cf521401912cfce16fce550a995cf1250Wink Saville 120b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 121b208a24cf521401912cfce16fce550a995cf1250Wink Saville public boolean equals(Object other) { 122b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (super.equals(other)) { 123b208a24cf521401912cfce16fce550a995cf1250Wink Saville try { 124b208a24cf521401912cfce16fce550a995cf1250Wink Saville CellIdentityGsm o = (CellIdentityGsm)other; 125b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mMcc == o.mMcc && 126b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc == o.mMnc && 127b208a24cf521401912cfce16fce550a995cf1250Wink Saville mLac == o.mLac && 128e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mCid == o.mCid; 129b208a24cf521401912cfce16fce550a995cf1250Wink Saville } catch (ClassCastException e) { 130b208a24cf521401912cfce16fce550a995cf1250Wink Saville return false; 131b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 132b208a24cf521401912cfce16fce550a995cf1250Wink Saville } else { 133b208a24cf521401912cfce16fce550a995cf1250Wink Saville return false; 134b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 135b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 136b208a24cf521401912cfce16fce550a995cf1250Wink Saville 137b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 138b208a24cf521401912cfce16fce550a995cf1250Wink Saville public String toString() { 139e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville StringBuilder sb = new StringBuilder("CellIdentityGsm:{"); 140b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mMcc=").append(mMcc); 141094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville sb.append(" mMnc=").append(mMnc); 142b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mLac=").append(mLac); 143b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mCid=").append(mCid); 144094beeccf5bf6e68d73f94a1aeaeda6690f4bf06Wink Saville sb.append("}"); 145b208a24cf521401912cfce16fce550a995cf1250Wink Saville 146b208a24cf521401912cfce16fce550a995cf1250Wink Saville return sb.toString(); 147b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 148b208a24cf521401912cfce16fce550a995cf1250Wink Saville 149b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 150963db55d59a170f4b17ff907c96615a19ef6fe17John Wang @Override 151963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int describeContents() { 152963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return 0; 153963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 154963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 155b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 156963db55d59a170f4b17ff907c96615a19ef6fe17John Wang @Override 157963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public void writeToParcel(Parcel dest, int flags) { 158b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (DBG) log("writeToParcel(Parcel, int): " + toString()); 159963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mMcc); 160963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mMnc); 161963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mLac); 162963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mCid); 163963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 164963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 165b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Construct from Parcel, type has already been processed */ 166b208a24cf521401912cfce16fce550a995cf1250Wink Saville private CellIdentityGsm(Parcel in) { 167b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMcc = in.readInt(); 168b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc = in.readInt(); 169b208a24cf521401912cfce16fce550a995cf1250Wink Saville mLac = in.readInt(); 170b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCid = in.readInt(); 171b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (DBG) log("CellIdentityGsm(Parcel): " + toString()); 172b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 173b208a24cf521401912cfce16fce550a995cf1250Wink Saville 174b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 175b208a24cf521401912cfce16fce550a995cf1250Wink Saville @SuppressWarnings("hiding") 176b208a24cf521401912cfce16fce550a995cf1250Wink Saville public static final Creator<CellIdentityGsm> CREATOR = 177b208a24cf521401912cfce16fce550a995cf1250Wink Saville new Creator<CellIdentityGsm>() { 178963db55d59a170f4b17ff907c96615a19ef6fe17John Wang @Override 179b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityGsm createFromParcel(Parcel in) { 180c6e4917adda19beb780386bcc26b652748b8ab13Wink Saville return new CellIdentityGsm(in); 181963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 182963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 183963db55d59a170f4b17ff907c96615a19ef6fe17John Wang @Override 184b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityGsm[] newArray(int size) { 185b208a24cf521401912cfce16fce550a995cf1250Wink Saville return new CellIdentityGsm[size]; 186963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 187963db55d59a170f4b17ff907c96615a19ef6fe17John Wang }; 188b208a24cf521401912cfce16fce550a995cf1250Wink Saville 189b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 190b208a24cf521401912cfce16fce550a995cf1250Wink Saville * log 191b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 192b208a24cf521401912cfce16fce550a995cf1250Wink Saville private static void log(String s) { 193599a90c2a02645a5f2d189b9065b863397a4076eWink Saville Rlog.w(LOG_TAG, s); 194b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 195963db55d59a170f4b17ff907c96615a19ef6fe17John Wang} 196