Nathan Conrad 6 лет назад
Родитель
Сommit
91cd247c97

+ 4 - 6
examples/device/usbtmc/src/usb_descriptors.c

@@ -106,7 +106,7 @@ uint8_t const * tud_hid_descriptor_report_cb(void)
 #if defined(CFG_TUD_USBTMC)
 
 #  define USBTMC_DESC_MAIN(_itfnum,_bNumEndpoints) \
-     USBTMC_IF_DESCRIPTOR(_itfnum, _bNumEndpoints,  /*_stridx = */ 7u, USBTMC_PROTOCOL_USB488), \
+     USBTMC_IF_DESCRIPTOR(_itfnum, _bNumEndpoints,  /*_stridx = */ 4u, USBTMC_PROTOCOL_USB488), \
      USBTMC_BULK_DESCRIPTORS(/* OUT = */0x03, /* IN = */ 0x83)
 
 #if defined(CFG_TUD_USBTMC_ENABLE_INT_EP)
@@ -209,10 +209,7 @@ char const* string_desc_arr [] =
   "TinyUSB",                     // 1: Manufacturer
   "TinyUSB Device",              // 2: Product
   "123456",                      // 3: Serials, should use chip ID
-  "TinyUSB CDC",                 // 4: CDC Interface
-  "TinyUSB MSC",                 // 5: MSC Interface
-  "TinyUSB HID",                 // 6: HID
-  "TinyUSB USBTMC",              // 7: USBTMC
+  "TinyUSB USBTMC",              // 4: USBTMC
 };
 
 static uint16_t _desc_str[32];
@@ -227,7 +224,8 @@ uint16_t const* tud_descriptor_string_cb(uint8_t index)
   {
     memcpy(&_desc_str[1], string_desc_arr[0], 2);
     chr_count = 1;
-  }else
+  }
+  else
   {
     // Convert ASCII string into UTF-16
 

+ 17 - 6
examples/device/usbtmc/src/usbtmc_app.c

@@ -64,8 +64,8 @@ usbtmcd_app_capabilities  =
     }
 #endif
 };
-
-static const char idn[] = "TinyUSB,ModelNumber,SerialNumber,FirmwareVer\n";
+//static const char idn[] = "TinyUSB,ModelNumber,SerialNumber,FirmwareVer";
+static const char idn[] = "TinyUSB,ModelNumber,SerialNumber,FirmwareVer and a bunch of other text to make it longer than a packet, perhaps?\n";
 static volatile uint8_t status;
 
 // 0=not query, 1=queried, 2=delay,set(MAV), 3=delay 4=ready?
@@ -86,6 +86,7 @@ bool usbtmcd_app_msgBulkOut_start(uint8_t rhport, usbtmc_msg_request_dev_dep_out
 {
   (void)rhport;
   (void)msgHeader;
+  uart_tx_str_sync("MSG_OUT_DATA: start\r\n");
   return true;
 }
 bool usbtmcd_app_msg_trigger(uint8_t rhport, usbtmc_msg_generic_t* msg) {
@@ -99,6 +100,11 @@ bool usbtmcd_app_msg_data(uint8_t rhport, void *data, size_t len, bool transfer_
   (void)rhport;
 
   // If transfer isn't finished, we just ignore it (for now)
+  uart_tx_str_sync("MSG_OUT_DATA: <<<");
+  uart_tx_sync(data,len);
+  uart_tx_str_sync(">>>\r\n");
+  if(transfer_complete)
+    uart_tx_str_sync("MSG_OUT_DATA: Complete\r\n");
 
   if(transfer_complete && (len >=4) && !strncasecmp("*idn?",data,4)) {
     queryState = 1;
@@ -115,13 +121,18 @@ bool usbtmcd_app_msgBulkIn_complete(uint8_t rhport)
   return true;
 }
 
+static unsigned int msgReqLen;
+
 bool usbtmcd_app_msgBulkIn_request(uint8_t rhport, usbtmc_msg_request_dev_dep_in const * request)
 {
   (void)rhport;
+
   rspMsg.header.MsgID = request->header.MsgID,
   rspMsg.header.bTag = request->header.bTag,
   rspMsg.header.bTagInverse = request->header.bTagInverse;
+  msgReqLen = request->TransferSize;
 
+  uart_tx_str_sync("MSG_IN_DATA: Requested!\r\n");
   TU_ASSERT(bulkInStarted == 0);
   bulkInStarted = 1;
 
@@ -143,14 +154,14 @@ void usbtmc_app_task_iter(void) {
     queryState = 2;
     break;
   case 2:
-    if( (board_millis() - queryDelayStart) > 1000u) {
+    if( (board_millis() - queryDelayStart) > 5u) {
       queryDelayStart = board_millis();
       queryState=3;
       status |= 0x10u; // MAV
     }
     break;
   case 3:
-    if( (board_millis() - queryDelayStart) > 1000u) {
+    if( (board_millis() - queryDelayStart) > 10u) {
       queryState = 4;
     }
     break;
@@ -158,8 +169,7 @@ void usbtmc_app_task_iter(void) {
     if(bulkInStarted) {
       queryState = 0;
       bulkInStarted = 0;
-      rspMsg.TransferSize = sizeof(idn)-1;
-      usbtmcd_transmit_dev_msg_data(rhport, &rspMsg, idn);
+      usbtmcd_transmit_dev_msg_data(rhport, idn,  tu_min32(sizeof(idn)-1,msgReqLen),false);
       // MAV is cleared in the transfer complete callback.
     }
     break;
@@ -189,6 +199,7 @@ bool usbtmcd_app_get_clear_status(uint8_t rhport, usbtmc_get_clear_status_rsp_t
   rsp->bmClear.BulkInFifoBytes = 0u;
   return true;
 }
+
 void usmtmcd_app_bulkIn_clearFeature(uint8_t rhport)
 {
   (void)rhport;

+ 2 - 2
src/class/usbtmc/usbtmc_device.h

@@ -86,8 +86,8 @@ TU_ATTR_WEAK bool usbtmcd_app_msg_trigger(uint8_t rhport, usbtmc_msg_generic_t*
 
 bool usbtmcd_transmit_dev_msg_data(
     uint8_t rhport,
-    usbtmc_msg_dev_dep_msg_in_header_t const * hdr,
-    const void *data);
+    const void * data, size_t len,
+    bool usingTermChar);
 
 
 /* "callbacks" from USB device core */