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 is to represent a unique CDMA cell 25963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 26c6e4917adda19beb780386bcc26b652748b8ab13Wink Savillepublic final class CellIdentityCdma implements Parcelable { 27b208a24cf521401912cfce16fce550a995cf1250Wink Saville 28b208a24cf521401912cfce16fce550a995cf1250Wink Saville private static final String LOG_TAG = "CellSignalStrengthCdma"; 29b208a24cf521401912cfce16fce550a995cf1250Wink Saville private static final boolean DBG = false; 30b208a24cf521401912cfce16fce550a995cf1250Wink Saville 31963db55d59a170f4b17ff907c96615a19ef6fe17John Wang // Network Id 0..65535 32963db55d59a170f4b17ff907c96615a19ef6fe17John Wang private final int mNetworkId; 33963db55d59a170f4b17ff907c96615a19ef6fe17John Wang // CDMA System Id 0..32767 34963db55d59a170f4b17ff907c96615a19ef6fe17John Wang private final int mSystemId; 35963db55d59a170f4b17ff907c96615a19ef6fe17John Wang // Base Station Id 0..65535 36963db55d59a170f4b17ff907c96615a19ef6fe17John Wang private final int mBasestationId; 37963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 38963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * Longitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0. 39963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * It is represented in units of 0.25 seconds and ranges from -2592000 40963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * to 2592000, both values inclusive (corresponding to a range of -180 41963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * to +180 degrees). 42963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 43963db55d59a170f4b17ff907c96615a19ef6fe17John Wang private final int mLongitude; 44963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 45963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * Latitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0. 46963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * It is represented in units of 0.25 seconds and ranges from -1296000 47963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * to 1296000, both values inclusive (corresponding to a range of -90 48963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * to +90 degrees). 49963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 50963db55d59a170f4b17ff907c96615a19ef6fe17John Wang private final int mLatitude; 51963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 52963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 53b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @hide 54b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 55b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityCdma() { 56b208a24cf521401912cfce16fce550a995cf1250Wink Saville mNetworkId = Integer.MAX_VALUE; 57b208a24cf521401912cfce16fce550a995cf1250Wink Saville mSystemId = Integer.MAX_VALUE; 58b208a24cf521401912cfce16fce550a995cf1250Wink Saville mBasestationId = Integer.MAX_VALUE; 59b208a24cf521401912cfce16fce550a995cf1250Wink Saville mLongitude = Integer.MAX_VALUE; 60b208a24cf521401912cfce16fce550a995cf1250Wink Saville mLatitude = Integer.MAX_VALUE; 61b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 62b208a24cf521401912cfce16fce550a995cf1250Wink Saville 63b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 64963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * public constructor 65963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param nid Network Id 0..65535 66963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param sid CDMA System Id 0..32767 67963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param bid Base Station Id 0..65535 68963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param lon Longitude is a decimal number ranges from -2592000 69963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * to 2592000 70963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @param lat Latitude is a decimal number ranges from -1296000 71963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * to 1296000 72b208a24cf521401912cfce16fce550a995cf1250Wink Saville * 73b208a24cf521401912cfce16fce550a995cf1250Wink Saville * @hide 74963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 75b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityCdma (int nid, int sid, int bid, int lon, int lat) { 76963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mNetworkId = nid; 77963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mSystemId = sid; 78963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mBasestationId = bid; 79963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mLongitude = lon; 80963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mLatitude = lat; 81963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 82963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 83b208a24cf521401912cfce16fce550a995cf1250Wink Saville private CellIdentityCdma(CellIdentityCdma cid) { 84963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mNetworkId = cid.mNetworkId; 85963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mSystemId = cid.mSystemId; 86963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mBasestationId = cid.mBasestationId; 87963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mLongitude = cid.mLongitude; 88963db55d59a170f4b17ff907c96615a19ef6fe17John Wang mLatitude = cid.mLatitude; 89963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 90963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 91b208a24cf521401912cfce16fce550a995cf1250Wink Saville CellIdentityCdma copy() { 92b208a24cf521401912cfce16fce550a995cf1250Wink Saville return new CellIdentityCdma(this); 93b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 94b208a24cf521401912cfce16fce550a995cf1250Wink Saville 95963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 96963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @return Network Id 0..65535 97963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 98963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getNetworkId() { 99963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mNetworkId; 100963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 101963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 102963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 103963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @return System Id 0..32767 104963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 105963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getSystemId() { 106963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mSystemId; 107963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 108963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 109963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 110963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @return Base Station Id 0..65535 111963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 112963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getBasestationId() { 113963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mBasestationId; 114963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 115963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 116963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 117963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @return Base station longitude, which is a decimal number as 118963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * specified in 3GPP2 C.S0005-A v6.0. It is represented in units 119963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * of 0.25 seconds and ranges from -2592000 to 2592000, both 120963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * values inclusive (corresponding to a range of -180 121963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * to +180 degrees). 122963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 123963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getLongitude() { 124963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mLongitude; 125963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 126963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 127963db55d59a170f4b17ff907c96615a19ef6fe17John Wang /** 128963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * @return Base station latitude, which is a decimal number as 129963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * specified in 3GPP2 C.S0005-A v6.0. It is represented in units 130963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * of 0.25 seconds and ranges from -1296000 to 1296000, both 131963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * values inclusive (corresponding to a range of -90 132963db55d59a170f4b17ff907c96615a19ef6fe17John Wang * to +90 degrees). 133963db55d59a170f4b17ff907c96615a19ef6fe17John Wang */ 134963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int getLatitude() { 135963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return mLatitude; 136963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 137963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 138b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 139b208a24cf521401912cfce16fce550a995cf1250Wink Saville public int hashCode() { 140b208a24cf521401912cfce16fce550a995cf1250Wink Saville int primeNum = 31; 141b208a24cf521401912cfce16fce550a995cf1250Wink Saville return (mNetworkId * primeNum) + (mSystemId * primeNum) + (mBasestationId * primeNum) + 142b208a24cf521401912cfce16fce550a995cf1250Wink Saville (mLatitude * primeNum) + (mLongitude * primeNum); 143b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 144b208a24cf521401912cfce16fce550a995cf1250Wink Saville 145b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 146b208a24cf521401912cfce16fce550a995cf1250Wink Saville public boolean equals(Object other) { 147b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (super.equals(other)) { 148b208a24cf521401912cfce16fce550a995cf1250Wink Saville try { 149b208a24cf521401912cfce16fce550a995cf1250Wink Saville CellIdentityCdma o = (CellIdentityCdma)other; 150b208a24cf521401912cfce16fce550a995cf1250Wink Saville return mNetworkId == o.mNetworkId && 151b208a24cf521401912cfce16fce550a995cf1250Wink Saville mSystemId == o.mSystemId && 152b208a24cf521401912cfce16fce550a995cf1250Wink Saville mBasestationId == o.mBasestationId && 153b208a24cf521401912cfce16fce550a995cf1250Wink Saville mLatitude == o.mLatitude && 154b208a24cf521401912cfce16fce550a995cf1250Wink Saville mLongitude == o.mLongitude; 155b208a24cf521401912cfce16fce550a995cf1250Wink Saville } catch (ClassCastException e) { 156b208a24cf521401912cfce16fce550a995cf1250Wink Saville return false; 157b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 158b208a24cf521401912cfce16fce550a995cf1250Wink Saville } else { 159b208a24cf521401912cfce16fce550a995cf1250Wink Saville return false; 160b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 161b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 162b208a24cf521401912cfce16fce550a995cf1250Wink Saville 163b208a24cf521401912cfce16fce550a995cf1250Wink Saville @Override 164b208a24cf521401912cfce16fce550a995cf1250Wink Saville public String toString() { 165b208a24cf521401912cfce16fce550a995cf1250Wink Saville StringBuilder sb = new StringBuilder("CdmaCellIdentitiy:"); 166b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(super.toString()); 167b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mNetworkId="); sb.append(mNetworkId); 168b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mSystemId="); sb.append(mSystemId); 169b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mBasestationId="); sb.append(mBasestationId); 170b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mLongitude="); sb.append(mLongitude); 171b208a24cf521401912cfce16fce550a995cf1250Wink Saville sb.append(" mLatitude="); sb.append(mLatitude); 172b208a24cf521401912cfce16fce550a995cf1250Wink Saville 173b208a24cf521401912cfce16fce550a995cf1250Wink Saville return sb.toString(); 174b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 175b208a24cf521401912cfce16fce550a995cf1250Wink Saville 176b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 177963db55d59a170f4b17ff907c96615a19ef6fe17John Wang @Override 178963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public int describeContents() { 179963db55d59a170f4b17ff907c96615a19ef6fe17John Wang return 0; 180963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 181963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 182b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 183963db55d59a170f4b17ff907c96615a19ef6fe17John Wang @Override 184963db55d59a170f4b17ff907c96615a19ef6fe17John Wang public void writeToParcel(Parcel dest, int flags) { 185b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (DBG) log("writeToParcel(Parcel, int): " + toString()); 186963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mNetworkId); 187963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mSystemId); 188963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mBasestationId); 189963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mLongitude); 190963db55d59a170f4b17ff907c96615a19ef6fe17John Wang dest.writeInt(mLatitude); 191963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 192963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 193b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Construct from Parcel, type has already been processed */ 194b208a24cf521401912cfce16fce550a995cf1250Wink Saville private CellIdentityCdma(Parcel in) { 195b208a24cf521401912cfce16fce550a995cf1250Wink Saville mNetworkId = in.readInt(); 196b208a24cf521401912cfce16fce550a995cf1250Wink Saville mSystemId = in.readInt(); 197b208a24cf521401912cfce16fce550a995cf1250Wink Saville mBasestationId = in.readInt(); 198b208a24cf521401912cfce16fce550a995cf1250Wink Saville mLongitude = in.readInt(); 199b208a24cf521401912cfce16fce550a995cf1250Wink Saville mLatitude = in.readInt(); 200b208a24cf521401912cfce16fce550a995cf1250Wink Saville if (DBG) log("CellIdentityCdma(Parcel): " + toString()); 201b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 202b208a24cf521401912cfce16fce550a995cf1250Wink Saville 203b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** Implement the Parcelable interface */ 204b208a24cf521401912cfce16fce550a995cf1250Wink Saville @SuppressWarnings("hiding") 205b208a24cf521401912cfce16fce550a995cf1250Wink Saville public static final Creator<CellIdentityCdma> CREATOR = 206b208a24cf521401912cfce16fce550a995cf1250Wink Saville new Creator<CellIdentityCdma>() { 207963db55d59a170f4b17ff907c96615a19ef6fe17John Wang @Override 208b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityCdma createFromParcel(Parcel in) { 209c6e4917adda19beb780386bcc26b652748b8ab13Wink Saville return new CellIdentityCdma(in); 210963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 211963db55d59a170f4b17ff907c96615a19ef6fe17John Wang 212963db55d59a170f4b17ff907c96615a19ef6fe17John Wang @Override 213b208a24cf521401912cfce16fce550a995cf1250Wink Saville public CellIdentityCdma[] newArray(int size) { 214b208a24cf521401912cfce16fce550a995cf1250Wink Saville return new CellIdentityCdma[size]; 215963db55d59a170f4b17ff907c96615a19ef6fe17John Wang } 216963db55d59a170f4b17ff907c96615a19ef6fe17John Wang }; 217b208a24cf521401912cfce16fce550a995cf1250Wink Saville 218b208a24cf521401912cfce16fce550a995cf1250Wink Saville /** 219b208a24cf521401912cfce16fce550a995cf1250Wink Saville * log 220b208a24cf521401912cfce16fce550a995cf1250Wink Saville */ 221b208a24cf521401912cfce16fce550a995cf1250Wink Saville private static void log(String s) { 222b208a24cf521401912cfce16fce550a995cf1250Wink Saville Log.w(LOG_TAG, s); 223b208a24cf521401912cfce16fce550a995cf1250Wink Saville } 224963db55d59a170f4b17ff907c96615a19ef6fe17John Wang} 225