CellIdentityWcdma.java revision 7d1d2e39f382416ffa8db8771c83e4f9e2f53adc
1e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville/* 2e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * Copyright (C) 2013 The Android Open Source Project 3e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * 4e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * you may not use this file except in compliance with the License. 6e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * You may obtain a copy of the License at 7e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * 8e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 9e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * 10e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * Unless required by applicable law or agreed to in writing, software 11e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * See the License for the specific language governing permissions and 14e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * limitations under the License. 15e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */ 16e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 17e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savillepackage android.telephony; 18e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 19e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savilleimport android.os.Parcel; 20e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savilleimport android.os.Parcelable; 21e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savilleimport android.telephony.Rlog; 22e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 237d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammeeimport java.util.Objects; 247d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee 25e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville/** 26e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * CellIdentity to represent a unique UMTS cell 27e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */ 28e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Savillepublic final class CellIdentityWcdma implements Parcelable { 29e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 30e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville private static final String LOG_TAG = "CellIdentityWcdma"; 31e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville private static final boolean DBG = false; 32e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 33e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville // 3-digit Mobile Country Code, 0..999 34e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville private final int mMcc; 35e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville // 2 or 3-digit Mobile Network Code, 0..999 36e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville private final int mMnc; 37e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville // 16-bit Location Area Code, 0..65535 38e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville private final int mLac; 39e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville // 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455 40e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville private final int mCid; 41e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville // 9-bit UMTS Primary Scrambling Code described in TS 25.331, 0..511 42e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville private final int mPsc; 43e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 44e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville /** 45e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @hide 46e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */ 47e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public CellIdentityWcdma() { 48e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mMcc = Integer.MAX_VALUE; 49e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mMnc = Integer.MAX_VALUE; 50e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mLac = Integer.MAX_VALUE; 51e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mCid = Integer.MAX_VALUE; 52e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mPsc = Integer.MAX_VALUE; 53e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 54e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville /** 55e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * public constructor 56e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @param mcc 3-digit Mobile Country Code, 0..999 57e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @param mnc 2 or 3-digit Mobile Network Code, 0..999 58e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @param lac 16-bit Location Area Code, 0..65535 59e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @param cid 28-bit UMTS Cell Identity 60e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @param psc 9-bit UMTS Primary Scrambling Code 61e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * 62e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @hide 63e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */ 64e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public CellIdentityWcdma (int mcc, int mnc, int lac, int cid, int psc) { 65e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mMcc = mcc; 66e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mMnc = mnc; 67e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mLac = lac; 68e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mCid = cid; 69e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mPsc = psc; 70e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 71e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 72e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville private CellIdentityWcdma(CellIdentityWcdma cid) { 73e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mMcc = cid.mMcc; 74e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mMnc = cid.mMnc; 75e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mLac = cid.mLac; 76e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mCid = cid.mCid; 77e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mPsc = cid.mPsc; 78e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 79e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 80e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville CellIdentityWcdma copy() { 81e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville return new CellIdentityWcdma(this); 82e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 83e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 84e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville /** 85e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 3-digit Mobile Country Code, 0..999, Integer.MAX_VALUE if unknown 86e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */ 87e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public int getMcc() { 88e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville return mMcc; 89e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 90e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 91e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville /** 92e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 2 or 3-digit Mobile Network Code, 0..999, Integer.MAX_VALUE if unknown 93e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */ 94e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public int getMnc() { 95e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville return mMnc; 96e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 97e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 98e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville /** 99e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 16-bit Location Area Code, 0..65535, Integer.MAX_VALUE if unknown 100e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */ 101e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public int getLac() { 102e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville return mLac; 103e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 104e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 105e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville /** 106e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return CID 107e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455, Integer.MAX_VALUE if unknown 108e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */ 109e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public int getCid() { 110e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville return mCid; 111e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 112e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 113e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville /** 114e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * @return 9-bit UMTS Primary Scrambling Code described in TS 25.331, 0..511, Integer.MAX_VALUE 115e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * if unknown 116e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */ 117e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public int getPsc() { 118e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville return mPsc; 119e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 120e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 121e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville @Override 122e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public int hashCode() { 1237d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee return Objects.hash(mMcc, mMnc, mLac, mCid, mPsc); 124e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 125e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 126e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville @Override 127e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public boolean equals(Object other) { 1287d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee if (this == other) { 1297d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee return true; 1307d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee } 1317d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee 1327d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee if (!(other instanceof CellIdentityWcdma)) { 133e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville return false; 134e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 1357d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee 1367d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee CellIdentityWcdma o = (CellIdentityWcdma) other; 1377d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee return mMcc == o.mMcc && 1387d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee mMnc == o.mMnc && 1397d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee mLac == o.mLac && 1407d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee mCid == o.mCid && 1417d1d2e39f382416ffa8db8771c83e4f9e2f53adcBrian Williammee mPsc == o.mPsc; 142e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 143e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 144e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville @Override 145e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public String toString() { 146e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville StringBuilder sb = new StringBuilder("CellIdentityWcdma:{"); 147e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville sb.append(" mMcc=").append(mMcc); 148e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville sb.append(" mMnc=").append(mMnc); 149e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville sb.append(" mLac=").append(mLac); 150e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville sb.append(" mCid=").append(mCid); 151e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville sb.append(" mPsc=").append(mPsc); 152e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville sb.append("}"); 153e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 154e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville return sb.toString(); 155e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 156e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 157e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville /** Implement the Parcelable interface */ 158e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville @Override 159e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public int describeContents() { 160e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville return 0; 161e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 162e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 163e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville /** Implement the Parcelable interface */ 164e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville @Override 165e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public void writeToParcel(Parcel dest, int flags) { 166e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville if (DBG) log("writeToParcel(Parcel, int): " + toString()); 167e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville dest.writeInt(mMcc); 168e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville dest.writeInt(mMnc); 169e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville dest.writeInt(mLac); 170e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville dest.writeInt(mCid); 171e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville dest.writeInt(mPsc); 172e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 173e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 174e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville /** Construct from Parcel, type has already been processed */ 175e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville private CellIdentityWcdma(Parcel in) { 176e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mMcc = in.readInt(); 177e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mMnc = in.readInt(); 178e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mLac = in.readInt(); 179e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mCid = in.readInt(); 180e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville mPsc = in.readInt(); 181e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville if (DBG) log("CellIdentityWcdma(Parcel): " + toString()); 182e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 183e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 184e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville /** Implement the Parcelable interface */ 185e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville @SuppressWarnings("hiding") 186e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public static final Creator<CellIdentityWcdma> CREATOR = 187e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville new Creator<CellIdentityWcdma>() { 188e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville @Override 189e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public CellIdentityWcdma createFromParcel(Parcel in) { 190e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville return new CellIdentityWcdma(in); 191e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 192e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 193e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville @Override 194e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville public CellIdentityWcdma[] newArray(int size) { 195e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville return new CellIdentityWcdma[size]; 196e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 197e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville }; 198e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville 199e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville /** 200e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville * log 201e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville */ 202e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville private static void log(String s) { 203e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville Rlog.w(LOG_TAG, s); 204e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville } 205e3a9cbc052db7f00a96cc7b9580097d67538f360Wink Saville} 206