summaryrefslogtreecommitdiff
path: root/cesar
diff options
context:
space:
mode:
authorNélio Laranjeiro2013-02-25 17:25:29 +0100
committerNélio Laranjeiro2013-03-07 10:11:52 +0100
commit50c7d987aa279354815170ea6ea746643bd823f4 (patch)
treea3cf15d980ae28b46c0283ad2ad6c62451c12233 /cesar
parentebb22fc904aa06daa47b6648f1b3142dd26ac6ce (diff)
cesar/ce/rx/bitloading: return NULL if no NSR blocks are available, refs #3776
When no NSR blocks are available the function ce_rx_bl_get_nsr should return NULL. This can happen if the CP receive a vs_get_nsr.req MME and the CP preempts the CE before it starts using the NSR received.
Diffstat (limited to 'cesar')
-rw-r--r--cesar/ce/rx/bitloading/src/bitloading.c5
-rw-r--r--cesar/ce/rx/bitloading/test/src/test_bl.c2
-rw-r--r--cesar/ce/rx/test/src/test_rx.c6
3 files changed, 12 insertions, 1 deletions
diff --git a/cesar/ce/rx/bitloading/src/bitloading.c b/cesar/ce/rx/bitloading/src/bitloading.c
index 5853d373d5..1e0109168a 100644
--- a/cesar/ce/rx/bitloading/src/bitloading.c
+++ b/cesar/ce/rx/bitloading/src/bitloading.c
@@ -55,7 +55,10 @@ ce_rx_bl_get_nsr (ce_rx_bitloading_t *bl)
{
/* We can only get noise after bit loading initial. */
case CE_RX_BL_FSM_STATE_TRACKING:
- return bl->noise_nrj;
+ if (bl->noise_nrj_blk_count)
+ return bl->noise_nrj;
+ else
+ return NULL;
break;
default:
return NULL;
diff --git a/cesar/ce/rx/bitloading/test/src/test_bl.c b/cesar/ce/rx/bitloading/test/src/test_bl.c
index dfd219016a..d71e13e058 100644
--- a/cesar/ce/rx/bitloading/test/src/test_bl.c
+++ b/cesar/ce/rx/bitloading/test/src/test_bl.c
@@ -772,6 +772,7 @@ test_suite_ce_rx_bl_get_snr (test_t t)
blk_t * const fake_nsr = INVALID_PTR;
bl.noise_nrj = fake_nsr;
+ bl.noise_nrj_blk_count = 1;
test_begin (t, "check SNR available only in certain states")
{
@@ -792,6 +793,7 @@ test_suite_ce_rx_bl_get_snr (test_t t)
/* Clean. */
bl.noise_nrj = NULL;
+ bl.noise_nrj_blk_count = 0;
ce_rx_bitloading_uninit (&bl);
}
diff --git a/cesar/ce/rx/test/src/test_rx.c b/cesar/ce/rx/test/src/test_rx.c
index 8f3514d634..433f3170ea 100644
--- a/cesar/ce/rx/test/src/test_rx.c
+++ b/cesar/ce/rx/test/src/test_rx.c
@@ -361,16 +361,22 @@ test_ce_rx_get_snr (test_t t)
test_begin (t, "get SNR, bit loading initial done")
{
sta->ce_rx_bt.fsm = CE_RX_BL_FSM_STATE_TRACKING;
+ test_fail_if (ce_rx_get_nsr (ce_rx, tei, 0, 0, &ber) != NULL);
+ sta->ce_rx_bt.noise_nrj_blk_count = 1;
test_fail_if (ce_rx_get_nsr (ce_rx, tei, 0, 0, &ber) != INVALID_PTR);
test_fail_if (ber != 0);
+ sta->ce_rx_bt.noise_nrj_blk_count = 0;
} test_end;
test_begin (t, "get SNR, intervals version")
{
sta->rx_tonemaps->intervals->version = 0x42;
test_fail_if (ce_rx_get_nsr (ce_rx, tei, 0, 0, &ber) != NULL);
+ test_fail_if (ce_rx_get_nsr (ce_rx, tei, 0, 0x42, &ber) != NULL);
+ sta->ce_rx_bt.noise_nrj_blk_count = 1;
test_fail_if (ce_rx_get_nsr (ce_rx, tei, 0, 0x42, &ber) !=
INVALID_PTR);
+ sta->ce_rx_bt.noise_nrj_blk_count = 0;
} test_end;
/* Clean. */