[PATCH] osmo-bts[master]: LC15: BTS parameters are configurable via configuration file...

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.org
Mon Jun 13 13:29:17 UTC 2016


Review 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>



More information about the gerrit-log mailing list