summaryrefslogtreecommitdiff
path: root/cesar/ce
diff options
context:
space:
mode:
Diffstat (limited to 'cesar/ce')
-rw-r--r--cesar/ce/rx/bitloading/src/transition.c68
1 files changed, 39 insertions, 29 deletions
diff --git a/cesar/ce/rx/bitloading/src/transition.c b/cesar/ce/rx/bitloading/src/transition.c
index 08c99e1430..fe74ce8f47 100644
--- a/cesar/ce/rx/bitloading/src/transition.c
+++ b/cesar/ce/rx/bitloading/src/transition.c
@@ -21,6 +21,7 @@
#include "ce/rx/bitloading/inc/initial.h"
#include "ce/rx/bitloading/inc/common.h"
#include "ce/rx/bitloading/inc/ber_margin_update.h"
+#include "ce/rx/bitloading/inc/intervals.h"
#include "ce/rx/bitloading/bitloading.h"
#include "ce/rx/inc/measure.h"
#include "ce/rx/cp/inc/cp.h"
@@ -48,37 +49,48 @@ const uint ce_rx_bl_min_time_between_resend_tm_ms = 3000;
*
* This function will initialize (if first sound is true) or add it to the sum
* of NSR. If this is the last sound, it will compute the mean and them launch
- * an initial CE.
+ * an initial CE or compute a tone map for an interval.
*/
-static inline bool
-ce_rx_bl__common_initial_sound_measure_received (ce_rx_t *ce_rx, sta_t *sta,
- ce_rx_measure_mbox_t
- *measure, bool first_sound)
+static bool
+ce_rx_bl__common_sound_measure_received (ce_rx_t *ce_rx, sta_t *sta,
+ ce_rx_measure_mbox_t
+ *measure, bool first_sound)
{
/* Check parameters. */
dbg_assert (measure);
dbg_assert (measure->rx_params.sound);
dbg_assert (sta);
+ int fsm_id = measure->fsm_id;
+ ce_rx_bitloading_t *bt;
+
+ if (fsm_id == CE_RX_MEASURE_NO_INTERVAL)
+ bt = &sta->ce_rx_bt;
+ else
+ {
+ dbg_assert (sta->intervals);
+ bt = sta->intervals->intervals[fsm_id];
+ }
+
if (first_sound)
/* Initialize sum of NSR. */
- ce_rx_bl_nsr_sum_init (&sta->ce_rx_bt, measure->chan_data,
+ ce_rx_bl_nsr_sum_init (bt, measure->chan_data,
measure->chan_data_count);
else
/* Add it to the sum of NSR. */
- ce_rx_bl_nsr_sum_add (&sta->ce_rx_bt, measure->chan_data,
+ ce_rx_bl_nsr_sum_add (bt, measure->chan_data,
measure->chan_data_count);
/* Sound complete? */
if (measure->rx_params.sound_complete)
{
ce_debug_gpio_event
(CE_DEBUG_GPIO_EVENT_CE_RX_BL_MEASURE_SOUND_COMPLETE, true);
- dbg_assert (ce_rx);
- dbg_assert (ce_rx->mac_config);
/* Compute NSR mean (in every case). */
- ce_rx_bl_nsr_compute_mean (&sta->ce_rx_bt);
+ ce_rx_bl_nsr_compute_mean (bt);
/* Start initial tone map. */
- ce_rx_bl_start_bl (ce_rx, sta, CE_RX_MEASURE_NO_INTERVAL);
+ ce_rx_bl_start_bl (ce_rx, sta, fsm_id);
+ /* Clean NSR mean. */
+ ce_rx_bl_nsr_clean (bt);
return true;
}
ce_debug_gpio_event
@@ -100,8 +112,6 @@ ce_rx_bl__common__restart_ce_rx (ce_rx_t *ce_rx, sta_t *sta)
/* In RX, reset default tone map and remove tone maps. */
tonemaps_reset (sta->rx_tonemaps, &ce_rx->tonemap_release_list);
- /* Reset NSR. */
- ce_rx_bl_nsr_clean (&sta->ce_rx_bt);
/* Reset high PB error rate counter. */
sta->ce_rx_bt.high_pb_error_rate_frame_counter = 0;
/* Reset BER sliding means. */
@@ -363,10 +373,10 @@ ce_rx_bl_fsm__IDLE__sound_completed (
sta_t *sta,
ce_rx_bitloading_fsm_event_param_t data)
{
- ce_rx_bl__common_initial_sound_measure_received (ce_rx,
- sta,
- data.measure,
- true);
+ ce_rx_bl__common_sound_measure_received (ce_rx,
+ sta,
+ data.measure,
+ true);
return ce_rx_bl_fsm_next_branch (IDLE, sound_completed, no_mode_interval);
}
@@ -375,10 +385,10 @@ ce_rx_bl_fsm__IDLE__sound (ce_rx_t *ce_rx,
sta_t *sta,
ce_rx_bitloading_fsm_event_param_t data)
{
- ce_rx_bl__common_initial_sound_measure_received (ce_rx,
- sta,
- data.measure,
- true);
+ ce_rx_bl__common_sound_measure_received (ce_rx,
+ sta,
+ data.measure,
+ true);
return ce_rx_bl_fsm_next (IDLE, sound);
}
@@ -398,10 +408,10 @@ ce_rx_bl_fsm__INITIAL__sound_completed (
sta_t *sta,
ce_rx_bitloading_fsm_event_param_t data)
{
- ce_rx_bl__common_initial_sound_measure_received (ce_rx,
- sta,
- data.measure,
- false);
+ ce_rx_bl__common_sound_measure_received (ce_rx,
+ sta,
+ data.measure,
+ false);
return ce_rx_bl_fsm_next_branch (INITIAL,
sound_completed,
no_mode_interval);
@@ -412,10 +422,10 @@ ce_rx_bl_fsm__INITIAL__sound (ce_rx_t *ce_rx,
sta_t *sta,
ce_rx_bitloading_fsm_event_param_t data)
{
- ce_rx_bl__common_initial_sound_measure_received (ce_rx,
- sta,
- data.measure,
- false);
+ ce_rx_bl__common_sound_measure_received (ce_rx,
+ sta,
+ data.measure,
+ false);
return ce_rx_bl_fsm_next (INITIAL, sound);
}