summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlaranjeiro2010-02-04 14:18:37 +0000
committerlaranjeiro2010-02-04 14:18:37 +0000
commit03658a05e06297380c622ed34d293858ea9443a1 (patch)
treeea1850d450770b343a3d96cb947bcebca99aa6ad
parenta4ae761241cf7404103481f9fa6fd922c20d5b80 (diff)
cesar/mac/sar: add ber sum for all correct PBs received
git-svn-id: svn+ssh://pessac/svn/cesar/trunk@6688 017c9cb6-072f-447c-8318-d5b54f68fe89
-rw-r--r--cesar/mac/sar/inc/sar_context.h2
-rw-r--r--cesar/mac/sar/src/sar.c5
-rw-r--r--cesar/mac/sar/test/unit_test/ecos/src/crc_error.c10
3 files changed, 17 insertions, 0 deletions
diff --git a/cesar/mac/sar/inc/sar_context.h b/cesar/mac/sar/inc/sar_context.h
index 3e5eb4a758..d76cd364bd 100644
--- a/cesar/mac/sar/inc/sar_context.h
+++ b/cesar/mac/sar/inc/sar_context.h
@@ -100,6 +100,8 @@ struct sar_stats_t
/** Total number of PB with a CRC error received by ourself (from
* anyone). */
u32 rx_pb_crc_error_count;
+ /** BER sum of all PBs correct received from any station in the AVLN. */
+ u64 ber_sum;
};
typedef struct sar_stats_t sar_stats_t;
#endif
diff --git a/cesar/mac/sar/src/sar.c b/cesar/mac/sar/src/sar.c
index 4a0c4cf30d..c787fdeec2 100644
--- a/cesar/mac/sar/src/sar.c
+++ b/cesar/mac/sar/src/sar.c
@@ -308,10 +308,12 @@ sar_stats_init (sar_stats_t *ctx)
/* Reset to 0. */
ctx->rx_pb_count = 0;
ctx->rx_pb_crc_error_count = 0;
+ ctx->ber_sum = 0;
/* Register our statistics. */
lib_stats_set_stat_value_notype ("rx_pb_count", &ctx->rx_pb_count);
lib_stats_set_stat_value_notype ("rx_pb_crc_error_count",
&ctx->rx_pb_crc_error_count);
+ lib_stats_set_stat_value_notype ("ber_sum", &ctx->ber_sum);
}
#endif
@@ -1019,6 +1021,7 @@ sar_rx_mpdu_process (sar_t *ctx, sar_mpdu_t * rx)
bool collect_measure;
u8 pb_crc_error = 0;
u8 *ce_pb_crc_error;
+ u32 ber_sum = 0;
dbg_invalid_ptr(ce_pb_crc_error);
dbg_assert (ctx);
@@ -1081,6 +1084,7 @@ sar_rx_mpdu_process (sar_t *ctx, sar_mpdu_t * rx)
}
else
{
+ ber_sum += rx_head->phy_pb.pb_rx.pb_measurement.ber;
/* Store Expiration time in the PB header. */
rx_head->expiration_ntb = rx->expiration_ntb;
/* Get the current MFS. */
@@ -1158,6 +1162,7 @@ sar_rx_mpdu_process (sar_t *ctx, sar_mpdu_t * rx)
/* Increase statistics. */
ctx->stats.rx_pb_count += rx->rx.pb_nb;
ctx->stats.rx_pb_crc_error_count += pb_crc_error;
+ ctx->stats.ber_sum += ber_sum;
#endif
}
diff --git a/cesar/mac/sar/test/unit_test/ecos/src/crc_error.c b/cesar/mac/sar/test/unit_test/ecos/src/crc_error.c
index 7e1ca2dcbd..35c6970354 100644
--- a/cesar/mac/sar/test/unit_test/ecos/src/crc_error.c
+++ b/cesar/mac/sar/test/unit_test/ecos/src/crc_error.c
@@ -34,9 +34,12 @@ test_case_crc_error (test_t test)
{
sar_test_t t;
sar_mpdu_t rx;
+ pb_t *pb;
sar_test_init (&t, INVALID_PTR, INVALID_PTR);
sar_test_create_mpdu (&rx, 3, 0, 1, 2, true);
+ for (pb = rx.rx.pb_first; pb; pb = pb->next)
+ pb->phy_pb.pb_rx.pb_measurement.ber = 10;
t.sar->stats.rx_pb_count = 0;
t.sar->stats.rx_pb_crc_error_count = 0;
sar_rx_mpdu_process (t.sar, &rx);
@@ -44,6 +47,7 @@ test_case_crc_error (test_t test)
test_fail_unless (rx.rx.mfs == NULL);
test_fail_if (t.sar->stats.rx_pb_count != rx.rx.pb_nb);
test_fail_if (t.sar->stats.rx_pb_crc_error_count != rx.rx.pb_nb);
+ test_fail_if (t.sar->stats.ber_sum == 4 * 10);
sar_test_uninit (&t);
}
test_end;
@@ -55,6 +59,7 @@ test_case_crc_error (test_t test)
pb_t *first;
pb_t *last;
uint ssn;
+ pb_t *pb;
sar_test_init (&ctx, INVALID_PTR, INVALID_PTR);
sar_test_mpdu_default_fill (&rx);
@@ -65,7 +70,11 @@ test_case_crc_error (test_t test)
&rx.rx.pb_last,
rx.rx.pb_nb,
0, false, true);
+ for (pb = rx.rx.pb_first; pb; pb = pb->next)
+ pb->phy_pb.pb_rx.pb_measurement.ber = 10;
sar_test_create_pb_list (&first, &last, 3, 3, false, false);
+ for (pb = first; pb; pb = pb->next)
+ pb->phy_pb.pb_rx.pb_measurement.ber = 20;
rx.rx.pb_nb += 3;
/* Chain the new list. */
rx.rx.pb_last->next = first;
@@ -80,6 +89,7 @@ test_case_crc_error (test_t test)
test_fail_unless (first->header.ssn == ssn);
test_fail_if (ctx.sar->stats.rx_pb_count != 6);
test_fail_if (ctx.sar->stats.rx_pb_crc_error_count != 3);
+ test_fail_unless (ctx.sar->stats.ber_sum == 3 * 20);
/* Release the MFS. */
blk_release (rx.rx.mfs);