From 82c971a0c3d2c2b7971bfe6d7e62cda3d5002faf Mon Sep 17 00:00:00 2001
From: Navid Nikaein <navid.nikaein@eurecom.fr>
Date: Tue, 2 Jun 2015 11:00:37 +0000
Subject: [PATCH] update the bladerf interface

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7515 818b1a75-f10b-46b9-bf7c-635c3b92a50f
---
 .../ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c  | 49 +++++++++++--------
 1 file changed, 28 insertions(+), 21 deletions(-)

diff --git a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
index 8d4de95adf..192c059d22 100644
--- a/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
+++ b/targets/ARCH/BLADERF/USERSPACE/LIB/bladerf_lib.c
@@ -90,24 +90,28 @@ int trx_brf_start(openair0_device *openair0) {
 
 }
 
-int trx_brf_write(openair0_device *device,openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) {
+int trx_brf_write(openair0_device *device,openair0_timestamp ptimestamp, void **buff, int nsamps, int cc) {
   int status;
   struct bladerf_metadata meta;
   int16_t zeros[] = { 0, 0, 0, 0 };
   struct bladerf *dev =  (struct bladerf*) device->priv;
-  
+  openair0_timestamp current_timestamp;
   /* BRF has only 1 rx/tx chaine : is it correct? */
   void *sample = (void*)buff[0];
-  
+  memset(&meta, 0, sizeof(meta));
+
   /* Retrieve the current timestamp */
+#ifdef BRF_TEST 
   if ((status=bladerf_get_timestamp(dev, BLADERF_MODULE_TX, &meta.timestamp)) != 0) {
     fprintf(stderr,"Failed to get current RX timestamp: %s\n",bladerf_strerror(status));
   } else {
-    *ptimestamp = meta.timestamp;
-    printf("Current TX timestamp: 0x%016"PRIx64"\n", meta.timestamp);
+    current_timestamp = meta.timestamp;
+    printf("Current TX timestampe  0x%016"PRIx64" and current timestamp: 0x%016"PRIx64"\n", ptimestamp, meta.timestamp);
   }
-  
-  meta.flags |= BLADERF_META_FLAG_RX_NOW;
+#endif   
+  meta.timestamp= ptimestamp;
+
+  meta.flags |= BLADERF_META_FLAG_TX_NOW;
   
   status = bladerf_sync_tx(dev, sample, nsamps, &meta, timeout_ms);
   if (status != 0) {
@@ -125,7 +129,7 @@ int trx_brf_read(openair0_device *device, openair0_timestamp *ptimestamp, void *
   struct bladerf *dev =  (struct bladerf*) device->priv;
   /* BRF has only onerx/tx chain: is it correct? */
   void *sample = (void*)buff[0];
-  
+  memset(&meta, 0, sizeof(meta));
   /* Retrieve the current timestamp */
   if ((status=bladerf_get_timestamp(dev, BLADERF_MODULE_RX, &meta.timestamp)) != 0) {
     fprintf(stderr,"Failed to get current RX timestamp: %s\n",bladerf_strerror(status));
@@ -139,16 +143,16 @@ int trx_brf_read(openair0_device *device, openair0_timestamp *ptimestamp, void *
 
   status = bladerf_sync_rx(dev, sample, nsamps, &meta, timeout_ms);
 
-  /*if (meta.actual_count < nsamps ) {
+  /* if (meta.actual_count < nsamps ) {
     printf("[BRF][RX] received %d samples out of %d\n", meta.actual_count, nsamps);
-    }*/
-
+    }
+  */
   if (status != 0) {
     fprintf(stderr, "RX failed: %s\n", bladerf_strerror(status));
   } else if (meta.status & BLADERF_META_STATUS_OVERRUN) {
-    fprintf(stderr, "Overrun detected in RX. %u valid samples were read \n", meta.actual_count);
+    fprintf(stderr, "Overrun detected in RX. %u valid samples were read (nsymps %d)\n", meta.actual_count,nsamps);
   } else if (meta.status & BLADERF_META_STATUS_UNDERRUN) {
-    fprintf(stderr, "Underrun detected in RX. %u valid samples were read \n", meta.actual_count);
+    fprintf(stderr, "Underrun detected in RX. %u valid samples were read (nsymps %d) \n", meta.actual_count,nsamps);
   }else {
     printf("Got %u samples at t=0x%016"PRIx64"\n",  meta.actual_count, meta.timestamp);
   }
@@ -183,8 +187,17 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
   // opaque data struct
   struct bladerf *dev;// =  (struct bladerf*)malloc(sizeof(struct bladerf));
   //memset(dev, 0, sizeof(struct bladerf));
+  // An empty ("") or NULL device identifier will result in the first encountered device being opened (using the first discovered backend)
 
-  if ((status=bladerf_open(&dev, "")) != 0 ) {
+  // init required params for BRF
+  num_buffers = 16;
+  buffer_size = openair0_cfg[card]. samples_per_packet*sizeof(int32_t); // buffer size = 4096 for sample_len of 1024
+  num_transfers = 8; // ? device->openair0_cfg.samples_per_packets
+  timeout_ms = 1;
+  
+  printf("the buffer_size is set to %d\n", buffer_size);
+
+if ((status=bladerf_open(&dev, "")) != 0 ) {
     fprintf(stderr,"Failed to open brf device: %s\n",bladerf_strerror(status));
     brf_error(status);
   }
@@ -254,12 +267,7 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf
     brf_error(status);
   }
 
-  num_buffers = 16;
-  buffer_size = openair0_cfg[card].samples_per_packet*sizeof(int32_t);
-  num_transfers = 8; // ? device->openair0_cfg.samples_per_packets
-  timeout_ms = 1;
-
-
+ 
   bladerf_log_set_verbosity(get_brf_log_level(openair0_cfg[card].log_level));
   
   printf("BLADERF: Initializing openair0_device\n");
@@ -280,7 +288,6 @@ void brf_error(int status) {
 int get_brf_log_level(int log_level){
 
   int level=BLADERF_LOG_LEVEL_INFO;
-  
   switch(log_level) {
   case LOG_DEBUG:
     level=BLADERF_LOG_LEVEL_DEBUG;
-- 
GitLab