summaryrefslogtreecommitdiff
path: root/cesar/ce/rx/bitloading
diff options
context:
space:
mode:
authorCyril Jourdan2013-03-27 17:52:04 +0100
committerCyril Jourdan2013-04-18 16:42:05 +0200
commit4be0332474452adb67ef4e59d5750af2a12f7e61 (patch)
tree6ac0325da6305f12621a82a5eacb57d38f8795b3 /cesar/ce/rx/bitloading
parent277d149f4d5e5ccd3b6a2cf666db75d83bf77539 (diff)
cesar/ce/rx/bl: indicate if we should use ROBO as default TM, refs #2588
The goal is to help us to update the default tonemap when an interval is restarting.
Diffstat (limited to 'cesar/ce/rx/bitloading')
-rw-r--r--cesar/ce/rx/bitloading/bitloading.h1
-rw-r--r--cesar/ce/rx/bitloading/context.h9
-rw-r--r--cesar/ce/rx/bitloading/src/transition.c13
-rw-r--r--cesar/ce/rx/bitloading/test/intervals/src/test_intervals_fsm.c7
4 files changed, 28 insertions, 2 deletions
diff --git a/cesar/ce/rx/bitloading/bitloading.h b/cesar/ce/rx/bitloading/bitloading.h
index 1be3db246e..c4543b55cc 100644
--- a/cesar/ce/rx/bitloading/bitloading.h
+++ b/cesar/ce/rx/bitloading/bitloading.h
@@ -116,6 +116,7 @@ ce_rx_bitloading_init (ce_rx_bitloading_t *bt)
bt->resend_tm_date = 0;
ce_rx_bl_bmu_reset (&bt->bmu);
bt->optimization_failed = false;
+ bt->default_robo = true;
}
/**
diff --git a/cesar/ce/rx/bitloading/context.h b/cesar/ce/rx/bitloading/context.h
index 2d9f86e471..7e914883b7 100644
--- a/cesar/ce/rx/bitloading/context.h
+++ b/cesar/ce/rx/bitloading/context.h
@@ -182,6 +182,15 @@ typedef struct ce_rx_bitloading_t
ce_rx_bl_bmu_t bmu;
/** Actual bit-loading failed to optimize tone map as much as possible. */
bool optimization_failed;
+ /** Use ROBO for default tonemap?
+ * The goal of this field is to allow us to update default tonemap when
+ * intervals are activated. When one interval is restarting, it can use
+ * this field to indicate that channel quality may be decreasing
+ * significantly and that we should use ROBO as the default tonemap,
+ * at least temporarily.
+ * /!\ This field is only valid between interval reset and tonemap
+ * calculation and with intervals activated! */
+ bool default_robo;
} ce_rx_bitloading_t;
#endif /* ce_rx_bitloading_context_h */
diff --git a/cesar/ce/rx/bitloading/src/transition.c b/cesar/ce/rx/bitloading/src/transition.c
index fd9112a208..dff786f495 100644
--- a/cesar/ce/rx/bitloading/src/transition.c
+++ b/cesar/ce/rx/bitloading/src/transition.c
@@ -632,9 +632,17 @@ ce_rx_bl_fsm__INTERVAL_TRACKING__interval_sound (
sta_t *sta,
ce_rx_bitloading_fsm_event_param_t data)
{
+ dbg_assert (sta);
+ dbg_assert (sta->intervals);
+ dbg_assert (data.measure);
+
+ u8 fsm_id = data.measure->fsm_id;
+ dbg_assert (fsm_id <= mac_interval_fsm_count_);
+
/* We didn't requested sound on this interval so we reset the interval in
* order to be synchronized with remote station. */
- ce_rx_bl_intervals_reset (ce_rx, sta, data.measure->fsm_id);
+ sta->intervals->intervals[fsm_id]->default_robo = true;
+ ce_rx_bl_intervals_reset (ce_rx, sta, fsm_id);
ce_rx_bl__common_sound_measure_received (ce_rx,
sta,
data.measure,
@@ -691,6 +699,7 @@ ce_rx_bl_fsm__INTERVAL_TRACKING__interval_data (
/* Reset BER margin update. */
ce_rx_bl_bmu_reset (&bl->bmu);
/* Reset intervals. */
+ bl->default_robo = true;
ce_rx_bl_intervals_reset (ce_rx, sta, fsm_id);
return ce_rx_bl_fsm_next_branch (INTERVAL_TRACKING,
@@ -711,6 +720,7 @@ ce_rx_bl_fsm__INTERVAL_TRACKING__interval_data (
/* Reset BER margin update. */
ce_rx_bl_bmu_reset (&bl->bmu);
/* Reset intervals. */
+ bl->default_robo = false;
ce_rx_bl_intervals_reset (ce_rx, sta, fsm_id);
return ce_rx_bl_fsm_next_branch (INTERVAL_TRACKING,
@@ -723,6 +733,7 @@ ce_rx_bl_fsm__INTERVAL_TRACKING__interval_data (
CE_RX_BL_RESTART_REASON_BER_MARGIN_UPDATE);
/* Reset intervals. */
+ bl->default_robo = false;
ce_rx_bl_intervals_reset (ce_rx, sta, fsm_id);
return ce_rx_bl_fsm_next_branch (INTERVAL_TRACKING,
interval_data,
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 f637586caa..2592f83200 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
@@ -123,6 +123,7 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
ce_rx_bl_nsr_sum_init, .bl = sta.intervals->intervals[tested_fsm_id]);
fsm_base[pos++] = (scenario_entry_t) SCENARIO_END;
scenario_run (t, fsm_base, &globals);
+ test_fail_if (sta.intervals->intervals[tested_fsm_id]->default_robo != true);
} test_end;
/* Clean. */
@@ -168,7 +169,7 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
ce_rx_bl_nsr_sum_init, .bl = sta.intervals->intervals[tested_fsm_id]);
fsm_base[pos++] = (scenario_entry_t) SCENARIO_END;
scenario_run (t, fsm_base, &globals);
-
+ test_fail_if (sta.intervals->intervals[tested_fsm_id]->default_robo != true);
} test_end;
/* Clean. */
@@ -216,6 +217,7 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
ce_rx_bl_nsr_sum_init, .bl = sta.intervals->intervals[tested_fsm_id]);
fsm_base[pos++] = (scenario_entry_t) SCENARIO_END;
scenario_run (t, fsm_base, &globals);
+ test_fail_if (sta.intervals->intervals[tested_fsm_id]->default_robo != true);
} test_end;
/* Clean. */
@@ -382,6 +384,7 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
fsm_base[pos++] = (scenario_entry_t) SCENARIO_END;
scenario_run (t, fsm_base, &globals);
+ test_fail_if (sta.intervals->intervals[tested_fsm_id]->default_robo != true);
} test_end;
/* Clean. */
@@ -437,6 +440,7 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
fsm_base[pos++] = (scenario_entry_t) SCENARIO_END;
scenario_run (t, fsm_base, &globals);
+ test_fail_if (sta.intervals->intervals[tested_fsm_id]->default_robo != false);
} test_end;
/* Clean. */
@@ -493,6 +497,7 @@ test_ce_rx_bl_fsm_INTERVAL_TRACKING (test_t t)
fsm_base[pos++] = (scenario_entry_t) SCENARIO_END;
scenario_run (t, fsm_base, &globals);
+ test_fail_if (sta.intervals->intervals[tested_fsm_id]->default_robo != false);
} test_end;
/* Clean. */