summaryrefslogtreecommitdiff
path: root/cesar/ce/rx
diff options
context:
space:
mode:
authorJérôme Jutteau2011-11-04 11:27:35 +0100
committerCyril Jourdan2013-01-18 11:53:46 +0100
commitedacf4021c732eab33b0a57dfb5205e6a3044038 (patch)
tree4923e6c5ae70ba92b7d919f64d638245feb66911 /cesar/ce/rx
parent1b5b86c9dc5947513ab24a1535c322d037e1ead7 (diff)
cesar/ce/rx/bl: adapt event handling for intervals, refs #2366
Diffstat (limited to 'cesar/ce/rx')
-rw-r--r--cesar/ce/rx/bitloading/fsm/src/fsm.c32
-rw-r--r--cesar/ce/rx/src/trace.c2
2 files changed, 24 insertions, 10 deletions
diff --git a/cesar/ce/rx/bitloading/fsm/src/fsm.c b/cesar/ce/rx/bitloading/fsm/src/fsm.c
index c45f00ab0b..6a178cd369 100644
--- a/cesar/ce/rx/bitloading/fsm/src/fsm.c
+++ b/cesar/ce/rx/bitloading/fsm/src/fsm.c
@@ -26,24 +26,38 @@ ce_rx_bl_fsm_handle_event (ce_rx_t *ce_rx, sta_t *sta, ce_rx_bl_fsm_event_type_t
{
/* Check parameters. */
dbg_assert (sta);
- ce_rx_bl_fsm_state_t fsm = sta->ce_rx_bt.fsm;
- dbg_assert (fsm < CE_RX_BL_FSM_STATE_NB);
+ dbg_assert (data.measure);
+ ce_rx_bl_fsm_state_t *fsm;
+ if (data.measure->fsm_id == CE_RX_MEASURE_NO_INTERVAL)
+ fsm = &sta->ce_rx_bt.fsm;
+ else
+ {
+ dbg_assert (sta->intervals);
+ fsm = &sta->intervals->intervals[data.measure->fsm_id]->fsm;
+ }
+ ce_rx_bl_fsm_state_t old_fsm = *fsm;
+
+ dbg_assert (*fsm < CE_RX_BL_FSM_STATE_NB);
dbg_assert (e < CE_RX_BL_FSM_EVENT_TYPE_NB);
/* Get transition. */
- ce_rx_bl_fsm_transition_t tr = ce_rx_bl_fsm_transition_table[fsm][e];
+ ce_rx_bl_fsm_transition_t tr = ce_rx_bl_fsm_transition_table[*fsm][e];
/* A non managed event is an error. */
dbg_assert (tr);
/* Run transition. */
ce_rx_bl_fsm_branch_t br = tr (ce_rx, sta, data);
- dbg_assert (((br >> 16) & 0xff) == fsm);
+ dbg_assert (((br >> 16) & 0xff) == *fsm);
dbg_assert (((br >> 8) & 0xff) == e);
- sta->ce_rx_bt.fsm = br & 0xff;
+ *fsm = br & 0xff;
- if (fsm != sta->ce_rx_bt.fsm)
- CE_RX_TRACE (FSM_FROM_TO, sta->tei, fsm, e, sta->ce_rx_bt.fsm);
- ce_debug_gpio_event
- (CE_DEBUG_GPIO_EVENT_CE_RX_BL_FSM_IDLE + sta->ce_rx_bt.fsm, true);
+ /* Trace transition. */
+ if (old_fsm != *fsm)
+ CE_RX_TRACE (FSM_FROM_TO, sta->tei,
+ data.measure->fsm_id, old_fsm, e, *fsm);
+
+ if (data.measure->fsm_id == CE_RX_MEASURE_NO_INTERVAL)
+ ce_debug_gpio_event
+ (CE_DEBUG_GPIO_EVENT_CE_RX_BL_FSM_IDLE + sta->ce_rx_bt.fsm, true);
ce_debug_gpio_event
(CE_DEBUG_GPIO_EVENT_CE_RX_BL_MEASURE_NONE, false);
}
diff --git a/cesar/ce/rx/src/trace.c b/cesar/ce/rx/src/trace.c
index 482df15039..ba95c8a1ab 100644
--- a/cesar/ce/rx/src/trace.c
+++ b/cesar/ce/rx/src/trace.c
@@ -95,7 +95,7 @@ ce_rx_trace_init (ce_rx_t *ctx)
TRACE_EVENT (CE_RX_TRACE_SEND_RESTART_CE, "tei %d: "
"send ce restart", TIMESTAMP),
TRACE_EVENT (CE_RX_TRACE_FSM_FROM_TO, "tei %d: "
- "[fsm] %S == %E ==> %S", TIMESTAMP),
+ "[fsm %d] %S == %E ==> %S", TIMESTAMP),
TRACE_EVENT (CE_RX_TRACE_TONEMAP, "tei %d: "
"tone map generated: sum = %d => %dx0, %dx1, %dx2, %dx3 "
"%dx4, %dx5, %dx6, %dx7 (fsm id: %d)", TIMESTAMP),