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