summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhathach <[email protected]>2020-03-17 10:24:37 +0700
committerhathach <[email protected]>2020-03-17 10:24:37 +0700
commitf8d6bbe43b788031f4fbd2986e9f6cd8911ba19d (patch)
tree135e39b5f315c49728350050b56dcaa3456d8704 /src
parent45e32a787bab61c61ad4a32f6c59d74f9d8aa4cd (diff)
parente47f9921570c75afd3288407601897c5b283f043 (diff)
Merge branch 'master' into develop
Diffstat (limited to 'src')
-rw-r--r--src/class/cdc/cdc_device.c6
-rw-r--r--src/class/msc/msc_device.c6
-rw-r--r--src/class/net/net_device.c14
-rw-r--r--src/common/tusb_common.h2
-rw-r--r--src/common/tusb_verify.h4
-rw-r--r--src/device/usbd_control.c6
-rw-r--r--src/portable/nuvoton/nuc505/dcd_nuc505.c14
7 files changed, 36 insertions, 16 deletions
diff --git a/src/class/cdc/cdc_device.c b/src/class/cdc/cdc_device.c
index f63418dae..14b9a3153 100644
--- a/src/class/cdc/cdc_device.c
+++ b/src/class/cdc/cdc_device.c
@@ -335,12 +335,12 @@ bool cdcd_control_request(uint8_t rhport, tusb_control_request_t const * request
switch ( request->bRequest )
{
case CDC_REQUEST_SET_LINE_CODING:
- TU_LOG2(" Set Line Coding\n");
+ TU_LOG2(" Set Line Coding\r\n");
tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t));
break;
case CDC_REQUEST_GET_LINE_CODING:
- TU_LOG2(" Get Line Coding\n");
+ TU_LOG2(" Get Line Coding\r\n");
tud_control_xfer(rhport, request, &p_cdc->line_coding, sizeof(cdc_line_coding_t));
break;
@@ -356,7 +356,7 @@ bool cdcd_control_request(uint8_t rhport, tusb_control_request_t const * request
p_cdc->line_state = (uint8_t) request->wValue;
- TU_LOG2(" Set Control Line State: DTR = %d, RTS = %d\n", dtr, rts);
+ TU_LOG2(" Set Control Line State: DTR = %d, RTS = %d\r\n", dtr, rts);
tud_control_status(rhport, request);
diff --git a/src/class/msc/msc_device.c b/src/class/msc/msc_device.c
index 3ff0eba92..06cc9dbb6 100644
--- a/src/class/msc/msc_device.c
+++ b/src/class/msc/msc_device.c
@@ -407,7 +407,7 @@ bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t
TU_ASSERT( event == XFER_RESULT_SUCCESS &&
xferred_bytes == sizeof(msc_cbw_t) && p_cbw->signature == MSC_CBW_SIGNATURE );
- TU_LOG2(" SCSI Command: %s\n", lookup_find(&_msc_scsi_cmd_table, p_cbw->command[0]));
+ TU_LOG2(" SCSI Command: %s\r\n", lookup_find(&_msc_scsi_cmd_table, p_cbw->command[0]));
// TU_LOG2_MEM(p_cbw, xferred_bytes, 2);
p_csw->signature = MSC_CSW_SIGNATURE;
@@ -480,7 +480,7 @@ bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t
break;
case MSC_STAGE_DATA:
- TU_LOG2(" SCSI Data\n");
+ TU_LOG2(" SCSI Data\r\n");
//TU_LOG2_MEM(_mscd_buf, xferred_bytes, 2);
// OUT transfer, invoke callback if needed
@@ -577,7 +577,7 @@ bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t
// Wait for the Status phase to complete
if( (ep_addr == p_msc->ep_in) && (xferred_bytes == sizeof(msc_csw_t)) )
{
- TU_LOG2(" SCSI Status: %u\n", p_csw->status);
+ TU_LOG2(" SCSI Status: %u\r\n", p_csw->status);
// TU_LOG2_MEM(p_csw, xferred_bytes, 2);
// Move to default CMD stage
diff --git a/src/class/net/net_device.c b/src/class/net/net_device.c
index c918e5874..7bb11d57c 100644
--- a/src/class/net/net_device.c
+++ b/src/class/net/net_device.c
@@ -64,7 +64,7 @@ CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN static uint8_t received[CFG_TUD_NET_PACK
CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN static uint8_t transmitted[CFG_TUD_NET_PACKET_PREFIX_LEN + CFG_TUD_NET_MTU + CFG_TUD_NET_PACKET_PREFIX_LEN];
#if CFG_TUD_NET == OPT_NET_RNDIS
- CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN static uint8_t rndis_buf[128];
+ CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN static uint8_t rndis_buf[120];
#endif
//--------------------------------------------------------------------+
@@ -198,7 +198,17 @@ bool netd_control_request(uint8_t rhport, tusb_control_request_t const * request
TU_VERIFY (_netd_itf.itf_num == request->wIndex);
#if CFG_TUD_NET == OPT_NET_RNDIS
- tud_control_xfer(rhport, request, rndis_buf, sizeof(rndis_buf));
+ if (request->bmRequestType_bit.direction == TUSB_DIR_IN)
+ {
+ rndis_generic_msg_t *rndis_msg = (rndis_generic_msg_t *)rndis_buf;
+ uint32_t msglen = tu_le32toh(rndis_msg->MessageLength);
+ TU_ASSERT(msglen <= sizeof(rndis_buf));
+ tud_control_xfer(rhport, request, rndis_buf, msglen);
+ }
+ else
+ {
+ tud_control_xfer(rhport, request, rndis_buf, sizeof(rndis_buf));
+ }
#else
(void)rhport;
#endif
diff --git a/src/common/tusb_common.h b/src/common/tusb_common.h
index 5e6a8bb10..ef232a593 100644
--- a/src/common/tusb_common.h
+++ b/src/common/tusb_common.h
@@ -222,7 +222,7 @@ void tu_print_mem(void const *buf, uint16_t count, uint8_t indent);
// Log with debug level 1
#define TU_LOG1 tu_printf
#define TU_LOG1_MEM tu_print_mem
-#define TU_LOG1_LOCATION() tu_printf("%s: %d:\n", __PRETTY_FUNCTION__, __LINE__)
+#define TU_LOG1_LOCATION() tu_printf("%s: %d:\r\n", __PRETTY_FUNCTION__, __LINE__)
// Log with debug level 2
#if CFG_TUSB_DEBUG > 1
diff --git a/src/common/tusb_verify.h b/src/common/tusb_verify.h
index 1ad6d3fb0..74150d6c5 100644
--- a/src/common/tusb_verify.h
+++ b/src/common/tusb_verify.h
@@ -76,8 +76,8 @@
#if CFG_TUSB_DEBUG
#include <stdio.h>
- #define _MESS_ERR(_err) printf("%s %d: failed, error = %s\n", __func__, __LINE__, tusb_strerr[_err])
- #define _MESS_FAILED() printf("%s %d: assert failed\n", __func__, __LINE__)
+ #define _MESS_ERR(_err) printf("%s %d: failed, error = %s\r\n", __func__, __LINE__, tusb_strerr[_err])
+ #define _MESS_FAILED() printf("%s %d: assert failed\r\n", __func__, __LINE__)
#else
#define _MESS_ERR(_err)
#define _MESS_FAILED()
diff --git a/src/device/usbd_control.c b/src/device/usbd_control.c
index f0a4cf84a..7c35fe768 100644
--- a/src/device/usbd_control.c
+++ b/src/device/usbd_control.c
@@ -63,7 +63,7 @@ static inline bool _status_stage_xact(uint8_t rhport, tusb_control_request_t con
// Opposite to endpoint in Data Phase
uint8_t const ep_addr = request->bmRequestType_bit.direction ? EDPT_CTRL_OUT : EDPT_CTRL_IN;
- TU_LOG2(" XFER Endpoint: 0x%02X, Bytes: %d\n", ep_addr, 0);
+ TU_LOG2(" XFER Endpoint: 0x%02X, Bytes: %d\r\n", ep_addr, 0);
// status direction is reversed to one in the setup packet
// Note: Status must always be DATA1
@@ -96,7 +96,7 @@ static bool _data_stage_xact(uint8_t rhport)
if ( xact_len ) memcpy(_usbd_ctrl_buf, _ctrl_xfer.buffer, xact_len);
}
- TU_LOG2(" XACT Control: 0x%02X, Bytes: %d\n", ep_addr, xact_len);
+ TU_LOG2(" XACT Control: 0x%02X, Bytes: %d\r\n", ep_addr, xact_len);
return dcd_edpt_xfer(rhport, ep_addr, xact_len ? _usbd_ctrl_buf : NULL, xact_len);
}
@@ -112,7 +112,7 @@ bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const * request, vo
{
TU_ASSERT(buffer);
- TU_LOG2(" XFER Endpoint: 0x%02X, Bytes: %d\n", request->bmRequestType_bit.direction ? EDPT_CTRL_IN : EDPT_CTRL_OUT, _ctrl_xfer.data_len);
+ TU_LOG2(" XFER Endpoint: 0x%02X, Bytes: %d\r\n", request->bmRequestType_bit.direction ? EDPT_CTRL_IN : EDPT_CTRL_OUT, _ctrl_xfer.data_len);
// Data stage
TU_ASSERT( _data_stage_xact(rhport) );
diff --git a/src/portable/nuvoton/nuc505/dcd_nuc505.c b/src/portable/nuvoton/nuc505/dcd_nuc505.c
index 2b6a66bc2..e05e73eff 100644
--- a/src/portable/nuvoton/nuc505/dcd_nuc505.c
+++ b/src/portable/nuvoton/nuc505/dcd_nuc505.c
@@ -33,6 +33,12 @@
nomenclature of EPA through EPL.
*/
+/*
+ Note on OPT_MCU_NUC505_USB_DMA: the author suggests against using this option.
+ The DMA functionality of the USBD peripheral does not appear to succeed with
+ transfer lengths that are longer (> 64 bytes) and are not a multiple of 4.
+*/
+
#include "tusb_option.h"
#if TUSB_OPT_DEVICE_ENABLED && (CFG_TUSB_MCU == OPT_MCU_NUC505)
@@ -211,6 +217,7 @@ static void bus_reset(void)
current_dma_xfer = NULL;
}
+#ifdef OPT_MCU_NUC505_USB_DMA
/* this must only be called by the ISR; it does its best to share the single DMA engine across all user EPs (IN and OUT) */
static void service_dma(void)
{
@@ -243,6 +250,7 @@ static void service_dma(void)
return;
}
}
+#endif
/* centralized location for USBD interrupt enable bit masks */
static const uint32_t enabled_irqs = USBD_GINTEN_USBIEN_Msk | \
@@ -366,7 +374,7 @@ bool dcd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t to
for (int count = 0; count < total_bytes; count++)
*buffer++ = USBD->CEPDAT_BYTE;
- usb_control_send_zlp();
+ dcd_event_xfer_complete(0, ep_addr, total_bytes, XFER_RESULT_SUCCESS, true);
}
}
else
@@ -465,6 +473,7 @@ void USBD_IRQHandler(void)
if (bus_state & USBD_BUSINTSTS_DMADONEIF_Msk)
{
+#ifdef OPT_MCU_NUC505_USB_DMA
if (current_dma_xfer)
{
current_dma_xfer->dma_requested = false;
@@ -480,6 +489,7 @@ void USBD_IRQHandler(void)
current_dma_xfer = NULL;
service_dma();
}
+#endif
}
if (bus_state & USBD_BUSINTSTS_VBUSDETIF_Msk)
@@ -597,7 +607,7 @@ void USBD_IRQHandler(void)
if (out_ep)
{
-#if 1
+#ifdef OPT_MCU_NUC505_USB_DMA
xfer->dma_requested = true;
service_dma();
#else