Home | History | Annotate | Download | only in telephony
      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 import java.util.Objects;
     24 
     25 /**
     26  * CellIdentity is to represent a unique LTE cell
     27  */
     28 public final class CellIdentityLte implements Parcelable {
     29 
     30     private static final String LOG_TAG = "CellIdentityLte";
     31     private static final boolean DBG = false;
     32 
     33     // 3-digit Mobile Country Code, 0..999
     34     private final int mMcc;
     35     // 2 or 3-digit Mobile Network Code, 0..999
     36     private final int mMnc;
     37     // 28-bit cell identity
     38     private final int mCi;
     39     // physical cell id 0..503
     40     private final int mPci;
     41     // 16-bit tracking area code
     42     private final int mTac;
     43     // 18-bit Absolute RF Channel Number
     44     private final int mEarfcn;
     45 
     46     /**
     47      * @hide
     48      */
     49     public CellIdentityLte() {
     50         mMcc = Integer.MAX_VALUE;
     51         mMnc = Integer.MAX_VALUE;
     52         mCi = Integer.MAX_VALUE;
     53         mPci = Integer.MAX_VALUE;
     54         mTac = Integer.MAX_VALUE;
     55         mEarfcn = Integer.MAX_VALUE;
     56     }
     57 
     58     /**
     59      *
     60      * @param mcc 3-digit Mobile Country Code, 0..999
     61      * @param mnc 2 or 3-digit Mobile Network Code, 0..999
     62      * @param ci 28-bit Cell Identity
     63      * @param pci Physical Cell Id 0..503
     64      * @param tac 16-bit Tracking Area Code
     65      *
     66      * @hide
     67      */
     68     public CellIdentityLte (int mcc, int mnc, int ci, int pci, int tac) {
     69         this(mcc, mnc, ci, pci, tac, Integer.MAX_VALUE);
     70     }
     71 
     72     /**
     73      *
     74      * @param mcc 3-digit Mobile Country Code, 0..999
     75      * @param mnc 2 or 3-digit Mobile Network Code, 0..999
     76      * @param ci 28-bit Cell Identity
     77      * @param pci Physical Cell Id 0..503
     78      * @param tac 16-bit Tracking Area Code
     79      * @param earfcn 18-bit LTE Absolute RF Channel Number
     80      *
     81      * @hide
     82      */
     83     public CellIdentityLte (int mcc, int mnc, int ci, int pci, int tac, int earfcn) {
     84         mMcc = mcc;
     85         mMnc = mnc;
     86         mCi = ci;
     87         mPci = pci;
     88         mTac = tac;
     89         mEarfcn = earfcn;
     90     }
     91 
     92     private CellIdentityLte(CellIdentityLte cid) {
     93         mMcc = cid.mMcc;
     94         mMnc = cid.mMnc;
     95         mCi = cid.mCi;
     96         mPci = cid.mPci;
     97         mTac = cid.mTac;
     98         mEarfcn = cid.mEarfcn;
     99     }
    100 
    101     CellIdentityLte copy() {
    102         return new CellIdentityLte(this);
    103     }
    104 
    105     /**
    106      * @return 3-digit Mobile Country Code, 0..999, Integer.MAX_VALUE if unknown
    107      */
    108     public int getMcc() {
    109         return mMcc;
    110     }
    111 
    112     /**
    113      * @return 2 or 3-digit Mobile Network Code, 0..999, Integer.MAX_VALUE if unknown
    114      */
    115     public int getMnc() {
    116         return mMnc;
    117     }
    118 
    119     /**
    120      * @return 28-bit Cell Identity, Integer.MAX_VALUE if unknown
    121      */
    122     public int getCi() {
    123         return mCi;
    124     }
    125 
    126     /**
    127      * @return Physical Cell Id 0..503, Integer.MAX_VALUE if unknown
    128      */
    129     public int getPci() {
    130         return mPci;
    131     }
    132 
    133     /**
    134      * @return 16-bit Tracking Area Code, Integer.MAX_VALUE if unknown
    135      */
    136     public int getTac() {
    137         return mTac;
    138     }
    139 
    140     /**
    141      * @return 18-bit Absolute RF Channel Number, Integer.MAX_VALUE if unknown
    142      */
    143     public int getEarfcn() {
    144         return mEarfcn;
    145     }
    146 
    147     @Override
    148     public int hashCode() {
    149         return Objects.hash(mMcc, mMnc, mCi, mPci, mTac);
    150     }
    151 
    152     @Override
    153     public boolean equals(Object other) {
    154         if (this == other) {
    155             return true;
    156         }
    157 
    158         if (!(other instanceof CellIdentityLte)) {
    159             return false;
    160         }
    161 
    162         CellIdentityLte o = (CellIdentityLte) other;
    163         return mMcc == o.mMcc &&
    164                 mMnc == o.mMnc &&
    165                 mCi == o.mCi &&
    166                 mPci == o.mPci &&
    167                 mTac == o.mTac &&
    168                 mEarfcn == o.mEarfcn;
    169     }
    170 
    171     @Override
    172     public String toString() {
    173         StringBuilder sb = new StringBuilder("CellIdentityLte:{");
    174         sb.append(" mMcc="); sb.append(mMcc);
    175         sb.append(" mMnc="); sb.append(mMnc);
    176         sb.append(" mCi="); sb.append(mCi);
    177         sb.append(" mPci="); sb.append(mPci);
    178         sb.append(" mTac="); sb.append(mTac);
    179         sb.append(" mEarfcn="); sb.append(mEarfcn);
    180         sb.append("}");
    181 
    182         return sb.toString();
    183     }
    184 
    185     /** Implement the Parcelable interface */
    186     @Override
    187     public int describeContents() {
    188         return 0;
    189     }
    190 
    191     /** Implement the Parcelable interface */
    192     @Override
    193     public void writeToParcel(Parcel dest, int flags) {
    194         if (DBG) log("writeToParcel(Parcel, int): " + toString());
    195         dest.writeInt(mMcc);
    196         dest.writeInt(mMnc);
    197         dest.writeInt(mCi);
    198         dest.writeInt(mPci);
    199         dest.writeInt(mTac);
    200         dest.writeInt(mEarfcn);
    201     }
    202 
    203     /** Construct from Parcel, type has already been processed */
    204     private CellIdentityLte(Parcel in) {
    205         mMcc = in.readInt();
    206         mMnc = in.readInt();
    207         mCi = in.readInt();
    208         mPci = in.readInt();
    209         mTac = in.readInt();
    210         mEarfcn = in.readInt();
    211         if (DBG) log("CellIdentityLte(Parcel): " + toString());
    212     }
    213 
    214     /** Implement the Parcelable interface */
    215     @SuppressWarnings("hiding")
    216     public static final Creator<CellIdentityLte> CREATOR =
    217             new Creator<CellIdentityLte>() {
    218         @Override
    219         public CellIdentityLte createFromParcel(Parcel in) {
    220             return new CellIdentityLte(in);
    221         }
    222 
    223         @Override
    224         public CellIdentityLte[] newArray(int size) {
    225             return new CellIdentityLte[size];
    226         }
    227     };
    228 
    229     /**
    230      * log
    231      */
    232     private static void log(String s) {
    233         Rlog.w(LOG_TAG, s);
    234     }
    235 }
    236