started working on adding isochronous support
diff --git a/gyro_board/src/libusb-driver/libusb_wrap.cc b/gyro_board/src/libusb-driver/libusb_wrap.cc
index a297a9b..83cf245 100644
--- a/gyro_board/src/libusb-driver/libusb_wrap.cc
+++ b/gyro_board/src/libusb-driver/libusb_wrap.cc
@@ -163,4 +163,29 @@
   callback_(this, user_data_);
 }
 
+IsochronousTransfer::IsochronousTransfer(size_t packet_length,
+                                         int num_packets,
+                                         void (*callback)(Transfer *, void *),
+                                         void *user_data)
+    : Transfer(packet_length * num_packets, callback, user_data),
+      num_packets_(num_packets) {
+}
+
+void IsochronousTransfer::FillIsochronous(LibUSBDeviceHandle *device,
+                               unsigned char endpoint,
+                               unsigned int timeout) {
+  (void)device;
+  (void)endpoint;
+  (void)timeout;
+  /*libusb_fill_iso_transfer(transfer_,
+                           device->dev_handle_,
+                           endpoint,
+                           data_,
+                           data_length_,
+                           num_packets_,
+                           StaticTransferCallback,
+                           this,
+                           timeout);*/
+}
+
 }  // namespace libusb
diff --git a/gyro_board/src/libusb-driver/libusb_wrap.h b/gyro_board/src/libusb-driver/libusb_wrap.h
index 9713534..261cded 100644
--- a/gyro_board/src/libusb-driver/libusb_wrap.h
+++ b/gyro_board/src/libusb-driver/libusb_wrap.h
@@ -8,6 +8,7 @@
 class LibUSBDeviceHandle;
 namespace libusb {
 class Transfer;
+class IsochronousTransfer;
 }
 
 class LibUSB {
@@ -41,6 +42,7 @@
  private:
   friend class LibUSB; // For constructor
   friend class libusb::Transfer;  // for access to dev_handle_
+  friend class libusb::IsochronousTransfer;  // for access to dev_handle_
   // Takes ownership of the device handle and frees it when destructed.
   explicit LibUSBDeviceHandle(libusb_device_handle *dev_handle);
   libusb_device_handle *dev_handle_;
@@ -74,10 +76,12 @@
 
   const uint8_t *data() { return data_; }
 
- private:
+ protected:
   static void StaticTransferCallback(libusb_transfer *self) {
     static_cast<Transfer *>(self->user_data)->TransferCallback();
   }
+
+ private:
   void TransferCallback();
 
   libusb_transfer *const transfer_;
@@ -91,6 +95,21 @@
   DISALLOW_COPY_AND_ASSIGN(Transfer);
 };
 
+class IsochronousTransfer : public Transfer {
+ public:
+  IsochronousTransfer(size_t packet_length,
+                      int num_packets,
+                      void (*callback)(Transfer *, void *),
+                      void *user_data);
+
+  void FillIsochronous(LibUSBDeviceHandle *device,
+                       unsigned char endpoint,
+                       unsigned int timeout);
+
+ private:
+  const int num_packets_;
+};
+
 }  // namespace libusb
 
 #endif  // LIBUSB_H_
diff --git a/gyro_board/src/usb/LPCUSB/USB_SENSOR_STREAM.c b/gyro_board/src/usb/LPCUSB/USB_SENSOR_STREAM.c
index 576977f..4609c96 100644
--- a/gyro_board/src/usb/LPCUSB/USB_SENSOR_STREAM.c
+++ b/gyro_board/src/usb/LPCUSB/USB_SENSOR_STREAM.c
@@ -38,19 +38,24 @@
 
 #include "LPC17xx.h"
 
+#include "analog.h"
+
 #define usbMAX_SEND_BLOCK    ( 20 / portTICK_RATE_MS )
 #define usbRXBUFFER_LEN      ( 80 )
 #define usbTXBUFFER_LEN      ( 600 )
 
