summaryrefslogtreecommitdiff
path: root/cesar/ce/rx/test
diff options
context:
space:
mode:
authorCyril Jourdan2013-06-03 15:28:00 +0200
committerCyril Jourdan2013-06-14 15:47:13 +0200
commitab201b5e54d2c07c489cf7fac7bcb4581a5a7ab6 (patch)
treee17fbbfe7ae2473c3f3db4722331e84099a57dc1 /cesar/ce/rx/test
parentcc38f2802734a7d7adf8c9ba42c0228d74072d44 (diff)
cesar/ce/rx/bl/fsm: use PBProc interval matching computation, refs #4018
Instead of re-computing frame date and trying to match it on an interval. In the same time, correct management of sound frame SRC in the tests when we want to test the data case and update ce_rx_bl_fsm_measure_to_event stub in cesar/ce/rx/test.
Diffstat (limited to 'cesar/ce/rx/test')
-rw-r--r--cesar/ce/rx/test/src/test_rx.c58
1 files changed, 39 insertions, 19 deletions
diff --git a/cesar/ce/rx/test/src/test_rx.c b/cesar/ce/rx/test/src/test_rx.c
index b157851412..d6102538a4 100644
--- a/cesar/ce/rx/test/src/test_rx.c
+++ b/cesar/ce/rx/test/src/test_rx.c
@@ -121,25 +121,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 % ce_rx_bl_intervals_fsm_count_;
- }
-
/* Is this measure a Sound ? */
if (measure->rx_params.sound)
{
@@ -147,11 +128,50 @@ ce_rx_bl_fsm_measure_to_event (sta_t *sta,
type = CE_RX_FSM_MEASURE_TO_EVENT_TYPE_SOUND_COMPLETED;
else
type = CE_RX_FSM_MEASURE_TO_EVENT_TYPE_SOUND;
+
+ if (measure->rx_params.sound_src == TONEMAP_SRC_INTERVAL_UNAVAILABLE
+ || measure->rx_params.sound_src == TONEMAP_SRC_INTERVAL_UNUSABLE)
+ {
+ /* If SRC indicates that it is directed to an interval, generate
+ * an interval event. This event can be directed to global FSM if
+ * matching failed or if intervals were freed since the reception
+ * of the frame. */
+ has_interval = CE_RX_FSM_MEASURE_TO_EVENT_TYPE_INTERVAL;
+ if (sta->intervals
+ && (measure->rx_params.interval_group != PBPROC_NO_INT_MATCH))
+ measure->fsm_id = measure->rx_params.interval_group;
+ else
+ measure->fsm_id = CE_RX_MEASURE_NO_INTERVAL;
+ }
+ else
+ {
+ has_interval = CE_RX_FSM_MEASURE_TO_EVENT_TYPE_GLOBAL;
+ measure->fsm_id = CE_RX_MEASURE_NO_INTERVAL;
+ }
+
+
}
/* This is a data. */
else
+ {
type = CE_RX_FSM_MEASURE_TO_EVENT_TYPE_DATA;
+ /* Data should be sent to intervals' FSMs only if they exists and
+ * matching succeded. In any other case, let the global FSM handle
+ * those frames. */
+ if (sta->intervals
+ && (measure->rx_params.interval_group != PBPROC_NO_INT_MATCH))
+ {
+ has_interval = CE_RX_FSM_MEASURE_TO_EVENT_TYPE_INTERVAL;
+ measure->fsm_id = measure->rx_params.interval_group;
+ }
+ else
+ {
+ has_interval = CE_RX_FSM_MEASURE_TO_EVENT_TYPE_GLOBAL;
+ measure->fsm_id = CE_RX_MEASURE_NO_INTERVAL;
+ }
+ }
+
return event_tab[has_interval][type];
}