diff --git a/components/DAP/config/DAP_config.h b/components/DAP/config/DAP_config.h
index 048d766..cc272fe 100644
--- a/components/DAP/config/DAP_config.h
+++ b/components/DAP/config/DAP_config.h
@@ -100,7 +100,7 @@ This information includes:
/// 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 8U ///< Specifies number of packets buffered.
+#define DAP_PACKET_COUNT 1U ///< 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.
@@ -109,7 +109,7 @@ This information includes:
/// Maximum SWO UART Baudrate.
#define SWO_UART_MAX_BAUDRATE 50000000U ///< SWO UART Maximum Baudrate in Hz.
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<< 5MHz
-// TODO: uncertain value
+//// TODO: uncertain value
/// Indicate that Manchester Serial Wire Output (SWO) trace is available.
/// This information is returned by the command \ref DAP_Info as part of Capabilities.
@@ -144,7 +144,7 @@ This information includes:
*/
__STATIC_INLINE uint8_t DAP_GetVendorString(char *str)
{
- //TODO: fill this
+ ////TODO: fill this
// In fact, Keil can get the corresponding information through USB
// without filling in this information.
(void)str;
@@ -296,7 +296,7 @@ __STATIC_INLINE void PORT_OFF(void)
*/
__STATIC_FORCEINLINE uint32_t PIN_SWCLK_TCK_IN(void)
{
- // TODO : can we set to 0?
+ ////TODO: can we set to 0?
return ((GPIO.in >> PIN_SWCLK) & 0x1);
}
@@ -478,7 +478,7 @@ __STATIC_FORCEINLINE uint32_t PIN_nTRST_IN(void)
*/
__STATIC_FORCEINLINE void PIN_nTRST_OUT(uint32_t bit)
{
- //TODO : What does this mean? ? ?
+ ////TODO: What does this mean? ? ?
if ((bit & 1U) == 1)
{
//set bit
@@ -512,7 +512,7 @@ __STATIC_FORCEINLINE uint32_t PIN_nRESET_IN(void)
*/
__STATIC_FORCEINLINE void PIN_nRESET_OUT(uint32_t bit)
{
- //TODO : What does this mean? ? ?
+ ////TODO: What does this mean? ? ?
if ((bit & 1U) == 1)
{
//set bit
diff --git a/components/USBIP/USB_handle.c b/components/USBIP/USB_handle.c
index 56207a2..b8807db 100644
--- a/components/USBIP/USB_handle.c
+++ b/components/USBIP/USB_handle.c
@@ -1,6 +1,6 @@
/**
* @file USB_handle.c
- * @brief Handle all Standard Device Requests
+ * @brief Handle all Standard Device Requests on endpoint 0
* @version 0.1
* @date 2020-01-23
*
@@ -17,34 +17,38 @@
#include "usbip_server.h"
#include "usb_defs.h"
-
// handle functions
-static void handleGetDescriptor(struct usbip_stage2_header *header);
+static void handleGetDescriptor(usbip_stage2_header *header);
////TODO: fill this
-int handleUSBControlRequest(struct usbip_stage2_header *header)
+int handleUSBControlRequest(usbip_stage2_header *header)
{
// Table 9-3. Standard Device Requests
switch (header->u.cmd_submit.request.bmRequestType)
{
- case 0x00:
+ case 0x00: // ignore..
switch (header->u.cmd_submit.request.bRequest)
{
case USB_REQ_CLEAR_FEATURE:
- /* code */
+ os_printf("* CLEAR FEATURE\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
case USB_REQ_SET_FEATURE:
- /* code */
+ os_printf("* SET FEATURE\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
case USB_REQ_SET_ADDRESS:
- /* code */
+ os_printf("* SET ADDRESS\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
case USB_REQ_SET_DESCRIPTOR:
- /* code */
+ os_printf("* SET DESCRIPTOR\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
case USB_REQ_SET_CONFIGURATION:
- /* code */
+ os_printf("* SET CONFIGURATION\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
default:
os_printf("USB unknown request, bmRequestType:%d,bRequest:%d\r\n",
@@ -52,17 +56,20 @@ int handleUSBControlRequest(struct usbip_stage2_header *header)
break;
}
break;
- case 0x01:
+ case 0x01: // ignore...
switch (header->u.cmd_submit.request.bRequest)
{
case USB_REQ_CLEAR_FEATURE:
- /* code */
+ os_printf("* CLEAR FEATURE\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
case USB_REQ_SET_FEATURE:
- /* code */
+ os_printf("* SET FEATURE\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
case USB_REQ_SET_INTERFACE:
- /* code */
+ os_printf("* SET INTERFACE\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
default:
@@ -71,14 +78,16 @@ int handleUSBControlRequest(struct usbip_stage2_header *header)
break;
}
break;
- case 0x02:
+ case 0x02: // ignore..
switch (header->u.cmd_submit.request.bRequest)
{
case USB_REQ_CLEAR_FEATURE:
- /* code */
+ os_printf("* CLEAR FEATURE\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
case USB_REQ_SET_FEATURE:
- /* code */
+ os_printf("* SET INTERFACE\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
default:
@@ -88,17 +97,19 @@ int handleUSBControlRequest(struct usbip_stage2_header *header)
}
break;
- case 0x80:
+ case 0x80: // *IMPORTANT*
switch (header->u.cmd_submit.request.bRequest)
{
case USB_REQ_GET_CONFIGURATION:
- handleGetDescriptor(header);
+ os_printf("* GET CONIFGTRATION\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
case USB_REQ_GET_DESCRIPTOR:
- /* code */
+ handleGetDescriptor(header); ////TODO: device_qualifier
break;
case USB_REQ_GET_STATUS:
- /* code */
+ os_printf("* GET STATUS\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
default:
os_printf("USB unknown request, bmRequestType:%d,bRequest:%d\r\n",
@@ -106,17 +117,20 @@ int handleUSBControlRequest(struct usbip_stage2_header *header)
break;
}
break;
- case 0x81:
+ case 0x81: // ignore...
switch (header->u.cmd_submit.request.bRequest)
{
case USB_REQ_GET_INTERFACE:
- /* code */
+ os_printf("* GET INTERFACE\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
case USB_REQ_SET_SYNCH_FRAME:
- /* code */
+ os_printf("* SET SYNCH FRAME\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
case USB_REQ_GET_STATUS:
- /* code */
+ os_printf("* GET STATUS\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
default:
@@ -126,11 +140,12 @@ int handleUSBControlRequest(struct usbip_stage2_header *header)
}
break;
- case 0x82:
+ case 0x82: // ignore...
switch (header->u.cmd_submit.request.bRequest)
{
case USB_REQ_GET_STATUS:
- /* code */
+ os_printf("* GET STATUS\r\n");
+ send_stage2_submit_data(header, 0, 0, 0);
break;
default:
@@ -139,7 +154,6 @@ int handleUSBControlRequest(struct usbip_stage2_header *header)
break;
}
break;
- /////////
default:
os_printf("USB unknown request, bmRequestType:%d,bRequest:%d\r\n",
@@ -148,8 +162,8 @@ int handleUSBControlRequest(struct usbip_stage2_header *header)
}
}
-////TODO: fill this
-static void handleGetDescriptor(struct usbip_stage2_header *header)
+////TODO: BOS descriptor
+static void handleGetDescriptor(usbip_stage2_header *header)
{
// 9.4.3 Get Descriptor
switch (header->u.cmd_submit.request.wValue.u8hi)
@@ -168,7 +182,6 @@ static void handleGetDescriptor(struct usbip_stage2_header *header)
send_stage2_submit(header, 0, header->u.cmd_submit.data_length);
send(kSock, kUSBd0ConfigDescriptor, sizeof(kUSBd0ConfigDescriptor), 0);
-
}
else
{
@@ -177,18 +190,19 @@ static void handleGetDescriptor(struct usbip_stage2_header *header)
send_stage2_submit(header, 0, header->u.cmd_submit.data_length);
send(kSock, kUSBd0ConfigDescriptor, sizeof(kUSBd0ConfigDescriptor), 0);
send(kSock, kUSBd0InterfaceDescriptor, sizeof(kUSBd0InterfaceDescriptor), 0);
-
}
break;
case USB_DT_STRING:
os_printf("* GET 0x03 STRING DESCRIPTOR\r\n");
- if (header->u.cmd_submit.request.wValue.u8lo == 0) {
+ if (header->u.cmd_submit.request.wValue.u8lo == 0)
+ {
os_printf("** REQUESTED list of supported languages\r\n");
send_stage2_submit_data(header, 0, kLangDescriptor, sizeof(kLangDescriptor));
}
- else{
+ else
+ {
os_printf("***Unsupported operation***\r\n");
}
break;
@@ -227,7 +241,6 @@ static void handleGetDescriptor(struct usbip_stage2_header *header)
send_stage2_submit(header, 0, 0);
break;
-
default:
os_printf("USB unknown Get Descriptor requested:%d", header->u.cmd_submit.request.wValue.u8lo);
break;
diff --git a/components/USBIP/USBd_config.c b/components/USBIP/USBd_config.c
index e0f57ab..c266c16 100644
--- a/components/USBIP/USBd_config.c
+++ b/components/USBIP/USBd_config.c
@@ -26,7 +26,8 @@ const uint8_t kUSBd0DeviceDescriptor[0x12] =
{
0x12, // bLength
USB_DT_DEVICE, // bDescriptorType (constant)
- USBShort(0x0200), // bcdUSB (2.00)
+ USBShort(0x0210), // bcdUSB
+ ////TODO: Is it also available elsewhere?
// We need to use a device other than the USB-IF standard, set to 0x00
0x00, // bDeviceClass
diff --git a/components/USBIP/usbip_defs.h b/components/USBIP/usbip_defs.h
index c977914..84904c6 100644
--- a/components/USBIP/usbip_defs.h
+++ b/components/USBIP/usbip_defs.h
@@ -197,13 +197,13 @@ typedef struct
*/
typedef struct
{
- struct usbip_stage2_header_basic base;
+ usbip_stage2_header_basic base;
union {
- struct usbip_stage2_header_cmd_submit cmd_submit;
- struct usbip_stage2_header_ret_submit ret_submit;
- struct usbip_stage2_header_cmd_unlink cmd_unlink;
- struct usbip_stage2_header_ret_unlink ret_unlink;
+ usbip_stage2_header_cmd_submit cmd_submit;
+ usbip_stage2_header_ret_submit ret_submit;
+ usbip_stage2_header_cmd_unlink cmd_unlink;
+ usbip_stage2_header_ret_unlink ret_unlink;
} u;
} __attribute__((packed)) usbip_stage2_header;
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt
index 6619874..b961c72 100644
--- a/main/CMakeLists.txt
+++ b/main/CMakeLists.txt
@@ -1,4 +1,4 @@
-set(COMPONENT_SRCS "main.c timer.c tcp_server.c usbip_server.c")
+set(COMPONENT_SRCS "main.c timer.c tcp_server.c usbip_server.c DAP_handle.c")
set(COMPONENT_ADD_INCLUDEDIRS ". $ENV{IDF_PATH}/components/esp8266/include/esp8266/ ../components/USBIP")
register_component()
diff --git a/main/DAP_handle.c b/main/DAP_handle.c
new file mode 100644
index 0000000..98d26c8
--- /dev/null
+++ b/main/DAP_handle.c
@@ -0,0 +1,45 @@
+/**
+ * @file DAP_handle.c
+ * @brief Handle DAP packets and transaction push
+ * @version 0.1
+ * @date 2020-01-25
+ *
+ * @copyright Copyright (c) 2020
+ *
+ */
+
+#include
+#include "usbip_server.h"
+#include "DAP_handle.h"
+#include "DAP.h"
+
+////TODO: Merge this
+#define DAP_PACKET_SIZE 512
+
+
+uint8_t data_out[DAP_PACKET_SIZE];
+int respond = 0;
+
+
+void handle_dap_data_request(usbip_stage2_header *header)
+{
+ uint8_t * data_in = (uint8_t *)header;
+ data_in = &(data_in[sizeof(usbip_stage2_header)]);
+ // Point to the beginning of the URB packet
+ respond = DAP_ProcessCommand((uint8_t *)data_in, (uint8_t *)data_out);
+ send_stage2_submit(header, 0, 0);
+
+}
+void handle_dap_data_response(usbip_stage2_header *header)
+{
+ if (respond) {
+ 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);
+ }
+}
\ No newline at end of file
diff --git a/main/DAP_handle.h b/main/DAP_handle.h
new file mode 100644
index 0000000..903bc58
--- /dev/null
+++ b/main/DAP_handle.h
@@ -0,0 +1,8 @@
+#ifndef __DAP_HANDLE_H__
+#define __DAP_HANDLE_H__
+
+#include "usbip_defs.h"
+
+void handle_dap_data_request(usbip_stage2_header *header);
+void handle_dap_data_response(usbip_stage2_header *header);
+#endif
\ No newline at end of file
diff --git a/main/usbip_server.c b/main/usbip_server.c
index b18d235..034975d 100644
--- a/main/usbip_server.c
+++ b/main/usbip_server.c
@@ -121,7 +121,6 @@ static void send_device_list()
static void send_device_info()
{
- //// TODO:fill this
os_printf("Sending device info...");
usbip_stage1_usb_device device;
@@ -172,7 +171,7 @@ static void send_interface_info()
int emulate(uint8_t *buffer, uint32_t length)
{
// usbip_stage2_header header;
- int command = read_stage2_command((usbip_stage2_header *)buffer); ////TODO: fill this
+ int command = read_stage2_command((usbip_stage2_header *)buffer, length); ////TODO: fill this
if (command < 0)
{
return -1;
@@ -272,13 +271,13 @@ static int handle_submit(usbip_stage2_header *header)
case 0x01:
if (header->base.direction == 0)
{
- // Serial.println("EP 01 DATA FROM HOST");
- handle_data_request(header);
+ // os_printf("EP 01 DATA FROM HOST");
+ handle_dap_data_request(header);
}
else
{
- // Serial.println("EP 01 DATA TO HOST");
- handle_data_response(header);
+ // os_printf("EP 01 DATA TO HOST");
+ handle_dap_data_response(header);
}
break;