commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r4405 - gnuradio/branches/releases/3.0/usrp/host/lib


From: jcorgan
Subject: [Commit-gnuradio] r4405 - gnuradio/branches/releases/3.0/usrp/host/lib
Date: Wed, 7 Feb 2007 11:10:46 -0700 (MST)

Author: jcorgan
Date: 2007-02-07 11:10:46 -0700 (Wed, 07 Feb 2007)
New Revision: 4405

Modified:
   gnuradio/branches/releases/3.0/usrp/host/lib/fusb_win32.cc
Log:
Applied changeset r4153 on trunk to release branch.

Modified: gnuradio/branches/releases/3.0/usrp/host/lib/fusb_win32.cc
===================================================================
--- gnuradio/branches/releases/3.0/usrp/host/lib/fusb_win32.cc  2007-02-07 
18:06:50 UTC (rev 4404)
+++ gnuradio/branches/releases/3.0/usrp/host/lib/fusb_win32.cc  2007-02-07 
18:10:46 UTC (rev 4405)
@@ -168,33 +168,33 @@
     if (d_output_short == 0)
         usb_submit_async(d_context[d_curr],
                         &d_buffer[d_curr*d_block_size], d_block_size);
+  }
 
-       if (bytes_to_write == 0)
-               return nbytes;
+  while (bytes_to_write > 0) {
+    d_curr = (d_curr+1)%d_nblocks;
+    buf = &d_buffer[d_curr*d_block_size];
 
-       assert(d_output_short == 0);
-  }
+    if (d_outstanding_write != d_nblocks) {
+      d_outstanding_write++;
+    } else {
+      retval = usb_reap_async(d_context[d_curr], USB_TIMEOUT);
+      if (retval < 0) {
+                 fprintf(stderr, "%s: usb_reap_async: %s\n",
+                         __FUNCTION__, usb_strerror());
+         return retval;
+       }
+    }
 
-  d_curr = (d_curr+1)%d_nblocks;
-  buf = &d_buffer[d_curr*d_block_size];
+    int ncopy = std::min(bytes_to_write, d_block_size);
+    memcpy(buf, (void *) &(((char*)buffer)[a]), ncopy);
+    bytes_to_write -= ncopy;
+    a += ncopy;
 
-  if (d_outstanding_write != d_nblocks) {
-    d_outstanding_write++;
-  } else {
-    retval = usb_reap_async(d_context[d_curr], USB_TIMEOUT);
-    if (retval < 0) {
-               fprintf(stderr, "%s: usb_reap_async: %s\n",
-                       __FUNCTION__, usb_strerror());
-        return retval;
-      }
+    d_output_short = d_block_size - ncopy;
+    if (d_output_short == 0)
+           usb_submit_async(d_context[d_curr], buf, d_block_size);
   }
 
-  memcpy(buf, (void *) &(((char*)buffer)[a]), bytes_to_write);
-
-  d_output_short = d_block_size - bytes_to_write;
-  if (d_output_short == 0)
-         usb_submit_async(d_context[d_curr], buf, d_block_size);
-
   return retval < 0 ? retval : nbytes;
 }
 
@@ -224,27 +224,27 @@
     if (d_input_leftover == 0)
         usb_submit_async(d_context[d_curr],
                         &d_buffer[d_curr*d_block_size], d_block_size);
-
-       if (bytes_to_read == 0)
-               return nbytes;
-
-       assert(d_input_leftover == 0);
   }
 
+  while (bytes_to_read > 0) {
 
-  d_curr = (d_curr+1)%d_nblocks;
-  buf = &d_buffer[d_curr*d_block_size];
+    d_curr = (d_curr+1)%d_nblocks;
+    buf = &d_buffer[d_curr*d_block_size];
 
-  retval = usb_reap_async(d_context[d_curr], USB_TIMEOUT);
-  if (retval < 0)
-       fprintf(stderr, "%s: usb_reap_async: %s\n",
-                       __FUNCTION__, usb_strerror());
+    retval = usb_reap_async(d_context[d_curr], USB_TIMEOUT);
+    if (retval < 0)
+         fprintf(stderr, "%s: usb_reap_async: %s\n",
+                         __FUNCTION__, usb_strerror());
 
-  memcpy((void *) &(((char*)buffer)[a]), buf, bytes_to_read);
+    int ncopy = std::min(bytes_to_read, d_block_size);
+    memcpy((void *) &(((char*)buffer)[a]), buf, ncopy);
+    bytes_to_read -= ncopy;
+    a += ncopy;
 
-  d_input_leftover = d_block_size - bytes_to_read;
-  if (d_input_leftover == 0)
-         usb_submit_async(d_context[d_curr], buf, d_block_size);
+    d_input_leftover = d_block_size - ncopy;
+    if (d_input_leftover == 0)
+           usb_submit_async(d_context[d_curr], buf, d_block_size);
+  }
 
   return retval < 0 ? retval : nbytes;
 }





reply via email to

[Prev in Thread] Current Thread [Next in Thread]