From ebdcc42dc9b71e0f1d54c6ea29cb35106ff7af9a Mon Sep 17 00:00:00 2001 From: Jérôme Jutteau Date: Thu, 6 Oct 2011 15:22:45 +0200 Subject: cesar/ce/rx/bl: reset an interval and ask for sound, closes #2554 Tests of this commit comes with intervals' sub-fsm scenarios. --- cesar/ce/rx/bitloading/inc/intervals.h | 14 ++++++++++++++ cesar/ce/rx/bitloading/src/intervals.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) (limited to 'cesar') 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); +} -- cgit v1.2.3