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