This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Minh-Quang Nguyen gerrit-no-reply at lists.osmocom.orgReview at https://gerrit.osmocom.org/239 LC15: BTS parameters are configurable via configuration file : - Maximum cell size - Diversity - Unused TS pedestal - Adjustment of Tx output power - Reduction Tx power level in 8-PSK modulation scheme Change-Id: I3622d5b6f22525b798b0c75bbc2bab3767aba923 --- M include/osmo-bts/gsm_data.h M src/osmo-bts-litecell15/Makefile.am M src/osmo-bts-litecell15/l1_if.c M src/osmo-bts-litecell15/lc15bts.h M src/osmo-bts-litecell15/lc15bts_vty.c M src/osmo-bts-litecell15/main.c 6 files changed, 196 insertions(+), 2 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/39/239/1 diff --git a/include/osmo-bts/gsm_data.h b/include/osmo-bts/gsm_data.h index 7a48667..6bbbd5f 100644 --- a/include/osmo-bts/gsm_data.h +++ b/include/osmo-bts/gsm_data.h @@ -111,6 +111,14 @@ struct { char *sock_path; } pcu; +#ifdef ENABLE_LC15BTS + /* specific to LC15 BTS */ + uint8_t max_cell_size; /* 166 qbits */ + uint8_t diversity_mode; /* 0: SISO A, 1: SISO B, 2: MRC */ + uint8_t pedestal_mode; /* 0: unused TS is OFF, 1: unused TS is in minimum Tx power */ + uint8_t tx_pwr_adj_mode; /* 0: no auto adjust power, 1: auto adjust power using RMS detector */ + uint8_t tx_pwr_red_8psk; /* 8-PSK maximum Tx power reduction level in dB */ +#endif }; enum lchan_ciph_state { diff --git a/src/osmo-bts-litecell15/Makefile.am b/src/osmo-bts-litecell15/Makefile.am index 768e29d..6d6ca25 100644 --- a/src/osmo-bts-litecell15/Makefile.am +++ b/src/osmo-bts-litecell15/Makefile.am @@ -4,6 +4,10 @@ AM_CFLAGS = -Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOCODEC_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(LIBOSMOTRAU_CFLAGS) $(LIBOSMOABIS_CFLAGS) $(LIBOSMOCTRL_CFLAGS) $(LIBOSMOABIS_CFLAGS) $(LIBGPS_CFLAGS) $(ORTP_CFLAGS) COMMON_LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOCODEC_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) $(LIBOSMOTRAU_LIBS) $(LIBOSMOABIS_LIBS) $(LIBOSMOCTRL_LIBS) $(ORTP_LIBS) +if ENABLE_LC15BTS +AM_CFLAGS += -DENABLE_LC15BTS +endif + EXTRA_DIST = misc/lc15bts_mgr.h misc/lc15bts_misc.h misc/lc15bts_par.h \ misc/lc15bts_temp.h misc/lc15bts_power.h misc/lc15bts_clock.h \ misc/lc15bts_bid.h misc/lc15bts_nl.h \ diff --git a/src/osmo-bts-litecell15/l1_if.c b/src/osmo-bts-litecell15/l1_if.c index f7ecc7a..e94db84 100644 --- a/src/osmo-bts-litecell15/l1_if.c +++ b/src/osmo-bts-litecell15/l1_if.c @@ -1077,6 +1077,7 @@ oml_mo_state_chg(&trx->ts[i].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_DEPENDENCY); } else { bts_update_status(BTS_STATUS_RF_ACTIVE, 0); + oml_mo_state_chg(&trx->mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE); oml_mo_state_chg(&trx->bb_transc.mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE); } @@ -1091,17 +1092,27 @@ { struct msgb *msg = sysp_msgb_alloc(); Litecell15_Prim_t *sysp = msgb_sysprim(msg); + struct gsm_bts_role_bts *btsb = bts_role_bts(hdl->phy_inst->trx->bts); if (on) { sysp->id = Litecell15_PrimId_ActivateRfReq; sysp->u.activateRfReq.msgq.u8UseTchMsgq = 0; sysp->u.activateRfReq.msgq.u8UsePdtchMsgq = pcu_direct; - sysp->u.activateRfReq.u8UnusedTsMode = 0; + sysp->u.activateRfReq.u8UnusedTsMode = btsb->pedestal_mode; sysp->u.activateRfReq.u8McCorrMode = 0; + /* diversity mode: 0: SISO-A, 1: SISO-B, 2: MRC */ + sysp->u.activateRfReq.u8DiversityMode = btsb->diversity_mode; + /* maximum cell size in quarter-bits, 90 == 12.456 km */ - sysp->u.activateRfReq.u8MaxCellSize = 90; + sysp->u.activateRfReq.u8MaxCellSize = btsb->max_cell_size; + + /* auto tx power adjustment mode 0:none, 1: automatic*/ + sysp->u.activateRfReq.autoPowerAdjust.u8EnAutoPowerAdjust = btsb->tx_pwr_adj_mode; + + /* PSK modulation scheme maximum power level */ + sysp->u.activateRfReq.autoPowerAdjust.u8PowerReduction8Psk = btsb->tx_pwr_red_8psk; } else { sysp->id = Litecell15_PrimId_DeactivateRfReq; } diff --git a/src/osmo-bts-litecell15/lc15bts.h b/src/osmo-bts-litecell15/lc15bts.h index 4c40db0..f6a7e3f 100644 --- a/src/osmo-bts-litecell15/lc15bts.h +++ b/src/osmo-bts-litecell15/lc15bts.h @@ -22,6 +22,22 @@ L1P_T_IND, }; +enum lc15_diversity_mode{ + LC15_DIVERSITY_SISO_A = 0, + LC15_DIVERSITY_SISO_B, + LC15_DIVERSITY_MRC, +}; + +enum lc15_pedestal_mode{ + LC15_PEDESTAL_OFF = 0, + LC15_PEDESTAL_ON, +}; + +enum lc15_auto_pwr_adjust_mode{ + LC15_TX_PWR_ADJ_NONE = 0, + LC15_TX_PWR_ADJ_AUTO, +}; + enum l1prim_type lc15bts_get_l1prim_type(GsmL1_PrimId_t id); const struct value_string lc15bts_l1prim_names[GsmL1_PrimId_NUM+1]; GsmL1_PrimId_t lc15bts_get_l1prim_conf(GsmL1_PrimId_t id); @@ -61,4 +77,11 @@ const uint8_t pdch_msu_size[_NUM_PDCH_CS]; +/* LC15 default parameters */ +#define GSM_BTS_MAX_CELL_SIZE_DEFAULT 166 /* 166 qbits is default value */ +#define GSM_BTS_DIVERSITY_MODE_DEFAULT 2 /* MRC is default mode */ +#define GSM_BTS_PEDESTAL_MODE_DEFAULT 0 /* Unused TS is off by default */ +#define GSM_BTS_TX_PWR_ADJ_DEFAULT 0 /* Default Tx power auto adjustment is none */ +#define GSM_BTS_TX_RED_PWR_8PSK_DEFAULT 0 /* Default 8-PSK maximum power level is 0 dB */ + #endif /* LC15BTS_H */ diff --git a/src/osmo-bts-litecell15/lc15bts_vty.c b/src/osmo-bts-litecell15/lc15bts_vty.c index 8c4364c..fcace3f 100644 --- a/src/osmo-bts-litecell15/lc15bts_vty.c +++ b/src/osmo-bts-litecell15/lc15bts_vty.c @@ -65,6 +65,35 @@ static struct gsm_bts *vty_bts; +static const struct value_string lc15_diversity_mode_strs[] = { + { LC15_DIVERSITY_SISO_A, "siso-a" }, + { LC15_DIVERSITY_SISO_B, "siso-b" }, + { LC15_DIVERSITY_MRC, "mrc" }, + { 0, NULL } +}; + +static const struct value_string lc15_pedestal_mode_strs[] = { + { LC15_PEDESTAL_OFF, "off" }, + { LC15_PEDESTAL_ON, "on" }, + { 0, NULL } +}; + +static const struct value_string lc15_auto_adj_pwr_strs[] = { + { LC15_TX_PWR_ADJ_NONE, "none" }, + { LC15_TX_PWR_ADJ_AUTO, "auto" }, + { 0, NULL } +}; + +static int parse_mdbm(const char *valstr, const char *unit) +{ + int val = atoi(valstr); + + if (!strcmp(unit, "dB") || !strcmp(unit, "dBm")) + return val * 1000; + else + return val; +} + /* configuration */ DEFUN(cfg_phy_cal_path, cfg_phy_cal_path_cmd, @@ -321,8 +350,114 @@ return CMD_SUCCESS; } +DEFUN(cfg_bts_max_cell_size, cfg_bts_max_cell_size_cmd, + "max-cell-size <0-166>", + "Set the maximum cell size in qbits\n") +{ + struct gsm_bts *bts = vty->index;; + struct gsm_bts_role_bts *btsb = bts_role_bts(bts); + int cell_size = (uint8_t)atoi(argv[0]); + + if (( cell_size > 166 ) || ( cell_size < 0 )) { + vty_out(vty, "Max cell size must be between 0 and 166 qbits (%d) %s", + cell_size, VTY_NEWLINE); + return CMD_WARNING; + } + + btsb->max_cell_size = (uint8_t)cell_size; + return CMD_SUCCESS; +} + +DEFUN(cfg_bts_diversity_mode, cfg_bts_diversity_mode_cmd, + "diversity-mode (siso-a|siso-b|mrc)", + "Set reception diversity mode \n" + "Reception diversity mode can be (siso-a, siso-b, mrc)\n") +{ + struct gsm_bts *bts = vty->index; + struct gsm_bts_role_bts *btsb = bts_role_bts(bts); + int val = get_string_value(lc15_diversity_mode_strs, argv[0]); + + if((val < LC15_DIVERSITY_SISO_A) || (val > LC15_DIVERSITY_MRC)) { + vty_out(vty, "Invalid reception diversity mode %d%s", val, VTY_NEWLINE); + return CMD_WARNING; + } + + btsb->diversity_mode = (uint8_t)val; + return CMD_SUCCESS; +} + +DEFUN(cfg_bts_pedestal_mode, cfg_bts_pedestal_mode_cmd, + "pedestal-mode (on|off)", + "Set unused time-slot transmission in pedestal mode\n" + "Transmission pedestal mode can be (off, on)\n") +{ + struct gsm_bts *bts = vty->index; + struct gsm_bts_role_bts *btsb = bts_role_bts(bts); + int val = get_string_value(lc15_pedestal_mode_strs, argv[0]); + + if((val < LC15_PEDESTAL_OFF) || (val > LC15_PEDESTAL_ON)) { + vty_out(vty, "Invalid unused time-slot transmission mode %d%s", val, VTY_NEWLINE); + return CMD_WARNING; + } + + btsb->pedestal_mode = (uint8_t)val; + return CMD_SUCCESS; +} + +DEFUN(cfg_bts_auto_tx_pwr_adj, cfg_bts_auto_tx_pwr_adj_cmd, + "pwr-adj-mode (none|auto)", + "Set output power adjustment mode\n") +{ + struct gsm_bts *bts = vty->index; + struct gsm_bts_role_bts *btsb = bts_role_bts(bts); + int val = get_string_value(lc15_auto_adj_pwr_strs, argv[0]); + + if((val < LC15_TX_PWR_ADJ_NONE) || (val > LC15_TX_PWR_ADJ_AUTO)) { + vty_out(vty, "Invalid output power adjustment mode %d%s", val, VTY_NEWLINE); + return CMD_WARNING; + } + + btsb->tx_pwr_adj_mode = (uint8_t)val; + return CMD_SUCCESS; +} + +DEFUN(cfg_bts_tx_red_pwr_8psk, cfg_bts_tx_red_pwr_8psk_cmd, + "tx-red-pwr-8psk <0-40>", + "Set reduction output power for 8-PSK scheme in dB unit\n") +{ + struct gsm_bts *bts = vty->index;; + struct gsm_bts_role_bts *btsb = bts_role_bts(bts); + int val = atoi(argv[0]); + + if (( val > 40 ) || ( val < 0 )) { + vty_out(vty, "Reduction Tx power level must be between 0 and 40 dB (%d) %s", + val, VTY_NEWLINE); + return CMD_WARNING; + } + + btsb->tx_pwr_red_8psk = (uint8_t)val; + return CMD_SUCCESS; +} + void bts_model_config_write_bts(struct vty *vty, struct gsm_bts *bts) { + struct gsm_bts_role_bts *btsb = bts_role_bts(bts); + + vty_out(vty, " max-cell-size %d%s", + btsb->max_cell_size, VTY_NEWLINE); + + vty_out(vty, " diversity-mode %s%s", + get_value_string(lc15_diversity_mode_strs, btsb->diversity_mode), VTY_NEWLINE); + + vty_out(vty, " pedestal-mode %s%s", + get_value_string(lc15_pedestal_mode_strs, btsb->pedestal_mode) , VTY_NEWLINE); + + vty_out(vty, " pwr-adj-mode %s%s", + get_value_string(lc15_auto_adj_pwr_strs, btsb->tx_pwr_adj_mode), VTY_NEWLINE); + + vty_out(vty, " tx-red-pwr-8psk %d%s", + btsb->tx_pwr_red_8psk, VTY_NEWLINE); + } void bts_model_config_write_trx(struct vty *vty, struct gsm_bts_trx *trx) @@ -405,6 +540,13 @@ install_element(BTS_NODE, &cfg_bts_auto_band_cmd); install_element(BTS_NODE, &cfg_bts_no_auto_band_cmd); + install_element(BTS_NODE, &cfg_bts_diversity_mode_cmd); + install_element(BTS_NODE, &cfg_bts_pedestal_mode_cmd); + install_element(BTS_NODE, &cfg_bts_max_cell_size_cmd); + install_element(BTS_NODE, &cfg_bts_auto_tx_pwr_adj_cmd); + install_element(BTS_NODE, &cfg_bts_tx_red_pwr_8psk_cmd); + + install_element(TRX_NODE, &cfg_trx_nominal_power_cmd); install_element(PHY_INST_NODE, &cfg_phy_dsp_trace_f_cmd); install_element(PHY_INST_NODE, &cfg_phy_no_dsp_trace_f_cmd); diff --git a/src/osmo-bts-litecell15/main.c b/src/osmo-bts-litecell15/main.c index 352949b..b2f0f77 100644 --- a/src/osmo-bts-litecell15/main.c +++ b/src/osmo-bts-litecell15/main.c @@ -72,6 +72,12 @@ btsb = bts_role_bts(bts); btsb->support.ciphers = CIPHER_A5(1) | CIPHER_A5(2) | CIPHER_A5(3); + /* specific default values for LC15 platform */ + btsb->max_cell_size = GSM_BTS_MAX_CELL_SIZE_DEFAULT; + btsb->diversity_mode = GSM_BTS_DIVERSITY_MODE_DEFAULT; + btsb->pedestal_mode = GSM_BTS_PEDESTAL_MODE_DEFAULT; + btsb->tx_pwr_adj_mode = GSM_BTS_TX_PWR_ADJ_DEFAULT; + btsb->tx_pwr_red_8psk = GSM_BTS_TX_RED_PWR_8PSK_DEFAULT; rc = oml_router_init(bts, OML_ROUTER_PATH, &accept_fd, &read_fd); if (rc < 0) { -- To view, visit https://gerrit.osmocom.org/239 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3622d5b6f22525b798b0c75bbc2bab3767aba923 Gerrit-PatchSet: 1 Gerrit-Project: osmo-bts Gerrit-Branch: master Gerrit-Owner: Minh-Quang Nguyen <minh-quang.nguyen at nutaq.com>