aboutsummaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2021-09-09 18:31:55 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2021-09-14 11:42:58 +0200
commitc81b41c62e69f4ee212d39975f092a71d5f3bfa6 (patch)
treebf9bac7bdc83efcf239843de83d821b82e11feb1 /src/common
parentc85027a510d36b7b0b59ec1a41854e3c6ccc70a5 (diff)
Support configuring TA loop SACCH block rate
Similar to what is already provided for power control loops. However, there's no existing way to communicate TA control parameters from the BSC to the BTS, so implement them locally in BTS vty. Related: SYS#5371 Change-Id: I9fa71f836bb9a79b0ef2567bfcfdf38ff217840b
Diffstat (limited to 'src/common')
-rw-r--r--src/common/ta_control.c12
-rw-r--r--src/common/vty.c16
2 files changed, 27 insertions, 1 deletions
diff --git a/src/common/ta_control.c b/src/common/ta_control.c
index fd49d600..025699ce 100644
--- a/src/common/ta_control.c
+++ b/src/common/ta_control.c
@@ -23,6 +23,7 @@
/* Related specs: 3GPP TS 45.010 sections 5.5, 5.6 */
#include <osmo-bts/gsm_data.h>
+#include <osmo-bts/bts_trx.h>
#include <osmo-bts/logging.h>
/* 3GPP TS 45.010 sec 5.6.3 Delay assessment error:
@@ -48,7 +49,16 @@ void lchan_ms_ta_ctrl(struct gsm_lchan *lchan, uint8_t ms_tx_ta, int16_t toa256)
int16_t new_ta;
/* Shall we skip current block based on configured interval? */
- /*TODO: implement P_CON_INTERVAL for TA loop */
+ /* TA control interval: how many blocks do we skip? */
+ if (lchan->ta_ctrl.skip_block_num-- > 0)
+ return;
+
+ /* Reset the number of SACCH blocks to be skipped:
+ * ctrl_interval=0 => 0 blocks to skip,
+ * ctrl_interval=1 => 1 blocks to skip,
+ * ctrl_interval=2 => 3 blocks to skip,
+ * so basically ctrl_interval * 2 - 1. */
+ lchan->ta_ctrl.skip_block_num = lchan->ts->trx->ta_ctrl_interval * 2 - 1;
int16_t delta_ta = toa256/256;
if (toa256 >= 0) {
diff --git a/src/common/vty.c b/src/common/vty.c
index 62e2d70f..f99881a4 100644
--- a/src/common/vty.c
+++ b/src/common/vty.c
@@ -370,6 +370,8 @@ static void config_write_bts_single(struct vty *vty, const struct gsm_bts *bts)
vty_out(vty, " ms-power-control %s%s",
trx->ms_pwr_ctl_soft ? "osmo" : "dsp",
VTY_NEWLINE);
+ vty_out(vty, " ta-control interval %u%s",
+ trx->ta_ctrl_interval, VTY_NEWLINE);
vty_out(vty, " phy %u instance %u%s", pinst->phy_link->num,
pinst->num, VTY_NEWLINE);
@@ -1009,6 +1011,19 @@ DEFUN(cfg_trx_ms_power_control, cfg_trx_ms_power_control_cmd,
return CMD_SUCCESS;
}
+DEFUN(cfg_ta_ctrl_interval, cfg_ta_ctrl_interval_cmd,
+ "ta-control interval <0-31>",
+ "Timing Advance Control Parameters\n"
+ "Set TA control loop interval\n"
+ "As in P_CON_INTERVAL, in units of 2 SACCH periods (0.96 seconds) (default=0, every SACCH block)\n")
+{
+ struct gsm_bts_trx *trx = vty->index;
+
+ trx->ta_ctrl_interval = atoi(argv[0]);
+
+ return CMD_SUCCESS;
+}
+
DEFUN(cfg_trx_phy, cfg_trx_phy_cmd,
"phy <0-255> instance <0-255>",
"Configure PHY Link+Instance for this TRX\n"
@@ -2487,6 +2502,7 @@ int bts_vty_init(void *ctx)
install_element(TRX_NODE, &cfg_trx_pr_step_size_cmd);
install_element(TRX_NODE, &cfg_trx_pr_step_interval_cmd);
install_element(TRX_NODE, &cfg_trx_ms_power_control_cmd);
+ install_element(TRX_NODE, &cfg_ta_ctrl_interval_cmd);
install_element(TRX_NODE, &cfg_trx_phy_cmd);
install_element(ENABLE_NODE, &bts_t_t_l_jitter_buf_cmd);