jolly has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmocom-bb/+/41359?usp=email )
Change subject: Add ER-GSM band support to all relevant applications ......................................................................
Add ER-GSM band support to all relevant applications
ER-GSM band expands the R-GSM band by additional 15 channels.
Mobile application allows to turn on or off the support of these 15 channels. ER-GSM band is supported by default.
Change-Id: I71baa3317df685cf6479b6e20e6ae078911aa24f --- M src/host/layer23/include/osmocom/bb/common/settings.h M src/host/layer23/include/osmocom/bb/common/support.h M src/host/layer23/src/common/settings.c M src/host/layer23/src/common/support.c M src/host/layer23/src/common/sysinfo.c M src/host/layer23/src/misc/bcch_scan.c M src/host/layer23/src/misc/cell_log.c M src/host/layer23/src/mobile/gsm48_rr.c M src/host/layer23/src/mobile/vty_interface.c M src/shared/libosmocore/src/gsm/gsm_utils.c M src/target/firmware/apps/rssi/main.c 11 files changed, 33 insertions(+), 21 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/59/41359/1
diff --git a/src/host/layer23/include/osmocom/bb/common/settings.h b/src/host/layer23/include/osmocom/bb/common/settings.h index 1d3e53d..6b40120 100644 --- a/src/host/layer23/include/osmocom/bb/common/settings.h +++ b/src/host/layer23/include/osmocom/bb/common/settings.h @@ -239,6 +239,7 @@ uint8_t p_gsm; uint8_t e_gsm; uint8_t r_gsm; + uint8_t er_gsm; uint8_t dcs; uint8_t gsm_850; uint8_t pcs; diff --git a/src/host/layer23/include/osmocom/bb/common/support.h b/src/host/layer23/include/osmocom/bb/common/support.h index b0c71f5..3dcfcab 100644 --- a/src/host/layer23/include/osmocom/bb/common/support.h +++ b/src/host/layer23/include/osmocom/bb/common/support.h @@ -49,6 +49,7 @@ uint8_t p_gsm; uint8_t e_gsm; uint8_t r_gsm; + uint8_t er_gsm; uint8_t dcs; uint8_t gsm_850; uint8_t pcs; diff --git a/src/host/layer23/src/common/settings.c b/src/host/layer23/src/common/settings.c index 6bc5634..c09aba5 100644 --- a/src/host/layer23/src/common/settings.c +++ b/src/host/layer23/src/common/settings.c @@ -95,6 +95,7 @@ set->p_gsm = sup->p_gsm; set->e_gsm = sup->e_gsm; set->r_gsm = sup->r_gsm; + set->er_gsm = sup->er_gsm; set->dcs = sup->dcs; set->class_900 = sup->class_900; set->class_dcs = sup->class_dcs; @@ -182,6 +183,9 @@ if (set->r_gsm) for(i = 955; i <= 974; i++) set->freq_map[i >> 3] |= (1 << (i & 7)); + if (set->er_gsm) + for(i = 940; i <= 954; i++) + set->freq_map[i >> 3] |= (1 << (i & 7));
return 0; } diff --git a/src/host/layer23/src/common/support.c b/src/host/layer23/src/common/support.c index a31b456..8bf034b 100644 --- a/src/host/layer23/src/common/support.c +++ b/src/host/layer23/src/common/support.c @@ -62,6 +62,7 @@ sup->p_gsm = 1; /* P-GSM */ sup->e_gsm = 1; /* E-GSM */ sup->r_gsm = 1; /* R-GSM */ + sup->er_gsm = 1; /* ER-GSM */ sup->dcs = 1; sup->gsm_850 = 1; sup->pcs = 1; @@ -113,7 +114,7 @@ { 306, 340, 15, 0 }, /* GSM 480 */ { 438, 511, 25, 0 }, { 128, 251, 30, 0 }, /* GSM 850 */ - { 955, 124, 30, 0 }, /* P,E,R GSM */ + { 940, 124, 30, 0 }, /* P,E,(E)R GSM */ { 512, 885, 40, 0 }, /* DCS 1800 */ { 1024, 1322, 40, 0 }, /* PCS 1900 */ { 0, 0, 0, 0 } @@ -130,10 +131,11 @@
print(priv, "Supported features of MS '%s':\n", sup->ms->name); print(priv, " Phase %d mobile station\n", sup->rev_lev + 1); + print(priv, " ER-GSM : %s\n", SUP_SET(er_gsm)); print(priv, " R-GSM : %s\n", SUP_SET(r_gsm)); print(priv, " E-GSM : %s\n", SUP_SET(e_gsm)); print(priv, " P-GSM : %s\n", SUP_SET(p_gsm)); - if (set->r_gsm || set->e_gsm || set->p_gsm) + if (set->er_gsm || set->r_gsm || set->e_gsm || set->p_gsm) print(priv, " GSM900 Class : %d\n", set->class_900); print(priv, " DCS 1800 : %s\n", SUP_SET(dcs)); if (set->dcs) diff --git a/src/host/layer23/src/common/sysinfo.c b/src/host/layer23/src/common/sysinfo.c index efbc519..1046e78 100644 --- a/src/host/layer23/src/common/sysinfo.c +++ b/src/host/layer23/src/common/sysinfo.c @@ -399,7 +399,7 @@ #if 0 /* only Bit map 0 format for P-GSM */ if ((cd[0] & 0xc0 & mask) != 0x00 && - (set->p_gsm && !set->e_gsm && !set->r_gsm && !set->dcs)) + (set->p_gsm && !set->e_gsm && !set->er_gsm && !set->r_gsm && !set->dcs)) return 0; #endif
diff --git a/src/host/layer23/src/misc/bcch_scan.c b/src/host/layer23/src/misc/bcch_scan.c index 69df043..a2381d6 100644 --- a/src/host/layer23/src/misc/bcch_scan.c +++ b/src/host/layer23/src/misc/bcch_scan.c @@ -264,7 +264,7 @@ switch (fps.fps_state) { case FPS_S_PM_GSM900: fps.fps_state = FPS_S_PM_EGSM900; - return l1ctl_tx_pm_req_range(ms, 955, 1023); + return l1ctl_tx_pm_req_range(ms, 940, 1023); case FPS_S_PM_EGSM900: fps.fps_state = FPS_S_PM_GSM1800; return l1ctl_tx_pm_req_range(ms, 512, 885); diff --git a/src/host/layer23/src/misc/cell_log.c b/src/host/layer23/src/misc/cell_log.c index ed4d74d..3e0ae9c 100644 --- a/src/host/layer23/src/misc/cell_log.c +++ b/src/host/layer23/src/misc/cell_log.c @@ -59,7 +59,7 @@ };
/* ranges of bands */ -static uint16_t basic_band_range[][2] = {{0, 124}, {512, 885}, {955, 1023}, {0, 0}}; +static uint16_t basic_band_range[][2] = {{0, 124}, {512, 885}, {940, 1023}, {0, 0}}; uint16_t (*band_range)[][2] = &basic_band_range;
#define INFO_FLG_PM 1 diff --git a/src/host/layer23/src/mobile/gsm48_rr.c b/src/host/layer23/src/mobile/gsm48_rr.c index c04193c..be0889f 100644 --- a/src/host/layer23/src/mobile/gsm48_rr.c +++ b/src/host/layer23/src/mobile/gsm48_rr.c @@ -1284,12 +1284,12 @@ else bitvec_set_bit(&bv, ZERO); /* band 2 supported */ - if (set->e_gsm || set->r_gsm) + if (set->e_gsm || set->r_gsm || set->er_gsm) bitvec_set_bit(&bv, ONE); else bitvec_set_bit(&bv, ZERO); /* band 1 supported */ - if (set->p_gsm && !(set->e_gsm || set->r_gsm)) + if (set->p_gsm && !(set->e_gsm || set->r_gsm || set->er_gsm)) bitvec_set_bit(&bv, ONE); else bitvec_set_bit(&bv, ZERO); @@ -1311,15 +1311,15 @@ else bitvec_set_bit(&bv, ZERO); /* radio capability */ - if (!set->dcs && !set->p_gsm && !(set->e_gsm || set->r_gsm)) { - /* Fig. 10.5.7 / TS 24.0008: none of dcs, p, e, r */ + if (!set->dcs && !set->p_gsm && !(set->e_gsm || set->r_gsm || set->er_gsm)) { + /* Fig. 10.5.7 / TS 24.0008: none of dcs, p, e, (e)r */ } else - if (set->dcs && !set->p_gsm && !(set->e_gsm || set->r_gsm)) { + if (set->dcs && !set->p_gsm && !(set->e_gsm || set->r_gsm || set->er_gsm)) { /* dcs only */ bitvec_set_uint(&bv, 0, 4); bitvec_set_uint(&bv, set->class_dcs, 4); } else - if (set->dcs && (set->p_gsm || (set->e_gsm || set->r_gsm))) { + if (set->dcs && (set->p_gsm || (set->e_gsm || set->r_gsm || set->er_gsm))) { /* dcs */ bitvec_set_uint(&bv, set->class_dcs, 4); /* low band */ @@ -1332,7 +1332,7 @@ /* These octets above shall be included according to GSM 04.08 Version 5.3.0. */ minimum_len = (bv.cur_bit + 7) >> 3; /* r support */ - if (set->r_gsm) { + if (set->r_gsm || set->er_gsm) { bitvec_set_bit(&bv, ONE); bitvec_set_uint(&bv, set->class_900, 3); } else { @@ -1388,7 +1388,7 @@ if (set->edge_psk_sup) { bitvec_set_bit(&bv, ONE); bitvec_set_bit(&bv, set->edge_psk_uplink == 1); - if (set->p_gsm || (set->e_gsm || set->r_gsm)) { + if (set->p_gsm || (set->e_gsm || set->r_gsm || set->er_gsm)) { bitvec_set_bit(&bv, ONE); bitvec_set_uint(&bv, set->class_900_edge, 2); } else { @@ -1469,7 +1469,7 @@ cm->a5_1 = !set->a5_1; cm->es_ind = sup->es_ind; cm->rev_lev = sup->rev_lev; - cm->fc = (set->r_gsm || set->e_gsm); + cm->fc = (set->er_gsm || set->r_gsm || set->e_gsm); cm->vgcs = sup->vgcs; cm->vbs = sup->vbs; cm->sm_cap = set->sms_ptp; @@ -1511,7 +1511,7 @@ gsm48_rr_enc_cm2(ms, &cc->cm2, rr->cd_now.arfcn);
/* classmark 3 */ - if (set->dcs || set->pcs || set->e_gsm || set->r_gsm || set->gsm_850 + if (set->dcs || set->pcs || set->e_gsm || set->r_gsm || set->er_gsm || set->gsm_850 || set->a5_7 || set->a5_6 || set->a5_5 || set->a5_4 || sup->ms_sup || sup->ucs2_treat diff --git a/src/host/layer23/src/mobile/vty_interface.c b/src/host/layer23/src/mobile/vty_interface.c index eb582d3..b5b3128 100644 --- a/src/host/layer23/src/mobile/vty_interface.c +++ b/src/host/layer23/src/mobile/vty_interface.c @@ -1569,12 +1569,13 @@ SUP_WRITE(p_gsm, "p-gsm"); SUP_WRITE(e_gsm, "e-gsm"); SUP_WRITE(r_gsm, "r-gsm"); + SUP_WRITE(er_gsm, "er-gsm"); SUP_WRITE(gsm_850, "gsm-850"); SUP_WRITE(gsm_480, "gsm-480"); SUP_WRITE(gsm_450, "gsm-450"); SUP_WRITE(dcs, "dcs"); SUP_WRITE(pcs, "pcs"); - if (sup->r_gsm || sup->e_gsm || sup->p_gsm) + if (sup->er_gsm || sup->r_gsm || sup->e_gsm || sup->p_gsm) if (!l23_vty_hide_default || sup->class_900 != set->class_900) vty_out(vty, " class-900 %d%s", set->class_900, VTY_NEWLINE); @@ -2470,6 +2471,7 @@ SUP_EN_DI(p_gsm, "p-gsm", "P-GSM (900)", 1); SUP_EN_DI(e_gsm, "e-gsm", "E-GSM (850)", 1); SUP_EN_DI(r_gsm, "r-gsm", "R-GSM (850)", 1); +SUP_EN_DI(er_gsm, "er-gsm", "ER-GSM (850)", 1); SUP_EN_DI(dcs, "dcs", "DCS (1800)", 1); SUP_EN_DI(gsm_850, "gsm-850", "GSM 850", 1); SUP_EN_DI(pcs, "pcs", "PCS (1900)", 1); @@ -3111,6 +3113,8 @@ install_element(SUPPORT_NODE, &cfg_ms_sup_di_e_gsm_cmd); install_element(SUPPORT_NODE, &cfg_ms_sup_en_r_gsm_cmd); install_element(SUPPORT_NODE, &cfg_ms_sup_di_r_gsm_cmd); + install_element(SUPPORT_NODE, &cfg_ms_sup_en_er_gsm_cmd); + install_element(SUPPORT_NODE, &cfg_ms_sup_di_er_gsm_cmd); install_element(SUPPORT_NODE, &cfg_ms_sup_en_dcs_cmd); install_element(SUPPORT_NODE, &cfg_ms_sup_di_dcs_cmd); install_element(SUPPORT_NODE, &cfg_ms_sup_en_gsm_850_cmd); diff --git a/src/shared/libosmocore/src/gsm/gsm_utils.c b/src/shared/libosmocore/src/gsm/gsm_utils.c index 4b170df..66d5abb 100644 --- a/src/shared/libosmocore/src/gsm/gsm_utils.c +++ b/src/shared/libosmocore/src/gsm/gsm_utils.c @@ -481,7 +481,7 @@ return GSM_BAND_1900; else if (arfcn <= 124) return GSM_BAND_900; - else if (arfcn >= 955 && arfcn <= 1023) + else if (arfcn >= 940 && arfcn <= 1023) return GSM_BAND_900; else if (arfcn >= 128 && arfcn <= 251) return GSM_BAND_850; @@ -517,8 +517,8 @@ /* Primary GSM + ARFCN 0 of E-GSM */ freq10_ul = 8900 + 2 * arfcn; freq10_dl = freq10_ul + 450; - } else if (arfcn >= 955 && arfcn <= 1023) { - /* E-GSM and R-GSM */ + } else if (arfcn >= 940 && arfcn <= 1023) { + /* E-GSM and R-GSM and ER-GSM */ freq10_ul = 8900 + 2 * (arfcn - 1024); freq10_dl = freq10_ul + 450; } else if (arfcn >= 128 && arfcn <= 251) { diff --git a/src/target/firmware/apps/rssi/main.c b/src/target/firmware/apps/rssi/main.c index b407caf..b424f13 100644 --- a/src/target/firmware/apps/rssi/main.c +++ b/src/target/firmware/apps/rssi/main.c @@ -79,8 +79,8 @@ int min, max, prev, next, freq_ul, freq_dl; } bands[] = { { 128, 251, 124, 512, 8242, 8692 }, /* GSM 850 */ - { 955, 124, 885, 128, 8762, 9212 }, /* P,E,R GSM */ - { 512, 885, 251, 955, 17102, 18052 }, /* DCS 1800 */ + { 940, 124, 885, 128, 8732, 9182 }, /* P,E,(E)R GSM */ + { 512, 885, 251, 940, 17102, 18052 }, /* DCS 1800 */ { 0, 0, 0, 0, 0, 0}, };