summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Conrad <[email protected]>2019-10-02 01:15:47 -0400
committerNathan Conrad <[email protected]>2019-10-02 01:15:47 -0400
commitcef388b7bd956adbc6af4904d4d95ca4120ebb7b (patch)
tree61541614bb829acde7088c99d1c69a31070db32b
parent4ea2a4ed60c41c8b55bfb40459e5f54615e2dc72 (diff)
parentd84a31fd5fd62b9458504615983591a4c4c34f89 (diff)
Merge branch 'master' into ZLP_Request2
-rw-r--r--.travis.yml2
-rw-r--r--examples/device/usbtmc/visaQuery.py18
-rw-r--r--examples/make.mk1
-rw-r--r--hw/bsp/circuitplayground_bluefruit/board.mk8
-rw-r--r--hw/bsp/ea4088qs/board.mk4
-rw-r--r--hw/bsp/ea4357/board.mk4
-rw-r--r--hw/bsp/feather_nrf52840_express/board.mk8
-rw-r--r--hw/bsp/lpcxpresso11u37/board.mk4
-rw-r--r--hw/bsp/lpcxpresso51u68/board.mk4
-rw-r--r--hw/bsp/lpcxpresso54114/board.mk3
-rw-r--r--hw/bsp/lpcxpresso55s69/board.mk6
-rw-r--r--hw/bsp/mcb1800/board.mk4
-rw-r--r--hw/bsp/ngx4330/board.mk4
-rw-r--r--hw/bsp/pca10056/board.mk8
-rw-r--r--hw/bsp/pca10056/pca10056.c3
-rw-r--r--hw/bsp/pca10059/board.mk8
-rw-r--r--hw/bsp/stm32f070rbnucleo/board.mk3
-rw-r--r--hw/bsp/stm32f072disco/board.mk3
-rw-r--r--hw/bsp/stm32f207nucleo/board.mk2
-rw-r--r--hw/bsp/stm32f303disco/board.mk3
-rw-r--r--hw/bsp/stm32f412disco/board.mk3
-rw-r--r--hw/bsp/stm32f767nucleo/board.mk4
-rw-r--r--hw/bsp/stm32f767nucleo/stm32f767nucleo.c3
-rw-r--r--hw/bsp/stm32h743nucleo/board.mk3
-rw-r--r--hw/bsp/stm32h743nucleo/stm32h743nucleo.c2
-rw-r--r--hw/bsp/stm32l0538disco/board.mk2
-rw-r--r--src/class/hid/hid_device.c2
-rw-r--r--src/class/midi/midi_device.c13
-rw-r--r--src/device/usbd.c31
-rw-r--r--src/device/usbd_pvt.h11
-rw-r--r--src/osal/osal_none.h4
-rw-r--r--src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c45
-rw-r--r--src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h2
-rw-r--r--src/portable/st/synopsys/dcd_synopsys.c10
-rw-r--r--tools/build_all.py8
35 files changed, 169 insertions, 74 deletions
diff --git a/.travis.yml b/.travis.yml
index f2f2ba51d..6dfc507fc 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,5 @@
language: c
-dist: xenial
+dist: bionic
compiler:
- gcc
diff --git a/examples/device/usbtmc/visaQuery.py b/examples/device/usbtmc/visaQuery.py
index 44b5fd875..b5bf8d482 100644
--- a/examples/device/usbtmc/visaQuery.py
+++ b/examples/device/usbtmc/visaQuery.py
@@ -1,9 +1,10 @@
+#!/usr/bin/env python3
+
import visa
import time
import sys
-
def test_idn():
idn = inst.query("*idn?");
assert (idn == "TinyUSB,ModelNumber,SerialNumber,FirmwareVer123456\r\n")
@@ -129,6 +130,18 @@ def test_multi_read():
assert (x + "\r\n" == y)
#inst.chunk_size = old_chunk_size
+def test_stall_ep0():
+ usb_iface = inst.get_visa_attribute(visa.constants.VI_ATTR_USB_INTFC_NUM)
+ inst.read_stb()
+ # This is an invalid request, should create stall.
+ try:
+ retv = inst.control_in(request_type_bitmap_field=0xA1, request_id=60, request_value=0x0000, index=usb_iface, length=0x0001)
+ assert false
+ except visa.VisaIOError:
+ pass
+
+ assert (inst.read_stb() == 0)
+
rm = visa.ResourceManager("/c/Windows/system32/visa64.dll")
reslist = rm.list_resources("USB?::?*::INSTR")
@@ -171,6 +184,9 @@ test_echo(165,170)
print("+ Read timeout (no MAV)")
test_read_timeout()
+print("+ Test EP0 stall recovery")
+test_stall_ep0()
+
print("+ MAV")
test_mav()
diff --git a/examples/make.mk b/examples/make.mk
index f35195fde..22d8f7455 100644
--- a/examples/make.mk
+++ b/examples/make.mk
@@ -56,6 +56,7 @@ CFLAGS += \
-Wno-endif-labels \
-Wstrict-prototypes \
-Wall \
+ -Wextra \
-Werror \
-Werror-implicit-function-declaration \
-Wfatal-errors \
diff --git a/hw/bsp/circuitplayground_bluefruit/board.mk b/hw/bsp/circuitplayground_bluefruit/board.mk
index 26b15564d..72b9ddfbe 100644
--- a/hw/bsp/circuitplayground_bluefruit/board.mk
+++ b/hw/bsp/circuitplayground_bluefruit/board.mk
@@ -9,7 +9,13 @@ CFLAGS += \
-DCONFIG_GPIO_AS_PINRESET
# nrfx issue undef _ARMCC_VERSION usage https://github.com/NordicSemiconductor/nrfx/issues/49
-CFLAGS += -Wno-error=undef
+CFLAGS += -Wno-error=undef -Wno-error=unused-parameter
+
+# due to tusb_hal_nrf_power_event
+GCCVERSION = $(firstword $(subst ., ,$(shell arm-none-eabi-gcc -dumpversion)))
+ifeq ($(shell expr $(GCCVERSION) \>= 8), 1)
+CFLAGS += -Wno-error=cast-function-type
+endif
# All source paths should be relative to the top level.
LD_FILE = hw/bsp/circuitplayground_bluefruit/nrf52840_s140_v6.ld
diff --git a/hw/bsp/ea4088qs/board.mk b/hw/bsp/ea4088qs/board.mk
index 510e2912b..46625ca84 100644
--- a/hw/bsp/ea4088qs/board.mk
+++ b/hw/bsp/ea4088qs/board.mk
@@ -8,8 +8,8 @@ CFLAGS += \
-DCFG_TUSB_MEM_SECTION='__attribute__((section(".data.$$RAM2")))' \
-D__USE_LPCOPEN
-# lpc_types.h cause following errors
-CFLAGS += -Wno-error=strict-prototypes
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=strict-prototypes -Wno-error=unused-parameter
MCU_DIR = hw/mcu/nxp/lpc_driver/lpc40xx/lpc_chip_40xx
diff --git a/hw/bsp/ea4357/board.mk b/hw/bsp/ea4357/board.mk
index 265d9b38b..823481baf 100644
--- a/hw/bsp/ea4357/board.mk
+++ b/hw/bsp/ea4357/board.mk
@@ -7,8 +7,8 @@ CFLAGS += \
-DCFG_TUSB_MCU=OPT_MCU_LPC43XX \
-D__USE_LPCOPEN
-# lpc_types.h cause following errors
-CFLAGS += -Wno-error=strict-prototypes
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=unused-parameter -Wno-error=strict-prototypes
MCU_DIR = hw/mcu/nxp/lpc_driver/lpc43xx/lpc_chip_43xx
diff --git a/hw/bsp/feather_nrf52840_express/board.mk b/hw/bsp/feather_nrf52840_express/board.mk
index 11b5e7bdc..1e077bac7 100644
--- a/hw/bsp/feather_nrf52840_express/board.mk
+++ b/hw/bsp/feather_nrf52840_express/board.mk
@@ -9,7 +9,13 @@ CFLAGS += \
-DCONFIG_GPIO_AS_PINRESET
# nrfx issue undef _ARMCC_VERSION usage https://github.com/NordicSemiconductor/nrfx/issues/49
-CFLAGS += -Wno-error=undef
+CFLAGS += -Wno-error=undef -Wno-error=unused-parameter
+
+# due to tusb_hal_nrf_power_event
+GCCVERSION = $(firstword $(subst ., ,$(shell arm-none-eabi-gcc -dumpversion)))
+ifeq ($(shell expr $(GCCVERSION) \>= 8), 1)
+CFLAGS += -Wno-error=cast-function-type
+endif
# All source paths should be relative to the top level.
LD_FILE = hw/bsp/feather_nrf52840_express/nrf52840_s140_v6.ld
diff --git a/hw/bsp/lpcxpresso11u37/board.mk b/hw/bsp/lpcxpresso11u37/board.mk
index 228765550..ced7ceefd 100644
--- a/hw/bsp/lpcxpresso11u37/board.mk
+++ b/hw/bsp/lpcxpresso11u37/board.mk
@@ -10,8 +10,8 @@ CFLAGS += \
-DCFG_TUSB_MEM_SECTION='__attribute__((section(".data.$$RAM2")))' \
-DCFG_TUSB_MEM_ALIGN='__attribute__((aligned(64)))'
-# startup.c and lpc_types.h cause following errors
-CFLAGS += -Wno-error=nested-externs -Wno-error=strict-prototypes
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=nested-externs -Wno-error=strict-prototypes -Wno-error=unused-parameter
MCU_DIR = hw/mcu/nxp/lpc_driver/lpc11uxx/lpc_chip_11uxx
diff --git a/hw/bsp/lpcxpresso51u68/board.mk b/hw/bsp/lpcxpresso51u68/board.mk
index 5ebda6c39..e5576c3c0 100644
--- a/hw/bsp/lpcxpresso51u68/board.mk
+++ b/hw/bsp/lpcxpresso51u68/board.mk
@@ -7,8 +7,8 @@ CFLAGS += \
-DCFG_TUSB_MEM_SECTION='__attribute__((section(".data")))' \
-DCFG_TUSB_MEM_ALIGN='__attribute__((aligned(64)))'
-# system_LPC51U68.c cause following errors
-CFLAGS += -Wno-error=nested-externs
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=nested-externs -Wno-error=unused-parameter
MCU_DIR = hw/mcu/nxp/lpc_driver/lpc51u6x/devices/LPC51U68
diff --git a/hw/bsp/lpcxpresso54114/board.mk b/hw/bsp/lpcxpresso54114/board.mk
index 90e864e99..21c8dfd32 100644
--- a/hw/bsp/lpcxpresso54114/board.mk
+++ b/hw/bsp/lpcxpresso54114/board.mk
@@ -9,6 +9,9 @@ CFLAGS += \
-DCFG_TUSB_MEM_SECTION='__attribute__((section(".data")))' \
-DCFG_TUSB_MEM_ALIGN='__attribute__((aligned(64)))'
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=unused-parameter
+
MCU_DIR = hw/mcu/nxp/lpc_driver/lpc54xxx/devices/LPC54114
# All source paths should be relative to the top level.
diff --git a/hw/bsp/lpcxpresso55s69/board.mk b/hw/bsp/lpcxpresso55s69/board.mk
index 2ab7ec51e..6f1afaac1 100644
--- a/hw/bsp/lpcxpresso55s69/board.mk
+++ b/hw/bsp/lpcxpresso55s69/board.mk
@@ -7,10 +7,10 @@ CFLAGS += \
-DCPU_LPC55S69JBD100_cm33_core0 \
-DCFG_TUSB_MCU=OPT_MCU_LPC55XX \
-DCFG_TUSB_MEM_SECTION='__attribute__((section(".data")))' \
- -DCFG_TUSB_MEM_ALIGN='__attribute__((aligned(64)))'
+ -DCFG_TUSB_MEM_ALIGN='__attribute__((aligned(64)))'
-# system_LPC55S69_cm33_core0.c cause following errors
-CFLAGS += -Wno-error=float-equal -Wno-error=nested-externs
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=unused-parameter -Wno-error=float-equal -Wno-error=nested-externs
MCU_DIR = hw/mcu/nxp/lpc_driver/lpc55xx/devices/LPC55S69
diff --git a/hw/bsp/mcb1800/board.mk b/hw/bsp/mcb1800/board.mk
index 4a59c043a..3b8ee2968 100644
--- a/hw/bsp/mcb1800/board.mk
+++ b/hw/bsp/mcb1800/board.mk
@@ -7,8 +7,8 @@ CFLAGS += \
-DCFG_TUSB_MCU=OPT_MCU_LPC18XX \
-D__USE_LPCOPEN
-# lpc_types.h cause following errors
-CFLAGS += -Wno-error=strict-prototypes
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=unused-parameter -Wno-error=strict-prototypes
MCU_DIR = hw/mcu/nxp/lpc_driver/lpc18xx/lpc_chip_18xx
diff --git a/hw/bsp/ngx4330/board.mk b/hw/bsp/ngx4330/board.mk
index 852c883b0..b82ae9d5c 100644
--- a/hw/bsp/ngx4330/board.mk
+++ b/hw/bsp/ngx4330/board.mk
@@ -7,8 +7,8 @@ CFLAGS += \
-DCFG_TUSB_MCU=OPT_MCU_LPC43XX \
-D__USE_LPCOPEN
-# lpc_types.h cause following errors
-CFLAGS += -Wno-error=strict-prototypes
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=strict-prototypes -Wno-error=unused-parameter
MCU_DIR = hw/mcu/nxp/lpc_driver/lpc43xx/lpc_chip_43xx
diff --git a/hw/bsp/pca10056/board.mk b/hw/bsp/pca10056/board.mk
index 9dbaea426..c0616abee 100644
--- a/hw/bsp/pca10056/board.mk
+++ b/hw/bsp/pca10056/board.mk
@@ -9,7 +9,13 @@ CFLAGS += \
-DCFG_TUSB_MCU=OPT_MCU_NRF5X
# nrfx issue undef _ARMCC_VERSION usage https://github.com/NordicSemiconductor/nrfx/issues/49
-CFLAGS += -Wno-error=undef
+CFLAGS += -Wno-error=undef -Wno-error=unused-parameter
+
+# due to tusb_hal_nrf_power_event
+GCCVERSION = $(firstword $(subst ., ,$(shell arm-none-eabi-gcc -dumpversion)))
+ifeq ($(shell expr $(GCCVERSION) \>= 8), 1)
+CFLAGS += -Wno-error=cast-function-type
+endif
# All source paths should be relative to the top level.
LD_FILE = hw/mcu/nordic/nrfx/mdk/nrf52840_xxaa.ld
diff --git a/hw/bsp/pca10056/pca10056.c b/hw/bsp/pca10056/pca10056.c
index f575895ec..57426732c 100644
--- a/hw/bsp/pca10056/pca10056.c
+++ b/hw/bsp/pca10056/pca10056.c
@@ -96,7 +96,8 @@ void board_init(void)
nrfx_power_init(&pwr_cfg);
// Register tusb function as USB power handler
- const nrfx_power_usbevt_config_t config = { .handler = (nrfx_power_usb_event_handler_t) tusb_hal_nrf_power_event };
+ // cause cast-function-type warning
+ const nrfx_power_usbevt_config_t config = { .handler = ((nrfx_power_usb_event_handler_t) tusb_hal_nrf_power_event) };
nrfx_power_usbevt_init(&config);
nrfx_power_usbevt_enable();
diff --git a/hw/bsp/pca10059/board.mk b/hw/bsp/pca10059/board.mk
index a92592dd1..15801054c 100644
--- a/hw/bsp/pca10059/board.mk
+++ b/hw/bsp/pca10059/board.mk
@@ -9,7 +9,13 @@ CFLAGS += \
-DCFG_TUSB_MCU=OPT_MCU_NRF5X
# nrfx issue undef _ARMCC_VERSION usage https://github.com/NordicSemiconductor/nrfx/issues/49
-CFLAGS += -Wno-error=undef
+CFLAGS += -Wno-error=undef -Wno-error=unused-parameter
+
+# due to tusb_hal_nrf_power_event
+GCCVERSION = $(firstword $(subst ., ,$(shell arm-none-eabi-gcc -dumpversion)))
+ifeq ($(shell expr $(GCCVERSION) \>= 8), 1)
+CFLAGS += -Wno-error=cast-function-type
+endif
# All source paths should be relative to the top level.
LD_FILE = hw/bsp/$(BOARD)/$(BOARD).ld
diff --git a/hw/bsp/stm32f070rbnucleo/board.mk b/hw/bsp/stm32f070rbnucleo/board.mk
index 6c5fbe022..42394d1ad 100644
--- a/hw/bsp/stm32f070rbnucleo/board.mk
+++ b/hw/bsp/stm32f070rbnucleo/board.mk
@@ -9,6 +9,9 @@ CFLAGS += \
-DCFG_EXAMPLE_MSC_READONLY \
-DCFG_TUSB_MCU=OPT_MCU_STM32F0
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=unused-parameter
+
ST_HAL_DRIVER = hw/mcu/st/st_driver/STM32F0xx_HAL_Driver
ST_CMSIS = hw/mcu/st/st_driver/CMSIS/Device/ST/STM32F0xx
diff --git a/hw/bsp/stm32f072disco/board.mk b/hw/bsp/stm32f072disco/board.mk
index 0a58a5654..6529763ee 100644
--- a/hw/bsp/stm32f072disco/board.mk
+++ b/hw/bsp/stm32f072disco/board.mk
@@ -9,6 +9,9 @@ CFLAGS += \
-DCFG_EXAMPLE_MSC_READONLY \
-DCFG_TUSB_MCU=OPT_MCU_STM32F0
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=unused-parameter
+
ST_HAL_DRIVER = hw/mcu/st/st_driver/STM32F0xx_HAL_Driver
ST_CMSIS = hw/mcu/st/st_driver/CMSIS/Device/ST/STM32F0xx
diff --git a/hw/bsp/stm32f207nucleo/board.mk b/hw/bsp/stm32f207nucleo/board.mk
index fa7855439..cd2b26204 100644
--- a/hw/bsp/stm32f207nucleo/board.mk
+++ b/hw/bsp/stm32f207nucleo/board.mk
@@ -8,7 +8,7 @@ CFLAGS += \
-nostdlib -nostartfiles \
-DCFG_TUSB_MCU=OPT_MCU_STM32F2
-# Suppress following warnings/error is required due to STM32F2xx_HAL_Driver.
+# mcu driver cause following warnings
CFLAGS += -Wno-error=sign-compare
ST_HAL_DRIVER = hw/mcu/st/st_driver/STM32F2xx_HAL_Driver
diff --git a/hw/bsp/stm32f303disco/board.mk b/hw/bsp/stm32f303disco/board.mk
index 9efee9092..ab77c55c4 100644
--- a/hw/bsp/stm32f303disco/board.mk
+++ b/hw/bsp/stm32f303disco/board.mk
@@ -9,6 +9,9 @@ CFLAGS += \
-nostdlib -nostartfiles \
-DCFG_TUSB_MCU=OPT_MCU_STM32F3
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=unused-parameter
+
ST_HAL_DRIVER = hw/mcu/st/st_driver/STM32F3xx_HAL_Driver
ST_CMSIS = hw/mcu/st/st_driver/CMSIS/Device/ST/STM32F3xx
diff --git a/hw/bsp/stm32f412disco/board.mk b/hw/bsp/stm32f412disco/board.mk
index 62f1d4c1e..e059c81d1 100644
--- a/hw/bsp/stm32f412disco/board.mk
+++ b/hw/bsp/stm32f412disco/board.mk
@@ -9,6 +9,9 @@ CFLAGS += \
-nostdlib -nostartfiles \
-DCFG_TUSB_MCU=OPT_MCU_STM32F4
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=maybe-uninitialized
+
ST_HAL_DRIVER = hw/mcu/st/st_driver/STM32F4xx_HAL_Driver
ST_CMSIS = hw/mcu/st/st_driver/CMSIS/Device/ST/STM32F4xx
diff --git a/hw/bsp/stm32f767nucleo/board.mk b/hw/bsp/stm32f767nucleo/board.mk
index 3a15e67c7..65690cb2f 100644
--- a/hw/bsp/stm32f767nucleo/board.mk
+++ b/hw/bsp/stm32f767nucleo/board.mk
@@ -9,8 +9,8 @@ CFLAGS += \
-nostdlib -nostartfiles \
-DCFG_TUSB_MCU=OPT_MCU_STM32F7
-# Suppress following warnings/error is required due to STM32F7xx_HAL_Driver.
-CFLAGS += -Wno-error=shadow
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=shadow
ST_HAL_DRIVER = hw/mcu/st/st_driver/STM32F7xx_HAL_Driver
ST_CMSIS = hw/mcu/st/st_driver/CMSIS/Device/ST/STM32F7xx
diff --git a/hw/bsp/stm32f767nucleo/stm32f767nucleo.c b/hw/bsp/stm32f767nucleo/stm32f767nucleo.c
index 5ac2ddb72..07412fd8e 100644
--- a/hw/bsp/stm32f767nucleo/stm32f767nucleo.c
+++ b/hw/bsp/stm32f767nucleo/stm32f767nucleo.c
@@ -174,15 +174,16 @@ uint32_t board_button_read(void)
int board_uart_read(uint8_t* buf, int len)
{
+ (void) buf; (void) len;
return 0;
}
int board_uart_write(void const * buf, int len)
{
+ (void) buf; (void) len;
return 0;
}
-
#if CFG_TUSB_OS == OPT_OS_NONE
volatile uint32_t system_ticks = 0;
void SysTick_Handler (void)
diff --git a/hw/bsp/stm32h743nucleo/board.mk b/hw/bsp/stm32h743nucleo/board.mk
index 3d6aae4c4..40b36413f 100644
--- a/hw/bsp/stm32h743nucleo/board.mk
+++ b/hw/bsp/stm32h743nucleo/board.mk
@@ -9,6 +9,9 @@ CFLAGS += \
-nostdlib -nostartfiles \
-DCFG_TUSB_MCU=OPT_MCU_STM32H7
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=maybe-uninitialized
+
ST_HAL_DRIVER = hw/mcu/st/st_driver/STM32H7xx_HAL_Driver
ST_CMSIS = hw/mcu/st/st_driver/CMSIS/Device/ST/STM32H7xx
diff --git a/hw/bsp/stm32h743nucleo/stm32h743nucleo.c b/hw/bsp/stm32h743nucleo/stm32h743nucleo.c
index 2e02786ee..f7e46a158 100644
--- a/hw/bsp/stm32h743nucleo/stm32h743nucleo.c
+++ b/hw/bsp/stm32h743nucleo/stm32h743nucleo.c
@@ -197,11 +197,13 @@ uint32_t board_button_read(void)
int board_uart_read(uint8_t* buf, int len)
{
+ (void) buf; (void) len;
return 0;
}
int board_uart_write(void const * buf, int len)
{
+ (void) buf; (void) len;
return 0;
}
diff --git a/hw/bsp/stm32l0538disco/board.mk b/hw/bsp/stm32l0538disco/board.mk
index 3b84159d1..7e11fa6cd 100644
--- a/hw/bsp/stm32l0538disco/board.mk
+++ b/hw/bsp/stm32l0538disco/board.mk
@@ -9,6 +9,8 @@ CFLAGS += \
-DCFG_EXAMPLE_MSC_READONLY \
-DCFG_TUSB_MCU=OPT_MCU_STM32L0
+# mcu driver cause following warnings
+CFLAGS += -Wno-error=unused-parameter -Wno-error=maybe-uninitialized
ST_HAL_DRIVER = hw/mcu/st/st_driver/STM32L0xx_HAL_Driver
ST_CMSIS = hw/mcu/st/st_driver/CMSIS/Device/ST/STM32L0xx
diff --git a/src/class/hid/hid_device.c b/src/class/hid/hid_device.c
index ff8e7dc9a..9e7bad976 100644
--- a/src/class/hid/hid_device.c
+++ b/src/class/hid/hid_device.c
@@ -74,7 +74,7 @@ bool tud_hid_ready(void)
{
uint8_t itf = 0;
uint8_t const ep_in = _hidd_itf[itf].ep_in;
- return tud_ready() && (ep_in != 0) && !usbd_edpt_busy(TUD_OPT_RHPORT, ep_in);
+ return tud_ready() && (ep_in != 0) && usbd_edpt_ready(TUD_OPT_RHPORT, ep_in);
}
bool tud_hid_report(uint8_t report_id, void const* report, uint8_t len)
diff --git a/src/class/midi/midi_device.c b/src/class/midi/midi_device.c
index 50826a1f4..11fe06e38 100644
--- a/src/class/midi/midi_device.c
+++ b/src/class/midi/midi_device.c
@@ -86,16 +86,19 @@ bool tud_midi_n_mounted (uint8_t itf)
//--------------------------------------------------------------------+
uint32_t tud_midi_n_available(uint8_t itf, uint8_t jack_id)
{
+ (void) jack_id;
return tu_fifo_count(&_midid_itf[itf].rx_ff);
}
uint32_t tud_midi_n_read(uint8_t itf, uint8_t jack_id, void* buffer, uint32_t bufsize)
{
+ (void) jack_id;
return tu_fifo_read_n(&_midid_itf[itf].rx_ff, buffer, bufsize);
}
void tud_midi_n_read_flush (uint8_t itf, uint8_t jack_id)
{
+ (void) jack_id;
tu_fifo_clear(&_midid_itf[itf].rx_ff);
}
@@ -128,6 +131,8 @@ void midi_rx_done_cb(midid_interface_t* midi, uint8_t const* buffer, uint32_t bu
static bool maybe_transmit(midid_interface_t* midi, uint8_t itf_index)
{
+ (void) itf_index;
+
// skip if previous transfer not complete
TU_VERIFY( !usbd_edpt_busy(TUD_OPT_RHPORT, midi->ep_in) );
@@ -309,11 +314,15 @@ bool midid_open(uint8_t rhport, tusb_desc_interface_t const * p_interface_desc,
bool midid_control_complete(uint8_t rhport, tusb_control_request_t const * p_request)
{
- return false;
+ (void) rhport;
+ (void) p_request;
+ return true;
}
bool midid_control_request(uint8_t rhport, tusb_control_request_t const * p_request)
{
+ (void) rhport;
+
//------------- Class Specific Request -------------//
if (p_request->bmRequestType_bit.type != TUSB_REQ_TYPE_CLASS) return false;
@@ -322,6 +331,8 @@ bool midid_control_request(uint8_t rhport, tusb_control_request_t const * p_requ
bool midid_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
{
+ (void) result;
+
// TODO Support multiple interfaces
uint8_t const itf = 0;
midid_interface_t* p_midi = &_midid_itf[itf];
diff --git a/src/device/usbd.c b/src/device/usbd.c
index 3700fb988..14e56a9b7 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -52,14 +52,19 @@ typedef struct {
uint8_t self_powered : 1; // configuration descriptor's attribute
};
- uint8_t ep_busy_map[2]; // bit mask for busy endpoint
- uint8_t ep_stall_map[2]; // bit map for stalled endpoint
-
uint8_t itf2drv[16]; // map interface number to driver (0xff is invalid)
uint8_t ep2drv[8][2]; // map endpoint to driver ( 0xff is invalid )
+
+ struct TU_ATTR_PACKED
+ {
+ volatile bool busy : 1;
+ volatile bool stalled : 1;
+
+ // TODO merge ep2drv here, 4-bit should be sufficient
+ }ep_status[8][2];
}usbd_device_t;
-static usbd_device_t _usbd_dev = { 0 };
+static usbd_device_t _usbd_dev;
// Invalid driver ID in itf2drv[] ep2drv[][] mapping
enum { DRVID_INVALID = 0xFFu };
@@ -310,7 +315,7 @@ void tud_task (void)
uint8_t const epnum = tu_edpt_number(ep_addr);
uint8_t const ep_dir = tu_edpt_dir(ep_addr);
- _usbd_dev.ep_busy_map[ep_dir] = (uint8_t) tu_bit_clear(_usbd_dev.ep_busy_map[ep_dir], epnum);
+ _usbd_dev.ep_status[epnum][ep_dir].busy = false;
if ( 0 == epnum )
{
@@ -864,8 +869,7 @@ bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t
uint8_t const dir = tu_edpt_dir(ep_addr);
TU_VERIFY( dcd_edpt_xfer(rhport, ep_addr, buffer, total_bytes) );
-
- _usbd_dev.ep_busy_map[dir] = (uint8_t) tu_bit_set(_usbd_dev.ep_busy_map[dir], epnum);
+ _usbd_dev.ep_status[epnum][dir].busy = true;
return true;
}
@@ -877,18 +881,17 @@ bool usbd_edpt_busy(uint8_t rhport, uint8_t ep_addr)
uint8_t const epnum = tu_edpt_number(ep_addr);
uint8_t const dir = tu_edpt_dir(ep_addr);
- return tu_bit_test(_usbd_dev.ep_busy_map[dir], epnum);
+ return _usbd_dev.ep_status[epnum][dir].busy;
}
-
void usbd_edpt_stall(uint8_t rhport, uint8_t ep_addr)
{
uint8_t const epnum = tu_edpt_number(ep_addr);
uint8_t const dir = tu_edpt_dir(ep_addr);
dcd_edpt_stall(rhport, ep_addr);
- _usbd_dev.ep_stall_map[dir] = (uint8_t) tu_bit_set(_usbd_dev.ep_stall_map[dir], epnum);
- _usbd_dev.ep_busy_map[dir] = (uint8_t) tu_bit_set(_usbd_dev.ep_busy_map[dir], epnum);
+ _usbd_dev.ep_status[epnum][dir].stalled = true;
+ _usbd_dev.ep_status[epnum][dir].busy = true;
}
void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr)
@@ -897,8 +900,8 @@ void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr)
uint8_t const dir = tu_edpt_dir(ep_addr);
dcd_edpt_clear_stall(rhport, ep_addr);
- _usbd_dev.ep_busy_map[dir] = (uint8_t) tu_bit_clear(_usbd_dev.ep_busy_map[dir], epnum);
- _usbd_dev.ep_stall_map[dir] = (uint8_t) tu_bit_clear(_usbd_dev.ep_stall_map[dir], epnum);
+ _usbd_dev.ep_status[epnum][dir].stalled = false;
+ _usbd_dev.ep_status[epnum][dir].busy = false;
}
bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr)
@@ -908,7 +911,7 @@ bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr)
uint8_t const epnum = tu_edpt_number(ep_addr);
uint8_t const dir = tu_edpt_dir(ep_addr);
- return tu_bit_test(_usbd_dev.ep_stall_map[dir], epnum);
+ return _usbd_dev.ep_status[epnum][dir].stalled;
}
#endif
diff --git a/src/device/usbd_pvt.h b/src/device/usbd_pvt.h
index fbf030ce3..892680142 100644
--- a/src/device/usbd_pvt.h
+++ b/src/device/usbd_pvt.h
@@ -47,10 +47,21 @@ bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t
// Check if endpoint transferring is complete
bool usbd_edpt_busy(uint8_t rhport, uint8_t ep_addr);
+// Stall endpoint
void usbd_edpt_stall(uint8_t rhport, uint8_t ep_addr);
+
+// Clear stalled endpoint
void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr);
+
+// Check if endpoint is stalled
bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr);
+static inline
+bool usbd_edpt_ready(uint8_t rhport, uint8_t ep_addr)
+{
+ return !usbd_edpt_busy(rhport, ep_addr) && !usbd_edpt_stalled(rhport, ep_addr);
+}
+
/*------------------------------------------------------------------*/
/* Helper
*------------------------------------------------------------------*/
diff --git a/src/osal/osal_none.h b/src/osal/osal_none.h
index 7780345df..fa581215d 100644
--- a/src/osal/osal_none.h
+++ b/src/osal/osal_none.h
@@ -145,6 +145,8 @@ typedef osal_queue_def_t* osal_queue_t;
// lock queue by disable usb isr
static inline void _osal_q_lock(osal_queue_t qhdl)
{
+ (void) qhdl;
+
#if TUSB_OPT_DEVICE_ENABLED
if (qhdl->role == OPT_MODE_DEVICE) dcd_int_disable(TUD_OPT_RHPORT);
#endif
@@ -157,6 +159,8 @@ static inline void _osal_q_lock(osal_queue_t qhdl)
// unlock queue
static inline void _osal_q_unlock(osal_queue_t qhdl)
{
+ (void) qhdl;
+
#if TUSB_OPT_DEVICE_ENABLED
if (qhdl->role == OPT_MODE_DEVICE) dcd_int_enable(TUD_OPT_RHPORT);
#endif
diff --git a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c
index 00f5b1239..c33f9b865 100644
--- a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c
+++ b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c
@@ -103,17 +103,17 @@
#include "tusb_option.h"
-#define STM32F1_FSDEV ( \
- defined(STM32F102x6) || defined(STM32F102xB) || \
+#if defined(STM32F102x6) || defined(STM32F102xB) || \
defined(STM32F103x6) || defined(STM32F103xB) || \
- defined(STM32F103xE) || defined(STM32F103xG) \
-)
+ defined(STM32F103xE) || defined(STM32F103xG)
+#define STM32F1_FSDEV
+#endif
#if (TUSB_OPT_DEVICE_ENABLED) && ( \
- (CFG_TUSB_MCU == OPT_MCU_STM32F0 ) || \
- (CFG_TUSB_MCU == OPT_MCU_STM32F1 && STM32F1_FSDEV ) || \
- (CFG_TUSB_MCU == OPT_MCU_STM32F3 ) || \
- (CFG_TUSB_MCU == OPT_MCU_STM32L0 ) \
+ (CFG_TUSB_MCU == OPT_MCU_STM32F0 ) || \
+ (CFG_TUSB_MCU == OPT_MCU_STM32F1 && defined(STM32F1_FSDEV)) || \
+ (CFG_TUSB_MCU == OPT_MCU_STM32F3 ) || \
+ (CFG_TUSB_MCU == OPT_MCU_STM32L0 ) \
)
// In order to reduce the dependance on HAL, we undefine this.
@@ -252,7 +252,9 @@ void dcd_init (uint8_t rhport)
void dcd_int_enable (uint8_t rhport)
{
(void)rhport;
-
+ // Member here forces write to RAM before allowing ISR to execute
+ __DSB();
+ __ISB();
#if CFG_TUSB_MCU == OPT_MCU_STM32F0 || CFG_TUSB_MCU == OPT_MCU_STM32L0
NVIC_EnableIRQ(USB_IRQn);
#elif CFG_TUSB_MCU == OPT_MCU_STM32F3
@@ -276,10 +278,7 @@ void dcd_int_disable(uint8_t rhport)
#else
#error Unknown arch in USB driver
#endif
- // I'm not convinced that memory synchronization is completely necessary, but
- // it isn't a bad idea.
- __DSB();
- __ISB();
+ // CMSIS has a membar after disabling interrupts
}
// Receive Set Address request, mcu port must also include status IN response
@@ -419,10 +418,15 @@ static uint16_t dcd_ep_ctr_handler(void)
uint8_t userMemBuf[8];
/* Get SETUP Packet*/
count = pcd_get_ep_rx_cnt(USB, EPindex);
- //TU_ASSERT_ERR(count == 8);
- dcd_read_packet_memory(userMemBuf, *pcd_ep_rx_address_ptr(USB,EPindex), 8);
+ if(count == 8) // Setup packet should always be 8 bytes. If not, ignore it, and try again.
+ {
+ // Must reset EP to NAK (in case it had been stalling) (though, maybe too late here)
+ pcd_set_ep_rx_status(USB,0u,USB_EP_RX_NAK);
+ pcd_set_ep_tx_status(USB,0u,USB_EP_TX_NAK);
+ dcd_read_packet_memory(userMemBuf, *pcd_ep_rx_address_ptr(USB,EPindex), 8);
+ dcd_event_setup_received(0, (uint8_t*)userMemBuf, true);
+ }
/* SETUP bit kept frozen while CTR_RX = 1*/
- dcd_event_setup_received(0, (uint8_t*)userMemBuf, true);
pcd_clear_rx_ep_ctr(USB, EPindex);
}
else if ((wEPVal & USB_EP_CTR_RX) != 0U) // OUT
@@ -440,10 +444,6 @@ static uint16_t dcd_ep_ctr_handler(void)
}
/* Process Control Data OUT status Packet*/
- if(EPindex == 0u && xfer->total_len == 0u)
- {
- pcd_clear_ep_kind(USB,0); // Good, so allow non-zero length packets now.
- }
dcd_event_xfer_complete(0, EPindex, xfer->total_len, XFER_RESULT_SUCCESS, true);
pcd_set_ep_rx_cnt(USB, EPindex, CFG_TUD_ENDPOINT0_SIZE);
@@ -627,7 +627,9 @@ bool dcd_edpt_open (uint8_t rhport, tusb_desc_endpoint_t const * p_endpoint_desc
}
pcd_set_ep_address(USB, epnum, epnum);
- pcd_clear_ep_kind(USB,0); // Be normal, for now, instead of only accepting zero-byte packets
+ // Be normal, for now, instead of only accepting zero-byte packets (on control endpoint)
+ // or being double-buffered (bulk endpoints)
+ pcd_clear_ep_kind(USB,0);
if(dir == TUSB_DIR_IN)
{
@@ -688,7 +690,6 @@ bool dcd_edpt_xfer (uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t
if (epnum == 0 && buffer == NULL)
{
xfer->buffer = (uint8_t*)_setup_packet;
- pcd_set_ep_kind(USB,0); // Expect a zero-byte INPUT
}
if(total_bytes > xfer->max_packet_size)
{
diff --git a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h
index 30538541a..bbaa52eae 100644
--- a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h
+++ b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h
@@ -52,7 +52,7 @@
// 070RB: 2 x 16 bits/word memory LPM Support, BCD Support
// PMA dedicated to USB (no sharing with CAN)
-#elif STM32F1_FSDEV
+#elif defined(STM32F1_FSDEV)
#include "stm32f1xx.h"
#define PMA_LENGTH (512u)
// NO internal Pull-ups
diff --git a/src/portable/st/synopsys/dcd_synopsys.c b/src/portable/st/synopsys/dcd_synopsys.c
index 1a7f86219..7929b6916 100644
--- a/src/portable/st/synopsys/dcd_synopsys.c
+++ b/src/portable/st/synopsys/dcd_synopsys.c
@@ -27,19 +27,19 @@
#include "tusb_option.h"
-#define STM32L4_SYNOPSYS ( \
- defined (STM32L475xx) || defined (STM32L476xx) || \
+#if defined (STM32L475xx) || defined (STM32L476xx) || \
defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || \
defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || \
- defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) \
-)
+ defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx)
+#define STM32L4_SYNOPSYS
+#endif
#if TUSB_OPT_DEVICE_ENABLED && \
( CFG_TUSB_MCU == OPT_MCU_STM32F2 || \
CFG_TUSB_MCU == OPT_MCU_STM32F4 || \
CFG_TUSB_MCU == OPT_MCU_STM32F7 || \
CFG_TUSB_MCU == OPT_MCU_STM32H7 || \
- (CFG_TUSB_MCU == OPT_MCU_STM32L4 && STM32L4_SYNOPSYS) \
+ (CFG_TUSB_MCU == OPT_MCU_STM32L4 && defined(STM32L4_SYNOPSYS)) \
)
// TODO Support OTG_HS
diff --git a/tools/build_all.py b/tools/build_all.py
index e327da221..b20785049 100644
--- a/tools/build_all.py
+++ b/tools/build_all.py
@@ -46,13 +46,13 @@ for example in all_examples:
build_result = build_example(example, board)
build_duration = time.monotonic() - start_time
- if build_result.returncode != 0:
+ if build_result.returncode == 0:
+ success = "\033[32msucceeded\033[0m"
+ success_count += 1
+ else:
exit_status = build_result.returncode
success = "\033[31mfailed\033[0m "
fail_count += 1
- else:
- success = "\033[32msucceeded\033[0m"
- success_count += 1
if travis:
print('travis_fold:start:build-{}-{}\\r'.format(example, board))