summaryrefslogtreecommitdiff
path: root/cesar/ce/rx/bitloading/test
diff options
context:
space:
mode:
authorJérémy Dufour2012-08-22 17:56:35 +0200
committerJérémy Dufour2012-08-22 17:56:35 +0200
commit6a4e75cafcb754f8bd11fa8be5d69ab028ce014c (patch)
tree593a585e49f3738376a360964f399094b201de47 /cesar/ce/rx/bitloading/test
parent381385432986d59aa98a0e6077219e0d01e61f88 (diff)
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.
Diffstat (limited to 'cesar/ce/rx/bitloading/test')
-rw-r--r--cesar/ce/rx/bitloading/test/override/cyg/kernel/kapi.h2
-rw-r--r--cesar/ce/rx/bitloading/test/src/ecos_stub.c4
-rw-r--r--cesar/ce/rx/bitloading/test/src/test_fsm.c74
3 files changed, 79 insertions, 1 deletions
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 <cyg/kernel/kapi.h>
+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