jolly has uploaded this change for review.

View Change

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},
};


To view, visit change 41359. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I71baa3317df685cf6479b6e20e6ae078911aa24f
Gerrit-Change-Number: 41359
Gerrit-PatchSet: 1
Gerrit-Owner: jolly <andreas@eversberg.eu>