summaryrefslogtreecommitdiff
path: root/cesar/ce
diff options
context:
space:
mode:
authordufour2009-09-22 10:58:52 +0000
committerdufour2009-09-22 10:58:52 +0000
commit2077193dc1874d298b20b55a5ad029aae25376c9 (patch)
treebb4be1dffa545d79bfd9eb6ea1b09b4b9165491d /cesar/ce
parent0d43ba8aa0c988cc3f19004fae09636cd67ae3cc (diff)
* ce/rx:
- add trace for the CE in RX. git-svn-id: svn+ssh://pessac/svn/cesar/trunk@5656 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar/ce')
-rw-r--r--cesar/ce/rx/Module3
-rw-r--r--cesar/ce/rx/inc/rx.h7
-rw-r--r--cesar/ce/rx/inc/trace.h61
-rw-r--r--cesar/ce/rx/src/measure.c4
-rw-r--r--cesar/ce/rx/src/rx.c8
-rw-r--r--cesar/ce/rx/src/trace.c40
6 files changed, 123 insertions, 0 deletions
diff --git a/cesar/ce/rx/Module b/cesar/ce/rx/Module
index 632ad7970e..02bfd0b486 100644
--- a/cesar/ce/rx/Module
+++ b/cesar/ce/rx/Module
@@ -1,2 +1,5 @@
# Channel Estimation (CE) in Receive (RX) mode.
SOURCES := rx.c measure.c
+ifeq ($(CONFIG_TRACE),y)
+SOURCES += trace.c
+endif
diff --git a/cesar/ce/rx/inc/rx.h b/cesar/ce/rx/inc/rx.h
index 38152c43f9..7bcbf061b4 100644
--- a/cesar/ce/rx/inc/rx.h
+++ b/cesar/ce/rx/inc/rx.h
@@ -31,6 +31,7 @@
#include "ce/rx/bitloading/inc/initial.h"
#include "common/defs/priority.h"
+#include "ce/rx/inc/trace.h"
/**
* Thread name of the CE in RX.
@@ -113,6 +114,12 @@ struct ce_rx_t
*/
cyg_handle_t alarm_handler;
#endif
+#if CONFIG_TRACE
+ /**
+ * CE/RX trace buffer.
+ */
+ trace_buffer_t trace;
+#endif
};
/**
diff --git a/cesar/ce/rx/inc/trace.h b/cesar/ce/rx/inc/trace.h
new file mode 100644
index 0000000000..88c7da05ce
--- /dev/null
+++ b/cesar/ce/rx/inc/trace.h
@@ -0,0 +1,61 @@
+#ifndef ce_rx_inc_trace_h
+#define ce_rx_inc_trace_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file ce/rx/inc/trace.h
+ * \brief Trace event for the CE/RX.
+ * \ingroup ce_rx
+ */
+
+#include "lib/trace.h"
+#include "ce/rx/inc/rx.h"
+
+/**
+ * Shortcut for tracing inside CE RX.
+ */
+#define CE_RX_TRACE(id, args...) \
+ TRACE_SHORT (CE_RX_TRACE_, &ce_rx->trace, id, ## args)
+
+#if CONFIG_TRACE
+
+enum
+{
+ CE_RX_TRACE_INIT,
+ CE_RX_TRACE_UNINIT,
+ CE_RX_TRACE_MEASURE_ADD_CHAN_DATA,
+ CE_RX_TRACE_CHAN_DATA_HANDLING,
+ CE_RX_TRACE_SAR_CB,
+};
+
+BEGIN_DECLS
+
+/**
+ * Initialise trace buffer.
+ * \param ctx ce_rx context.
+ */
+void
+ce_rx_trace_init (ce_rx_t *ctx);
+
+/**
+ * Un-initialise trace buffer.
+ * \param ctx ce_rx context.
+ */
+void
+ce_rx_trace_uninit (ce_rx_t *ctx);
+
+END_DECLS
+
+#else /* !CONFIG_TRACE */
+
+# define ce_rx_trace_init(ctx) ((void) 0)
+# define ce_rx_trace_uninit(ctx) ((void) 0)
+
+#endif /* !CONFIG_TRACE */
+
+#endif /* ce_rx_inc_trace_h */
diff --git a/cesar/ce/rx/src/measure.c b/cesar/ce/rx/src/measure.c
index 816e202835..033e060d40 100644
--- a/cesar/ce/rx/src/measure.c
+++ b/cesar/ce/rx/src/measure.c
@@ -42,6 +42,8 @@ ce_rx_measure_sar_cb (void *data, pbproc_rx_params_t *rx_params,
/* Get the context of the CE RX. */
ce_rx_t *ce_rx = (ce_rx_t *) data;
+ CE_RX_TRACE (SAR_CB);
+
/* Get channel data if they are some. */
if (chan_data_count)
{
@@ -130,6 +132,8 @@ ce_rx_measure_add_chan_data (ce_rx_t *ce_rx, pbproc_rx_params_t *rx_params,
dbg_assert (chan_data);
dbg_assert (chan_data_count);
+ CE_RX_TRACE (MEASURE_ADD_CHAN_DATA, rx_params->tei);
+
/* Allocate a measure. */
ce_rx_measure_mbox_t *measure = slab_alloc (&ce_rx->measure_cache);
/* Copy needed information. */
diff --git a/cesar/ce/rx/src/rx.c b/cesar/ce/rx/src/rx.c
index 9d238a6870..07b01e7a5a 100644
--- a/cesar/ce/rx/src/rx.c
+++ b/cesar/ce/rx/src/rx.c
@@ -40,6 +40,8 @@ ce_rx_init (mac_store_t *mac_store, sar_t *sar, pbproc_t *pbproc,
dbg_assert (mac_store);
dbg_assert (mac_config);
+ ce_rx_trace_init (&ce_rx);
+
/* Store a pointer to the MAC store. */
ce_rx.mac_store = mac_store;
@@ -82,6 +84,8 @@ ce_rx_init (mac_store_t *mac_store, sar_t *sar, pbproc_t *pbproc,
&ce_rx.thread_handler, &ce_rx.thread);
cyg_thread_resume (ce_rx.thread_handler);
+ TRACE_SHORT (CE_RX_TRACE_, &ce_rx.trace, INIT);
+
return &ce_rx;
}
@@ -153,6 +157,7 @@ ce_rx_process_work_quit (ce_rx_t *ce_rx)
ce_rx_cp_uninit (ce_rx);
/* Stop CE RX thread. */
ce_rx->stop_flag = true;
+ CE_RX_TRACE (INIT);
}
void
@@ -165,6 +170,9 @@ ce_rx_process_work_measure (ce_rx_t *ce_rx)
mbox_node_t *node = mbox_get (&ce_rx->measure_mbox);
ce_rx_measure_mbox_t * measure = PARENT_OF (ce_rx_measure_mbox_t,
mbox_node, node);
+
+ CE_RX_TRACE (CHAN_DATA_HANDLING, measure->rx_params.tei);
+
/* Ensure STA is created. */
mac_store_sta_add (ce_rx->mac_store,
measure->rx_params.tei);
diff --git a/cesar/ce/rx/src/trace.c b/cesar/ce/rx/src/trace.c
new file mode 100644
index 0000000000..0c9c8eebad
--- /dev/null
+++ b/cesar/ce/rx/src/trace.c
@@ -0,0 +1,40 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file ce/rx/src/trace.c
+ * \brief Trace event for the CE/RX.
+ * \ingroup ce_rx
+ */
+#include "common/std.h"
+#include "ce/rx/inc/trace.h"
+
+void
+ce_rx_trace_init (ce_rx_t *ctx)
+{
+ static trace_namespace_t namespace;
+ static const trace_event_id_t event_ids[] =
+ {
+ TRACE_EVENT (CE_RX_TRACE_INIT, "init"),
+ TRACE_EVENT (CE_RX_TRACE_UNINIT, "uninit"),
+ TRACE_EVENT (CE_RX_TRACE_MEASURE_ADD_CHAN_DATA, "new chandata "
+ "received from peer TEI %x"),
+ TRACE_EVENT (CE_RX_TRACE_CHAN_DATA_HANDLING, "handling chandata for "
+ "TEI %x"),
+ TRACE_EVENT (CE_RX_TRACE_SAR_CB, "Callback from SAR"),
+ };
+ dbg_assert (ctx);
+ trace_namespace_init (&namespace, event_ids, COUNT (event_ids));
+ trace_buffer_add (&ctx->trace, "ce_rx", 8, 4, true, &namespace);
+}
+
+void
+ce_rx_trace_uninit (ce_rx_t *ctx)
+{
+ dbg_assert (ctx);
+ trace_buffer_remove (&ctx->trace);
+}