• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.telephony;
18 
19 import android.os.Parcel;
20 import android.os.Parcelable;
21 import android.telephony.Rlog;
22 
23 /**
24  * CellIdentity is to represent a unique LTE cell
25  */
26 public final class CellIdentityLte implements Parcelable {
27 
28     private static final String LOG_TAG = "CellIdentityLte";
29     private static final boolean DBG = false;
30 
31     // 3-digit Mobile Country Code, 0..999
32     private final int mMcc;
33     // 2 or 3-digit Mobile Network Code, 0..999
34     private final int mMnc;
35     // 28-bit cell identity
36     private final int mCi;
37     // physical cell id 0..503
38     private final int mPci;
39     // 16-bit tracking area code
40     private final int mTac;
41 
42     /**
43      * @hide
44      */
CellIdentityLte()45     public CellIdentityLte() {
46         mMcc = Integer.MAX_VALUE;
47         mMnc = Integer.MAX_VALUE;
48         mCi = Integer.MAX_VALUE;
49         mPci = Integer.MAX_VALUE;
50         mTac = Integer.MAX_VALUE;
51     }
52 
53     /**
54      *
55      * @param mcc 3-digit Mobile Country Code, 0..999
56      * @param mnc 2 or 3-digit Mobile Network Code, 0..999
57      * @param ci 28-bit Cell Identity
58      * @param pci Physical Cell Id 0..503
59      * @param tac 16-bit Tracking Area Code
60      *
61      * @hide
62      */
CellIdentityLte(int mcc, int mnc, int ci, int pci, int tac)63     public CellIdentityLte (int mcc, int mnc, int ci, int pci, int tac) {
64         mMcc = mcc;
65         mMnc = mnc;
66         mCi = ci;
67         mPci = pci;
68         mTac = tac;
69     }
70 
CellIdentityLte(CellIdentityLte cid)71     private CellIdentityLte(CellIdentityLte cid) {
72         mMcc = cid.mMcc;
73         mMnc = cid.mMnc;
74         mCi = cid.mCi;
75         mPci = cid.mPci;
76         mTac = cid.mTac;
77     }
78 
copy()79     CellIdentityLte copy() {
80         return new CellIdentityLte(this);
81     }
82 
83     /**
84      * @return 3-digit Mobile Country Code, 0..999, Integer.MAX_VALUE if unknown
85      */
getMcc()86     public int getMcc() {
87         return mMcc;
88     }
89 
90     /**
91      * @return 2 or 3-digit Mobile Network Code, 0..999, Integer.MAX_VALUE if unknown
92      */
getMnc()93     public int getMnc() {
94         return mMnc;
95     }
96 
97     /**
98      * @return 28-bit Cell Identity, Integer.MAX_VALUE if unknown
99      */
getCi()100     public int getCi() {
101         return mCi;
102     }
103 
104     /**
105      * @return Physical Cell Id 0..503, Integer.MAX_VALUE if unknown
106      */
getPci()107     public int getPci() {
108         return mPci;
109     }
110 
111     /**
112      * @return 16-bit Tracking Area Code, Integer.MAX_VALUE if unknown
113      */
getTac()114     public int getTac() {
115         return mTac;
116     }
117 
118     @Override
hashCode()119     public int hashCode() {
120         int primeNum = 31;
121         return (mMcc * primeNum) + (mMnc * primeNum) + (mCi * primeNum) + (mPci * primeNum) +
122                 (mTac * primeNum);
123     }
124 
125     @Override
equals(Object other)126     public boolean equals(Object other) {
127         if (super.equals(other)) {
128             try {
129                 CellIdentityLte o = (CellIdentityLte)other;
130                 return mMcc == o.mMcc &&
131                         mMnc == o.mMnc &&
132                         mCi == o.mCi &&
133                         mPci == o.mCi &&
134                         mTac == o.mTac;
135             } catch (ClassCastException e) {
136                 return false;
137             }
138         } else {
139             return false;
140         }
141     }
142 
143     @Override
toString()144     public String toString() {
145         StringBuilder sb = new StringBuilder("CellIdentityLte:{");
146         sb.append(" mMcc="); sb.append(mMcc);
147         sb.append(" mMnc="); sb.append(mMnc);
148         sb.append(" mCi="); sb.append(mCi);
149         sb.append(" mPci="); sb.append(mPci);
150         sb.append(" mTac="); sb.append(mTac);
151         sb.append("}");
152 
153         return sb.toString();
154     }
155 
156     /** Implement the Parcelable interface */
157     @Override
describeContents()158     public int describeContents() {
159         return 0;
160     }
161 
162     /** Implement the Parcelable interface */
163     @Override
writeToParcel(Parcel dest, int flags)164     public void writeToParcel(Parcel dest, int flags) {
165         if (DBG) log("writeToParcel(Parcel, int): " + toString());
166         dest.writeInt(mMcc);
167         dest.writeInt(mMnc);
168         dest.writeInt(mCi);
169         dest.writeInt(mPci);
170         dest.writeInt(mTac);
171     }
172 
173     /** Construct from Parcel, type has already been processed */
CellIdentityLte(Parcel in)174     private CellIdentityLte(Parcel in) {
175         mMcc = in.readInt();
176         mMnc = in.readInt();
177         mCi = in.readInt();
178         mPci = in.readInt();
179         mTac = in.readInt();
180         if (DBG) log("CellIdentityLte(Parcel): " + toString());
181     }
182 
183     /** Implement the Parcelable interface */
184     @SuppressWarnings("hiding")
185     public static final Creator<CellIdentityLte> CREATOR =
186             new Creator<CellIdentityLte>() {
187         @Override
188         public CellIdentityLte createFromParcel(Parcel in) {
189             return new CellIdentityLte(in);
190         }
191 
192         @Override
193         public CellIdentityLte[] newArray(int size) {
194             return new CellIdentityLte[size];
195         }
196     };
197 
198     /**
199      * log
200      */
log(String s)201     private static void log(String s) {
202         Rlog.w(LOG_TAG, s);
203     }
204 }
205