summaryrefslogtreecommitdiff
path: root/cesar
diff options
context:
space:
mode:
authorCyril Jourdan2013-04-04 15:33:02 +0200
committerCyril Jourdan2013-04-18 16:42:06 +0200
commit13e0d70d0f2870c395f845ebdfadb0452c860bf9 (patch)
tree64b0fb193134d62d68345f397f580a52a7b213be /cesar
parent4be0332474452adb67ef4e59d5750af2a12f7e61 (diff)
cesar/ce/rx/bl: add a function to check tonemaps usage, refs #2588
The functions returns a bit field where each bit stands for a TMI and indicates if corresponding tonemap is currently used as default one or on at least one interval.
Diffstat (limited to 'cesar')
-rw-r--r--cesar/ce/rx/bitloading/inc/intervals.h11
-rw-r--r--cesar/ce/rx/bitloading/src/intervals.c23
-rw-r--r--cesar/ce/rx/bitloading/test/src/test_intervals.c54
3 files changed, 88 insertions, 0 deletions
diff --git a/cesar/ce/rx/bitloading/inc/intervals.h b/cesar/ce/rx/bitloading/inc/intervals.h
index 32a45535b6..37bfbbf066 100644
--- a/cesar/ce/rx/bitloading/inc/intervals.h
+++ b/cesar/ce/rx/bitloading/inc/intervals.h
@@ -24,6 +24,17 @@
BEGIN_DECLS
/**
+ * Get the list of tone map index used as default one or on any interval.
+ * \param sta station context.
+ * \param check_default true if you want to include tonemap index used as
+ * default one in result, false otherwise.
+ * \return a bit field list with a one when the tonemap index is used and
+ * zero when it is not.
+ */
+u32
+ce_rx_bl_intervals_get_tmi_used_list (sta_t *sta, bool check_default);
+
+/**
* Estimate the start and the end date of a PPDU.
* It transforms dates from rx_param in ATU.
* \param rx_param parameters of PPDU.
diff --git a/cesar/ce/rx/bitloading/src/intervals.c b/cesar/ce/rx/bitloading/src/intervals.c
index 87fe0d583a..8b66cc7e55 100644
--- a/cesar/ce/rx/bitloading/src/intervals.c
+++ b/cesar/ce/rx/bitloading/src/intervals.c
@@ -21,6 +21,29 @@
#include "ce/rx/cp/inc/cp.h"
#include "ce_rx_bl_fsm_defs.h"
+u32
+ce_rx_bl_intervals_get_tmi_used_list (sta_t *sta, bool check_default)
+{
+ /* Check parameters. */
+ dbg_assert (sta);
+
+ ce_rx_bitloading_intervals_t *its = sta->intervals;
+ tonemaps_t *tms = sta->rx_tonemaps;
+ u32 i, result = 0;
+
+ /* Check tonemap used as default one. */
+ if (check_default && tms->default_tmi < TONEMAP_INDEX_NB)
+ result |= (1 << tms->default_tmi);
+ /* Check tonemaps used on different intervals. */
+ for (i = 0; i < mac_interval_fsm_count_; i++)
+ {
+ if (its->tmi[i] < TONEMAP_INDEX_NB)
+ result |= (1 << its->tmi[i]);
+ }
+
+ return result;
+}
+
void
ce_rx_bl_intervals_measure_to_date (pbproc_rx_params_t *rx_param,
s16 *start_date_atu,
diff --git a/cesar/ce/rx/bitloading/test/src/test_intervals.c b/cesar/ce/rx/bitloading/test/src/test_intervals.c
index 4fb5f23f4e..d831d5b4b9 100644
--- a/cesar/ce/rx/bitloading/test/src/test_intervals.c
+++ b/cesar/ce/rx/bitloading/test/src/test_intervals.c
@@ -65,6 +65,58 @@ test_suite_ce_rx_bl_intervals_init (test_t t)
} test_end;
}
+void
+test_suite_ce_rx_bl_intervals_get_tmi_used_list (test_t t)
+{
+ uint old_fsm_nb = mac_interval_fsm_count_;
+ uint old_repetition_nb = mac_interval_repetition_count_;
+
+ /* This tests only works if the number of intervals is known, so I prefer
+ * to manage this locally. */
+ mac_interval_fsm_count_ = 6;
+ mac_interval_repetition_count_ = 4;
+
+ sta_t sta;
+
+ sta.rx_tonemaps = tonemaps_alloc ();
+ sta.intervals = ce_rx_bl_intervals_alloc (TONEMAP_INDEX_NEGOTIATED_FIRST);
+
+ test_case_begin (t, "Get tonemaps used list");
+ test_begin (t, "Including default one.")
+ {
+ sta.rx_tonemaps->default_tmi = TONEMAP_INDEX_INITIAL_START;
+ test_fail_if (ce_rx_bl_intervals_get_tmi_used_list (&sta, true)
+ != 0x00000010);
+ sta.rx_tonemaps->default_tmi = 0;
+ test_fail_if (ce_rx_bl_intervals_get_tmi_used_list (&sta, true)
+ != 0x00000011);
+ sta.rx_tonemaps->default_tmi = 18;
+ test_fail_if (ce_rx_bl_intervals_get_tmi_used_list (&sta, true)
+ != 0x00040010);
+ sta.intervals->tmi[0] = 5;
+ sta.intervals->tmi[2] = 31;
+ test_fail_if (ce_rx_bl_intervals_get_tmi_used_list (&sta, true)
+ != 0x80040030);
+ sta.intervals->tmi[2] = 29;
+ test_fail_if (ce_rx_bl_intervals_get_tmi_used_list (&sta, true)
+ != 0x20040030);
+ sta.intervals->tmi[4] = TONEMAP_INDEX_INTERVAL_UNAVAILABLE;
+ test_fail_if (ce_rx_bl_intervals_get_tmi_used_list (&sta, true)
+ != 0x20040030);
+ } test_end;
+ test_begin (t, "Excluding default one.")
+ {
+ test_fail_if (ce_rx_bl_intervals_get_tmi_used_list (&sta, false)
+ != 0x20000030);
+ } test_end;
+
+ /* Clean. */
+ tonemaps_release (sta.rx_tonemaps);
+ ce_rx_bl_intervals_free (sta.intervals);
+ mac_interval_fsm_count_ = old_fsm_nb;
+ mac_interval_repetition_count_ = old_repetition_nb;
+}
+
/**
* Time transformation from pbproc information to ATU.
*/
@@ -504,6 +556,8 @@ test_suite_ce_rx_bl_intervals (test_t t)
{
/* Intervals init and uninit. */
test_suite_ce_rx_bl_intervals_init (t);
+ /* Get used tonemap list. */
+ test_suite_ce_rx_bl_intervals_get_tmi_used_list (t);
/* Time transformation from pbproc information to ATU. */
test_suite_ce_rx_bl_intervals_measure_to_date (t);
/* Measure to interval computation. */