aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMinh-Quang Nguyen <minh-quang.nguyen@nutaq.com>2016-06-10 09:49:20 -0400
committerMinh-Quang Nguyen <minh-quang.nguyen@nutaq.com>2016-06-10 09:49:20 -0400
commit58a4e449f749afdcbe2accb0e9bf0987e7eee052 (patch)
treef8d866576cdb773cfca4da1d9bce2c38ae7f2e71
parente09e5476da3cb444de695af9ef8ae2047d5d2e1f (diff)
LC15: common/oml.c: Support Tx power reduction 1 dB and 2 dB step
-rw-r--r--include/osmo-bts/gsm_data.h1
-rw-r--r--src/common/oml.c15
-rw-r--r--src/osmo-bts-litecell15/lc15bts.h1
-rw-r--r--src/osmo-bts-litecell15/lc15bts_vty.c25
-rw-r--r--src/osmo-bts-litecell15/main.c1
5 files changed, 41 insertions, 2 deletions
diff --git a/include/osmo-bts/gsm_data.h b/include/osmo-bts/gsm_data.h
index 101cbfcb..001dacb7 100644
--- a/include/osmo-bts/gsm_data.h
+++ b/include/osmo-bts/gsm_data.h
@@ -117,6 +117,7 @@ struct gsm_bts_role_bts {
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 led_ctrl_mode; /* 0: control by BTS, 1: not control by BTS */
+ uint8_t pwr_red_step; /* Tx power reduction steps in 1 dB or 2 dB */
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
diff --git a/src/common/oml.c b/src/common/oml.c
index 86ec1bf4..e7953c9e 100644
--- a/src/common/oml.c
+++ b/src/common/oml.c
@@ -637,9 +637,20 @@ static int oml_rx_set_radio_attr(struct gsm_bts_trx *trx, struct msgb *msg)
/* 9.4.47 RF Max Power Reduction */
if (TLVP_PRESENT(&tp, NM_ATT_RF_MAXPOWR_R)) {
+#ifdef ENABLE_LC15BTS
+ struct gsm_bts_role_bts *btsb = bts_role_bts(trx->bts);
+ if( btsb->pwr_red_step == 2)
+ trx->max_power_red = *TLVP_VAL(&tp, NM_ATT_RF_MAXPOWR_R) * 2;
+ else
+ trx->max_power_red = *TLVP_VAL(&tp, NM_ATT_RF_MAXPOWR_R);
+
+ LOGP(DOML, LOGL_INFO, "Set RF Max Power Reduction=%d dB, step=%d dB\n",
+ trx->max_power_red, btsb->pwr_red_step);
+#else
trx->max_power_red = *TLVP_VAL(&tp, NM_ATT_RF_MAXPOWR_R) * 2;
- LOGP(DOML, LOGL_INFO, "Set RF Max Power Reduction = %d dBm\n",
- trx->max_power_red);
+ LOGP(DOML, LOGL_INFO, "Set RF Max Power Reduction = %d dB\n",
+ trx->max_power_red);
+#endif
}
/* 9.4.5 ARFCN List */
#if 0
diff --git a/src/osmo-bts-litecell15/lc15bts.h b/src/osmo-bts-litecell15/lc15bts.h
index 4822893c..cada00d3 100644
--- a/src/osmo-bts-litecell15/lc15bts.h
+++ b/src/osmo-bts-litecell15/lc15bts.h
@@ -87,6 +87,7 @@ const uint8_t pdch_msu_size[_NUM_PDCH_CS];
#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_LED_CTRL_MODE_DEFAULT 0 /* LED is controlled by BTS by default */
+#define GSM_BTS_PWR_RED_STEP_DEFAULT 2 /* Default Tx power reduction step is 2 dB */
#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 */
diff --git a/src/osmo-bts-litecell15/lc15bts_vty.c b/src/osmo-bts-litecell15/lc15bts_vty.c
index 7762a578..1b2ff616 100644
--- a/src/osmo-bts-litecell15/lc15bts_vty.c
+++ b/src/osmo-bts-litecell15/lc15bts_vty.c
@@ -428,6 +428,26 @@ DEFUN(cfg_bts_led_mode, cfg_bts_led_mode_cmd,
return CMD_SUCCESS;
}
+DEFUN(cfg_bts_pwr_red_step, cfg_bts_pwr_red_step_cmd,
+ "pwr-red-step <1-2>",
+ "Set the transmit output power reduction step in dB\n"
+ "Power reduction step in dB\n")
+{
+ struct gsm_bts *bts = vty->index;
+ struct gsm_bts_role_bts *btsb = bts_role_bts(bts);
+ uint8_t pwr_red_step = (uint8_t)atoi(argv[0]);
+
+ if (( pwr_red_step > 2 ) || ( pwr_red_step < 1 )) {
+ vty_out(vty, "Tx power reduction step must be either 1 or 2 dB (%d) %s",
+ pwr_red_step, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ btsb->pwr_red_step = pwr_red_step;
+
+ 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")
@@ -485,6 +505,10 @@ void bts_model_config_write_bts(struct vty *vty, struct gsm_bts *bts)
vty_out(vty, " tx-red-pwr-8psk %d%s",
btsb->tx_pwr_red_8psk, VTY_NEWLINE);
+ vty_out(vty, " pwr-red-step %d%s",
+ btsb->pwr_red_step, VTY_NEWLINE);
+
+
}
void bts_model_config_write_trx(struct vty *vty, struct gsm_bts_trx *trx)
@@ -571,6 +595,7 @@ int bts_model_vty_init(struct gsm_bts *bts)
install_element(BTS_NODE, &cfg_bts_pedestal_mode_cmd);
install_element(BTS_NODE, &cfg_bts_led_mode_cmd);
install_element(BTS_NODE, &cfg_bts_max_cell_size_cmd);
+ install_element(BTS_NODE, &cfg_bts_pwr_red_step_cmd);
install_element(BTS_NODE, &cfg_bts_auto_tx_pwr_adj_cmd);
install_element(BTS_NODE, &cfg_bts_tx_red_pwr_8psk_cmd);
diff --git a/src/osmo-bts-litecell15/main.c b/src/osmo-bts-litecell15/main.c
index b172c5cf..ce30021f 100644
--- a/src/osmo-bts-litecell15/main.c
+++ b/src/osmo-bts-litecell15/main.c
@@ -77,6 +77,7 @@ int bts_model_init(struct gsm_bts *bts)
btsb->led_ctrl_mode = GSM_BTS_LED_CTRL_MODE_DEFAULT;
btsb->diversity_mode = GSM_BTS_DIVERSITY_MODE_DEFAULT;
btsb->pedestal_mode = GSM_BTS_PEDESTAL_MODE_DEFAULT;
+ btsb->pwr_red_step = GSM_BTS_PWR_RED_STEP_DEFAULT;
btsb->tx_pwr_adj_mode = GSM_BTS_TX_PWR_ADJ_DEFAULT;
btsb->tx_pwr_red_8psk = GSM_BTS_TX_RED_PWR_8PSK_DEFAULT;