summaryrefslogtreecommitdiff
path: root/cesar/ce/rx
diff options
context:
space:
mode:
authorCyril Jourdan2013-04-18 16:39:22 +0200
committerCyril Jourdan2013-04-18 16:39:22 +0200
commit3b179dc895c7dc8e5f2ac67403b71b0486996c45 (patch)
treee3fb797ebf937fec4bb68c8ac135597434cdb0b2 /cesar/ce/rx
parentff93750fa32ab6eb3ff1b03d2be0aa824985691e (diff)
parent277d149f4d5e5ccd3b6a2cf666db75d83bf77539 (diff)
Merge branch 'interval_robo' into eoc-interval_robo
Diffstat (limited to 'cesar/ce/rx')
-rw-r--r--cesar/ce/rx/bitloading/fsm/src/fsm.c45
-rw-r--r--cesar/ce/rx/bitloading/src/intervals.c2
-rw-r--r--cesar/ce/rx/bitloading/test/intervals/src/test_intervals_fsm.c40
-rw-r--r--cesar/ce/rx/bitloading/test/src/test_intervals.c38
4 files changed, 92 insertions, 33 deletions
diff --git a/cesar/ce/rx/bitloading/fsm/src/fsm.c b/cesar/ce/rx/bitloading/fsm/src/fsm.c
index e7c8cc0af4..9f9e3dba56 100644
--- a/cesar/ce/rx/bitloading/fsm/src/fsm.c
+++ b/cesar/ce/rx/bitloading/fsm/src/fsm.c
@@ -91,24 +91,6 @@ ce_rx_bl_fsm_measure_to_event (sta_t *sta,
ce_rx_measure_mbox_t *measure = data.measure;
dbg_assert (measure);
- /* Get interval information. */
- int interval;
- s16 start_date_atu, end_date_atu;
- /* Global by default. */
- has_interval = CE_RX_FSM_MEASURE_TO_EVENT_TYPE_GLOBAL;
- measure->fsm_id = CE_RX_MEASURE_NO_INTERVAL;
- ce_rx_bl_intervals_measure_to_date (&measure->rx_params,&start_date_atu,
- &end_date_atu);
- interval = ce_rx_bl_intervals_measure_to_interval (sta->rx_tonemaps,
- start_date_atu,
- end_date_atu);
- if (interval != CE_RX_MEASURE_NO_INTERVAL)
- {
- /* We are on an interval. */
- has_interval = CE_RX_FSM_MEASURE_TO_EVENT_TYPE_INTERVAL;
- measure->fsm_id = interval % mac_interval_fsm_count_;
- }
-
/* Is this measure a Sound ? */
if (measure->rx_params.sound)
{
@@ -121,5 +103,32 @@ ce_rx_bl_fsm_measure_to_event (sta_t *sta,
else
type = CE_RX_FSM_MEASURE_TO_EVENT_TYPE_DATA;
+ /* Get interval information. */
+ int interval;
+ s16 start_date_atu, end_date_atu;
+ /* Global by default. */
+ has_interval = CE_RX_FSM_MEASURE_TO_EVENT_TYPE_GLOBAL;
+ measure->fsm_id = CE_RX_MEASURE_NO_INTERVAL;
+ /* Interval's research is only done if received measure is a data or a
+ * sound or sound complete with a SRC indicating that it is directed to
+ * an interval. Other SRCs should be handled by global FSM, even if they
+ * are received on a specific interval. */
+ if (type == CE_RX_FSM_MEASURE_TO_EVENT_TYPE_DATA
+ || measure->rx_params.sound_src == TONEMAP_SRC_INTERVAL_UNAVAILABLE
+ || measure->rx_params.sound_src == TONEMAP_SRC_INTERVAL_UNUSABLE)
+ {
+ ce_rx_bl_intervals_measure_to_date (&measure->rx_params,
+ &start_date_atu, &end_date_atu);
+ interval = ce_rx_bl_intervals_measure_to_interval (sta->rx_tonemaps,
+ start_date_atu,
+ end_date_atu);
+ if (interval != CE_RX_MEASURE_NO_INTERVAL)
+ {
+ /* We are on an interval. */
+ has_interval = CE_RX_FSM_MEASURE_TO_EVENT_TYPE_INTERVAL;
+ measure->fsm_id = interval % mac_interval_fsm_count_;
+ }
+ }
+
return event_tab[has_interval][type];
}
diff --git a/cesar/ce/rx/bitloading/src/intervals.c b/cesar/ce/rx/bitloading/src/intervals.c
index 332f66937a..87fe0d583a 100644
--- a/cesar/ce/rx/bitloading/src/intervals.c
+++ b/cesar/ce/rx/bitloading/src/intervals.c
@@ -148,7 +148,7 @@ ce_rx_bl_intervals_reset (ce_rx_t *ce_rx, sta_t *sta, int fsm_id)
tonemap_disable (sta->rx_tonemaps, *tmi);
/* Set sound flag for this interval. */
- *tmi = 0xFE;
+ *tmi = TONEMAP_INDEX_INTERVAL_UNAVAILABLE;
/* Reset high PB error rate counter. */
bl->high_pb_error_rate_frame_counter = 0;
diff --git a/cesar/ce/rx/bitloading/test/intervals/src/test_intervals_fsm.c b/cesar/ce/rx/bitloading/test/intervals/src/test_intervals_fsm.c
index cf8c279f02..f637586caa 100644
--- a/cesar/ce/rx/bitloading/test/intervals/src/test_intervals_fsm.c
+++ b/cesar/ce/rx/bitloading/test/intervals/src/test_intervals_fsm.c
@@ -96,7 +96,8 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
tonemap_disable, .tms = &rx_tms, .tmi = tested_tmi);
- /* - check the interval is updated with 0xFE */
+ /* - check the interval is updated with
+ * TONEMAP_INDEX_INTERVAL_UNAVAILABLE */
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_clear, .tms = &rx_tms);
int j;
@@ -104,7 +105,8 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
{
if (j % mac_interval_fsm_count_ == tested_fsm_id)
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
- mac_interval_append, .tms = &rx_tms, .tmi = 0xFE);
+ mac_interval_append, .tms = &rx_tms,
+ .tmi = TONEMAP_INDEX_INTERVAL_UNAVAILABLE);
else
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_append, .tms = &rx_tms, .tmi = tested_tmi);
@@ -139,7 +141,8 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
.branch = ce_rx_bl_fsm_next (INTERVAL_TRACKING, interval_sound));
/* Check intervals are reset:
- * - check the interval is updated with 0xFE */
+ * - check the interval is updated with
+ * TONEMAP_INDEX_INTERVAL_UNAVAILABLE */
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_clear, .tms = &rx_tms);
int j;
@@ -147,7 +150,8 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
{
if (j % mac_interval_fsm_count_ == tested_fsm_id)
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
- mac_interval_append, .tms = &rx_tms, .tmi = 0xFE);
+ mac_interval_append, .tms = &rx_tms,
+ .tmi = TONEMAP_INDEX_INTERVAL_UNAVAILABLE);
else
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_append, .tms = &rx_tms, .tmi = tested_tmi);
@@ -185,7 +189,8 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
.branch = ce_rx_bl_fsm_next (INTERVAL_TRACKING, interval_sound));
/* Check intervals are reset:
- * - check the interval is updated with 0xFE */
+ * - check the interval is updated with
+ * TONEMAP_INDEX_INTERVAL_UNAVAILABLE */
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_clear, .tms = &rx_tms);
int j;
@@ -193,7 +198,8 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
{
if (j % mac_interval_fsm_count_ == tested_fsm_id)
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
- mac_interval_append, .tms = &rx_tms, .tmi = 0xFE);
+ mac_interval_append, .tms = &rx_tms,
+ .tmi = TONEMAP_INDEX_INTERVAL_UNAVAILABLE);
else
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_append, .tms = &rx_tms, .tmi = tested_tmi);
@@ -352,7 +358,8 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
ce_rx_bl_ber_sliding_mean_update,
.bl = sta.intervals->intervals[tested_fsm_id]);
- /* - check the interval is updated with 0xFE */
+ /* - check the interval is updated with
+ * TONEMAP_INDEX_INTERVAL_UNAVAILABLE */
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_clear, .tms = &rx_tms);
int j;
@@ -360,7 +367,8 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
{
if (j % mac_interval_fsm_count_ == tested_fsm_id)
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
- mac_interval_append, .tms = &rx_tms, .tmi = 0xFE);
+ mac_interval_append, .tms = &rx_tms,
+ .tmi = TONEMAP_INDEX_INTERVAL_UNAVAILABLE);
else
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_append, .tms = &rx_tms, .tmi = tested_tmi);
@@ -405,7 +413,8 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
.bl = sta.intervals->intervals[tested_fsm_id]);
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (ce_rx_bl_ber_pt_robo);
- /* - check the interval is updated with 0xFE */
+ /* - check the interval is updated with
+ * TONEMAP_INDEX_INTERVAL_UNAVAILABLE */
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_clear, .tms = &rx_tms);
int j;
@@ -413,7 +422,8 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
{
if (j % mac_interval_fsm_count_ == tested_fsm_id)
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
- mac_interval_append, .tms = &rx_tms, .tmi = 0xFE);
+ mac_interval_append, .tms = &rx_tms,
+ .tmi = TONEMAP_INDEX_INTERVAL_UNAVAILABLE);
else
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_append, .tms = &rx_tms, .tmi = tested_tmi);
@@ -459,7 +469,8 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
ce_rx_bl_ber_sliding_mean_update,
.bl = sta.intervals->intervals[tested_fsm_id]);
- /* - check the interval is updated with 0xFE */
+ /* - check the interval is updated with
+ * TONEMAP_INDEX_INTERVAL_UNAVAILABLE */
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_clear, .tms = &rx_tms);
int j;
@@ -467,7 +478,8 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
{
if (j % mac_interval_fsm_count_ == tested_fsm_id)
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
- mac_interval_append, .tms = &rx_tms, .tmi = 0xFE);
+ mac_interval_append, .tms = &rx_tms,
+ .tmi = TONEMAP_INDEX_INTERVAL_UNAVAILABLE);
else
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_append, .tms = &rx_tms, .tmi = tested_tmi);
@@ -563,7 +575,7 @@ test_ce_rx_bl_fsm_INTERVAL_SOUND (test_t t)
ce_rx_bl_ber_sliding_mean_update,
.bl = sta.intervals->intervals[tested_fsm_id]);
- /* - check the interval is updated with 0xFE */
+ /* - check the interval is updated with DEFAULT_NEW_TMI */
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_clear, .tms = &rx_tms);
int j;
@@ -684,7 +696,7 @@ test_ce_rx_bl_fsm_INTERVAL_SOUND_WAIT (test_t t)
ce_rx_bl_ber_sliding_mean_update,
.bl = sta.intervals->intervals[tested_fsm_id]);
- /* - check the interval is updated with 0xFE */
+ /* - check the interval is updated with DEFAULT_NEW_TMI */
fsm_base[pos++] = (scenario_entry_t) SCENARIO_EVENT (
mac_interval_clear, .tms = &rx_tms);
int j;
diff --git a/cesar/ce/rx/bitloading/test/src/test_intervals.c b/cesar/ce/rx/bitloading/test/src/test_intervals.c
index c319e2688e..4fb5f23f4e 100644
--- a/cesar/ce/rx/bitloading/test/src/test_intervals.c
+++ b/cesar/ce/rx/bitloading/test/src/test_intervals.c
@@ -228,6 +228,7 @@ test_suite_ce_rx_bl_intervals_measure_to_event_master_test (
int sound,
bool intervals,
bool mea_interval,
+ bool src_interval,
ce_rx_bl_fsm_event_type_t *event,
int *fsm_id)
{
@@ -255,6 +256,10 @@ test_suite_ce_rx_bl_intervals_measure_to_event_master_test (
/* Configure measure. */
measure.rx_params.sound = sound;
measure.rx_params.sound_complete = 0;
+ if (src_interval)
+ measure.rx_params.sound_src = TONEMAP_SRC_INTERVAL_UNAVAILABLE;
+ else
+ measure.rx_params.sound_src = TONEMAP_SRC_INITIAL;
measure.rx_params.preamble_ntb = 0;
measure.rx_params.beacon_period_start_ntb = 0;
/* Measure is global. */
@@ -288,6 +293,8 @@ test_suite_ce_rx_bl_intervals_measure_to_event (test_t t)
false,
/* Measure is positioned on an interval ? */
false,
+ /* SRC is interval specific ? */
+ false,
&out, &fsm_id);
test_fail_if (out != CE_RX_BL_FSM_EVENT_TYPE_sound);
test_fail_if (fsm_id != -1);
@@ -303,6 +310,8 @@ test_suite_ce_rx_bl_intervals_measure_to_event (test_t t)
false,
/* Measure is positioned on an interval ? */
true,
+ /* SRC is interval specific ? */
+ false,
&out, &fsm_id);
test_fail_if (out != CE_RX_BL_FSM_EVENT_TYPE_sound);
test_fail_if (fsm_id != -1);
@@ -318,6 +327,8 @@ test_suite_ce_rx_bl_intervals_measure_to_event (test_t t)
true,
/* Measure is positioned on an interval ? */
false,
+ /* SRC is interval specific ? */
+ true,
&out, &fsm_id);
test_fail_if (out != CE_RX_BL_FSM_EVENT_TYPE_sound);
test_fail_if (fsm_id != -1);
@@ -333,10 +344,29 @@ test_suite_ce_rx_bl_intervals_measure_to_event (test_t t)
true,
/* Measure is positioned on an interval ? */
true,
+ /* SRC is interval specific ? */
+ true,
&out, &fsm_id);
test_fail_if (out != CE_RX_BL_FSM_EVENT_TYPE_interval_sound);
test_fail_if (fsm_id != 0);
} test_end;
+ test_begin (t, "Measure to event conversion, sound, intervals, "
+ "small measure, SRC is global")
+ {
+ test_suite_ce_rx_bl_intervals_measure_to_event_master_test (
+ t,
+ /* Sound ? */
+ 1,
+ /* RX contains intervals ? */
+ true,
+ /* Measure is positioned on an interval ? */
+ true,
+ /* SRC is interval specific ? */
+ false,
+ &out, &fsm_id);
+ test_fail_if (out != CE_RX_BL_FSM_EVENT_TYPE_sound);
+ test_fail_if (fsm_id != -1);
+ } test_end;
test_begin (t, "Measure to event conversion, not sound, no interval, "
"big measure")
{
@@ -348,6 +378,8 @@ test_suite_ce_rx_bl_intervals_measure_to_event (test_t t)
false,
/* Measure is positioned on an interval ? */
false,
+ /* SRC is interval specific ? */
+ false,
&out, &fsm_id);
test_fail_if (out != CE_RX_BL_FSM_EVENT_TYPE_data);
test_fail_if (fsm_id != -1);
@@ -363,6 +395,8 @@ test_suite_ce_rx_bl_intervals_measure_to_event (test_t t)
false,
/* Measure is positioned on an interval ? */
true,
+ /* SRC is interval specific ? */
+ false,
&out, &fsm_id);
test_fail_if (out != CE_RX_BL_FSM_EVENT_TYPE_data);
test_fail_if (fsm_id != -1);
@@ -378,6 +412,8 @@ test_suite_ce_rx_bl_intervals_measure_to_event (test_t t)
true,
/* Measure is positioned on an interval ? */
false,
+ /* SRC is interval specific ? */
+ true,
&out, &fsm_id);
test_fail_if (out != CE_RX_BL_FSM_EVENT_TYPE_data);
test_fail_if (fsm_id != -1);
@@ -393,6 +429,8 @@ test_suite_ce_rx_bl_intervals_measure_to_event (test_t t)
true,
/* Measure is positioned on an interval ? */
true,
+ /* SRC is interval specific ? */
+ true,
&out, &fsm_id);
test_fail_if (out != CE_RX_BL_FSM_EVENT_TYPE_interval_data);
test_fail_if (fsm_id != 0);