From ec96a43dc35b7cdaaf3251b45d223145ebfa4b1a Mon Sep 17 00:00:00 2001
From: Raymond Knopp <raymond.knopp@eurecom.fr>
Date: Thu, 28 Jan 2016 23:24:17 -0800
Subject: [PATCH] integration, compiles now.

---
 .../ARCH/SODERA/USERSPACE/LIB/sodera_lib.cpp  | 68 +++++++++----------
 1 file changed, 34 insertions(+), 34 deletions(-)

diff --git a/targets/ARCH/SODERA/USERSPACE/LIB/sodera_lib.cpp b/targets/ARCH/SODERA/USERSPACE/LIB/sodera_lib.cpp
index e5b9107251..85dd0a6032 100644
--- a/targets/ARCH/SODERA/USERSPACE/LIB/sodera_lib.cpp
+++ b/targets/ARCH/SODERA/USERSPACE/LIB/sodera_lib.cpp
@@ -68,8 +68,8 @@ int num_devices=0;
 /*These items configure the underlying asynch stream used by the the sync interface. 
  */
 
-#define BUFFERSIZE 65536
-#define BUFFERSCOUNT 16  // must be a power of 2
+#define BUFFERSIZE 4096
+#define BUFFERSCOUNT 32
 typedef struct
 {
 
@@ -82,10 +82,11 @@ typedef struct
   LMS7002M lmsControl;
   LMS_StreamBoard *lmsStream;
 
-  uint8_t buffers_rx[BUFFERSIZE*BUFFERSCOUNT];
+  char buffers_rx[BUFFERSIZE*BUFFERSCOUNT];
   int handles[BUFFERSCOUNT];
-  int last_handle;
+  int current_handle;
   int samples_left_buffer;
+  int last_transfer;
 
   double sample_rate;
   // time offset between transmiter timestamp and receiver timestamp;
@@ -108,7 +109,7 @@ typedef struct
 typedef struct {
   uint8_t reserved[8];
   uint64_t counter;
-  uint8_t data[4080];
+  char data[4080];
 } StreamPacket_t;
 
 sodera_t sodera_state;
@@ -149,7 +150,6 @@ static int trx_sodera_start(openair0_device *device)
 {
   sodera_t *s = (sodera_t*)device->priv;
 
-  const int buffersCountMask = buffersCount-1;
 
   // init recv and send streaming
 
@@ -157,34 +157,35 @@ static int trx_sodera_start(openair0_device *device)
   s->tx_count = 0;
   s->rx_timestamp = 0;
   s->current_handle = 0;
+  s->last_transfer = 0;
 
   // switch off RX
-  uint16_t regVal = SPI_read(s->Port,0x0005);
-  SPI_write(s->port,0x0005,regVal & ~0x6);
+  uint16_t regVal = SPI_read(&s->Port,0x0005);
+  SPI_write(&s->Port,0x0005,regVal & ~0x6);
 
   if (s->channelscount==2) {
-    SPI_write(s->Port,0x0001,0x0003);
-    SPI_write(s->Port,0x0007,0x000A);
+    SPI_write(&s->Port,0x0001,0x0003);
+    SPI_write(&s->Port,0x0007,0x000A);
   }
   else {
-    SPI_write(s->Port,0x0001,0x0001);
-    SPI_write(s->Port,0x0007,0x0008);
+    SPI_write(&s->Port,0x0001,0x0001);
+    SPI_write(&s->Port,0x0007,0x0008);
   }
 
   // USB FIFO reset
   LMScomms::GenericPacket ctrPkt;
-  ctrPkt.cmd = CMD_USR_FIFO_RST;
+  ctrPkt.cmd = CMD_USB_FIFO_RST;
   ctrPkt.outBuffer.push_back(0x01);
   s->Port.TransferPacket(ctrPkt);
   ctrPkt.outBuffer[0]=0x00;
   s->Port.TransferPacket(ctrPkt);
   
-  uint16_t regVal = SPI_read(s->Port,0x0005);
+  regVal = SPI_read(&s->Port,0x0005);
   // provide timestamp, set streamTXEN, set TX/RX enable 
-  SPI_write(s->port,0x0005,(regVal & ~0x20) | 0x6);
+  SPI_write(&s->Port,0x0005,(regVal & ~0x20) | 0x6);
 
   for (int i=0; i< BUFFERSCOUNT ; i++) 
-    s->handles[i] = s->Port.BeginDataReading(&s->buffers[i*BUFFERSIZE],BUFFERSIZE);
+    s->handles[i] = s->Port.BeginDataReading(&s->buffers_rx[i*BUFFERSIZE],BUFFERSIZE);
 
   return 0;
 }
@@ -195,8 +196,8 @@ static void trx_sodera_end(openair0_device *device)
 
 
   // stop TX/RX if they were active
-  regVal = SPI_read(s->Port,0x0005);
-  SPI_write(s->Port,0x0005,regVal & ~0x6);
+  uint16_t regVal = SPI_read(&s->Port,0x0005);
+  SPI_write(&s->Port,0x0005,regVal & ~0x6);
 
 }
 
