feat: add winusb support
This commit is contained in:
parent
1016da0803
commit
88c12b5332
|
@ -1,12 +1,13 @@
|
||||||
language: c
|
language: c
|
||||||
sudo: required
|
sudo: required
|
||||||
before_install:
|
before_install:
|
||||||
- sudo apt install -y gcc git wget make libncurses-dev flex bison python python-serial
|
- sudo apt install -y gcc git wget make libncurses-dev flex bison python python-serial ninja-build
|
||||||
- wget https://dl.espressif.com/dl/xtensa-lx106-elf-linux64-1.22.0-100-ge567ec7-5.2.0.tar.gz
|
- wget https://dl.espressif.com/dl/xtensa-lx106-elf-linux64-1.22.0-100-ge567ec7-5.2.0.tar.gz
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- tar -xzf ./xtensa-lx106-elf-linux64-1.22.0-100-ge567ec7-5.2.0.tar.gz
|
- tar -xzf ./xtensa-lx106-elf-linux64-1.22.0-100-ge567ec7-5.2.0.tar.gz
|
||||||
- git clone --recursive https://github.com/espressif/ESP8266_RTOS_SDK.git
|
- wget https://github.com/espressif/ESP8266_RTOS_SDK/releases/download/v3.3-rc1/ESP8266_RTOS_SDK-v3.3-rc1.zip
|
||||||
|
- unzip ESP8266_RTOS_SDK-v3.3-rc1.zip
|
||||||
- python -m pip install --user -r ./ESP8266_RTOS_SDK/requirements.txt
|
- python -m pip install --user -r ./ESP8266_RTOS_SDK/requirements.txt
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
|
|
|
@ -61,7 +61,7 @@ const uint8_t bosDescriptor[kLengthOfBos] =
|
||||||
0x05, // bLength of this descriptor
|
0x05, // bLength of this descriptor
|
||||||
USB_DESCRIPTOR_TYPE_BOS, // BOS Descriptor type(Constant)
|
USB_DESCRIPTOR_TYPE_BOS, // BOS Descriptor type(Constant)
|
||||||
USBShort(kLengthOfBos), // wLength
|
USBShort(kLengthOfBos), // wLength
|
||||||
0x01, // bNumDeviceCaps
|
0x01, // bNumDeviceCaps -> only 0x01 for OS2.0 descriptor
|
||||||
|
|
||||||
// Microsoft OS 2.0 platform capability descriptor header (Table 4)
|
// Microsoft OS 2.0 platform capability descriptor header (Table 4)
|
||||||
// See also:
|
// See also:
|
||||||
|
|
|
@ -19,15 +19,9 @@
|
||||||
#include "usb_defs.h"
|
#include "usb_defs.h"
|
||||||
#include "MSOS20Descriptors.h"
|
#include "MSOS20Descriptors.h"
|
||||||
|
|
||||||
// const char *strings_list[] = {
|
|
||||||
// 0, // reserved: available languages
|
|
||||||
// "windowsair",
|
|
||||||
// "CMSIS-DAP v2",
|
|
||||||
// "1234",
|
|
||||||
// };
|
|
||||||
|
|
||||||
const char *strings_list[] = {
|
const char *strings_list[] = {
|
||||||
0, // reserved: available languages
|
0, // reserved: available languages -> iInterface
|
||||||
"windowsair",
|
"windowsair",
|
||||||
"esp8266 CMSIS-DAP",
|
"esp8266 CMSIS-DAP",
|
||||||
"1234",
|
"1234",
|
||||||
|
@ -241,8 +235,7 @@ static void handleGetDescriptor(usbip_stage2_header *header)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
os_printf("Sending ALL CONFIG\r\n");
|
os_printf("Sending ALL CONFIG\r\n");
|
||||||
|
send_stage2_submit(header, 0, sizeof(kUSBd0ConfigDescriptor) + sizeof(kUSBd0InterfaceDescriptor));
|
||||||
send_stage2_submit(header, 0, header->u.cmd_submit.data_length);
|
|
||||||
send(kSock, kUSBd0ConfigDescriptor, sizeof(kUSBd0ConfigDescriptor), 0);
|
send(kSock, kUSBd0ConfigDescriptor, sizeof(kUSBd0ConfigDescriptor), 0);
|
||||||
send(kSock, kUSBd0InterfaceDescriptor, sizeof(kUSBd0InterfaceDescriptor), 0);
|
send(kSock, kUSBd0InterfaceDescriptor, sizeof(kUSBd0InterfaceDescriptor), 0);
|
||||||
}
|
}
|
||||||
|
@ -315,16 +308,19 @@ static void handleGetDescriptor(usbip_stage2_header *header)
|
||||||
////TODO:UNIMPLEMENTED
|
////TODO:UNIMPLEMENTED
|
||||||
send_stage2_submit(header, 0, 0);
|
send_stage2_submit(header, 0, 0);
|
||||||
break;
|
break;
|
||||||
|
#if (USE_WINUSB == 1)
|
||||||
case USB_DT_BOS:
|
case USB_DT_BOS:
|
||||||
os_printf("* GET 0x0F BOS DESCRIPTOR\r\n");
|
os_printf("* GET 0x0F BOS DESCRIPTOR\r\n");
|
||||||
send_stage2_submit_data(header, 0, bosDescriptor, sizeof(bosDescriptor));
|
send_stage2_submit_data(header, 0, bosDescriptor, sizeof(bosDescriptor));
|
||||||
break;
|
break;
|
||||||
|
#else
|
||||||
case USB_DT_HID_REPORT:
|
case USB_DT_HID_REPORT:
|
||||||
os_printf("* GET 0x22 HID REPORT DESCRIPTOR\r\n");
|
os_printf("* GET 0x22 HID REPORT DESCRIPTOR\r\n");
|
||||||
send_stage2_submit_data(header, 0, (void *)kHidReportDescriptor, sizeof(kHidReportDescriptor));
|
send_stage2_submit_data(header, 0, (void *)kHidReportDescriptor, sizeof(kHidReportDescriptor));
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
|
//// TODO: ms os 1.0 descriptor
|
||||||
os_printf("USB unknown Get Descriptor requested:%d\r\n", header->u.cmd_submit.request.wValue.u8lo);
|
os_printf("USB unknown Get Descriptor requested:%d\r\n", header->u.cmd_submit.request.wValue.u8lo);
|
||||||
os_printf("low bit :%d\r\n",header->u.cmd_submit.request.wValue.u8lo);
|
os_printf("low bit :%d\r\n",header->u.cmd_submit.request.wValue.u8lo);
|
||||||
os_printf("high bit :%d\r\n",header->u.cmd_submit.request.wValue.u8hi);
|
os_printf("high bit :%d\r\n",header->u.cmd_submit.request.wValue.u8hi);
|
||||||
|
|
|
@ -26,7 +26,12 @@ const uint8_t kUSBd0DeviceDescriptor[0x12] =
|
||||||
{
|
{
|
||||||
0x12, // bLength
|
0x12, // bLength
|
||||||
USB_DT_DEVICE, // bDescriptorType
|
USB_DT_DEVICE, // bDescriptorType
|
||||||
|
|
||||||
|
#if (USE_WINUSB == 1)
|
||||||
USBShort(0x0210), // bcdUSB
|
USBShort(0x0210), // bcdUSB
|
||||||
|
#else
|
||||||
|
USBShort(0x0200), // bcdUSB
|
||||||
|
#endif
|
||||||
////TODO: Is it also available elsewhere?
|
////TODO: Is it also available elsewhere?
|
||||||
|
|
||||||
// We need to use a device other than the USB-IF standard, set to 0x00
|
// We need to use a device other than the USB-IF standard, set to 0x00
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
/**
|
/**
|
||||||
* @file DAP_handle.c
|
* @file DAP_handle.c
|
||||||
* @brief Handle DAP packets and transaction push
|
* @brief Handle DAP packets and transaction push
|
||||||
* @version 0.2
|
* @version 0.3
|
||||||
* @date 2020-02-04
|
* @date 2020-02-04 first version
|
||||||
|
* 2020-11-11 support WinUSB mode
|
||||||
*
|
*
|
||||||
* @copyright Copyright (c) 2020
|
* @copyright Copyright (c) 2020
|
||||||
*
|
*
|
||||||
|
@ -31,9 +32,26 @@ extern TaskHandle_t kDAPTaskHandle;
|
||||||
////TODO: Merge this
|
////TODO: Merge this
|
||||||
#define DAP_PACKET_SIZE 255
|
#define DAP_PACKET_SIZE 255
|
||||||
|
|
||||||
static uint8_t data_out[DAP_PACKET_SIZE];
|
#if (USE_WINUSB == 1)
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t length;
|
||||||
|
uint8_t buf[DAP_PACKET_SIZE];
|
||||||
|
} DAPPacetDataType;
|
||||||
|
#else
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t buf[DAP_PACKET_SIZE];
|
||||||
|
} DAPPacetDataType;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define DAP_HANDLE_SIZE (sizeof(DAPPacetDataType))
|
||||||
|
|
||||||
|
static DAPPacetDataType DAPDataProcessed;
|
||||||
static int dap_respond = 0;
|
static int dap_respond = 0;
|
||||||
|
|
||||||
|
|
||||||
// SWO Trace
|
// SWO Trace
|
||||||
static int swo_trace_respond = 0;
|
static int swo_trace_respond = 0;
|
||||||
static uint8_t *swo_data_to_send;
|
static uint8_t *swo_data_to_send;
|
||||||
|
@ -52,37 +70,52 @@ void handle_dap_data_request(usbip_stage2_header *header, uint32_t length)
|
||||||
// Point to the beginning of the URB packet
|
// Point to the beginning of the URB packet
|
||||||
|
|
||||||
#if (USE_WINUSB == 1)
|
#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);
|
send_stage2_submit(header, 0, 0);
|
||||||
|
|
||||||
|
// always send constant size buf -> cuz we don't care about the IN packet size
|
||||||
|
// and to unify the style, we set aside the length of the section
|
||||||
|
xRingbufferSend(dap_dataIN_handle, data_in - sizeof(uint32_t), DAP_HANDLE_SIZE, portMAX_DELAY);
|
||||||
|
xTaskNotifyGive(kDAPTaskHandle);
|
||||||
|
|
||||||
|
#else
|
||||||
|
send_stage2_submit(header, 0, 0);
|
||||||
|
|
||||||
|
xRingbufferSend(dap_dataIN_handle, data_in, DAP_HANDLE_SIZE, portMAX_DELAY);
|
||||||
|
xTaskNotifyGive(kDAPTaskHandle);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// dap_respond = DAP_ProcessCommand((uint8_t *)data_in, (uint8_t *)data_out);
|
||||||
|
// //handle_dap_data_response(header);
|
||||||
|
// send_stage2_submit(header, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_dap_data_response(usbip_stage2_header *header)
|
void handle_dap_data_response(usbip_stage2_header *header)
|
||||||
{
|
{
|
||||||
if (dap_respond)
|
return;
|
||||||
{
|
// int resLength = dap_respond & 0xFFFF;
|
||||||
send_stage2_submit_data(header, 0, data_out, DAP_PACKET_SIZE);
|
// if (resLength)
|
||||||
dap_respond = 0;
|
// {
|
||||||
}
|
|
||||||
else
|
// send_stage2_submit_data(header, 0, (void *)DAPDataProcessed.buf, resLength);
|
||||||
{
|
// dap_respond = 0;
|
||||||
send_stage2_submit(header, 0, 0);
|
// }
|
||||||
}
|
// else
|
||||||
|
// {
|
||||||
|
// send_stage2_submit(header, 0, 0);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_swo_trace_response(usbip_stage2_header *header)
|
void handle_swo_trace_response(usbip_stage2_header *header)
|
||||||
{
|
{
|
||||||
|
// TODO:
|
||||||
|
send_stage2_submit(header, 0, 0);
|
||||||
|
return;
|
||||||
|
|
||||||
if (swo_trace_respond)
|
if (swo_trace_respond)
|
||||||
{
|
{
|
||||||
swo_trace_respond = 0;
|
swo_trace_respond = 0;
|
||||||
send_stage2_submit_data(header, 0, data_out, DAP_PACKET_SIZE);
|
//send_stage2_submit_data(header, 0, (void *)DAPDataProcessed.buf, DAP_PACKET_SIZE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -109,11 +142,12 @@ void SWO_AbortTransfer(void)
|
||||||
|
|
||||||
void DAP_Thread(void *argument)
|
void DAP_Thread(void *argument)
|
||||||
{
|
{
|
||||||
dap_dataIN_handle = xRingbufferCreate(DAP_PACKET_SIZE * 20, RINGBUF_TYPE_BYTEBUF);
|
dap_dataIN_handle = xRingbufferCreate(DAP_HANDLE_SIZE * 20, RINGBUF_TYPE_BYTEBUF);
|
||||||
dap_dataOUT_handle = xRingbufferCreate(DAP_PACKET_SIZE * 10, RINGBUF_TYPE_BYTEBUF);
|
dap_dataOUT_handle = xRingbufferCreate(DAP_HANDLE_SIZE * 20, RINGBUF_TYPE_BYTEBUF);
|
||||||
data_response_mux = xSemaphoreCreateMutex();
|
data_response_mux = xSemaphoreCreateMutex();
|
||||||
size_t packetSize;
|
size_t packetSize;
|
||||||
uint8_t *item;
|
int resLength;
|
||||||
|
DAPPacetDataType *item;
|
||||||
|
|
||||||
if (dap_dataIN_handle == NULL || dap_dataIN_handle == NULL ||
|
if (dap_dataIN_handle == NULL || dap_dataIN_handle == NULL ||
|
||||||
data_response_mux == NULL)
|
data_response_mux == NULL)
|
||||||
|
@ -128,14 +162,14 @@ void DAP_Thread(void *argument)
|
||||||
{
|
{
|
||||||
ulTaskNotifyTake(pdFALSE, portMAX_DELAY);
|
ulTaskNotifyTake(pdFALSE, portMAX_DELAY);
|
||||||
packetSize = 0;
|
packetSize = 0;
|
||||||
item = (uint8_t *)xRingbufferReceiveUpTo(dap_dataIN_handle, &packetSize,
|
item = (DAPPacetDataType *)xRingbufferReceiveUpTo(dap_dataIN_handle, &packetSize,
|
||||||
(1 / portTICK_RATE_MS), DAP_PACKET_SIZE);
|
(1 / portTICK_RATE_MS), DAP_HANDLE_SIZE);
|
||||||
if (packetSize == 0)
|
if (packetSize == 0)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (packetSize < DAP_PACKET_SIZE)
|
else if (packetSize < DAP_HANDLE_SIZE)
|
||||||
{
|
{
|
||||||
os_printf("Wrong data in packet size:%d , data in remain: %d\r\n", packetSize, (int)xRingbufferGetMaxItemSize(dap_dataIN_handle));
|
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);
|
vRingbufferReturnItem(dap_dataIN_handle, (void *)item);
|
||||||
|
@ -143,12 +177,22 @@ void DAP_Thread(void *argument)
|
||||||
// This may not happen because there is a semaphore acquisition
|
// This may not happen because there is a semaphore acquisition
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item[0] == ID_DAP_QueueCommands)
|
if (item->buf[0] == ID_DAP_QueueCommands)
|
||||||
item[0] = ID_DAP_ExecuteCommands;
|
{
|
||||||
DAP_ProcessCommand(item, data_out);
|
item->buf[0] = ID_DAP_ExecuteCommands;
|
||||||
|
}
|
||||||
|
|
||||||
vRingbufferReturnItem(dap_dataIN_handle, (void *)item);
|
resLength = DAP_ProcessCommand((uint8_t *)item->buf, (uint8_t *)DAPDataProcessed.buf); // use first 4 byte to save length
|
||||||
xRingbufferSend(dap_dataOUT_handle, data_out, DAP_PACKET_SIZE, portMAX_DELAY);
|
resLength &= 0xFFFF; // res length in lower 16 bits
|
||||||
|
|
||||||
|
vRingbufferReturnItem(dap_dataIN_handle, (void *)item); // process done.
|
||||||
|
|
||||||
|
// now prepare to reply
|
||||||
|
#if (USE_WINUSB == 1)
|
||||||
|
DAPDataProcessed.length = resLength;
|
||||||
|
#endif
|
||||||
|
xRingbufferSend(dap_dataOUT_handle, (void *)&DAPDataProcessed, DAP_HANDLE_SIZE, portMAX_DELAY);
|
||||||
|
|
||||||
if (xSemaphoreTake(data_response_mux, portMAX_DELAY) == pdTRUE)
|
if (xSemaphoreTake(data_response_mux, portMAX_DELAY) == pdTRUE)
|
||||||
{
|
{
|
||||||
++dap_respond;
|
++dap_respond;
|
||||||
|
@ -164,19 +208,28 @@ int fast_reply(uint8_t *buf, uint32_t length)
|
||||||
{
|
{
|
||||||
if (dap_respond > 0)
|
if (dap_respond > 0)
|
||||||
{
|
{
|
||||||
uint8_t *item;
|
DAPPacetDataType *item;
|
||||||
size_t packetSize = 0;
|
size_t packetSize = 0;
|
||||||
item = (uint8_t *)xRingbufferReceiveUpTo(dap_dataOUT_handle, &packetSize,
|
item = (DAPPacetDataType *)xRingbufferReceiveUpTo(dap_dataOUT_handle, &packetSize,
|
||||||
(10 / portTICK_RATE_MS), DAP_PACKET_SIZE);
|
(10 / portTICK_RATE_MS), DAP_HANDLE_SIZE);
|
||||||
if (packetSize == DAP_PACKET_SIZE)
|
if (packetSize == DAP_HANDLE_SIZE)
|
||||||
{
|
{
|
||||||
unpack((uint32_t *)buf, sizeof(usbip_stage2_header));
|
unpack((uint32_t *)buf, sizeof(usbip_stage2_header));
|
||||||
send_stage2_submit_data((usbip_stage2_header *)buf, 0, item, DAP_PACKET_SIZE);
|
|
||||||
|
#if (USE_WINUSB == 1)
|
||||||
|
uint32_t resLength = item->length;
|
||||||
|
send_stage2_submit_data((usbip_stage2_header *)buf, 0, item->buf, resLength);
|
||||||
|
#else
|
||||||
|
send_stage2_submit_data((usbip_stage2_header *)buf, 0, item->buf, DAP_HANDLE_SIZE);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
if (xSemaphoreTake(data_response_mux, portMAX_DELAY) == pdTRUE)
|
if (xSemaphoreTake(data_response_mux, portMAX_DELAY) == pdTRUE)
|
||||||
{
|
{
|
||||||
--dap_respond;
|
--dap_respond;
|
||||||
xSemaphoreGive(data_response_mux);
|
xSemaphoreGive(data_response_mux);
|
||||||
}
|
}
|
||||||
|
|
||||||
vRingbufferReturnItem(dap_dataOUT_handle, (void *)item);
|
vRingbufferReturnItem(dap_dataOUT_handle, (void *)item);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -188,8 +241,9 @@ int fast_reply(uint8_t *buf, uint32_t length)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buf[3] = 0x3; // command
|
//// TODO: ep0 dir 0 ?
|
||||||
buf[15] = 0; // direction
|
buf[0x3] = 0x3; // command
|
||||||
|
buf[0xF] = 0; // direction
|
||||||
buf[0x16] = 0;
|
buf[0x16] = 0;
|
||||||
buf[0x17] = 0;
|
buf[0x17] = 0;
|
||||||
buf[27] = 0;
|
buf[27] = 0;
|
||||||
|
@ -203,7 +257,6 @@ int fast_reply(uint8_t *buf, uint32_t length)
|
||||||
|
|
||||||
static void unpack(void *data, int size)
|
static void unpack(void *data, int size)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Ignore the setup field
|
// Ignore the setup field
|
||||||
int sz = (size / sizeof(uint32_t)) - 2;
|
int sz = (size / sizeof(uint32_t)) - 2;
|
||||||
uint32_t *ptr = (uint32_t *)data;
|
uint32_t *ptr = (uint32_t *)data;
|
||||||
|
|
18
main/main.c
18
main/main.c
|
@ -28,9 +28,8 @@
|
||||||
#include "wifi_configuration.h"
|
#include "wifi_configuration.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern void SWO_Thread(void *argument);
|
extern void SWO_Thread(void *argument);
|
||||||
extern void usart_monitor_task(void *argument);
|
extern void usart_monitor_task(void *argument);
|
||||||
extern void DAP_Setup(void);
|
extern void DAP_Setup(void);
|
||||||
extern void DAP_Thread(void *argument);
|
extern void DAP_Thread(void *argument);
|
||||||
|
|
||||||
|
@ -63,14 +62,14 @@ static esp_err_t event_handler(void *ctx, system_event_t *event)
|
||||||
break;
|
break;
|
||||||
case SYSTEM_EVENT_STA_GOT_IP:
|
case SYSTEM_EVENT_STA_GOT_IP:
|
||||||
xEventGroupSetBits(wifi_event_group, IPV4_GOTIP_BIT);
|
xEventGroupSetBits(wifi_event_group, IPV4_GOTIP_BIT);
|
||||||
os_printf("SYSTEM_EVENT_STA_GOT_IP\r\n");
|
os_printf("SYSTEM EVENT STA GOT IP : %s\r\n", ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip));
|
||||||
break;
|
break;
|
||||||
case SYSTEM_EVENT_STA_DISCONNECTED:
|
case SYSTEM_EVENT_STA_DISCONNECTED:
|
||||||
os_printf("Disconnect reason : %d\r\n", info->disconnected.reason);
|
os_printf("Disconnect reason : %d\r\n", info->disconnected.reason);
|
||||||
if (info->disconnected.reason == WIFI_REASON_BASIC_RATE_NOT_SUPPORT)
|
if (info->disconnected.reason == WIFI_REASON_BASIC_RATE_NOT_SUPPORT)
|
||||||
{
|
{
|
||||||
/*Switch to 802.11 bgn mode */
|
/*Switch to 802.11 bgn mode */
|
||||||
esp_wifi_set_protocol(ESP_IF_WIFI_STA, WIFI_PROTOCAL_11B | WIFI_PROTOCAL_11G | WIFI_PROTOCAL_11N);
|
esp_wifi_set_protocol(ESP_IF_WIFI_STA, WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N);
|
||||||
}
|
}
|
||||||
esp_wifi_connect();
|
esp_wifi_connect();
|
||||||
xEventGroupClearBits(wifi_event_group, IPV4_GOTIP_BIT);
|
xEventGroupClearBits(wifi_event_group, IPV4_GOTIP_BIT);
|
||||||
|
@ -96,7 +95,7 @@ static void initialise_wifi(void)
|
||||||
{
|
{
|
||||||
tcpip_adapter_init();
|
tcpip_adapter_init();
|
||||||
wifi_event_group = xEventGroupCreate();
|
wifi_event_group = xEventGroupCreate();
|
||||||
|
|
||||||
ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));
|
ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));
|
||||||
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||||
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
|
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
|
||||||
|
@ -111,7 +110,6 @@ static void initialise_wifi(void)
|
||||||
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
|
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
|
||||||
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));
|
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));
|
||||||
ESP_ERROR_CHECK(esp_wifi_start());
|
ESP_ERROR_CHECK(esp_wifi_start());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wait_for_ip()
|
static void wait_for_ip()
|
||||||
|
@ -128,21 +126,17 @@ static void wait_for_ip()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void app_main()
|
void app_main()
|
||||||
{
|
{
|
||||||
ESP_ERROR_CHECK(nvs_flash_init());
|
ESP_ERROR_CHECK(nvs_flash_init());
|
||||||
initialise_wifi();
|
initialise_wifi();
|
||||||
wait_for_ip();
|
wait_for_ip();
|
||||||
DAP_Setup(); // DAP Setup
|
DAP_Setup(); // DAP Setup
|
||||||
|
|
||||||
xTaskCreate(timer_create_task, "timer_create", 512, NULL, 10, NULL);
|
xTaskCreate(timer_create_task, "timer_create", 512, NULL, 10, NULL);
|
||||||
xTaskCreate(tcp_server_task, "tcp_server", 4096, NULL, 20, NULL);
|
xTaskCreate(tcp_server_task, "tcp_server", 4096, NULL, 20, NULL);
|
||||||
xTaskCreate(DAP_Thread, "DAP_Task", 2048, NULL, 22, &kDAPTaskHandle);
|
xTaskCreate(DAP_Thread, "DAP_Task", 2048, NULL, 22, &kDAPTaskHandle);
|
||||||
// SWO Trace Task
|
// SWO Trace Task
|
||||||
//xTaskCreate(SWO_Thread, "swo_task", 1024, NULL, 6, NULL);
|
//xTaskCreate(SWO_Thread, "swo_task", 1024, NULL, 6, NULL);
|
||||||
//xTaskCreate(usart_monitor_task, "uart_task", 512, 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)
|
void tcp_server_task(void *pvParameters)
|
||||||
{
|
{
|
||||||
uint8_t tcp_rx_buffer[305];
|
uint8_t tcp_rx_buffer[768];
|
||||||
char addr_str[128];
|
char addr_str[128];
|
||||||
int addr_family;
|
int addr_family;
|
||||||
int ip_protocol;
|
int ip_protocol;
|
||||||
|
|
|
@ -181,13 +181,12 @@ static void send_interface_info()
|
||||||
|
|
||||||
int emulate(uint8_t *buffer, uint32_t length)
|
int emulate(uint8_t *buffer, uint32_t length)
|
||||||
{
|
{
|
||||||
// usbip_stage2_header header;
|
|
||||||
#if (USE_WINUSB == 0)
|
|
||||||
if(fast_reply(buffer, length))
|
if(fast_reply(buffer, length))
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
int command = read_stage2_command((usbip_stage2_header *)buffer, length);
|
int command = read_stage2_command((usbip_stage2_header *)buffer, length);
|
||||||
if (command < 0)
|
if (command < 0)
|
||||||
{
|
{
|
||||||
|
@ -281,6 +280,7 @@ static int handle_submit(usbip_stage2_header *header, uint32_t length)
|
||||||
{
|
{
|
||||||
// control endpoint(endpoint 0)
|
// control endpoint(endpoint 0)
|
||||||
case 0x00:
|
case 0x00:
|
||||||
|
//// TODO: judge usb setup 8 byte?
|
||||||
handleUSBControlRequest(header);
|
handleUSBControlRequest(header);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue