blob: 981ed450004a725255c6b35b839646c82c6e5d48 [file] [log] [blame]
Alan Viverette3da604b2020-06-10 18:34:39 +00001package android.telephony;
2
3import static android.telephony.ServiceState.DUPLEX_MODE_FDD;
4import static android.telephony.ServiceState.DUPLEX_MODE_TDD;
5import static android.telephony.ServiceState.DUPLEX_MODE_UNKNOWN;
6
7import android.telephony.AccessNetworkConstants.EutranBand;
8import android.telephony.ServiceState.DuplexMode;
9
10
11/**
12 * Utilities to map between radio constants.
13 *
14 * @hide
15 */
16public class AccessNetworkUtils {
17
18 // do not instantiate
19 private AccessNetworkUtils() {}
20
21 public static final int INVALID_BAND = -1;
22
23 /**
24 * Gets the duplex mode for the given EUTRAN operating band.
25 *
26 * <p>See 3GPP 36.101 sec 5.5-1 for calculation
27 *
28 * @param band The EUTRAN band number
29 * @return The duplex mode of the given EUTRAN band
30 */
31 @DuplexMode
32 public static int getDuplexModeForEutranBand(int band) {
33 if (band == INVALID_BAND) {
34 return DUPLEX_MODE_UNKNOWN;
35 }
36
37 if (band > EutranBand.BAND_88) {
38 return DUPLEX_MODE_UNKNOWN;
39 } else if (band >= EutranBand.BAND_65) {
40 return DUPLEX_MODE_FDD;
41 } else if (band >= EutranBand.BAND_33) {
42 return DUPLEX_MODE_TDD;
43 } else if (band >= EutranBand.BAND_1) {
44 return DUPLEX_MODE_FDD;
45 }
46
47 return DUPLEX_MODE_UNKNOWN;
48 }
49
50 /**
51 * Gets the EUTRAN Operating band for a given downlink EARFCN.
52 *
53 * <p>See 3GPP 36.101 sec 5.7.3-1 for calculation.
54 *
55 * @param earfcn The downlink EARFCN
56 * @return Operating band number, or {@link #INVALID_BAND} if no corresponding band exists
57 */
58 public static int getOperatingBandForEarfcn(int earfcn) {
59 if (earfcn > 70645) {
60 return INVALID_BAND;
61 } else if (earfcn >= 70596) {
62 return EutranBand.BAND_88;
63 } else if (earfcn >= 70546) {
64 return EutranBand.BAND_87;
65 } else if (earfcn >= 70366) {
66 return EutranBand.BAND_85;
67 } else if (earfcn > 69465) {
68 return INVALID_BAND;
69 } else if (earfcn >= 69036) {
70 return EutranBand.BAND_74;
71 } else if (earfcn >= 68986) {
72 return EutranBand.BAND_73;
73 } else if (earfcn >= 68936) {
74 return EutranBand.BAND_72;
75 } else if (earfcn >= 68586) {
76 return EutranBand.BAND_71;
77 } else if (earfcn >= 68336) {
78 return EutranBand.BAND_70;
79 } else if (earfcn > 67835) {
80 return INVALID_BAND;
81 } else if (earfcn >= 67536) {
82 return EutranBand.BAND_68;
83 } else if (earfcn >= 67366) {
84 return INVALID_BAND; // band 67 only for CarrierAgg
85 } else if (earfcn >= 66436) {
86 return EutranBand.BAND_66;
87 } else if (earfcn >= 65536) {
88 return EutranBand.BAND_65;
89 } else if (earfcn > 60254) {
90 return INVALID_BAND;
91 } else if (earfcn >= 60140) {
92 return EutranBand.BAND_53;
93 } else if (earfcn >= 59140) {
94 return EutranBand.BAND_52;
95 } else if (earfcn >= 59090) {
96 return EutranBand.BAND_51;
97 } else if (earfcn >= 58240) {
98 return EutranBand.BAND_50;
99 } else if (earfcn >= 56740) {
100 return EutranBand.BAND_49;
101 } else if (earfcn >= 55240) {
102 return EutranBand.BAND_48;
103 } else if (earfcn >= 54540) {
104 return EutranBand.BAND_47;
105 } else if (earfcn >= 46790) {
106 return EutranBand.BAND_46;
107 } else if (earfcn >= 46590) {
108 return EutranBand.BAND_45;
109 } else if (earfcn >= 45590) {
110 return EutranBand.BAND_44;
111 } else if (earfcn >= 43590) {
112 return EutranBand.BAND_43;
113 } else if (earfcn >= 41590) {
114 return EutranBand.BAND_42;
115 } else if (earfcn >= 39650) {
116 return EutranBand.BAND_41;
117 } else if (earfcn >= 38650) {
118 return EutranBand.BAND_40;
119 } else if (earfcn >= 38250) {
120 return EutranBand.BAND_39;
121 } else if (earfcn >= 37750) {
122 return EutranBand.BAND_38;
123 } else if (earfcn >= 37550) {
124 return EutranBand.BAND_37;
125 } else if (earfcn >= 36950) {
126 return EutranBand.BAND_36;
127 } else if (earfcn >= 36350) {
128 return EutranBand.BAND_35;
129 } else if (earfcn >= 36200) {
130 return EutranBand.BAND_34;
131 } else if (earfcn >= 36000) {
132 return EutranBand.BAND_33;
133 } else if (earfcn > 10359) {
134 return INVALID_BAND;
135 } else if (earfcn >= 9920) {
136 return INVALID_BAND; // band 32 only for CarrierAgg
137 } else if (earfcn >= 9870) {
138 return EutranBand.BAND_31;
139 } else if (earfcn >= 9770) {
140 return EutranBand.BAND_30;
141 } else if (earfcn >= 9660) {
142 return INVALID_BAND; // band 29 only for CarrierAgg
143 } else if (earfcn >= 9210) {
144 return EutranBand.BAND_28;
145 } else if (earfcn >= 9040) {
146 return EutranBand.BAND_27;
147 } else if (earfcn >= 8690) {
148 return EutranBand.BAND_26;
149 } else if (earfcn >= 8040) {
150 return EutranBand.BAND_25;
151 } else if (earfcn >= 7700) {
152 return EutranBand.BAND_24;
153 } else if (earfcn >= 7500) {
154 return EutranBand.BAND_23;
155 } else if (earfcn >= 6600) {
156 return EutranBand.BAND_22;
157 } else if (earfcn >= 6450) {
158 return EutranBand.BAND_21;
159 } else if (earfcn >= 6150) {
160 return EutranBand.BAND_20;
161 } else if (earfcn >= 6000) {
162 return EutranBand.BAND_19;
163 } else if (earfcn >= 5850) {
164 return EutranBand.BAND_18;
165 } else if (earfcn >= 5730) {
166 return EutranBand.BAND_17;
167 } else if (earfcn > 5379) {
168 return INVALID_BAND;
169 } else if (earfcn >= 5280) {
170 return EutranBand.BAND_14;
171 } else if (earfcn >= 5180) {
172 return EutranBand.BAND_13;
173 } else if (earfcn >= 5010) {
174 return EutranBand.BAND_12;
175 } else if (earfcn >= 4750) {
176 return EutranBand.BAND_11;
177 } else if (earfcn >= 4150) {
178 return EutranBand.BAND_10;
179 } else if (earfcn >= 3800) {
180 return EutranBand.BAND_9;
181 } else if (earfcn >= 3450) {
182 return EutranBand.BAND_8;
183 } else if (earfcn >= 2750) {
184 return EutranBand.BAND_7;
185 } else if (earfcn >= 2650) {
186 return EutranBand.BAND_6;
187 } else if (earfcn >= 2400) {
188 return EutranBand.BAND_5;
189 } else if (earfcn >= 1950) {
190 return EutranBand.BAND_4;
191 } else if (earfcn >= 1200) {
192 return EutranBand.BAND_3;
193 } else if (earfcn >= 600) {
194 return EutranBand.BAND_2;
195 } else if (earfcn >= 0) {
196 return EutranBand.BAND_1;
197 }
198
199 return INVALID_BAND;
200 }
201}