-#define INT_IN_EP    0x81 //read manual for picking these...
+#define INT_IN_EP     0x81 //read manual for picking these...
 #define INT_OUT_EP    0x04
 #define BULK_IN_EP    0x82
-#define BULK_OUT_EP    0x05
+#define BULK_OUT_EP   0x05
+#define ISOC_IN_EP    0x83
 
 #define MAX_PACKET_SIZE  64
 
 #define LE_WORD(x)    ((x)&0xFF),((x)>>8)
 
+static struct DataStruct usbPacket;
+
 static xQueueHandle xRxedChars = NULL, xCharsForTx = NULL;
 
 static const unsigned char abDescriptors[] = {
@@ -85,7 +90,7 @@
   DESC_INTERFACE,
   0x00,        // bInterfaceNumber
   0x00,        // bAlternateSetting
-  0x04,        // bNumEndPoints
+  0x05,        // bNumEndPoints
   0x0A,        // bInterfaceClass = data
   0x00,        // bInterfaceSubClass
   0x00,        // bInterfaceProtocol
@@ -118,6 +123,14 @@
   0x03,        // bmAttributes = intr
   LE_WORD(MAX_PACKET_SIZE),  // wMaxPacketSize
   0x01,        // bInterval
+  
+  // isoc data EP IN
+  0x07,
+  DESC_ENDPOINT,
+  ISOC_IN_EP,            // bEndpointAddress
+  0x0D,              // bmAttributes = isoc, synchronous, data endpoint
+  LE_WORD(MAX_PACKET_SIZE),  // wMaxPacketSize
+  0x01,            // bInterval  
 
   // string descriptors
   0x04,
@@ -217,11 +230,10 @@
     iLen = USBHwEPRead(bEP, abDataBuf, sizeof(abDataBuf));
     portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
 }
-#include "analog.h"
-static struct DataStruct usbPacket;
+
 static void DataIn(unsigned char bEP, unsigned char bEPStatus) {
     long lHigherPriorityTaskWoken = pdFALSE;
-  fillSensorPacket(&usbPacket);
+  	fillSensorPacket(&usbPacket);
     USBHwEPWrite(bEP, (unsigned char *)&usbPacket, sizeof(usbPacket));
     portEND_SWITCHING_ISR(lHigherPriorityTaskWoken);
 }
@@ -248,7 +260,7 @@
 
     // Don't block if not connected to USB.
     if (xQueueSend(xCharsForTx, &cc,
-                     USBIsConnected() ? usbMAX_SEND_BLOCK : 0) == pdPASS) {
+                   USBIsConnected() ? usbMAX_SEND_BLOCK : 0) == pdPASS) {
         return c;
     } else {
         return EOF;
@@ -271,7 +283,6 @@
     return -1;
 }
 
-
 /**
  * Interrupt handler
  *
@@ -281,21 +292,22 @@
   USBHwISR();
 }
 
-
 static void USBFrameHandler(unsigned short wFrame) {
   (void) wFrame;
-  if(uxQueueMessagesWaitingFromISR(xCharsForTx) > 0){
-    // data available, enable NAK interrupt on bulk in
+  if (uxQueueMessagesWaitingFromISR(xCharsForTx) > 0) {
+    // data available, enable interrupt instead of NAK on bulk in too
     USBHwNakIntEnable(INACK_BI | INACK_II);
-  }else{
+  } else {
     USBHwNakIntEnable(INACK_II);
   }
+
+  fillSensorPacket(&usbPacket);
+  USBHwEPWrite(ISOC_IN_EP, (unsigned char *)&usbPacket, sizeof(usbPacket));
 }
 
 void vUSBTask(void *pvParameters) {
   portTickType xLastFlashTime;
 
-  /* Just to prevent compiler warnings about the unused parameter. */
   (void) pvParameters;
   DBG("Initialising USB stack\n");