aboutsummaryrefslogtreecommitdiffstats
path: root/src/bts.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bts.cpp')
-rw-r--r--src/bts.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/bts.cpp b/src/bts.cpp
index fb7de649..11aef3f6 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -918,7 +918,7 @@ send_imm_ass_rej:
plen = Encoding::write_immediate_assignment(
&bts->trx[trx_no].pdch[ts_no], tbf, bv,
false, rip->ra, Fn, ta, usf, false, sb_fn,
- bts->pcu->vty.alpha, bts->pcu->vty.gamma, -1,
+ bts_get_ms_pwr_alpha(bts), bts->pcu->vty.gamma, -1,
rip->burst_type);
bts_do_rate_ctr_inc(bts, CTR_IMMEDIATE_ASSIGN_UL_TBF);
}
@@ -999,7 +999,7 @@ void bts_snd_dl_ass(struct gprs_rlcmac_bts *bts, struct gprs_rlcmac_tbf *tbf, bo
tbf, immediate_assignment, true, 125,
(tbf->pdch[ts_no]->last_rts_fn + 21216) % GSM_MAX_FN,
tbf->ta(), 7, poll, tbf->poll_fn,
- bts->pcu->vty.alpha, bts->pcu->vty.gamma, -1,
+ bts_get_ms_pwr_alpha(bts), bts->pcu->vty.gamma, -1,
GSM_L1_BURST_TYPE_ACCESS_0);
if (plen >= 0) {
bts_do_rate_ctr_inc(bts, CTR_IMMEDIATE_ASSIGN_DL_TBF);
@@ -1292,3 +1292,14 @@ const struct llist_head* bts_ms_list(struct gprs_rlcmac_bts *bts)
{
return bts_ms_store(bts)->ms_list();
}
+
+uint8_t bts_get_ms_pwr_alpha(const struct gprs_rlcmac_bts *bts)
+{
+ if (bts->pcu->vty.force_alpha != (uint8_t)-1)
+ return bts->pcu->vty.force_alpha;
+ if (bts->si13_is_set)
+ return bts->si31_ro_decoded.pwr_ctrl_pars.alpha;
+ /* default if no SI13 is received yet: closed loop control, TS 44.060
+ * B.2 Closed loop control */
+ return 0;
+}