Ver código fonte

Merge pull request #386 from hathach/follow-383

Follow 383
Ha Thach 6 anos atrás
pai
commit
e9c71055ac

+ 1 - 1
examples/device/board_test/sdkconfig.defaults

@@ -1,4 +1,4 @@
 CONFIG_IDF_CMAKE=y
 CONFIG_IDF_TARGET="esp32s2"
 CONFIG_IDF_TARGET_ESP32S2=y
-
+CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y

+ 1 - 0
examples/device/cdc_msc_freertos/sdkconfig.defaults

@@ -2,3 +2,4 @@ CONFIG_IDF_CMAKE=y
 CONFIG_IDF_TARGET="esp32s2"
 CONFIG_IDF_TARGET_ESP32S2=y
 CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=y
+CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y

+ 1 - 0
examples/device/hid_composite_freertos/sdkconfig.defaults

@@ -2,3 +2,4 @@ CONFIG_IDF_CMAKE=y
 CONFIG_IDF_TARGET="esp32s2"
 CONFIG_IDF_TARGET_ESP32S2=y
 CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=y
+CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y

+ 2 - 2
hw/bsp/esp32s2_saola_1/esp32s2_saola_1.c

@@ -37,8 +37,8 @@
 
 // Note: On the production version (v1.2) WS2812 is connected to GPIO 18,
 // however earlier revision v1.1 WS2812 is connected to GPIO 17
-#define LED_PIN               18 // v1.2 and later
-//#define LED_PIN               17 // v1.1
+//#define LED_PIN               18 // v1.2 and later
+#define LED_PIN               17 // v1.1
 
 #define BUTTON_PIN            0
 #define BUTTON_STATE_ACTIVE   0

+ 13 - 4
src/device/usbd.c

@@ -995,12 +995,21 @@ bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t
 
   TU_LOG2("  Queue EP %02X with %u bytes ... ", ep_addr, total_bytes);
 
+  // Set busy first since the actual transfer can be complete before dcd_edpt_xfer() could return
+  // and usbd task can preempt and clear the busy
   _usbd_dev.ep_status[epnum][dir].busy = true;
-  TU_VERIFY_HDLR( dcd_edpt_xfer(rhport, ep_addr, buffer, total_bytes), _usbd_dev.ep_status[epnum][dir].busy = false);
 
-  TU_LOG2("OK\r\n");
-
-  return true;
+  if ( dcd_edpt_xfer(rhport, ep_addr, buffer, total_bytes) )
+  {
+    TU_LOG2("OK\r\n");
+    return true;
+  }else
+  {
+    _usbd_dev.ep_status[epnum][dir].busy = false;
+    TU_LOG2("failed\r\n");
+    TU_BREAKPOINT();
+    return false;
+  }
 }
 
 bool usbd_edpt_busy(uint8_t rhport, uint8_t ep_addr)