feat: Improve DAP performance on USB-HID
This commit is contained in:
parent
c3582e8e2b
commit
ede735c2a7
|
@ -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 <b>Capabilities</b>.
|
||||
#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 <b>Capabilities</b>.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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;
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 <stdint.h>
|
||||
#include <string.h>
|
||||
#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 <lwip/netdb.h>
|
||||
|
||||
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]);
|
||||
}
|
||||
}
|
|
@ -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
|
10
main/main.c
10
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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
62
sdkconfig
62
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
|
||||
|
|
Loading…
Reference in New Issue