Răsfoiți Sursa

add CFG_TUH_API_EDPT_XFER to enable generic edpt xfer

hathach 4 ani în urmă
părinte
comite
9dd2f11f4a
4 a modificat fișierele cu 46 adăugiri și 21 ștergeri
  1. 4 4
      examples/host/bare_api/src/tusb_config.h
  2. 32 15
      src/host/usbh.c
  3. 6 2
      src/host/usbh.h
  4. 4 0
      src/tusb_option.h

+ 4 - 4
examples/host/bare_api/src/tusb_config.h

@@ -81,11 +81,11 @@
 // 1 hub typically has 4 ports
 #define CFG_TUH_DEVICE_MAX          (CFG_TUH_HUB ? 4 : 1)
 
-#define CFG_TUH_ENDPOINT_MAX       8
+// Max endpoint per device
+#define CFG_TUH_ENDPOINT_MAX        8
 
-//------------- HID -------------//
-
-#define CFG_TUH_HID_EP_BUFSIZE      64
+// Enable tuh_edpt_xfer() API
+#define CFG_TUH_API_EDPT_XFER       1
 
 #ifdef __cplusplus
  }

+ 32 - 15
src/host/usbh.c

@@ -109,8 +109,15 @@ typedef struct {
 
   tu_edpt_state_t ep_status[CFG_TUH_ENDPOINT_MAX][2];
 
-#if CFG_TUH_BARE
-
+#if CFG_TUH_API_EDPT_XFER
+//  struct
+//  {
+//    uint8_t* buffer;
+//    tuh_xfer_cb_t complete_cb;
+//    uintptr_t user_arg;
+//
+//    volatile uint16_t actual_len;
+//  }ep_xfer;
 #endif
 
 } usbh_device_t;
@@ -240,6 +247,16 @@ static osal_queue_t _usbh_q;
 CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN
 static uint8_t _usbh_ctrl_buf[CFG_TUH_ENUMERATION_BUFSIZE];
 
+//// internal version of tuh_xfer_t
+//typedef struct
+//{
+//  uint8_t* buffer;
+//  tuh_xfer_cb_t complete_cb;
+//  uintptr_t user_arg;
+//
+//  volatile uint16_t actual_len;
+//}usbh_xfer_t;
+
 // Control transfer: since most controller does not support multiple control transfer
 // on multiple devices concurrently. And control transfer is not used much except enumeration
 // We will only execute control transfer one at a time.
@@ -890,6 +907,19 @@ static void _control_blocking_complete_cb(uint8_t daddr, tuh_xfer_t* xfer)
   *((xfer_result_t*) xfer->user_arg) = xfer->result;
 }
 
+bool tuh_control_xfer_sync(uint8_t daddr, tuh_xfer_t* xfer, uint32_t timeout_ms)
+{
+  (void) timeout_ms;
+
+  // clear callback for sync
+  xfer->complete_cb = NULL;
+
+  // TODO use timeout to wait
+  TU_VERIFY(tuh_control_xfer(daddr, xfer));
+
+  return true;
+}
+
 bool tuh_control_xfer (uint8_t daddr, tuh_xfer_t* xfer)
 {
   // pre-check to help reducing mutex lock
@@ -956,19 +986,6 @@ bool tuh_control_xfer (uint8_t daddr, tuh_xfer_t* xfer)
   return true;
 }
 
-bool tuh_control_xfer_sync(uint8_t daddr, tuh_xfer_t* xfer, uint32_t timeout_ms)
-{
-  (void) timeout_ms;
-
-  // clear callback for sync
-  xfer->complete_cb = NULL;
-
-  // TODO use timeout to wait
-  TU_VERIFY(tuh_control_xfer(daddr, xfer));
-
-  return true;
-}
-
 TU_ATTR_ALWAYS_INLINE static inline void _set_control_xfer_stage(uint8_t stage)
 {
   usbh_lock();

+ 6 - 2
src/host/usbh.h

@@ -113,13 +113,17 @@ static inline bool tuh_ready(uint8_t daddr)
 // Endpoint Asynchronous (non-blocking)
 //--------------------------------------------------------------------+
 
-// Carry out a control transfer
+// Submit a control transfer
 // true on success, false if there is on-going control transfer or incorrect parameters
 // Note: blocking if complete callback is NULL. In this case 'xfer->result' will be updated
 //       and if 'user_arg' point to a xfer_result_t variable, it will be updated as well.
 bool tuh_control_xfer(uint8_t daddr, tuh_xfer_t* xfer);
 
-//bool tuh_edpt_xfer(uint8_t daddr, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes);
+// Submit a bulk/interrupt transfer
+// true on success, false if there is on-going control transfer or incorrect parameters
+// Note: blocking if complete callback is NULL. In this case 'xfer->result' will be updated
+//       and if 'user_arg' point to a xfer_result_t variable, it will be updated as well.
+bool tuh_edpt_xfer(uint8_t daddr, tuh_xfer_t* xfer);
 
 // Set Configuration (control transfer)
 // config_num = 0 will un-configure device. Note: config_num = config_descriptor_index + 1

+ 4 - 0
src/tusb_option.h

@@ -392,6 +392,10 @@
 #define CFG_TUH_VENDOR 0
 #endif
 
+#ifndef CFG_TUH_API_EDPT_XFER
+#define CFG_TUH_API_EDPT_XFER 0
+#endif
+
 //------------------------------------------------------------------
 // Configuration Validation
 //------------------------------------------------------------------