From 6a4e75cafcb754f8bd11fa8be5d69ab028ce014c Mon Sep 17 00:00:00 2001 From: Jérémy Dufour Date: Wed, 22 Aug 2012 17:56:35 +0200 Subject: cesar/ce/rx/bl: send TM after some time with no measure on it, closes #1926 If we receive some measurements on a tone map which differs from the default one we have configured, wait some times (3s) and send it again. --- .../rx/bitloading/test/override/cyg/kernel/kapi.h | 2 + cesar/ce/rx/bitloading/test/src/ecos_stub.c | 4 +- cesar/ce/rx/bitloading/test/src/test_fsm.c | 74 ++++++++++++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) (limited to 'cesar/ce/rx/bitloading/test') diff --git a/cesar/ce/rx/bitloading/test/override/cyg/kernel/kapi.h b/cesar/ce/rx/bitloading/test/override/cyg/kernel/kapi.h index 13846e160d..ffc4b3b8f5 100644 --- a/cesar/ce/rx/bitloading/test/override/cyg/kernel/kapi.h +++ b/cesar/ce/rx/bitloading/test/override/cyg/kernel/kapi.h @@ -13,6 +13,8 @@ * \ingroup test */ +extern u32 ecos_time; + u32 cyg_current_time (void); diff --git a/cesar/ce/rx/bitloading/test/src/ecos_stub.c b/cesar/ce/rx/bitloading/test/src/ecos_stub.c index bbad9a07bf..0f1079a6a9 100644 --- a/cesar/ce/rx/bitloading/test/src/ecos_stub.c +++ b/cesar/ce/rx/bitloading/test/src/ecos_stub.c @@ -14,8 +14,10 @@ #include +u32 ecos_time = 0; + u32 cyg_current_time (void) { - return 0; + return ecos_time; } diff --git a/cesar/ce/rx/bitloading/test/src/test_fsm.c b/cesar/ce/rx/bitloading/test/src/test_fsm.c index b0dacf1e85..be3bab8b9d 100644 --- a/cesar/ce/rx/bitloading/test/src/test_fsm.c +++ b/cesar/ce/rx/bitloading/test/src/test_fsm.c @@ -50,6 +50,7 @@ uint ce_rx_bl_pb_total_factor_; uint ce_rx_bl_min_pb_per_frame_; uint ce_rx_bl_min_frame_with_high_pb_err_rate_; uint ce_rx_bl_ber_lower_bound_ = 38; +extern uint ce_rx_bl_min_time_between_resend_tm_ms; static uint const tmi_av = 24; @@ -129,6 +130,7 @@ test_ce_rx_bl_fsm_base (test_t t) scenario_globals_t globals = { .ce = &ce, }; + ce.tck_per_rtc = 1; sta_t sta; tonemaps_t rx_tms, tx_tms; @@ -954,6 +956,78 @@ test_ce_rx_bl_fsm_base (test_t t) ce_rx_bitloading_uninit (&sta.ce_rx_bt); }test_end; + test_case_begin (t, "TM resend mechanism"); + + ce_rx_bitloading_init (&sta.ce_rx_bt); + test_ce_rx_bl_reset (&sta.ce_rx_bt); + test_ce_rx_bl_measure_empty (&measure); + measure.rx_params.tmi_av = rx_tms.default_tmi - 1; + measure.total_pb_count = 0x42; + measure.false_pb_count = 0; + uint pos; + uint next_time = MAC_MS_TO_TCK (ce_rx_bl_min_time_between_resend_tm_ms) + / ce.tck_per_rtc; + + test_begin (t, "first frame not on expected TMI, should init time & flag") + { + test_fail_if (sta.ce_rx_bt.resend_tm != false); + test_fail_if (sta.ce_rx_bt.resend_tm_date != 0); + + ecos_time = 0x4242; + pos = 0; + scenario_test[pos++] = (scenario_entry_t) + SCENARIO_ACTION (TRACKING__data, + .sta = &sta, + .measure = measure, + .branch = ce_rx_bl_fsm_next_branch + (TRACKING, data, no_channel_change)); + scenario_test[pos++] = scenario_end; + scenario_run (t, scenario_test, &globals); + + test_fail_if (sta.ce_rx_bt.resend_tm != true); + test_fail_if (sta.ce_rx_bt.resend_tm_date != ecos_time + next_time); + } test_end; + + test_begin (t, "many frames not on expected TMI, current time under resend one, " + "should not change time & flag") + { + pos = 0; + uint old_ecos_time = ecos_time; + for (i = 0; i < 42; i++, ++ecos_time) + { + scenario_test[pos++] = (scenario_entry_t) + SCENARIO_ACTION (TRACKING__data, + .sta = &sta, + .measure = measure, + .branch = ce_rx_bl_fsm_next_branch + (TRACKING, data, no_channel_change)); + scenario_test[pos++] = scenario_end; + scenario_run (t, scenario_test, &globals); + + test_fail_if (sta.ce_rx_bt.resend_tm != true); + test_fail_if (sta.ce_rx_bt.resend_tm_date != old_ecos_time + next_time); + } + } test_end; + + test_begin (t, "enough time on next frame, send and reset flag & time") + { + pos = 0; + ecos_time = sta.ce_rx_bt.resend_tm_date + 1; + scenario_test[pos++] = (scenario_entry_t) + SCENARIO_ACTION (TRACKING__data, + .sta = &sta, + .measure = measure, + .branch = ce_rx_bl_fsm_next_branch + (TRACKING, data, no_channel_change)); + scenario_test[pos++] = scenario_end; + scenario_run (t, scenario_test, &globals); + + test_fail_if (sta.ce_rx_bt.resend_tm != false); + test_fail_if (sta.ce_rx_bt.resend_tm_date != 0); + } test_end; + + /* Clean. */ + ce_rx_bitloading_uninit (&sta.ce_rx_bt); } int -- cgit v1.2.3