common: tx_power: Fix bug in power ramp up below max-initial value

See previous commit adding the unit test about the error description and
expected behavior.

The wrong behavior appeared due to step_size_mdB being unsigned and the
whole addition at the left side of the comparison being turned too as
unsigned, hence a small negative value turning into a big positive
value, and tpp->p_total_cur_mdBm not being updated to speed up the power
ramping.

Change-Id: I36a34362ebc90226fd8e1e190f898c3718fd923a
This commit is contained in:
Pau Espin 2020-08-18 16:26:50 +02:00
parent 1565d16a0a
commit 67e5a72a51
3 changed files with 1 additions and 13 deletions

View File

@ -278,7 +278,7 @@ int power_ramp_start(struct gsm_bts_trx *trx, int p_total_tgt_mdBm, int bypass,
} else {
/* We need to step it up. Start from the current value, shortcutting to max-initial. */
/* Set attenuation to cause no power change right now */
if (tpp->p_total_cur_mdBm + tpp->ramp.step_size_mdB < tpp->ramp.max_initial_pout_mdBm)
if (tpp->p_total_cur_mdBm + (int)tpp->ramp.step_size_mdB < tpp->ramp.max_initial_pout_mdBm)
tpp->p_total_cur_mdBm = tpp->ramp.max_initial_pout_mdBm - tpp->ramp.step_size_mdB;
tpp->ramp.attenuation_mdB = tpp->p_total_tgt_mdBm - tpp->p_total_cur_mdBm;

View File

@ -36,14 +36,6 @@
(bts=0,trx=1) ramp_timer_cb(cur_pout=33000, tgt_pout=33000, ramp_att=0, therm_att=0, user_gain=0)
(bts=0,trx=1) ramping TRX board output power to 23000 mdBm.
(bts=0,trx=1) power_ramp_start(cur=-10000, tgt=10000)
(bts=0,trx=1) ramp_timer_cb(cur_pout=-8000, tgt_pout=10000, ramp_att=18000, therm_att=0, user_gain=0)
(bts=0,trx=1) ramping TRX board output power to -8000 mdBm.
(bts=0,trx=1) ramp_timer_cb(cur_pout=-6000, tgt_pout=10000, ramp_att=16000, therm_att=0, user_gain=0)
(bts=0,trx=1) ramping TRX board output power to -6000 mdBm.
(bts=0,trx=1) ramp_timer_cb(cur_pout=-4000, tgt_pout=10000, ramp_att=14000, therm_att=0, user_gain=0)
(bts=0,trx=1) ramping TRX board output power to -4000 mdBm.
(bts=0,trx=1) ramp_timer_cb(cur_pout=-2000, tgt_pout=10000, ramp_att=12000, therm_att=0, user_gain=0)
(bts=0,trx=1) ramping TRX board output power to -2000 mdBm.
(bts=0,trx=1) ramp_timer_cb(cur_pout=0, tgt_pout=10000, ramp_att=10000, therm_att=0, user_gain=0)
(bts=0,trx=1) ramping TRX board output power to 0 mdBm.
(bts=0,trx=1) ramp_timer_cb(cur_pout=2000, tgt_pout=10000, ramp_att=8000, therm_att=0, user_gain=0)

View File

@ -23,10 +23,6 @@ CHANGE_POWER(22000)
CHANGE_POWER(23000)
power_ramp finished
Testing tx_power ramping for osmo-bts-trx after lock
CHANGE_POWER(-8000)
CHANGE_POWER(-6000)
CHANGE_POWER(-4000)
CHANGE_POWER(-2000)
CHANGE_POWER(0)
CHANGE_POWER(2000)
CHANGE_POWER(4000)