summaryrefslogtreecommitdiff
path: root/cesar
diff options
context:
space:
mode:
authorJérôme Jutteau2011-10-06 15:22:45 +0200
committerCyril Jourdan2013-01-18 11:27:25 +0100
commitebdcc42dc9b71e0f1d54c6ea29cb35106ff7af9a (patch)
treefd42f6d80dfa71bc6558dac9169171a5bff63954 /cesar
parent5527116cfae94e88825cdf34b6369c3cf549cbe7 (diff)
cesar/ce/rx/bl: reset an interval and ask for sound, closes #2554
Tests of this commit comes with intervals' sub-fsm scenarios.
Diffstat (limited to 'cesar')
-rw-r--r--cesar/ce/rx/bitloading/inc/intervals.h14
-rw-r--r--cesar/ce/rx/bitloading/src/intervals.c33
2 files changed, 47 insertions, 0 deletions
diff --git a/cesar/ce/rx/bitloading/inc/intervals.h b/cesar/ce/rx/bitloading/inc/intervals.h
index 7a5a7bc141..53d04648e9 100644
--- a/cesar/ce/rx/bitloading/inc/intervals.h
+++ b/cesar/ce/rx/bitloading/inc/intervals.h
@@ -18,6 +18,8 @@
#include "mac/pbproc/pbproc.h"
#include "bsu/aclf/aclf.h"
+#include "ce/rx/rx.h"
+#include "ce/rx/inc/rx.h"
BEGIN_DECLS
@@ -60,6 +62,18 @@ ce_rx_bl_intervals_measure_to_interval (tonemaps_t *tms,
void
ce_rx_bl_intervals_update_tmi (sta_t *sta, const bsu_aclf_bp_t bp_tck);
+/**
+ * Reset intervals which have a specific fsm id.
+ * \param ce_rx CE RX context.
+ * \param sta station.
+ * \param fsm_id fsm id, should be a valid id.
+ *
+ * This function will free TMI if it is not the default one and send a refresh
+ * MME asking for sound on those intervals.
+ */
+void
+ce_rx_bl_intervals_reset (ce_rx_t *ce_rx, sta_t *sta, int fsm_id);
+
END_DECLS
#endif /* ce_rx_bitloading_inc_intervals_h */
diff --git a/cesar/ce/rx/bitloading/src/intervals.c b/cesar/ce/rx/bitloading/src/intervals.c
index 3ae01b1744..3798d09cd6 100644
--- a/cesar/ce/rx/bitloading/src/intervals.c
+++ b/cesar/ce/rx/bitloading/src/intervals.c
@@ -18,6 +18,7 @@
#include "ce/rx/bitloading/inc/bitloading.h"
#include "ce/rx/bitloading/intervals.h"
#include "ce/rx/bitloading/inc/intervals.h"
+#include "ce/rx/cp/inc/cp.h"
#include "ce_rx_bl_fsm_defs.h"
bool
@@ -131,3 +132,35 @@ ce_rx_bl_intervals_update_tmi (sta_t *sta, const bsu_aclf_bp_t bp_tck)
dbg_assert (res == total_ints);
mac_interval_commit_changes (sta->rx_tonemaps);
}
+
+void
+ce_rx_bl_intervals_reset (ce_rx_t *ce_rx, sta_t *sta, int fsm_id)
+{
+ dbg_assert (ce_rx);
+ dbg_assert (ce_rx->aclf);
+ dbg_assert (sta);
+ dbg_assert (sta->intervals);
+ dbg_assert (sta->rx_tonemaps);
+ dbg_assert (fsm_id >= 0 && fsm_id <= mac_interval_fsm_count_);
+
+ ce_rx_bitloading_t *bl = sta->intervals->intervals[fsm_id];
+ u8 *tmi = &sta->intervals->tmi[fsm_id];
+ /* Mark the intervals TMI to be released if this fsm has negotiated
+ * it's own tone map. */
+ if (*tmi != sta->rx_tonemaps->default_tmi
+ && TONEMAP_INDEX_IS_NEGOTIATED (*tmi))
+ tonemap_disable (sta->rx_tonemaps, *tmi);
+
+ /* Set sound flag for this interval. */
+ *tmi = 0xFE;
+
+ /* Reset high PB error rate counter. */
+ bl->high_pb_error_rate_frame_counter = 0;
+ /* Reset BER sliding means. */
+ ce_rx_bl_ber_sliding_mean_reset (bl);
+
+ /* Rebuild intervals. */
+ ce_rx_bl_intervals_update_tmi (sta, ce_rx->aclf->beacon_period_tck);
+ /* Send refresh TMI list with intervals. */
+ ce_rx_cp_send_mme_refresh_tmi_list (ce_rx, sta);
+}