@@ -204,11 +205,6 @@ static int trx_sodera_write(openair0_device *device, openair0_timestamp timestam
 {
   sodera_t *s = (sodera_t*)device->priv;
 
-  if (cc>1) {
-    //    s->tx_stream->send(buff_ptrs, nsamps, s->tx_md);
-  }
-  else
-    //    s->tx_stream->send(buff[0], nsamps, s->tx_md);
 
   return 0;
 }
@@ -220,18 +216,23 @@ static int trx_sodera_read(openair0_device *device, openair0_timestamp *ptimesta
    int nsamps2;  // aligned to upper 32 or 16 byte boundary
    StreamPacket_t *p;
    int16_t sampleI,sampleQ;
-   uint8_t *pktStart;
+   char *pktStart;
    int offset = 0;
    int num_p;
    int ind=0;
+   int buffsize;
+   int spp;
 
    // this assumes that each request is of size 4096 bytes (spp = 4080/4/channelscount)
-   
+   spp = sizeof(p->data)>>2; // spp = size of payload in samples  
+   spp /= s->channelscount;
+
+
    // first get rid of remaining samples
    if (s->samples_left_buffer > 0) {
      buffsize = min(s->samples_left_buffer,nsamps);
-     pktStart = &s->buffers_rx[(s->last_handle-1)*BUFFERSIZE].data;
-     pktStart -= (spp-s->samples_left_buffer);
+     pktStart = ((StreamPacket_t*)&s->buffers_rx[(s->current_handle-1)*BUFFERSIZE])->data;
+     pktStart += (spp-s->samples_left_buffer);
      const int stepSize = s->channelscount * 3;
 
      for (int b=0;b<buffsize<<2;b+=stepSize) {
@@ -267,16 +268,14 @@ static int trx_sodera_read(openair0_device *device, openair0_timestamp *ptimesta
    // This is for the left-over part => READ from USB
 
 
-   spp = sizeof(p->data)>>2; // spp = size of payload in samples  
-   spp /= s->channelscount;
 
    num_p = nsamps / spp;
    if ((nsamps%spp) > 0)
      num_p++;
    s->samples_left_buffer = (num_p*spp)-nsamps;
    for (int i=0;i<num_p;i++)
-     s->handles[i] = s->Port.BeginDataReading(&buffers_rx[i*BUFFERSIZE],BUFFERSIZE);
-   s->last_handle = num_p;
+     s->handles[i] = s->Port.BeginDataReading(&s->buffers_rx[i*BUFFERSIZE],BUFFERSIZE);
+   s->current_handle = num_p;
    
 
    const int stepSize = s->channelscount * 3;
@@ -287,7 +286,8 @@ static int trx_sodera_read(openair0_device *device, openair0_timestamp *ptimesta
        printf("[recv] Error: request %d samples (%d/%d) WaitForReading timed out\n",nsamps,i,num_p);
        return(samples_received);
      }
-     if ((ret=Port.FinishDataReading(&s->buffers_rx[i*BUFFERSIZE],BUFFERSIZE,s->handles[i])) != BUFFERSIZE) {  
+     long bytesToRead=BUFFERSIZE;
+     if (s->Port.FinishDataReading(&s->buffers_rx[i*BUFFERSIZE],bytesToRead,s->handles[i]) != BUFFERSIZE) {  
        printf("[recv] Error: request %d samples (%d/%d) WaitForReading timed out\n",nsamps,i,num_p);
        return(samples_received);
      }
@@ -305,8 +305,8 @@ static int trx_sodera_read(openair0_device *device, openair0_timestamp *ptimesta
 	 }
        }
      }
-     pktStart = &p->data;
-     for (uint16_t b=0;b<sizeof(p->data);n+=stepSize) {
+     pktStart = p->data;
+     for (uint16_t b=0;b<sizeof(p->data);b+=stepSize) {
        for (int ch=0;ch < s->channelscount;ch++) {
 	 // I sample
 	 sampleI = (pktStart[b + 1 + 3*ch]&0x0F)<<8;
-- 
GitLab