• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (C) 2014 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 
22 import com.android.internal.telephony.RILConstants;
23 
24 /**
25  * Object to indicate the phone radio type and access technology.
26  *
27  * @hide
28  */
29 public class RadioAccessFamily implements Parcelable {
30 
31     // Radio Access Family
32     // 2G
33     public static final int RAF_UNKNOWN = (1 <<  ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN);
34     public static final int RAF_GSM = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_GSM);
35     public static final int RAF_GPRS = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_GPRS);
36     public static final int RAF_EDGE = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EDGE);
37     public static final int RAF_IS95A = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_IS95A);
38     public static final int RAF_IS95B = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_IS95B);
39     public static final int RAF_1xRTT = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT);
40     // 3G
41     public static final int RAF_EVDO_0 = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_0);
42     public static final int RAF_EVDO_A = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_A);
43     public static final int RAF_EVDO_B = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EVDO_B);
44     public static final int RAF_EHRPD = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_EHRPD);
45     public static final int RAF_HSUPA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSUPA);
46     public static final int RAF_HSDPA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSDPA);
47     public static final int RAF_HSPA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSPA);
48     public static final int RAF_HSPAP = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP);
49     public static final int RAF_UMTS = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_UMTS);
50     public static final int RAF_TD_SCDMA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_TD_SCDMA);
51     // 4G
52     public static final int RAF_LTE = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_LTE);
53     public static final int RAF_LTE_CA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_LTE_CA);
54 
55     // Grouping of RAFs
56     // 2G
57     private static final int GSM = RAF_GSM | RAF_GPRS | RAF_EDGE;
58     private static final int CDMA = RAF_IS95A | RAF_IS95B | RAF_1xRTT;
59     // 3G
60     private static final int EVDO = RAF_EVDO_0 | RAF_EVDO_A | RAF_EVDO_B | RAF_EHRPD;
61     private static final int HS = RAF_HSUPA | RAF_HSDPA | RAF_HSPA | RAF_HSPAP;
62     private static final int WCDMA = HS | RAF_UMTS;
63     // 4G
64     private static final int LTE = RAF_LTE | RAF_LTE_CA;
65 
66     /* Phone ID of phone */
67     private int mPhoneId;
68 
69     /* Radio Access Family */
70     private int mRadioAccessFamily;
71 
72     /**
73      * Constructor.
74      *
75      * @param phoneId the phone ID
76      * @param radioAccessFamily the phone radio access family defined
77      *        in RadioAccessFamily. It's a bit mask value to represent
78      *        the support type.
79      */
RadioAccessFamily(int phoneId, int radioAccessFamily)80     public RadioAccessFamily(int phoneId, int radioAccessFamily) {
81         mPhoneId = phoneId;
82         mRadioAccessFamily = radioAccessFamily;
83     }
84 
85     /**
86      * Get phone ID.
87      *
88      * @return phone ID
89      */
getPhoneId()90     public int getPhoneId() {
91         return mPhoneId;
92     }
93 
94     /**
95      * get radio access family.
96      *
97      * @return radio access family
98      */
getRadioAccessFamily()99     public int getRadioAccessFamily() {
100         return mRadioAccessFamily;
101     }
102 
103     @Override
toString()104     public String toString() {
105         String ret = "{ mPhoneId = " + mPhoneId
106                 + ", mRadioAccessFamily = " + mRadioAccessFamily
107                 + "}";
108         return ret;
109     }
110 
111     /**
112      * Implement the Parcelable interface.
113      *
114      * @return describe content
115      */
116     @Override
describeContents()117     public int describeContents() {
118         return 0;
119     }
120 
121     /**
122      * Implement the Parcelable interface.
123      *
124      * @param outParcel The Parcel in which the object should be written.
125      * @param flags Additional flags about how the object should be written.
126      */
127     @Override
writeToParcel(Parcel outParcel, int flags)128     public void writeToParcel(Parcel outParcel, int flags) {
129         outParcel.writeInt(mPhoneId);
130         outParcel.writeInt(mRadioAccessFamily);
131     }
132 
133     /**
134      * Implement the Parcelable interface.
135      */
136     public static final Creator<RadioAccessFamily> CREATOR =
137             new Creator<RadioAccessFamily>() {
138 
139         @Override
140         public RadioAccessFamily createFromParcel(Parcel in) {
141             int phoneId = in.readInt();
142             int radioAccessFamily = in.readInt();
143 
144             return new RadioAccessFamily(phoneId, radioAccessFamily);
145         }
146 
147         @Override
148         public RadioAccessFamily[] newArray(int size) {
149             return new RadioAccessFamily[size];
150         }
151     };
152 
getRafFromNetworkType(int type)153     public static int getRafFromNetworkType(int type) {
154         int raf;
155 
156         switch (type) {
157             case RILConstants.NETWORK_MODE_WCDMA_PREF:
158                 raf = GSM | WCDMA;
159                 break;
160             case RILConstants.NETWORK_MODE_GSM_ONLY:
161                 raf = GSM;
162                 break;
163             case RILConstants.NETWORK_MODE_WCDMA_ONLY:
164                 raf = WCDMA;
165                 break;
166             case RILConstants.NETWORK_MODE_GSM_UMTS:
167                 raf = GSM | WCDMA;
168                 break;
169             case RILConstants.NETWORK_MODE_CDMA:
170                 raf = CDMA | EVDO;
171                 break;
172             case RILConstants.NETWORK_MODE_LTE_CDMA_EVDO:
173                 raf = LTE | CDMA | EVDO;
174                 break;
175             case RILConstants.NETWORK_MODE_LTE_GSM_WCDMA:
176                 raf = LTE | GSM | WCDMA;
177                 break;
178             case RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
179                 raf = LTE | CDMA | EVDO | GSM | WCDMA;
180                 break;
181             case RILConstants.NETWORK_MODE_LTE_ONLY:
182                 raf = LTE;
183                 break;
184             case RILConstants.NETWORK_MODE_LTE_WCDMA:
185                 raf = LTE | WCDMA;
186                 break;
187             case RILConstants.NETWORK_MODE_CDMA_NO_EVDO:
188                 raf = CDMA;
189                 break;
190             case RILConstants.NETWORK_MODE_EVDO_NO_CDMA:
191                 raf = EVDO;
192                 break;
193             case RILConstants.NETWORK_MODE_GLOBAL:
194                 raf = GSM | WCDMA | CDMA | EVDO;
195                 break;
196             case RILConstants.NETWORK_MODE_TDSCDMA_ONLY:
197                 raf = RAF_TD_SCDMA;
198                 break;
199             case RILConstants.NETWORK_MODE_TDSCDMA_WCDMA:
200                 raf = RAF_TD_SCDMA | WCDMA;
201                 break;
202             case RILConstants.NETWORK_MODE_LTE_TDSCDMA:
203                 raf = LTE | RAF_TD_SCDMA;
204                 break;
205             case RILConstants.NETWORK_MODE_TDSCDMA_GSM:
206                 raf = RAF_TD_SCDMA | GSM;
207                 break;
208             case RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
209                 raf = LTE | RAF_TD_SCDMA | GSM;
210                 break;
211             case RILConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
212                 raf = RAF_TD_SCDMA | GSM | WCDMA;
213                 break;
214             case RILConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
215                 raf = LTE | RAF_TD_SCDMA | WCDMA;
216                 break;
217             case RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
218                 raf = LTE | RAF_TD_SCDMA | GSM | WCDMA;
219                 break;
220             case RILConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
221                 raf = RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA;
222                 break;
223             case RILConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
224                 raf = LTE | RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA;
225                 break;
226             default:
227                 raf = RAF_UNKNOWN;
228                 break;
229         }
230 
231         return raf;
232     }
233 
234     /**
235      * if the raf includes ANY bit set for a group
236      * adjust it to contain ALL the bits for that group
237      */
getAdjustedRaf(int raf)238     private static int getAdjustedRaf(int raf) {
239         raf = ((GSM & raf) > 0) ? (GSM | raf) : raf;
240         raf = ((WCDMA & raf) > 0) ? (WCDMA | raf) : raf;
241         raf = ((CDMA & raf) > 0) ? (CDMA | raf) : raf;
242         raf = ((EVDO & raf) > 0) ? (EVDO | raf) : raf;
243         raf = ((LTE & raf) > 0) ? (LTE | raf) : raf;
244 
245         return raf;
246     }
247 
248     /**
249      * Returns the highest capability of the RadioAccessFamily (4G > 3G > 2G).
250      * @param raf The RadioAccessFamily that we wish to filter
251      * @return The highest radio capability
252      */
getHighestRafCapability(int raf)253     public static int getHighestRafCapability(int raf) {
254         if ((LTE & raf) > 0) {
255             return TelephonyManager.NETWORK_CLASS_4_G;
256         }
257         if ((EVDO|HS|WCDMA & raf) > 0) {
258             return TelephonyManager.NETWORK_CLASS_3_G;
259         }
260         if((GSM|CDMA & raf) > 0) {
261             return TelephonyManager.NETWORK_CLASS_2_G;
262         }
263         return TelephonyManager.NETWORK_CLASS_UNKNOWN;
264     }
265 
getNetworkTypeFromRaf(int raf)266     public static int getNetworkTypeFromRaf(int raf) {
267         int type;
268 
269         raf = getAdjustedRaf(raf);
270 
271         switch (raf) {
272             case (GSM | WCDMA):
273                 type = RILConstants.NETWORK_MODE_WCDMA_PREF;
274                 break;
275             case GSM:
276                 type = RILConstants.NETWORK_MODE_GSM_ONLY;
277                 break;
278             case WCDMA:
279                 type = RILConstants.NETWORK_MODE_WCDMA_ONLY;
280                 break;
281             case (CDMA | EVDO):
282                 type = RILConstants.NETWORK_MODE_CDMA;
283                 break;
284             case (LTE | CDMA | EVDO):
285                 type = RILConstants.NETWORK_MODE_LTE_CDMA_EVDO;
286                 break;
287             case (LTE | GSM | WCDMA):
288                 type = RILConstants.NETWORK_MODE_LTE_GSM_WCDMA;
289                 break;
290             case (LTE | CDMA | EVDO | GSM | WCDMA):
291                 type = RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA;
292                 break;
293             case LTE:
294                 type = RILConstants.NETWORK_MODE_LTE_ONLY;
295                 break;
296             case (LTE | WCDMA):
297                 type = RILConstants.NETWORK_MODE_LTE_WCDMA;
298                 break;
299             case CDMA:
300                 type = RILConstants.NETWORK_MODE_CDMA_NO_EVDO;
301                 break;
302             case EVDO:
303                 type = RILConstants.NETWORK_MODE_EVDO_NO_CDMA;
304                 break;
305             case (GSM | WCDMA | CDMA | EVDO):
306                 type = RILConstants.NETWORK_MODE_GLOBAL;
307                 break;
308             case RAF_TD_SCDMA:
309                 type = RILConstants.NETWORK_MODE_TDSCDMA_ONLY;
310                 break;
311             case (RAF_TD_SCDMA | WCDMA):
312                 type = RILConstants.NETWORK_MODE_TDSCDMA_WCDMA;
313                 break;
314             case (LTE | RAF_TD_SCDMA):
315                 type = RILConstants.NETWORK_MODE_LTE_TDSCDMA;
316                 break;
317             case (RAF_TD_SCDMA | GSM):
318                 type = RILConstants.NETWORK_MODE_TDSCDMA_GSM;
319                 break;
320             case (LTE | RAF_TD_SCDMA | GSM):
321                 type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM;
322                 break;
323             case (RAF_TD_SCDMA | GSM | WCDMA):
324                 type = RILConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA;
325                 break;
326             case (LTE | RAF_TD_SCDMA | WCDMA):
327                 type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA;
328                 break;
329             case (LTE | RAF_TD_SCDMA | GSM | WCDMA):
330                 type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA;
331                 break;
332             case (RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA):
333                 type = RILConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
334                 break;
335             case (LTE | RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA):
336                 type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
337                 break;
338             default:
339                 type = RILConstants.PREFERRED_NETWORK_MODE ;
340                 break;
341         }
342 
343         return type;
344     }
345 
singleRafTypeFromString(String rafString)346     public static int singleRafTypeFromString(String rafString) {
347         switch (rafString) {
348             case "GPRS":    return RAF_GPRS;
349             case "EDGE":    return RAF_EDGE;
350             case "UMTS":    return RAF_UMTS;
351             case "IS95A":   return RAF_IS95A;
352             case "IS95B":   return RAF_IS95B;
353             case "1XRTT":   return RAF_1xRTT;
354             case "EVDO_0":  return RAF_EVDO_0;
355             case "EVDO_A":  return RAF_EVDO_A;
356             case "HSDPA":   return RAF_HSDPA;
357             case "HSUPA":   return RAF_HSUPA;
358             case "HSPA":    return RAF_HSPA;
359             case "EVDO_B":  return RAF_EVDO_B;
360             case "EHRPD":   return RAF_EHRPD;
361             case "LTE":     return RAF_LTE;
362             case "HSPAP":   return RAF_HSPAP;
363             case "GSM":     return RAF_GSM;
364             case "TD_SCDMA":return RAF_TD_SCDMA;
365             case "HS":      return HS;
366             case "CDMA":    return CDMA;
367             case "EVDO":    return EVDO;
368             case "WCDMA":   return WCDMA;
369             case "LTE_CA":  return RAF_LTE_CA;
370             default:        return RAF_UNKNOWN;
371         }
372     }
373 
rafTypeFromString(String rafList)374     public static int rafTypeFromString(String rafList) {
375         rafList = rafList.toUpperCase();
376         String[] rafs = rafList.split("\\|");
377         int result = 0;
378         for(String raf : rafs) {
379             int rafType = singleRafTypeFromString(raf.trim());
380             if (rafType == RAF_UNKNOWN) return rafType;
381             result |= rafType;
382         }
383         return result;
384     }
385 }
386