diff --git a/components/DAP/config/DAP_config.h b/components/DAP/config/DAP_config.h
index 226145b..7121a2e 100644
--- a/components/DAP/config/DAP_config.h
+++ b/components/DAP/config/DAP_config.h
@@ -35,41 +35,7 @@
#include "gpio_struct.h"
#include "timer_struct.h"
#include "esp8266/pin_mux_register.h"
-#define GPIO_PIN_REG_0 PERIPHS_IO_MUX_GPIO0_U
-#define GPIO_PIN_REG_1 PERIPHS_IO_MUX_U0TXD_U
-#define GPIO_PIN_REG_2 PERIPHS_IO_MUX_GPIO2_U
-#define GPIO_PIN_REG_3 PERIPHS_IO_MUX_U0RXD_U
-#define GPIO_PIN_REG_4 PERIPHS_IO_MUX_GPIO4_U
-#define GPIO_PIN_REG_5 PERIPHS_IO_MUX_GPIO5_U
-#define GPIO_PIN_REG_6 PERIPHS_IO_MUX_SD_CLK_U
-#define GPIO_PIN_REG_7 PERIPHS_IO_MUX_SD_DATA0_U
-#define GPIO_PIN_REG_8 PERIPHS_IO_MUX_SD_DATA1_U
-#define GPIO_PIN_REG_9 PERIPHS_IO_MUX_SD_DATA2_U
-#define GPIO_PIN_REG_10 PERIPHS_IO_MUX_SD_DATA3_U
-#define GPIO_PIN_REG_11 PERIPHS_IO_MUX_SD_CMD_U
-#define GPIO_PIN_REG_12 PERIPHS_IO_MUX_MTDI_U
-#define GPIO_PIN_REG_13 PERIPHS_IO_MUX_MTCK_U
-#define GPIO_PIN_REG_14 PERIPHS_IO_MUX_MTMS_U
-#define GPIO_PIN_REG_15 PERIPHS_IO_MUX_MTDO_U
-#define GPIO_PIN_REG_16 PAD_XPD_DCDC_CONF
-#define GPIO_PIN_REG(i) \
- (i==0) ? GPIO_PIN_REG_0: \
- (i==1) ? GPIO_PIN_REG_1: \
- (i==2) ? GPIO_PIN_REG_2: \
- (i==3) ? GPIO_PIN_REG_3: \
- (i==4) ? GPIO_PIN_REG_4: \
- (i==5) ? GPIO_PIN_REG_5: \
- (i==6) ? GPIO_PIN_REG_6: \
- (i==7) ? GPIO_PIN_REG_7: \
- (i==8) ? GPIO_PIN_REG_8: \
- (i==9) ? GPIO_PIN_REG_9: \
- (i==10)? GPIO_PIN_REG_10: \
- (i==11)? GPIO_PIN_REG_11: \
- (i==12)? GPIO_PIN_REG_12: \
- (i==13)? GPIO_PIN_REG_13: \
- (i==14)? GPIO_PIN_REG_14: \
- (i==15)? GPIO_PIN_REG_15: \
- GPIO_PIN_REG_16
+
//**************************************************************************************************
/**
\defgroup DAP_Config_Debug_gr CMSIS-DAP Debug Unit Information
@@ -97,6 +63,9 @@ This information includes:
#define CPU_CLOCK 160000000 ///< Specifies the CPU Clock in Hz.
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<160MHz
+// This value is used to replace the largest 10MHZ speed clock in Keil
+#define MAX_USER_CLOCK 10000000 ///< Specifies the max Debug Clock in Hz.
+
/// Number of processor cycles for I/O Port write operations.
/// This value is used to calculate the SWD/JTAG clock speed that is generated with I/O
/// Port write operations in the Debug Unit by a Cortex-M MCU. Most Cortex-M processors
@@ -111,7 +80,7 @@ This information includes:
/// Indicate that JTAG communication mode is available at the Debug Port.
/// This information is returned by the command \ref DAP_Info as part of Capabilities.
-#define DAP_JTAG 0 ///< JTAG Mode: 1 = available, 0 = not available.
+#define DAP_JTAG 1 ///< JTAG Mode: 1 = available, 0 = not available.
/// Configure maximum number of JTAG devices on the scan chain connected to the Debug Access Port.
/// This setting impacts the RAM requirements of the Debug Unit. Valid range is 1 .. 255.
@@ -131,14 +100,14 @@ This information includes:
/// This configuration settings is used to optimize the communication performance with the
/// debugger and depends on the USB peripheral. Typical vales are 64 for Full-speed USB HID or WinUSB,
/// 1024 for High-speed USB HID and 512 for High-speed USB WinUSB.
-#define DAP_PACKET_SIZE 64U ///< Specifies Packet Size in bytes.
+#define DAP_PACKET_SIZE 255U ///< Specifies Packet Size in bytes.
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<< 512 for High-speed USB WinUSB.
/// Maximum Package Buffers for Command and Response data.
/// This configuration settings is used to optimize the communication performance with the
/// debugger and depends on the USB peripheral. For devices with limited RAM or USB buffer the
/// setting can be reduced (valid range is 1 .. 255).
-#define DAP_PACKET_COUNT 1U ///< Specifies number of packets buffered.
+#define DAP_PACKET_COUNT 20 ///< Specifies number of packets buffered.
/// Indicate that UART Serial Wire Output (SWO) trace is available.
/// This information is returned by the command \ref DAP_Info as part of Capabilities.
diff --git a/components/DAP/include/DAP.h b/components/DAP/include/DAP.h
index 516b83d..b467714 100644
--- a/components/DAP/include/DAP.h
+++ b/components/DAP/include/DAP.h
@@ -287,21 +287,25 @@ extern void DAP_Setup (void);
#define USE_ASSEMBLY 0
-#if USE_ASSEMBLY == 0
-__STATIC_FORCEINLINE void PIN_DELAY_SLOW (uint32_t delay) {
- uint32_t count = delay;
- while (--count);
-}
+#define USE_ASSEMBLY 1
+
+#if (USE_ASSEMBLY == 0)
+ __STATIC_FORCEINLINE void PIN_DELAY_SLOW(uint32_t delay)
+ {
+ uint32_t count = delay;
+ while (--count)
+ ;
+ }
#else
-__STATIC_FORCEINLINE void PIN_DELAY_SLOW (uint32_t delay) {
- __ASM volatile (
- ".syntax unified\n"
- "0:\n\t"
- "subs %0,%0,#1\n\t"
- "bne 0b\n"
- : "+l" (delay) : : "cc"
- );
+__STATIC_FORCEINLINE void PIN_DELAY_SLOW(uint32_t delay)
+{
+ __asm__ volatile(
+ "l_PINDELAYSLOW%=:"
+ "ADDI.N %[time], %[time], -1;"
+ "BNEZ %[time], l_PINDELAYSLOW%=;"
+ : [time] "+r"(delay));
}
+
#endif
// Fixed delay for fast clock generation
diff --git a/components/DAP/include/cmsis_compiler.h b/components/DAP/include/cmsis_compiler.h
index 349f5fd..aafbe21 100644
--- a/components/DAP/include/cmsis_compiler.h
+++ b/components/DAP/include/cmsis_compiler.h
@@ -11,5 +11,40 @@
#define __WEAK __attribute__((weak))
#endif
+#define GPIO_PIN_REG_0 PERIPHS_IO_MUX_GPIO0_U
+#define GPIO_PIN_REG_1 PERIPHS_IO_MUX_U0TXD_U
+#define GPIO_PIN_REG_2 PERIPHS_IO_MUX_GPIO2_U
+#define GPIO_PIN_REG_3 PERIPHS_IO_MUX_U0RXD_U
+#define GPIO_PIN_REG_4 PERIPHS_IO_MUX_GPIO4_U
+#define GPIO_PIN_REG_5 PERIPHS_IO_MUX_GPIO5_U
+#define GPIO_PIN_REG_6 PERIPHS_IO_MUX_SD_CLK_U
+#define GPIO_PIN_REG_7 PERIPHS_IO_MUX_SD_DATA0_U
+#define GPIO_PIN_REG_8 PERIPHS_IO_MUX_SD_DATA1_U
+#define GPIO_PIN_REG_9 PERIPHS_IO_MUX_SD_DATA2_U
+#define GPIO_PIN_REG_10 PERIPHS_IO_MUX_SD_DATA3_U
+#define GPIO_PIN_REG_11 PERIPHS_IO_MUX_SD_CMD_U
+#define GPIO_PIN_REG_12 PERIPHS_IO_MUX_MTDI_U
+#define GPIO_PIN_REG_13 PERIPHS_IO_MUX_MTCK_U
+#define GPIO_PIN_REG_14 PERIPHS_IO_MUX_MTMS_U
+#define GPIO_PIN_REG_15 PERIPHS_IO_MUX_MTDO_U
+#define GPIO_PIN_REG_16 PAD_XPD_DCDC_CONF
+#define GPIO_PIN_REG(i) \
+ (i==0) ? GPIO_PIN_REG_0: \
+ (i==1) ? GPIO_PIN_REG_1: \
+ (i==2) ? GPIO_PIN_REG_2: \
+ (i==3) ? GPIO_PIN_REG_3: \
+ (i==4) ? GPIO_PIN_REG_4: \
+ (i==5) ? GPIO_PIN_REG_5: \
+ (i==6) ? GPIO_PIN_REG_6: \
+ (i==7) ? GPIO_PIN_REG_7: \
+ (i==8) ? GPIO_PIN_REG_8: \
+ (i==9) ? GPIO_PIN_REG_9: \
+ (i==10)? GPIO_PIN_REG_10: \
+ (i==11)? GPIO_PIN_REG_11: \
+ (i==12)? GPIO_PIN_REG_12: \
+ (i==13)? GPIO_PIN_REG_13: \
+ (i==14)? GPIO_PIN_REG_14: \
+ (i==15)? GPIO_PIN_REG_15: \
+ GPIO_PIN_REG_16
#endif
\ No newline at end of file
diff --git a/components/DAP/source/DAP.c b/components/DAP/source/DAP.c
index 9e1f620..03f048c 100644
--- a/components/DAP/source/DAP.c
+++ b/components/DAP/source/DAP.c
@@ -377,6 +377,10 @@ static uint32_t DAP_SWJ_Clock(const uint8_t *request, uint8_t *response) {
*response = DAP_ERROR;
return ((4U << 16) | 1U);
}
+ if(clock == 10000000){
+ clock = MAX_USER_CLOCK;
+ }
+
if (clock >= MAX_SWJ_CLOCK(DELAY_FAST_CYCLES)) {
DAP_Data.fast_clock = 1U;
diff --git a/components/USBIP/USB_handle.c b/components/USBIP/USB_handle.c
index 62ba946..f9fe76a 100644
--- a/components/USBIP/USB_handle.c
+++ b/components/USBIP/USB_handle.c
@@ -321,7 +321,7 @@ static void handleGetDescriptor(usbip_stage2_header *header)
send_stage2_submit_data(header, 0, bosDescriptor, sizeof(bosDescriptor));
break;
case USB_DT_HID_REPORT:
- os_printf("* GET 0x22 HID REPORT DESCRIPTOR");
+ os_printf("* GET 0x22 HID REPORT DESCRIPTOR\r\n");
send_stage2_submit_data(header, 0, (void *)kHidReportDescriptor, sizeof(kHidReportDescriptor));
break;
default:
diff --git a/components/USBIP/USBd_config.c b/components/USBIP/USBd_config.c
index 598e7d9..0061a8b 100644
--- a/components/USBIP/USBd_config.c
+++ b/components/USBIP/USBd_config.c
@@ -155,7 +155,7 @@ const uint8_t kUSBd0InterfaceDescriptor[0x20]=
0x81, // bEndpointAddress
USB_ENDPOINT_ATTR_INTERRUPT, // bmAttributes
USBShort(64), // wMaxPacketSize
- 0xff, // bInterval
+ 0x01, // bInterval
/* Pysical endpoint 1 */
@@ -164,7 +164,7 @@ const uint8_t kUSBd0InterfaceDescriptor[0x20]=
0x01, // bEndpointAddress
USB_ENDPOINT_ATTR_INTERRUPT, // bmAttributes
USBShort(64), // wMaxPacketSize
- 0xff, // bInterval
+ 0x01, // bInterval
};
#endif
@@ -221,10 +221,10 @@ const uint8_t kHidReportDescriptor[0x21] = {
0x15, 0x00, // Logical Minimum (0)
0x26, 0xFF, 0x00, // Logical Maximum (255)
0x75, 0x08, // Report Size (8)
- 0x95, 0x40, // Report Count (64)
+ 0x95, 0xFF, // Report Count (64)
0x09, 0x01, // Usage (0x01)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
- 0x95, 0x40, // Report Count (64)
+ 0x95, 0xFF, // Report Count (64)
0x09, 0x01, // Usage (0x01)
0x91, 0x02, // Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x95, 0x01, // Report Count (1)
diff --git a/main/DAP_handle.c b/main/DAP_handle.c
index 4f51da4..a3bff99 100644
--- a/main/DAP_handle.c
+++ b/main/DAP_handle.c
@@ -1,20 +1,35 @@
/**
* @file DAP_handle.c
* @brief Handle DAP packets and transaction push
- * @version 0.1
- * @date 2020-01-25
+ * @version 0.2
+ * @date 2020-02-04
*
* @copyright Copyright (c) 2020
*
*/
#include
+#include
#include "usbip_server.h"
#include "DAP_handle.h"
#include "DAP.h"
#include "esp_libc.h"
+#include "USBd_config.h"
+
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "freertos/ringbuf.h"
+#include "freertos/semphr.h"
+
+#include "lwip/err.h"
+#include "lwip/sockets.h"
+#include "lwip/sys.h"
+#include
+
+extern int kSock;
+extern TaskHandle_t kDAPTaskHandle;
////TODO: Merge this
-#define DAP_PACKET_SIZE 64
+#define DAP_PACKET_SIZE 255
static uint8_t data_out[DAP_PACKET_SIZE];
static int dap_respond = 0;
@@ -24,29 +39,40 @@ static int swo_trace_respond = 0;
static uint8_t *swo_data_to_send;
static uint32_t num_swo_data;
-void handle_dap_data_request(usbip_stage2_header *header)
+static RingbufHandle_t dap_dataIN_handle = NULL;
+static RingbufHandle_t dap_dataOUT_handle = NULL;
+static SemaphoreHandle_t data_response_mux = NULL;
+
+static void unpack(void *data, int size);
+
+void handle_dap_data_request(usbip_stage2_header *header, uint32_t length)
{
uint8_t *data_in = (uint8_t *)header;
data_in = &(data_in[sizeof(usbip_stage2_header)]);
// Point to the beginning of the URB packet
+
+#if (USE_WINUSB == 1)
dap_respond = DAP_ProcessCommand((uint8_t *)data_in, (uint8_t *)data_out);
//handle_dap_data_response(header);
send_stage2_submit(header, 0, 0);
+#else
+ xRingbufferSend(dap_dataIN_handle, data_in, length - sizeof(usbip_stage2_header), portMAX_DELAY);
+ //os_printf("LENGTH: %d\r\n", length - sizeof(usbip_stage2_header));
+ xTaskNotifyGive(kDAPTaskHandle);
+ send_stage2_submit(header, 0, 0);
+
+#endif
}
+
void handle_dap_data_response(usbip_stage2_header *header)
{
if (dap_respond)
{
-
- //os_printf("*** Will respond");
-
send_stage2_submit_data(header, 0, data_out, DAP_PACKET_SIZE);
dap_respond = 0;
- //os_printf("*** RESPONDED ***");
}
else
{
- //os_printf("*** Will NOT respond");
send_stage2_submit(header, 0, 0);
}
}
@@ -56,14 +82,10 @@ void handle_swo_trace_response(usbip_stage2_header *header)
if (swo_trace_respond)
{
swo_trace_respond = 0;
- //os_printf("*** Will respond");
send_stage2_submit_data(header, 0, data_out, DAP_PACKET_SIZE);
-
- //os_printf("*** RESPONDED ***");
}
else
{
- //os_printf("*** Will NOT respond");
send_stage2_submit(header, 0, 0);
}
}
@@ -83,4 +105,111 @@ void SWO_AbortTransfer(void)
{
//USBD_EndpointAbort(0U, USB_ENDPOINT_IN(2U));
////TODO: unlink might be useful ...
+}
+
+void DAP_Thread(void *argument)
+{
+ dap_dataIN_handle = xRingbufferCreate(DAP_PACKET_SIZE * 20, RINGBUF_TYPE_BYTEBUF);
+ dap_dataOUT_handle = xRingbufferCreate(DAP_PACKET_SIZE * 10, RINGBUF_TYPE_BYTEBUF);
+ data_response_mux = xSemaphoreCreateMutex();
+ size_t packetSize;
+ uint8_t *item;
+
+ if (dap_dataIN_handle == NULL || dap_dataIN_handle == NULL ||
+ data_response_mux == NULL)
+ {
+ os_printf("Can not create DAP ringbuf/mux!\r\n");
+ vTaskDelete(NULL);
+ }
+ for (;;)
+ {
+
+ while (1)
+ {
+ ulTaskNotifyTake(pdFALSE, portMAX_DELAY);
+ packetSize = 0;
+ item = (uint8_t *)xRingbufferReceiveUpTo(dap_dataIN_handle, &packetSize,
+ (1 / portTICK_RATE_MS), DAP_PACKET_SIZE);
+ if (packetSize == 0)
+ {
+ break;
+ }
+
+ else if (packetSize < DAP_PACKET_SIZE)
+ {
+ os_printf("Wrong data in packet size:%d , data in remain: %d\r\n", packetSize, (int)xRingbufferGetMaxItemSize(dap_dataIN_handle));
+ vRingbufferReturnItem(dap_dataIN_handle, (void *)item);
+ break;
+ // This may not happen because there is a semaphore acquisition
+ }
+
+ if (item[0] == ID_DAP_QueueCommands)
+ item[0] = ID_DAP_ExecuteCommands;
+ DAP_ProcessCommand(item, data_out);
+
+ vRingbufferReturnItem(dap_dataIN_handle, (void *)item);
+ xRingbufferSend(dap_dataOUT_handle, data_out, DAP_PACKET_SIZE, portMAX_DELAY);
+ if (xSemaphoreTake(data_response_mux, portMAX_DELAY) == pdTRUE)
+ {
+ ++dap_respond;
+ xSemaphoreGive(data_response_mux);
+ }
+ }
+ }
+}
+
+int fast_reply(uint8_t *buf, uint32_t length)
+{
+ if (length == 48 && buf[3] == 1 && buf[15] == 1 && buf[19] == 1)
+ {
+ if (dap_respond > 0)
+ {
+ uint8_t *item;
+ size_t packetSize = 0;
+ item = (uint8_t *)xRingbufferReceiveUpTo(dap_dataOUT_handle, &packetSize,
+ (10 / portTICK_RATE_MS), DAP_PACKET_SIZE);
+ if (packetSize == DAP_PACKET_SIZE)
+ {
+ unpack((uint32_t *)buf, sizeof(usbip_stage2_header));
+ send_stage2_submit_data((usbip_stage2_header *)buf, 0, item, DAP_PACKET_SIZE);
+ if (xSemaphoreTake(data_response_mux, portMAX_DELAY) == pdTRUE)
+ {
+ --dap_respond;
+ xSemaphoreGive(data_response_mux);
+ }
+ vRingbufferReturnItem(dap_dataOUT_handle, (void *)item);
+ return 1;
+ }
+ else if (packetSize > 0)
+ {
+ os_printf("Wrong data out packet size:%d!\r\n", packetSize);
+ }
+ ////TODO: fast reply
+ }
+ else
+ {
+ buf[3] = 0x3; // command
+ buf[15] = 0; // direction
+ buf[0x16] = 0;
+ buf[0x17] = 0;
+ buf[27] = 0;
+ buf[39] = 0;
+ send(kSock, buf, 48, 0);
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static void unpack(void *data, int size)
+{
+
+ // Ignore the setup field
+ int sz = (size / sizeof(uint32_t)) - 2;
+ uint32_t *ptr = (uint32_t *)data;
+
+ for (int i = 0; i < sz; i++)
+ {
+ ptr[i] = ntohl(ptr[i]);
+ }
}
\ No newline at end of file
diff --git a/main/DAP_handle.h b/main/DAP_handle.h
index 5ac91f2..2d71be2 100644
--- a/main/DAP_handle.h
+++ b/main/DAP_handle.h
@@ -3,7 +3,10 @@
#include "usbip_defs.h"
-void handle_dap_data_request(usbip_stage2_header *header);
+void handle_dap_data_request(usbip_stage2_header *header, uint32_t length);
void handle_dap_data_response(usbip_stage2_header *header);
void handle_swo_trace_response(usbip_stage2_header *header);
+
+int fast_reply(uint8_t *buf, uint32_t length);
+
#endif
\ No newline at end of file
diff --git a/main/main.c b/main/main.c
index b26615d..6369f17 100644
--- a/main/main.c
+++ b/main/main.c
@@ -26,18 +26,17 @@
#include "tcp_server.h"
#include "timer.h"
#include "wifi_configuration.h"
-/* The examples use simple WiFi configuration that you can set via
- 'make menuconfig'.
- If you'd rather not, just change the below entries to strings with
- the config you want - ie #define EXAMPLE_WIFI_SSID "mywifissid"
-*/
+
+
extern void SWO_Thread(void *argument);
extern void usart_monitor_task(void *argument);
extern void DAP_Setup(void);
+extern void DAP_Thread(void *argument);
/* FreeRTOS event group to signal when we are connected & ready to make a request */
static EventGroupHandle_t wifi_event_group;
+TaskHandle_t kDAPTaskHandle = NULL;
const int IPV4_GOTIP_BIT = BIT0;
#ifdef CONFIG_EXAMPLE_IPV6
@@ -141,6 +140,7 @@ void app_main()
xTaskCreate(timer_create_task, "timer_create", 512, NULL, 10, NULL);
xTaskCreate(tcp_server_task, "tcp_server", 4096, NULL, 20, NULL);
+ xTaskCreate(DAP_Thread, "DAP_Task", 2048, NULL, 22, &kDAPTaskHandle);
// SWO Trace Task
//xTaskCreate(SWO_Thread, "swo_task", 1024, NULL, 6, NULL);
//xTaskCreate(usart_monitor_task, "uart_task", 512, NULL, 6, NULL);
diff --git a/main/tcp_server.c b/main/tcp_server.c
index 834381f..99e9fe8 100644
--- a/main/tcp_server.c
+++ b/main/tcp_server.c
@@ -34,7 +34,7 @@ int kSock = -1;
void tcp_server_task(void *pvParameters)
{
- uint8_t tcp_rx_buffer[256];
+ uint8_t tcp_rx_buffer[305];
char addr_str[128];
int addr_family;
int ip_protocol;
@@ -102,7 +102,7 @@ void tcp_server_task(void *pvParameters)
while (1)
{
- int len = recv(kSock, tcp_rx_buffer, 255, 0);
+ int len = recv(kSock, tcp_rx_buffer, sizeof(tcp_rx_buffer), 0);
// Error occured during receiving
if (len < 0)
{
@@ -118,19 +118,19 @@ void tcp_server_task(void *pvParameters)
// Data received
else
{
-// #ifdef CONFIG_EXAMPLE_IPV6
-// // Get the sender's ip address as string
-// if (sourceAddr.sin6_family == PF_INET)
-// {
-// inet_ntoa_r(((struct sockaddr_in *)&sourceAddr)->sin_addr.s_addr, addr_str, sizeof(addr_str) - 1);
-// }
-// else if (sourceAddr.sin6_family == PF_INET6)
-// {
-// inet6_ntoa_r(sourceAddr.sin6_addr, addr_str, sizeof(addr_str) - 1);
-// }
-// #else
-// inet_ntoa_r(((struct sockaddr_in *)&sourceAddr)->sin_addr.s_addr, addr_str, sizeof(addr_str) - 1);
-// #endif
+ // #ifdef CONFIG_EXAMPLE_IPV6
+ // // Get the sender's ip address as string
+ // if (sourceAddr.sin6_family == PF_INET)
+ // {
+ // inet_ntoa_r(((struct sockaddr_in *)&sourceAddr)->sin_addr.s_addr, addr_str, sizeof(addr_str) - 1);
+ // }
+ // else if (sourceAddr.sin6_family == PF_INET6)
+ // {
+ // inet6_ntoa_r(sourceAddr.sin6_addr, addr_str, sizeof(addr_str) - 1);
+ // }
+ // #else
+ // inet_ntoa_r(((struct sockaddr_in *)&sourceAddr)->sin_addr.s_addr, addr_str, sizeof(addr_str) - 1);
+ // #endif
switch (kState)
{
@@ -155,6 +155,8 @@ void tcp_server_task(void *pvParameters)
os_printf("Shutting down socket and restarting...\r\n");
//shutdown(kSock, 0);
close(kSock);
+ if (kState == EMULATING)
+ kState = ACCEPTING;
//shutdown(listen_sock, 0);
//close(listen_sock);
diff --git a/main/usbip_server.c b/main/usbip_server.c
index 9c41eef..1eb2b75 100644
--- a/main/usbip_server.c
+++ b/main/usbip_server.c
@@ -11,6 +11,7 @@
#include "USBd_config.h"
#include "DAP_handle.h"
#include "USB_handle.h"
+#include "USBd_config.h"
// attach helper function
static int read_stage1_command(uint8_t *buffer, uint32_t length);
@@ -24,14 +25,13 @@ static void send_interface_info();
// emulate helper function
static void pack(void *data, int size);
static void unpack(void *data, int size);
-static int handle_submit(usbip_stage2_header *header);
+static int handle_submit(usbip_stage2_header *header, uint32_t length);
static int read_stage2_command(usbip_stage2_header *header, uint32_t length);
static void handle_unlink(usbip_stage2_header *header);
// unlink helper function
static void send_stage2_unlink(usbip_stage2_header *req_header);
-static void fast_submit_reply(usbip_stage2_header *req_header);
int attach(uint8_t *buffer, uint32_t length)
@@ -182,6 +182,12 @@ static void send_interface_info()
int emulate(uint8_t *buffer, uint32_t length)
{
// usbip_stage2_header header;
+ #if (USE_WINUSB == 0)
+ if(fast_reply(buffer, length))
+ {
+ return 0;
+ }
+ #endif
int command = read_stage2_command((usbip_stage2_header *)buffer, length);
if (command < 0)
{
@@ -191,7 +197,7 @@ int emulate(uint8_t *buffer, uint32_t length)
switch (command)
{
case USBIP_STAGE2_REQ_SUBMIT:
- handle_submit((usbip_stage2_header *)buffer);
+ handle_submit((usbip_stage2_header *)buffer , length);
break;
case USBIP_STAGE2_REQ_UNLINK:
@@ -200,7 +206,7 @@ int emulate(uint8_t *buffer, uint32_t length)
default:
os_printf("emulate unknown command:%d\r\n", command);
- handle_submit((usbip_stage2_header *)buffer);
+ //handle_submit((usbip_stage2_header *)buffer, length);
return -1;
}
return 0;
@@ -269,7 +275,7 @@ static void unpack(void *data, int size)
* @brief USB transaction processing
*
*/
-static int handle_submit(usbip_stage2_header *header)
+static int handle_submit(usbip_stage2_header *header, uint32_t length)
{
switch (header->base.ep)
{
@@ -283,7 +289,7 @@ static int handle_submit(usbip_stage2_header *header)
if (header->base.direction == 0)
{
//os_printf("EP 01 DATA FROM HOST");
- handle_dap_data_request(header);
+ handle_dap_data_request(header ,length);
}
else
{
diff --git a/sdkconfig b/sdkconfig
index 08378b1..4db752e 100644
--- a/sdkconfig
+++ b/sdkconfig
@@ -25,7 +25,7 @@ CONFIG_ESPTOOLPY_BAUD_921600B=y
# CONFIG_ESPTOOLPY_BAUD_2MB is not set
# CONFIG_ESPTOOLPY_BAUD_OTHER is not set
CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200
-CONFIG_ESPTOOLPY_BAUD=115200
+CONFIG_ESPTOOLPY_BAUD=921600
CONFIG_ESPTOOLPY_COMPRESSED=y
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set
@@ -33,12 +33,12 @@ CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set
CONFIG_ESPTOOLPY_FLASHMODE="dio"
CONFIG_SPI_FLASH_MODE=0x0
-# CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set
-CONFIG_ESPTOOLPY_FLASHFREQ_40M=y
+CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
+# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set
# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set
# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set
-CONFIG_ESPTOOLPY_FLASHFREQ="40m"
-CONFIG_SPI_FLASH_FREQ=0x0
+CONFIG_ESPTOOLPY_FLASHFREQ="80m"
+CONFIG_SPI_FLASH_FREQ=0xf
# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set
@@ -76,9 +76,9 @@ CONFIG_EXAMPLE_IPV4=y
CONFIG_EXAMPLE_PORT=3333
# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set
CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
-CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
+# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE is not set
# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set
-# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set
+CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y
# CONFIG_COMPILER_CXX_EXCEPTIONS is not set
CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set
@@ -87,7 +87,7 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
# CONFIG_COMPILER_STACK_CHECK is not set
# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set
CONFIG_APP_UPDATE_CHECK_APP_SUM=y
-# CONFIG_APP_UPDATE_CHECK_APP_HASH is not set
+CONFIG_APP_UPDATE_CHECK_APP_HASH=y
# CONFIG_AWS_IOT_SDK is not set
# CONFIG_USING_ESP_CONSOLE is not set
CONFIG_ESP_TLS_USING_MBEDTLS=y
@@ -107,8 +107,8 @@ CONFIG_ESP_FILENAME_MACRO_NO_PATH=y
# CONFIG_ESP_FILENAME_MACRO_NULL is not set
CONFIG_USING_NEW_ETS_VPRINTF=y
# CONFIG_LINK_ETS_PRINTF_TO_IRAM is not set
-# CONFIG_SOC_FULL_ICACHE is not set
-CONFIG_SOC_IRAM_SIZE=0xC000
+CONFIG_SOC_FULL_ICACHE=y
+CONFIG_SOC_IRAM_SIZE=0x8000
CONFIG_CONSOLE_UART_DEFAULT=y
# CONFIG_CONSOLE_UART_CUSTOM is not set
# CONFIG_CONSOLE_UART_NONE is not set
@@ -130,7 +130,6 @@ CONFIG_TASK_WDT_TIMEOUT_S=15
CONFIG_RESET_REASON=y
CONFIG_WIFI_PPT_TASKSTACK_SIZE=2048
CONFIG_EVENT_LOOP_STACK_SIZE=2048
-CONFIG_ESP8266_CORE_GLOBAL_DATA_LINK_IRAM=y
# CONFIG_ESP8266_OTA_FROM_OLD is not set
# CONFIG_ESP8266_BOOT_COPY_APP is not set
CONFIG_ESP_ERR_TO_NAME_LOOKUP=y
@@ -141,7 +140,7 @@ CONFIG_WIFI_TX_RATE_SEQUENCE_FROM_HIGH=y
# CONFIG_ESP8266_WIFI_QOS_ENABLED is not set
# CONFIG_ESP8266_WIFI_AMPDU_RX_ENABLED is not set
# CONFIG_ESP8266_WIFI_AMSDU_ENABLED is not set
-CONFIG_ESP8266_WIFI_RX_BUFFER_NUM=16
+CONFIG_ESP8266_WIFI_RX_BUFFER_NUM=26
CONFIG_ESP8266_WIFI_LEFT_CONTINUOUS_RX_BUFFER_NUM=4
CONFIG_ESP8266_WIFI_RX_PKT_NUM=7
CONFIG_ESP8266_WIFI_TX_PKT_NUM=6
@@ -151,8 +150,8 @@ CONFIG_ESP8266_WIFI_CONNECT_OPEN_ROUTER_WHEN_PWD_IS_SET=y
CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y
# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set
CONFIG_ESP_PHY_INIT_DATA_VDD33_CONST=33
-CONFIG_ESP8266_PHY_MAX_WIFI_TX_POWER=20
-# CONFIG_ESP8266_HSPI_HIGH_THROUGHPUT is not set
+CONFIG_ESP8266_PHY_MAX_WIFI_TX_POWER=21
+CONFIG_ESP8266_HSPI_HIGH_THROUGHPUT=y
CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y
CONFIG_HTTP_BUF_SIZE=512
CONFIG_HTTPD_MAX_REQ_HDR_LEN=512
@@ -166,33 +165,31 @@ CONFIG_FREERTOS_MAX_HOOK=2
CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1024
CONFIG_FREERTOS_ISR_STACKSIZE=512
# CONFIG_FREERTOS_EXTENED_HOOKS is not set
-CONFIG_FREERTOS_GLOBAL_DATA_LINK_IRAM=y
-# CONFIG_FREERTOS_CODE_LINK_TO_IRAM is not set
+CONFIG_FREERTOS_CODE_LINK_TO_IRAM=y
CONFIG_FREERTOS_TIMER_STACKSIZE=2048
CONFIG_TASK_SWITCH_FASTER=y
# CONFIG_USE_QUEUE_SETS is not set
# CONFIG_ENABLE_FREERTOS_SLEEP is not set
# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set
# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set
-# CONFIG_HEAP_DISABLE_IRAM is not set
+CONFIG_HEAP_DISABLE_IRAM=y
# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set
-# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set
+CONFIG_LOG_DEFAULT_LEVEL_ERROR=y
# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set
-CONFIG_LOG_DEFAULT_LEVEL_INFO=y
+# CONFIG_LOG_DEFAULT_LEVEL_INFO is not set
# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set
# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set
-CONFIG_LOG_DEFAULT_LEVEL=3
+CONFIG_LOG_DEFAULT_LEVEL=1
CONFIG_LOG_COLORS=y
# CONFIG_LOG_SET_LEVEL is not set
-# CONFIG_LWIP_USE_IRAM is not set
-# CONFIG_LWIP_HIGH_THROUGHPUT is not set
-CONFIG_LWIP_GLOBAL_DATA_LINK_IRAM=y
-CONFIG_TCPIP_RECVMBOX_SIZE=32
+CONFIG_LWIP_USE_IRAM=y
+CONFIG_LWIP_HIGH_THROUGHPUT=y
+CONFIG_TCPIP_RECVMBOX_SIZE=64
CONFIG_LWIP_ARP_TABLE_SIZE=10
CONFIG_LWIP_ARP_MAXAGE=300
# CONFIG_LWIP_ESP_GRATUITOUS_ARP is not set
CONFIG_LWIP_SOCKET_MULTITHREAD=y
-# CONFIG_ENABLE_NONBLOCK_SPEEDUP is not set
+CONFIG_ENABLE_NONBLOCK_SPEEDUP=y
CONFIG_SET_SOLINGER_DEFAULT=y
CONFIG_ESP_UDP_SYNC_SEND=y
CONFIG_ESP_UDP_SYNC_RETRY_MAX=5
@@ -202,8 +199,8 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y
# CONFIG_LWIP_SO_RCVBUF is not set
CONFIG_LWIP_RECV_BUFSIZE_DEFAULT=11680
CONFIG_LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT=10000
-# CONFIG_LWIP_IP_FRAG is not set
-# CONFIG_LWIP_IP_REASSEMBLY is not set
+CONFIG_LWIP_IP_FRAG=y
+CONFIG_LWIP_IP_REASSEMBLY=y
CONFIG_LWIP_IP_REASS_MAX_PBUFS=10
# CONFIG_LWIP_IP_SOF_BROADCAST is not set
# CONFIG_LWIP_IP_SOF_BROADCAST_RECV is not set
@@ -221,7 +218,7 @@ CONFIG_LWIP_IGMP=y
CONFIG_ESP_DNS=y
CONFIG_DNS_MAX_SERVERS=3
# CONFIG_LWIP_NETIF_LOOPBACK is not set
-# CONFIG_TCP_HIGH_SPEED_RETRANSMISSION is not set
+CONFIG_TCP_HIGH_SPEED_RETRANSMISSION=y
CONFIG_LWIP_MAX_ACTIVE_TCP=5
CONFIG_LWIP_MAX_LISTENING_TCP=8
CONFIG_TCP_MAXRTX=12
@@ -229,7 +226,7 @@ CONFIG_TCP_SYNMAXRTX=6
CONFIG_TCP_MSS=1460
CONFIG_TCP_SND_BUF_DEFAULT=2920
CONFIG_TCP_WND_DEFAULT=5840
-CONFIG_TCP_RECVMBOX_SIZE=6
+CONFIG_TCP_RECVMBOX_SIZE=16
CONFIG_TCP_QUEUE_OOSEQ=y
CONFIG_TCP_OVERSIZE_MSS=y
# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set
@@ -237,7 +234,7 @@ CONFIG_TCP_OVERSIZE_MSS=y
# CONFIG_LWIP_TCP_TIMESTAMPS is not set
CONFIG_LWIP_MAX_UDP_PCBS=4
CONFIG_UDP_RECVMBOX_SIZE=6
-CONFIG_TCPIP_TASK_STACK_SIZE=2048
+CONFIG_TCPIP_TASK_STACK_SIZE=4096
CONFIG_LWIP_MAX_RAW_PCBS=4
# CONFIG_LWIP_IPV6 is not set
# CONFIG_LWIP_STATS is not set
@@ -343,7 +340,6 @@ CONFIG_OPENSSL_ASSERT_DO_NOTHING=y
# CONFIG_ENABLE_PTHREAD is not set
# CONFIG_USING_SPIFFS is not set
CONFIG_IP_LOST_TIMER_INTERVAL=120
-CONFIG_TCPIP_ADAPTER_GLOBAL_DATA_LINK_IRAM=y
# CONFIG_util_assert is not set
CONFIG_ESP_SHA=y
CONFIG_ESP_AES=y
@@ -372,9 +368,9 @@ CONFIG_MONITOR_BAUD_OTHER_VAL=74880
CONFIG_MONITOR_BAUD=74880
# CONFIG_OPTIMIZATION_LEVEL_DEBUG is not set
CONFIG_OPTIMIZATION_LEVEL_RELEASE=y
-CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y
+# CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED is not set
# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set
-# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set
+CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED=y
# CONFIG_CXX_EXCEPTIONS is not set
CONFIG_STACK_CHECK_NONE=y
# CONFIG_STACK_CHECK_NORM is not set