| package android.telephony; |
| |
| import static android.telephony.ServiceState.DUPLEX_MODE_FDD; |
| import static android.telephony.ServiceState.DUPLEX_MODE_TDD; |
| import static android.telephony.ServiceState.DUPLEX_MODE_UNKNOWN; |
| |
| import android.telephony.AccessNetworkConstants.EutranBand; |
| import android.telephony.ServiceState.DuplexMode; |
| |
| |
| /** |
| * Utilities to map between radio constants. |
| * |
| * @hide |
| */ |
| public class AccessNetworkUtils { |
| |
| // do not instantiate |
| private AccessNetworkUtils() {} |
| |
| public static final int INVALID_BAND = -1; |
| |
| /** |
| * Gets the duplex mode for the given EUTRAN operating band. |
| * |
| * <p>See 3GPP 36.101 sec 5.5-1 for calculation |
| * |
| * @param band The EUTRAN band number |
| * @return The duplex mode of the given EUTRAN band |
| */ |
| @DuplexMode |
| public static int getDuplexModeForEutranBand(int band) { |
| if (band == INVALID_BAND) { |
| return DUPLEX_MODE_UNKNOWN; |
| } |
| |
| if (band >= EutranBand.BAND_68) { |
| return DUPLEX_MODE_UNKNOWN; |
| } else if (band >= EutranBand.BAND_65) { |
| return DUPLEX_MODE_FDD; |
| } else if (band >= EutranBand.BAND_47) { |
| return DUPLEX_MODE_UNKNOWN; |
| } else if (band >= EutranBand.BAND_33) { |
| return DUPLEX_MODE_TDD; |
| } else if (band >= EutranBand.BAND_1) { |
| return DUPLEX_MODE_FDD; |
| } |
| |
| return DUPLEX_MODE_UNKNOWN; |
| } |
| |
| /** |
| * Gets the EUTRAN Operating band for a given downlink EARFCN. |
| * |
| * <p>See 3GPP 36.101 sec 5.7.3-1 for calculation. |
| * |
| * @param earfcn The downlink EARFCN |
| * @return Operating band number, or {@link #INVALID_BAND} if no corresponding band exists |
| */ |
| public static int getOperatingBandForEarfcn(int earfcn) { |
| if (earfcn > 67535) { |
| return INVALID_BAND; |
| } else if (earfcn >= 67366) { |
| return INVALID_BAND; // band 67 only for CarrierAgg |
| } else if (earfcn >= 66436) { |
| return EutranBand.BAND_66; |
| } else if (earfcn >= 65536) { |
| return EutranBand.BAND_65; |
| } else if (earfcn > 54339) { |
| return INVALID_BAND; |
| } else if (earfcn >= 46790 /* inferred from the end range of BAND_45 */) { |
| return EutranBand.BAND_46; |
| } else if (earfcn >= 46590) { |
| return EutranBand.BAND_45; |
| } else if (earfcn >= 45590) { |
| return EutranBand.BAND_44; |
| } else if (earfcn >= 43590) { |
| return EutranBand.BAND_43; |
| } else if (earfcn >= 41590) { |
| return EutranBand.BAND_42; |
| } else if (earfcn >= 39650) { |
| return EutranBand.BAND_41; |
| } else if (earfcn >= 38650) { |
| return EutranBand.BAND_40; |
| } else if (earfcn >= 38250) { |
| return EutranBand.BAND_39; |
| } else if (earfcn >= 37750) { |
| return EutranBand.BAND_38; |
| } else if (earfcn >= 37550) { |
| return EutranBand.BAND_37; |
| } else if (earfcn >= 36950) { |
| return EutranBand.BAND_36; |
| } else if (earfcn >= 36350) { |
| return EutranBand.BAND_35; |
| } else if (earfcn >= 36200) { |
| return EutranBand.BAND_34; |
| } else if (earfcn >= 36000) { |
| return EutranBand.BAND_33; |
| } else if (earfcn > 10359) { |
| return INVALID_BAND; |
| } else if (earfcn >= 9920) { |
| return INVALID_BAND; // band 32 only for CarrierAgg |
| } else if (earfcn >= 9870) { |
| return EutranBand.BAND_31; |
| } else if (earfcn >= 9770) { |
| return EutranBand.BAND_30; |
| } else if (earfcn >= 9660) { |
| return INVALID_BAND; // band 29 only for CarrierAgg |
| } else if (earfcn >= 9210) { |
| return EutranBand.BAND_28; |
| } else if (earfcn >= 9040) { |
| return EutranBand.BAND_27; |
| } else if (earfcn >= 8690) { |
| return EutranBand.BAND_26; |
| } else if (earfcn >= 8040) { |
| return EutranBand.BAND_25; |
| } else if (earfcn >= 7700) { |
| return EutranBand.BAND_24; |
| } else if (earfcn >= 7500) { |
| return EutranBand.BAND_23; |
| } else if (earfcn >= 6600) { |
| return EutranBand.BAND_22; |
| } else if (earfcn >= 6450) { |
| return EutranBand.BAND_21; |
| } else if (earfcn >= 6150) { |
| return EutranBand.BAND_20; |
| } else if (earfcn >= 6000) { |
| return EutranBand.BAND_19; |
| } else if (earfcn >= 5850) { |
| return EutranBand.BAND_18; |
| } else if (earfcn >= 5730) { |
| return EutranBand.BAND_17; |
| } else if (earfcn > 5379) { |
| return INVALID_BAND; |
| } else if (earfcn >= 5280) { |
| return EutranBand.BAND_14; |
| } else if (earfcn >= 5180) { |
| return EutranBand.BAND_13; |
| } else if (earfcn >= 5010) { |
| return EutranBand.BAND_12; |
| } else if (earfcn >= 4750) { |
| return EutranBand.BAND_11; |
| } else if (earfcn >= 4150) { |
| return EutranBand.BAND_10; |
| } else if (earfcn >= 3800) { |
| return EutranBand.BAND_9; |
| } else if (earfcn >= 3450) { |
| return EutranBand.BAND_8; |
| } else if (earfcn >= 2750) { |
| return EutranBand.BAND_7; |
| } else if (earfcn >= 2650) { |
| return EutranBand.BAND_6; |
| } else if (earfcn >= 2400) { |
| return EutranBand.BAND_5; |
| } else if (earfcn >= 1950) { |
| return EutranBand.BAND_4; |
| } else if (earfcn >= 1200) { |
| return EutranBand.BAND_3; |
| } else if (earfcn >= 600) { |
| return EutranBand.BAND_2; |
| } else if (earfcn >= 0) { |
| return EutranBand.BAND_1; |
| } |
| |
| return INVALID_BAND; |
| } |
| } |