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; 21b208a24cf521401912cfce16fce550a995cf1250Wink Savilleimport android.util.Log; 22963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 23963db55d59a170f4b17ff907c96615a19ef6fe17John Wang/** 24963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * CellIdentity to represent a unique GSM or UMTS 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 // 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455 39963db55d59a170f4b17ff907c96615a19ef6fe17John Wang private final int mCid; 40963db55d59a170f4b17ff907c96615a19ef6fe17John Wang // 9-bit UMTS Primary Scrambling Code described in TS 25.331, 0..511 41963db55d59a170f4b17ff907c96615a19ef6fe17John Wang private final int mPsc; 42963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 43963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 44b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @hide 45b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 46b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityGsm() { 47b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMcc = Integer.MAX_VALUE; 48b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc = Integer.MAX_VALUE; 49b208a24cf521401912cfce16fce550a995cf1250Wink Saville mLac = Integer.MAX_VALUE; 50b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCid = Integer.MAX_VALUE; 51b208a24cf521401912cfce16fce550a995cf1250Wink Saville mPsc = Integer.MAX_VALUE; 52b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 53b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 54963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * public constructor 55963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param mcc 3-digit Mobile Country Code, 0..999 56963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param mnc 2 or 3-digit Mobile Network Code, 0..999 57963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param lac 16-bit Location Area Code, 0..65535 58963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param cid 16-bit GSM Cell Identity or 28-bit UMTS Cell Identity 59963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param psc 9-bit UMTS Primary Scrambling Code 60b208a24cf521401912cfce16fce550a995cf1250Wink Saville * 61b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @hide 62963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 63b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityGsm (int mcc, int mnc, int lac, int cid, int psc) { 64963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mMcc = mcc; 65963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mMnc = mnc; 66963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mLac = lac; 67963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mCid = cid; 68963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mPsc = psc; 69963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 70963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 71b208a24cf521401912cfce16fce550a995cf1250Wink Saville private CellIdentityGsm(CellIdentityGsm cid) { 72963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mMcc = cid.mMcc; 73963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mMnc = cid.mMnc; 74963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mLac = cid.mLac; 75963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mCid = cid.mCid; 76963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mPsc = cid.mPsc; 77963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 78963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 79b208a24cf521401912cfce16fce550a995cf1250Wink Saville CellIdentityGsm copy() { 80b208a24cf521401912cfce16fce550a995cf1250Wink Saville return new CellIdentityGsm(this); 81b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 82b208a24cf521401912cfce16fce550a995cf1250Wink Saville 83963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 84963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @return 3-digit Mobile Country Code, 0..999 85963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 86963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getMcc() { 87963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mMcc; 88963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 89963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 90963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 91963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @return 2 or 3-digit Mobile Network Code, 0..999 92963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 93963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getMnc() { 94963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mMnc; 95963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 96963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 97963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 98963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @return 16-bit Location Area Code, 0..65535 99963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 100963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getLac() { 101963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mLac; 102963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 103963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 104963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 105963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @return CID 106963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * Either 16-bit GSM Cell Identity described 107963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * in TS 27.007, 0..65535 108963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * or 28-bit UMTS Cell Identity described 109963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * in TS 25.331, 0..268435455 110963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 111963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getCid() { 112963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mCid; 113963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 114963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 115963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 116963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @return 9-bit UMTS Primary Scrambling Code described in 117963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * TS 25.331, 0..511 118963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 119963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getPsc() { 120963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mPsc; 121963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 122963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 123b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 124b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int hashCode() { 125b208a24cf521401912cfce16fce550a995cf1250Wink Saville int primeNum = 31; 126b208a24cf521401912cfce16fce550a995cf1250Wink Saville return (mMcc * primeNum) + (mMnc * primeNum) + (mLac * primeNum) + (mCid * primeNum) + 127b208a24cf521401912cfce16fce550a995cf1250Wink Saville (mPsc * primeNum); 128b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 129b208a24cf521401912cfce16fce550a995cf1250Wink Saville 130b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 131b208a24cf521401912cfce16fce550a995cf1250Wink Saville public boolean equals(Object other) { 132b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (super.equals(other)) { 133b208a24cf521401912cfce16fce550a995cf1250Wink Saville try { 134b208a24cf521401912cfce16fce550a995cf1250Wink Saville CellIdentityGsm o = (CellIdentityGsm)other; 135b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mMcc == o.mMcc && 136b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc == o.mMnc && 137b208a24cf521401912cfce16fce550a995cf1250Wink Saville mLac == o.mLac && 138b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCid == o.mCid && 139b208a24cf521401912cfce16fce550a995cf1250Wink Saville mPsc == o.mPsc; 140b208a24cf521401912cfce16fce550a995cf1250Wink Saville } catch (ClassCastException e) { 141b208a24cf521401912cfce16fce550a995cf1250Wink Saville return false; 142b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 143b208a24cf521401912cfce16fce550a995cf1250Wink Saville } else { 144b208a24cf521401912cfce16fce550a995cf1250Wink Saville return false; 145b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 146b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 147b208a24cf521401912cfce16fce550a995cf1250Wink Saville 148b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 149b208a24cf521401912cfce16fce550a995cf1250Wink Saville public String toString() { 150b208a24cf521401912cfce16fce550a995cf1250Wink Saville StringBuilder sb = new StringBuilder("GsmCellIdentitiy:"); 151b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(super.toString()); 152b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mMcc=").append(mMcc); 153b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mMnc=").append(mMcc); 154b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mLac=").append(mLac); 155b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mCid=").append(mCid); 156b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mPsc=").append(mPsc); 157b208a24cf521401912cfce16fce550a995cf1250Wink Saville 158b208a24cf521401912cfce16fce550a995cf1250Wink Saville return sb.toString(); 159b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 160b208a24cf521401912cfce16fce550a995cf1250Wink Saville 161b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 162963db55d59a170f4b17ff907c96615a19ef6fe17John Wang @Override 163963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int describeContents() { 164963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return 0; 165963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 166963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 167b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 168963db55d59a170f4b17ff907c96615a19ef6fe17John Wang @Override 169963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public void writeToParcel(Parcel dest, int flags) { 170b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (DBG) log("writeToParcel(Parcel, int): " + toString()); 171963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mMcc); 172963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mMnc); 173963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mLac); 174963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mCid); 175963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mPsc); 176963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 177963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 178b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Construct from Parcel, type has already been processed */ 179b208a24cf521401912cfce16fce550a995cf1250Wink Saville private CellIdentityGsm(Parcel in) { 180b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMcc = in.readInt(); 181b208a24cf521401912cfce16fce550a995cf1250Wink Saville mMnc = in.readInt(); 182b208a24cf521401912cfce16fce550a995cf1250Wink Saville mLac = in.readInt(); 183b208a24cf521401912cfce16fce550a995cf1250Wink Saville mCid = in.readInt(); 184b208a24cf521401912cfce16fce550a995cf1250Wink Saville mPsc = in.readInt(); 185b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (DBG) log("CellIdentityGsm(Parcel): " + toString()); 186b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 187b208a24cf521401912cfce16fce550a995cf1250Wink Saville 188b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 189b208a24cf521401912cfce16fce550a995cf1250Wink Saville @SuppressWarnings("hiding") 190b208a24cf521401912cfce16fce550a995cf1250Wink Saville public static final Creator<CellIdentityGsm> CREATOR = 191b208a24cf521401912cfce16fce550a995cf1250Wink Saville new Creator<CellIdentityGsm>() { 192963db55d59a170f4b17ff907c96615a19ef6fe17John Wang @Override 193b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityGsm createFromParcel(Parcel in) { 194c6e4917adda19beb780386bcc26b652748b8ab13Wink Saville return new CellIdentityGsm(in); 195963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 196963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 197963db55d59a170f4b17ff907c96615a19ef6fe17John Wang @Override 198b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityGsm[] newArray(int size) { 199b208a24cf521401912cfce16fce550a995cf1250Wink Saville return new CellIdentityGsm[size]; 200963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 201963db55d59a170f4b17ff907c96615a19ef6fe17John Wang }; 202b208a24cf521401912cfce16fce550a995cf1250Wink Saville 203b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 204b208a24cf521401912cfce16fce550a995cf1250Wink Saville * log 205b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 206b208a24cf521401912cfce16fce550a995cf1250Wink Saville private static void log(String s) { 207b208a24cf521401912cfce16fce550a995cf1250Wink Saville Log.w(LOG_TAG, s); 208b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 209963db55d59a170f4b17ff907c96615a19ef6fe17John Wang} 210