diff options
author | Damien George <damien.p.george@gmail.com> | 2014-03-14 00:30:37 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-03-14 00:30:37 +0000 |
commit | b30c02afa078f7713faa14087ae28433dee49027 (patch) | |
tree | 55fceb0630addde69dd52a3e2f8e8dc2f1be2015 | |
parent | 536dde254be99e19700a0934af38b913256475e3 (diff) | |
download | micropython-b30c02afa078f7713faa14087ae28433dee49027.tar.gz micropython-b30c02afa078f7713faa14087ae28433dee49027.zip |
stmhal: Get USB enumerating a CDC device.
Enumerates CDC device over USB, but doesn't transmit/receive yet.
-rw-r--r-- | stmhal/Makefile | 31 | ||||
-rw-r--r-- | stmhal/boards/PYBOARD4/stm32f4xx_hal_conf.h | 1 | ||||
-rw-r--r-- | stmhal/main.c | 28 | ||||
-rw-r--r-- | stmhal/pendsv.c | 83 | ||||
-rw-r--r-- | stmhal/pendsv.h | 3 | ||||
-rw-r--r-- | stmhal/stm32f4xx_it.c | 77 | ||||
-rw-r--r-- | stmhal/stm32f4xx_it.h | 5 | ||||
-rw-r--r-- | stmhal/usb.c | 240 | ||||
-rw-r--r-- | stmhal/usb.h | 23 | ||||
-rw-r--r-- | stmhal/usbd_cdc_interface.c | 461 | ||||
-rw-r--r-- | stmhal/usbd_cdc_interface.h | 87 | ||||
-rw-r--r-- | stmhal/usbd_conf.c | 565 | ||||
-rw-r--r-- | stmhal/usbd_conf.h | 87 | ||||
-rw-r--r-- | stmhal/usbd_desc.c | 228 | ||||
-rw-r--r-- | stmhal/usbd_desc.h | 43 | ||||
-rw-r--r-- | stmhal/usbdev/class/AUDIO/Inc/usbd_audio.h (renamed from stmhal/usbdev/Class/AUDIO/Inc/usbd_audio.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/AUDIO/Inc/usbd_audio_if_template.h (renamed from stmhal/usbdev/Class/AUDIO/Inc/usbd_audio_if_template.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/AUDIO/Src/usbd_audio.c (renamed from stmhal/usbdev/Class/AUDIO/Src/usbd_audio.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/AUDIO/Src/usbd_audio_if_template.c (renamed from stmhal/usbdev/Class/AUDIO/Src/usbd_audio_if_template.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/CustomHID/Inc/usbd_customhid.h (renamed from stmhal/usbdev/Class/CustomHID/Inc/usbd_customhid.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/CustomHID/Src/usbd_customhid.c (renamed from stmhal/usbdev/Class/CustomHID/Src/usbd_customhid.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/DFU/Inc/usbd_dfu.h (renamed from stmhal/usbdev/Class/DFU/Inc/usbd_dfu.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/DFU/Inc/usbd_dfu_media_template.h (renamed from stmhal/usbdev/Class/DFU/Inc/usbd_dfu_media_template.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/DFU/Src/usbd_dfu.c (renamed from stmhal/usbdev/Class/DFU/Src/usbd_dfu.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/DFU/Src/usbd_dfu_media_template.c (renamed from stmhal/usbdev/Class/DFU/Src/usbd_dfu_media_template.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/HID/Inc/usbd_hid.h (renamed from stmhal/usbdev/Class/HID/Inc/usbd_hid.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/HID/Src/usbd_hid.c (renamed from stmhal/usbdev/Class/HID/Src/usbd_hid.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/MSC/Inc/usbd_msc.h (renamed from stmhal/usbdev/Class/MSC/Inc/usbd_msc.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/MSC/Inc/usbd_msc_bot.h (renamed from stmhal/usbdev/Class/MSC/Inc/usbd_msc_bot.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/MSC/Inc/usbd_msc_data.h (renamed from stmhal/usbdev/Class/MSC/Inc/usbd_msc_data.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/MSC/Inc/usbd_msc_scsi.h (renamed from stmhal/usbdev/Class/MSC/Inc/usbd_msc_scsi.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/MSC/Inc/usbd_msc_storage_template.h (renamed from stmhal/usbdev/Class/MSC/Inc/usbd_msc_storage_template.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/MSC/Src/usbd_msc.c (renamed from stmhal/usbdev/Class/MSC/Src/usbd_msc.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/MSC/Src/usbd_msc_bot.c (renamed from stmhal/usbdev/Class/MSC/Src/usbd_msc_bot.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/MSC/Src/usbd_msc_data.c (renamed from stmhal/usbdev/Class/MSC/Src/usbd_msc_data.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/MSC/Src/usbd_msc_scsi.c (renamed from stmhal/usbdev/Class/MSC/Src/usbd_msc_scsi.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/MSC/Src/usbd_msc_storage_template.c (renamed from stmhal/usbdev/Class/MSC/Src/usbd_msc_storage_template.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/Template/Inc/usbd_template.h (renamed from stmhal/usbdev/Class/Template/Inc/usbd_template.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/Template/Src/usbd_template.c (renamed from stmhal/usbdev/Class/Template/Src/usbd_template.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/cdc/inc/usbd_cdc.h (renamed from stmhal/usbdev/Class/CDC/Inc/usbd_cdc.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/cdc/inc/usbd_cdc_if_template.h (renamed from stmhal/usbdev/Class/CDC/Inc/usbd_cdc_if_template.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/class/cdc/src/usbd_cdc.c (renamed from stmhal/usbdev/Class/CDC/Src/usbd_cdc.c) | 2 | ||||
-rw-r--r-- | stmhal/usbdev/class/cdc/src/usbd_cdc_if_template.c (renamed from stmhal/usbdev/Class/CDC/Src/usbd_cdc_if_template.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/core/inc/usbd_conf_template.h (renamed from stmhal/usbdev/Core/Inc/usbd_conf_template.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/core/inc/usbd_core.h (renamed from stmhal/usbdev/Core/Inc/usbd_core.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/core/inc/usbd_ctlreq.h (renamed from stmhal/usbdev/Core/Inc/usbd_ctlreq.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/core/inc/usbd_def.h (renamed from stmhal/usbdev/Core/Inc/usbd_def.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/core/inc/usbd_ioreq.h (renamed from stmhal/usbdev/Core/Inc/usbd_ioreq.h) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/core/src/usbd_conf_template.c (renamed from stmhal/usbdev/Core/Src/usbd_conf_template.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/core/src/usbd_core.c (renamed from stmhal/usbdev/Core/Src/usbd_core.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/core/src/usbd_ctlreq.c (renamed from stmhal/usbdev/Core/Src/usbd_ctlreq.c) | 0 | ||||
-rw-r--r-- | stmhal/usbdev/core/src/usbd_ioreq.c (renamed from stmhal/usbdev/Core/Src/usbd_ioreq.c) | 0 |
52 files changed, 1947 insertions, 17 deletions
diff --git a/stmhal/Makefile b/stmhal/Makefile index 5ec7728083..1c044055c1 100644 --- a/stmhal/Makefile +++ b/stmhal/Makefile @@ -8,9 +8,8 @@ include ../py/py.mk CMSIS_DIR=cmsis HAL_DIR=hal -#STMUSB_DIR=stmusb -#STMUSBD_DIR=stmusbd -#STMUSBH_DIR=stmusbh +USBDEV_DIR=usbdev +#USBHOST_DIR=usbhost #FATFS_DIR=fatfs #CC3K_DIR=cc3k DFU=../tools/dfu.py @@ -22,9 +21,8 @@ INC += -I$(PY_SRC) INC += -I$(CMSIS_DIR)/inc INC += -I$(CMSIS_DIR)/devinc INC += -I$(HAL_DIR)/inc -#INC += -I$(STMUSB_DIR) -#INC += -I$(STMUSBD_DIR) -#INC += -I$(STMUSBH_DIR) +INC += -I$(USBDEV_DIR)/core/inc -I$(USBDEV_DIR)/class/cdc/inc +#INC += -I$(USBHOST_DIR) #INC += -I$(FATFS_DIR) #INC += -I$(CC3K_DIR) @@ -57,10 +55,15 @@ SRC_C = \ system_stm32f4xx.c \ stm32f4xx_it.c \ stm32f4xx_hal_msp.c \ + usbd_conf.c \ + usbd_desc.c \ + usbd_cdc_interface.c \ + pendsv.c \ systick.c \ led.c \ pin.c \ usart.c \ + usb.c \ printf.c \ math.c \ malloc0.c \ @@ -70,14 +73,12 @@ SRC_C = \ import.c \ lexerfatfs.c \ -# pendsv.c \ # gpio.c \ # lcd.c \ # servo.c \ # flash.c \ # storage.c \ # accel.c \ -# usb.c \ # timer.c \ # audio.c \ # sdcard.c \ @@ -100,8 +101,10 @@ SRC_HAL = $(addprefix $(HAL_DIR)/src/,\ stm32f4xx_hal_cortex.c \ stm32f4xx_hal_dma.c \ stm32f4xx_hal_gpio.c \ + stm32f4xx_hal_pcd.c \ stm32f4xx_hal_rcc.c \ stm32f4xx_hal_uart.c \ + stm32f4xx_ll_usb.c \ ) SRC_STMPERIPH = $(addprefix $(STMPERIPH_DIR)/,\ @@ -136,8 +139,14 @@ SRC_STMUSB = $(addprefix $(STMUSB_DIR)/,\ ) # usb_otg.c \ -SRC_STMUSBD = $(addprefix $(STMUSBD_DIR)/,\ - usbd_core.c \ +SRC_USBDEV = $(addprefix $(USBDEV_DIR)/,\ + core/src/usbd_core.c \ + core/src/usbd_ctlreq.c \ + core/src/usbd_ioreq.c \ + class/cdc/src/usbd_cdc.c \ + ) + +# usbd_core.c \ usbd_ioreq.c \ usbd_req.c \ usbd_usr.c \ @@ -186,7 +195,7 @@ OBJ += $(PY_O) OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o)) OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o)) OBJ += $(addprefix $(BUILD)/, $(SRC_HAL:.c=.o)) -#OBJ += $(addprefix $(BUILD)/, $(SRC_STMUSB:.c=.o)) +OBJ += $(addprefix $(BUILD)/, $(SRC_USBDEV:.c=.o)) #OBJ += $(addprefix $(BUILD)/, $(SRC_STMUSBD:.c=.o)) #OBJ += $(addprefix $(BUILD)/, $(SRC_STMUSBH:.c=.o)) #OBJ += $(addprefix $(BUILD)/, $(SRC_FATFS:.c=.o)) diff --git a/stmhal/boards/PYBOARD4/stm32f4xx_hal_conf.h b/stmhal/boards/PYBOARD4/stm32f4xx_hal_conf.h index bc13ac2c3a..315c24dc67 100644 --- a/stmhal/boards/PYBOARD4/stm32f4xx_hal_conf.h +++ b/stmhal/boards/PYBOARD4/stm32f4xx_hal_conf.h @@ -47,6 +47,7 @@ /* Exported constants --------------------------------------------------------*/
#define STM32F405xx
+#define USE_USB_FS
/* ########################## Module Selection ############################## */
/**
diff --git a/stmhal/main.c b/stmhal/main.c index 97a512cda7..4b502fcf24 100644 --- a/stmhal/main.c +++ b/stmhal/main.c @@ -20,6 +20,7 @@ #include "misc.h" #include "systick.h" +#include "pendsv.h" #include "led.h" #include "usart.h" #include "mpconfig.h" @@ -37,16 +38,15 @@ #include "gccollect.h" #include "pyexec.h" #include "pybmodule.h" +#include "usb.h" #if 0 #include "ff.h" #include "lexerfatfs.h" -#include "pendsv.h" #include "servo.h" #include "lcd.h" #include "storage.h" #include "sdcard.h" #include "accel.h" -#include "usb.h" #include "timer.h" #include "pybwlan.h" #include "usrsw.h" @@ -82,9 +82,11 @@ void flash_error(int n) { void __fatal_error(const char *msg) { #if MICROPY_HW_HAS_LCD +#if 0 lcd_print_strn("\nFATAL ERROR:\n", 14); lcd_print_strn(msg, strlen(msg)); #endif +#endif for (;;) { flash_error(1); } @@ -116,6 +118,9 @@ void fatality(void) { led_state(PYB_LED_G1, 1); led_state(PYB_LED_R2, 1); led_state(PYB_LED_G2, 1); + for (;;) { + flash_error(1); + } } static const char fresh_boot_py[] = @@ -244,9 +249,7 @@ int main(void) { // basic sub-system init sys_tick_init(); -#if 0 pendsv_init(); -#endif led_init(); #if 0 @@ -469,6 +472,7 @@ soft_reset: } } #endif +#endif #ifdef USE_HOST_MODE // USB host @@ -478,6 +482,22 @@ soft_reset: pyb_usb_dev_init(PYB_USB_DEV_VCP_MSC); #endif +#if 0 + // test USB CDC + extern uint8_t UserTxBuffer[];/* Received Data over UART (CDC interface) are stored in this buffer */ + extern uint32_t UserTxBufPtrOut; /* Increment this pointer or roll it back to + start address when data are sent over USB */ + for (;;) { + UserTxBuffer[UserTxBufPtrOut++] = 'a'; + UserTxBuffer[UserTxBufPtrOut++] = 'b'; + UserTxBuffer[UserTxBufPtrOut++] = 'c'; + UserTxBuffer[UserTxBufPtrOut++] = 'd'; + HAL_Delay(500); + led_toggle(PYB_LED_BLUE); + } +#endif + +#if 0 // run main script { vstr_t *vstr = vstr_new(); diff --git a/stmhal/pendsv.c b/stmhal/pendsv.c new file mode 100644 index 0000000000..706f9011ff --- /dev/null +++ b/stmhal/pendsv.c @@ -0,0 +1,83 @@ +#include <stdlib.h> +#include <stm32f4xx_hal.h> + +#include "misc.h" +#include "mpconfig.h" +#include "qstr.h" +#include "obj.h" +#include "pendsv.h" + +static void *pendsv_object = NULL; + +void pendsv_init(void) { + // set PendSV interrupt at lowest priority + HAL_NVIC_SetPriority(PendSV_IRQn, 0xf, 0xf); +} + +// call this function to raise a pending exception during an interrupt +// it will wait until all interrupts are finished then raise the given +// exception object using nlr_jump in the context of the top-level thread +void pendsv_nlr_jump(void *o) { + pendsv_object = o; + SCB->ICSR = SCB_ICSR_PENDSVSET_Msk; +} + +// since we play tricks with the stack, the compiler must not generate a +// prelude for this function +void pendsv_isr_handler(void) __attribute__((naked)); + +void pendsv_isr_handler(void) { + // re-jig the stack so that when we return from this interrupt handler + // it returns instead to nlr_jump with argument pendsv_object + // note that stack has a different layout if DEBUG is enabled + // + // on entry to this (naked) function, stack has the following layout: + // + // stack layout with DEBUG disabled: + // sp[6]: pc + // sp[5]: ? + // sp[4]: ? + // sp[3]: ? + // sp[2]: ? + // sp[1]: ? + // sp[0]: r0 + // + // stack layout with DEBUG enabled: + // sp[8]: pc + // sp[7]: lr + // sp[6]: ? + // sp[5]: ? + // sp[4]: ? + // sp[3]: ? + // sp[2]: r0 + // sp[1]: 0xfffffff9 + // sp[0]: ? + + __asm volatile ( + "ldr r0, pendsv_object_ptr\n" + "ldr r0, [r0]\n" +#if defined(PENDSV_DEBUG) + "str r0, [sp, #8]\n" +#else + "str r0, [sp, #0]\n" +#endif + "ldr r0, nlr_jump_ptr\n" +#if defined(PENDSV_DEBUG) + "str r0, [sp, #32]\n" +#else + "str r0, [sp, #24]\n" +#endif + "bx lr\n" + ".align 2\n" + "pendsv_object_ptr: .word pendsv_object\n" + "nlr_jump_ptr: .word nlr_jump\n" + ); + + /* + uint32_t x[2] = {0x424242, 0xdeaddead}; + printf("PendSV: %p\n", x); + for (uint32_t *p = (uint32_t*)(((uint32_t)x - 15) & 0xfffffff0), i = 64; i > 0; p += 4, i -= 4) { + printf(" %p: %08x %08x %08x %08x\n", p, (uint)p[0], (uint)p[1], (uint)p[2], (uint)p[3]); + } + */ +} diff --git a/stmhal/pendsv.h b/stmhal/pendsv.h new file mode 100644 index 0000000000..f13cb182f5 --- /dev/null +++ b/stmhal/pendsv.h @@ -0,0 +1,3 @@ +void pendsv_init(void); +void pendsv_nlr_jump(void *val); +void pendsv_isr_handler(void); diff --git a/stmhal/stm32f4xx_it.c b/stmhal/stm32f4xx_it.c index 96b12bfe4a..4be78deddb 100644 --- a/stmhal/stm32f4xx_it.c +++ b/stmhal/stm32f4xx_it.c @@ -56,6 +56,9 @@ /* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
+extern void fatality();
+extern PCD_HandleTypeDef hpcd;
+
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
@@ -82,6 +85,7 @@ void HardFault_Handler(void) /* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
+ fatality();
}
}
@@ -95,6 +99,7 @@ void MemManage_Handler(void) /* Go to infinite loop when Memory Manage exception occurs */
while (1)
{
+ fatality();
}
}
@@ -108,6 +113,7 @@ void BusFault_Handler(void) /* Go to infinite loop when Bus Fault exception occurs */
while (1)
{
+ fatality();
}
}
@@ -121,6 +127,7 @@ void UsageFault_Handler(void) /* Go to infinite loop when Usage Fault exception occurs */
while (1)
{
+ fatality();
}
}
@@ -149,6 +156,8 @@ void DebugMon_Handler(void) */
void PendSV_Handler(void)
{
+ extern void pendsv_isr_handler(void);
+ pendsv_isr_handler();
}
/**
@@ -158,7 +167,7 @@ void PendSV_Handler(void) */
void SysTick_Handler(void)
{
- HAL_IncTick();
+ HAL_IncTick();
}
/******************************************************************************/
@@ -169,6 +178,72 @@ void SysTick_Handler(void) /******************************************************************************/
/**
+ * @brief This function handles USB-On-The-Go FS global interrupt request.
+ * @param None
+ * @retval None
+ */
+#ifdef USE_USB_FS
+void OTG_FS_IRQHandler(void)
+#elif defined(USE_USB_HS)
+void OTG_HS_IRQHandler(void)
+#endif
+{
+ HAL_PCD_IRQHandler(&hpcd);
+}
+
+/**
+ * @brief This function handles USB OTG FS or HS Wakeup IRQ Handler.
+ * @param None
+ * @retval None
+ */
+#ifdef USE_USB_FS
+void OTG_FS_WKUP_IRQHandler(void)
+#elif defined(USE_USB_HS)
+void OTG_HS_WKUP_IRQHandler(void)
+#endif
+{
+
+ if((&hpcd)->Init.low_power_enable)
+ {
+ /* Reset SLEEPDEEP bit of Cortex System Control Register */
+ SCB->SCR &= (uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
+
+ /* Configures system clock after wake-up from STOP: enable HSE, PLL and select
+ PLL as system clock source (HSE and PLL are disabled in STOP mode) */
+
+ __HAL_RCC_HSE_CONFIG(RCC_HSE_ON);
+
+ /* Wait till HSE is ready */
+ while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ {}
+
+ /* Enable the main PLL. */
+ __HAL_RCC_PLL_ENABLE();
+
+ /* Wait till PLL is ready */
+ while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ {}
+
+ /* Select PLL as SYSCLK */
+ MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, RCC_SYSCLKSOURCE_PLLCLK);
+
+ while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL)
+ {}
+
+ /* ungate PHY clock */
+ __HAL_PCD_UNGATE_PHYCLOCK((&hpcd));
+ }
+#ifdef USE_USB_FS
+ /* Clear EXTI pending Bit*/
+ __HAL_USB_FS_EXTI_CLEAR_FLAG();
+#elif defined(USE_USB_HS)
+ /* Clear EXTI pending Bit*/
+ __HAL_USB_HS_EXTI_CLEAR_FLAG();
+#endif
+
+}
+
+/**
* @brief This function handles PPP interrupt request.
* @param None
* @retval None
diff --git a/stmhal/stm32f4xx_it.h b/stmhal/stm32f4xx_it.h index c2aabfadd0..2bdab3f805 100644 --- a/stmhal/stm32f4xx_it.h +++ b/stmhal/stm32f4xx_it.h @@ -58,6 +58,11 @@ void SVC_Handler(void); void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
+#ifdef USE_USB_FS
+void OTG_FS_IRQHandler(void);
+#elif defined(USE_USB_HS)
+void OTG_HS_IRQHandler(void);
+#endif
#ifdef __cplusplus
}
diff --git a/stmhal/usb.c b/stmhal/usb.c new file mode 100644 index 0000000000..8cfb0e7dfd --- /dev/null +++ b/stmhal/usb.c @@ -0,0 +1,240 @@ +#include <string.h> + +/* +#include "usb_core.h" +#include "usbd_cdc_core.h" +#include "usbd_pyb_core.h" +#include "usbd_usr.h" +*/ +#include "usbd_core.h" +#include "usbd_desc.h" +#include "usbd_cdc.h" +#include "usbd_cdc_interface.h" + +#include "misc.h" +#include "mpconfig.h" +#include "qstr.h" +#include "obj.h" +#include "pendsv.h" +#include "usb.h" + +#ifdef USE_DEVICE_MODE +//extern CDC_IF_Prop_TypeDef VCP_fops; +USBD_HandleTypeDef hUSBDDevice; +#endif + +static int dev_is_enabled = 0; +uint32_t APP_dev_is_connected = 0; /* used by usbd_cdc_vcp */ +static char rx_buf[64]; +static int rx_buf_in; +static int rx_buf_out; +static int interrupt_char = VCP_CHAR_NONE; +mp_obj_t mp_const_vcp_interrupt = MP_OBJ_NULL; + +void pyb_usb_dev_init(int usb_dev_type) { +#ifdef USE_DEVICE_MODE + if (!dev_is_enabled) { + // only init USB once in the device's power-lifetime + switch (usb_dev_type) { + case PYB_USB_DEV_VCP_MSC: + // XXX USBD_CDC_Init (called by one of these functions below) uses malloc, + // so the memory is invalid after a soft reset (which resets the GC). + USBD_Init(&hUSBDDevice, &VCP_Desc, 0); + USBD_RegisterClass(&hUSBDDevice, &USBD_CDC); + USBD_CDC_RegisterInterface(&hUSBDDevice, &USBD_CDC_fops); + USBD_Start(&hUSBDDevice); + //USBD_Init(&USB_OTG_Core, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_PYB_cb, &USR_cb); + break; + + case PYB_USB_DEV_HID: + //USBD_Init(&USB_OTG_Core, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_PYB_HID_cb, &USR_cb); + // TODO + break; + } + } + rx_buf_in = 0; + rx_buf_out = 0; + interrupt_char = VCP_CHAR_NONE; + dev_is_enabled = 1; + + // create an exception object for interrupting by VCP + mp_const_vcp_interrupt = mp_obj_new_exception_msg(&mp_type_OSError, "VCPInterrupt"); +#endif +} + +bool usb_vcp_is_enabled(void) { + return dev_is_enabled; +} + +bool usb_vcp_is_connected(void) { + return APP_dev_is_connected; +} + +void usb_vcp_set_interrupt_char(int c) { + if (dev_is_enabled) { + interrupt_char = c; + } +} + +void usb_vcp_receive(const char *buf, uint32_t len) { + if (dev_is_enabled) { + for (int i = 0; i < len; i++) { + + // catch special interrupt character + if (buf[i] == interrupt_char) { + // raise exception when interrupts are finished + mp_obj_exception_clear_traceback(mp_const_vcp_interrupt); + pendsv_nlr_jump(mp_const_vcp_interrupt); + interrupt_char = VCP_CHAR_NONE; + continue; + } + + rx_buf[rx_buf_in++] = buf[i]; + if (rx_buf_in >= sizeof(rx_buf)) { + rx_buf_in = 0; + } + if (rx_buf_in == rx_buf_out) { + rx_buf_out = rx_buf_in + 1; + if (rx_buf_out >= sizeof(rx_buf)) { + rx_buf_out = 0; + } + } + } + } +} + +int usb_vcp_rx_any(void) { + if (rx_buf_in >= rx_buf_out) { + return rx_buf_in - rx_buf_out; + } else { + return rx_buf_in + sizeof(rx_buf) - rx_buf_out; + } +} + +char usb_vcp_rx_get(void) { + while (rx_buf_out == rx_buf_in) { + } + char c = rx_buf[rx_buf_out]; + rx_buf_out += 1; + if (rx_buf_out >= sizeof(rx_buf)) { + rx_buf_out = 0; + } + return c; +} + +void usb_vcp_send_str(const char *str) { + usb_vcp_send_strn(str, strlen(str)); +} + +void usb_vcp_send_strn(const char *str, int len) { +#ifdef USE_DEVICE_MODE + if (dev_is_enabled) { + #if 0 + USBD_CDC_fops.pIf_DataTx((const uint8_t*)str, len); + #endif + } +#endif +} + +#include "usbd_conf.h" + +/* These are external variables imported from CDC core to be used for IN + transfer management. */ +#ifdef USE_DEVICE_MODE +extern uint8_t UserRxBuffer[];/* Received Data over USB are stored in this buffer */ +extern uint8_t UserTxBuffer[];/* Received Data over UART (CDC interface) are stored in this buffer */ +extern uint32_t BuffLength; +extern uint32_t UserTxBufPtrIn;/* Increment this pointer or roll it back to + start address when data are received over USART */ +extern uint32_t UserTxBufPtrOut; /* Increment this pointer or roll it back to + start address when data are sent over USB */ +#endif + +void usb_vcp_send_strn_cooked(const char *str, int len) { +#ifdef USE_DEVICE_MODE + #if 0 + for (const char *top = str + len; str < top; str++) { + if (*str == '\n') { + APP_Rx_Buffer[APP_Rx_ptr_in] = '\r'; + APP_Rx_ptr_in = (APP_Rx_ptr_in + 1) & (APP_RX_DATA_SIZE - 1); + } + APP_Rx_Buffer[APP_Rx_ptr_in] = *str; + APP_Rx_ptr_in = (APP_Rx_ptr_in + 1) & (APP_RX_DATA_SIZE - 1); + } + #endif +#endif +} + +void usb_hid_send_report(uint8_t *buf) { +#ifdef USE_DEVICE_MODE + #if 0 + USBD_HID_SendReport(&USB_OTG_Core, buf, 4); + #endif +#endif +} + +/******************************************************************************/ +// code for experimental USB OTG support + +#ifdef USE_HOST_MODE + +#include "led.h" +#include "usbh_core.h" +#include "usbh_usr.h" +#include "usbh_hid_core.h" +#include "usbh_hid_keybd.h" +#include "usbh_hid_mouse.h" + +__ALIGN_BEGIN USBH_HOST USB_Host __ALIGN_END ; + +static int host_is_enabled = 0; + +void pyb_usb_host_init(void) { + if (!host_is_enabled) { + // only init USBH once in the device's power-lifetime + /* Init Host Library */ + USBH_Init(&USB_OTG_Core, USB_OTG_FS_CORE_ID, &USB_Host, &HID_cb, &USR_Callbacks); + } + host_is_enabled = 1; +} + +void pyb_usb_host_process(void) { + USBH_Process(&USB_OTG_Core, &USB_Host); +} + +uint8_t usb_keyboard_key = 0; + +// TODO this is an ugly hack to get key presses +uint pyb_usb_host_get_keyboard(void) { + uint key = usb_keyboard_key; + usb_keyboard_key = 0; + return key; +} + +void USR_MOUSE_Init(void) { + led_state(4, 1); + USB_OTG_BSP_mDelay(100); + led_state(4, 0); +} + +void USR_MOUSE_ProcessData(HID_MOUSE_Data_TypeDef *data) { + led_state(4, 1); + USB_OTG_BSP_mDelay(50); + led_state(4, 0); +} + +void USR_KEYBRD_Init(void) { + led_state(4, 1); + USB_OTG_BSP_mDelay(100); + led_state(4, 0); +} + +void USR_KEYBRD_ProcessData(uint8_t pbuf) { + led_state(4, 1); + USB_OTG_BSP_mDelay(50); + led_state(4, 0); + //lcd_print_strn((char*)&pbuf, 1); + usb_keyboard_key = pbuf; +} + +#endif // USE_HOST_MODE diff --git a/stmhal/usb.h b/stmhal/usb.h new file mode 100644 index 0000000000..a0fb153240 --- /dev/null +++ b/stmhal/usb.h @@ -0,0 +1,23 @@ +#define VCP_CHAR_NONE (0) +#define VCP_CHAR_CTRL_A (1) +#define VCP_CHAR_CTRL_B (2) +#define VCP_CHAR_CTRL_C (3) +#define VCP_CHAR_CTRL_D (4) + +#define PYB_USB_DEV_VCP_MSC (0) +#define PYB_USB_DEV_HID (1) + +void pyb_usb_dev_init(int usb_dev_type); +bool usb_vcp_is_enabled(void); +bool usb_vcp_is_connected(void); +void usb_vcp_set_interrupt_char(int c); +int usb_vcp_rx_any(void); +char usb_vcp_rx_get(void); +void usb_vcp_send_str(const char* str); +void usb_vcp_send_strn(const char* str, int len); +void usb_vcp_send_strn_cooked(const char *str, int len); +void usb_hid_send_report(uint8_t *buf); // 4 bytes for mouse: ?, x, y, ? + +void pyb_usb_host_init(void); +void pyb_usb_host_process(void); +uint pyb_usb_host_get_keyboard(void); diff --git a/stmhal/usbd_cdc_interface.c b/stmhal/usbd_cdc_interface.c new file mode 100644 index 0000000000..cb1c41f24f --- /dev/null +++ b/stmhal/usbd_cdc_interface.c @@ -0,0 +1,461 @@ +/**
+ ******************************************************************************
+ * @file USB_Device/CDC_Standalone/Src/usbd_cdc_interface.c
+ * @author MCD Application Team
+ * @version V1.0.1
+ * @date 26-February-2014
+ * @brief Source file for USBD CDC interface
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+ *
+ * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.st.com/software_license_agreement_liberty_v2
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f4xx_hal.h"
+#include "usbd_cdc_interface.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+ * @{
+ */
+
+/** @defgroup USBD_CDC
+ * @brief usbd core module
+ * @{
+ */
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+#define APP_RX_DATA_SIZE 2048
+#define APP_TX_DATA_SIZE 2048
+
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+USBD_CDC_LineCodingTypeDef LineCoding =
+ {
+ 115200, /* baud rate*/
+ 0x00, /* stop bits-1*/
+ 0x00, /* parity - none*/
+ 0x08 /* nb. of bits 8*/
+ };
+
+uint8_t UserRxBuffer[APP_RX_DATA_SIZE];/* Received Data over USB are stored in this buffer */
+uint8_t UserTxBuffer[APP_TX_DATA_SIZE];/* Received Data over UART (CDC interface) are stored in this buffer */
+uint32_t BuffLength;
+uint32_t UserTxBufPtrIn = 0;/* Increment this pointer or roll it back to
+ start address when data are received over USART */
+uint32_t UserTxBufPtrOut = 0; /* Increment this pointer or roll it back to
+ start address when data are sent over USB */
+
+/* UART handler declaration */
+UART_HandleTypeDef UartHandle;
+/* TIM handler declaration */
+TIM_HandleTypeDef TimHandle;
+/* USB handler declaration */
+extern USBD_HandleTypeDef hUSBDDevice;
+
+/* Private function prototypes -----------------------------------------------*/
+static int8_t CDC_Itf_Init (void);
+static int8_t CDC_Itf_DeInit (void);
+static int8_t CDC_Itf_Control (uint8_t cmd, uint8_t* pbuf, uint16_t length);
+static int8_t CDC_Itf_Receive (uint8_t* pbuf, uint32_t *Len);
+
+static void Error_Handler(void);
+static void ComPort_Config(void);
+//static void TIM_Config(void);
+
+USBD_CDC_ItfTypeDef USBD_CDC_fops =
+{
+ CDC_Itf_Init,
+ CDC_Itf_DeInit,
+ CDC_Itf_Control,
+ CDC_Itf_Receive
+};
+
+/* Private functions ---------------------------------------------------------*/
+
+/**
+ * @brief CDC_Itf_Init
+ * Initializes the CDC media low layer
+ * @param None
+ * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
+ */
+static int8_t CDC_Itf_Init(void)
+{
+#if 0
+ /*##-1- Configure the UART peripheral ######################################*/
+ /* Put the USART peripheral in the Asynchronous mode (UART Mode) */
+ /* USART configured as follow:
+ - Word Length = 8 Bits
+ - Stop Bit = One Stop bit
+ - Parity = No parity
+ - BaudRate = 115200 baud
+ - Hardware flow control disabled (RTS and CTS signals) */
+ UartHandle.Instance = USARTx;
+ UartHandle.Init.BaudRate = 115200;
+ UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
+ UartHandle.Init.StopBits = UART_STOPBITS_1;
+ UartHandle.Init.Parity = UART_PARITY_NONE;
+ UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
+ UartHandle.Init.Mode = UART_MODE_TX_RX;
+
+ if(HAL_UART_Init(&UartHandle) != HAL_OK)
+ {
+ /* Initialization Error */
+ Error_Handler();
+ }
+
+ /*##-2- Put UART peripheral in IT reception process ########################*/
+ /* Any data received will be stored in "UserTxBuffer" buffer */
+ if(HAL_UART_Receive_IT(&UartHandle, (uint8_t *)UserTxBuffer, 1) != HAL_OK)
+ {
+ /* Transfer error in reception process */
+ Error_Handler();
+ }
+
+ /*##-3- Configure the TIM Base generation #################################*/
+ TIM_Config();
+
+ /*##-4- Start the TIM Base generation in interrupt mode ####################*/
+ /* Start Channel1 */
+ if(HAL_TIM_Base_Start_IT(&TimHandle) != HAL_OK)
+ {
+ /* Starting Error */
+ Error_Handler();
+ }
+#endif
+
+ /*##-5- Set Application Buffers ############################################*/
+ USBD_CDC_SetTxBuffer(&hUSBDDevice, UserTxBuffer, 0);
+ USBD_CDC_SetRxBuffer(&hUSBDDevice, UserRxBuffer);
+
+ return (USBD_OK);
+}
+
+/**
+ * @brief CDC_Itf_DeInit
+ * DeInitializes the CDC media low layer
+ * @param None
+ * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
+ */
+static int8_t CDC_Itf_DeInit(void)
+{
+#if 0
+ /* DeInitialize the UART peripheral */
+ if(HAL_UART_DeInit(&UartHandle) != HAL_OK)
+ {
+ /* Initialization Error */
+ Error_Handler();
+ }
+#endif
+ return (USBD_OK);
+}
+
+/**
+ * @brief CDC_Itf_Control
+ * Manage the CDC class requests
+ * @param Cmd: Command code
+ * @param Buf: Buffer containing command data (request parameters)
+ * @param Len: Number of data to be sent (in bytes)
+ * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
+ */
+static int8_t CDC_Itf_Control (uint8_t cmd, uint8_t* pbuf, uint16_t length)
+{
+ switch (cmd)
+ {
+ case CDC_SEND_ENCAPSULATED_COMMAND:
+ /* Add your code here */
+ break;
+
+ case CDC_GET_ENCAPSULATED_RESPONSE:
+ /* Add your code here */
+ break;
+
+ case CDC_SET_COMM_FEATURE:
+ /* Add your code here */
+ break;
+
+ case CDC_GET_COMM_FEATURE:
+ /* Add your code here */
+ break;
+
+ case CDC_CLEAR_COMM_FEATURE:
+ /* Add your code here */
+ break;
+
+ case CDC_SET_LINE_CODING:
+ LineCoding.bitrate = (uint32_t)(pbuf[0] | (pbuf[1] << 8) |\
+ (pbuf[2] << 16) | (pbuf[3] << 24));
+ LineCoding.format = pbuf[4];
+ LineCoding.paritytype = pbuf[5];
+ LineCoding.datatype = pbuf[6];
+
+ /* Set the new configuration */
+ ComPort_Config();
+ break;
+
+ case CDC_GET_LINE_CODING:
+ pbuf[0] = (uint8_t)(LineCoding.bitrate);
+ pbuf[1] = (uint8_t)(LineCoding.bitrate >> 8);
+ pbuf[2] = (uint8_t)(LineCoding.bitrate >> 16);
+ pbuf[3] = (uint8_t)(LineCoding.bitrate >> 24);
+ pbuf[4] = LineCoding.format;
+ pbuf[5] = LineCoding.paritytype;
+ pbuf[6] = LineCoding.datatype;
+
+ /* Add your code here */
+ break;
+
+ case CDC_SET_CONTROL_LINE_STATE:
+ /* Add your code here */
+ break;
+
+ case CDC_SEND_BREAK:
+ /* Add your code here */
+ break;
+
+ default:
+ break;
+ }
+
+ return (USBD_OK);
+}
+
+/**
+ * @brief TIM period elapsed callback
+ * @param htim: TIM handle
+ * @retval None
+ */
+void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
+{
+ uint32_t buffptr;
+ uint32_t buffsize;
+
+ if(UserTxBufPtrOut != UserTxBufPtrIn)
+ {
+ if(UserTxBufPtrOut > UserTxBufPtrIn) /* rollback */
+ {
+ buffsize = APP_RX_DATA_SIZE - UserTxBufPtrOut;
+ }
+ else
+ {
+ buffsize = UserTxBufPtrIn - UserTxBufPtrOut;
+ }
+
+ buffptr = UserTxBufPtrOut;
+
+ USBD_CDC_SetTxBuffer(&hUSBDDevice, (uint8_t*)&UserTxBuffer[buffptr], buffsize);
+
+ if(USBD_CDC_TransmitPacket(&hUSBDDevice) == USBD_OK)
+ {
+ UserTxBufPtrOut += buffsize;
+ if (UserTxBufPtrOut == APP_RX_DATA_SIZE)
+ {
+ UserTxBufPtrOut = 0;
+ }
+ }
+ }
+}
+
+/**
+ * @brief Rx Transfer completed callback
+ * @param huart: UART handle
+ * @retval None
+ */
+void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
+{
+ /* Increment Index for buffer writing */
+ UserTxBufPtrIn++;
+
+ /* To avoid buffer overflow */
+ if(UserTxBufPtrIn == APP_RX_DATA_SIZE)
+ {
+ UserTxBufPtrIn = 0;
+ }
+
+ /* Start another reception: provide the buffer pointer with offset and the buffer size */
+ HAL_UART_Receive_IT(huart, (uint8_t *)(UserTxBuffer + UserTxBufPtrIn), 1);
+}
+
+/**
+ * @brief CDC_Itf_DataRx
+ * Data received over USB OUT endpoint are sent over CDC interface
+ * through this function.
+ * @param Buf: Buffer of data to be transmitted
+ * @param Len: Number of data received (in bytes)
+ * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
+ */
+static int8_t CDC_Itf_Receive(uint8_t* Buf, uint32_t *Len)
+{
+ HAL_UART_Transmit_DMA(&UartHandle, Buf, *Len);
+ return (USBD_OK);
+}
+
+/**
+ * @brief Tx Transfer completed callback
+ * @param huart: UART handle
+ * @retval None
+ */
+void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
+{
+ /* Initiate next USB packet transfer once UART completes transfer (transmitting data over Tx line) */
+ USBD_CDC_ReceivePacket(&hUSBDDevice);
+}
+
+/**
+ * @brief ComPort_Config
+ * Configure the COM Port with the parameters received from host.
+ * @param None.
+ * @retval None.
+ * @note When a configuration is not supported, a default value is used.
+ */
+static void ComPort_Config(void)
+{
+ if(HAL_UART_DeInit(&UartHandle) != HAL_OK)
+ {
+ /* Initialization Error */
+ Error_Handler();
+ }
+
+ /* set the Stop bit */
+ switch (LineCoding.format)
+ {
+ case 0:
+ UartHandle.Init.StopBits = UART_STOPBITS_1;
+ break;
+ case 2:
+ UartHandle.Init.StopBits = UART_STOPBITS_2;
+ break;
+ default :
+ UartHandle.Init.StopBits = UART_STOPBITS_1;
+ break;
+ }
+
+ /* set the parity bit*/
+ switch (LineCoding.paritytype)
+ {
+ case 0:
+ UartHandle.Init.Parity = UART_PARITY_NONE;
+ break;
+ case 1:
+ UartHandle.Init.Parity = UART_PARITY_ODD;
+ break;
+ case 2:
+ UartHandle.Init.Parity = UART_PARITY_EVEN;
+ break;
+ default :
+ UartHandle.Init.Parity = UART_PARITY_NONE;
+ break;
+ }
+
+ /*set the data type : only 8bits and 9bits is supported */
+ switch (LineCoding.datatype)
+ {
+ case 0x07:
+ /* With this configuration a parity (Even or Odd) must be set */
+ UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
+ break;
+ case 0x08:
+ if(UartHandle.Init.Parity == UART_PARITY_NONE)
+ {
+ UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
+ }
+ else
+ {
+ UartHandle.Init.WordLength = UART_WORDLENGTH_9B;
+ }
+
+ break;
+ default :
+ UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
+ break;
+ }
+
+ UartHandle.Init.BaudRate = LineCoding.bitrate;
+ UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
+ UartHandle.Init.Mode = UART_MODE_TX_RX;
+
+ if(HAL_UART_Init(&UartHandle) != HAL_OK)
+ {
+ /* Initialization Error */
+ Error_Handler();
+ }
+
+ /* Start reception: provide the buffer pointer with offset and the buffer size */
+ HAL_UART_Receive_IT(&UartHandle, (uint8_t *)(UserTxBuffer + UserTxBufPtrIn), 1);
+}
+
+/**
+ * @brief TIM_Config: Configure TIMx timer
+ * @param None.
+ * @retval None.
+ */
+#if 0
+static void TIM_Config(void)
+{
+ /* Set TIMx instance */
+ TimHandle.Instance = TIMx;
+
+ /* Initialize TIM3 peripheral as follow:
+ + Period = 10000 - 1
+ + Prescaler = ((SystemCoreClock/2)/10000) - 1
+ + ClockDivision = 0
+ + Counter direction = Up
+ */
+ TimHandle.Init.Period = (CDC_POLLING_INTERVAL*1000) - 1;
+ TimHandle.Init.Prescaler = 84-1;
+ TimHandle.Init.ClockDivision = 0;
+ TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
+ if(HAL_TIM_Base_Init(&TimHandle) != HAL_OK)
+ {
+ /* Initialization Error */
+ Error_Handler();
+ }
+}
+#endif
+
+/**
+ * @brief UART error callbacks
+ * @param UartHandle: UART handle
+ * @retval None
+ */
+void HAL_UART_ErrorCallback(UART_HandleTypeDef *UartHandle)
+{
+ /* Transfer error occured in reception and/or transmission process */
+ Error_Handler();
+}
+
+/**
+ * @brief This function is executed in case of error occurrence.
+ * @param None
+ * @retval None
+ */
+static void Error_Handler(void)
+{
+ /* Add your own code here */
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
diff --git a/stmhal/usbd_cdc_interface.h b/stmhal/usbd_cdc_interface.h new file mode 100644 index 0000000000..140ea06f16 --- /dev/null +++ b/stmhal/usbd_cdc_interface.h @@ -0,0 +1,87 @@ +/**
+ ******************************************************************************
+ * @file USB_Device/CDC_Standalone/Inc/usbd_cdc_interface.h
+ * @author MCD Application Team
+ * @version V1.0.1
+ * @date 26-February-2014
+ * @brief Header for usbd_cdc_interface.c file.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+ *
+ * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.st.com/software_license_agreement_liberty_v2
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_CDC_IF_H
+#define __USBD_CDC_IF_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_cdc.h"
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+/* User can use this section to tailor USARTx/UARTx instance used and associated
+ resources */
+/* Definition for USARTx clock resources */
+#define USARTx USART3
+#define USARTx_CLK_ENABLE() __USART3_CLK_ENABLE();
+#define DMAx_CLK_ENABLE() __DMA1_CLK_ENABLE()
+#define USARTx_RX_GPIO_CLK_ENABLE() __GPIOC_CLK_ENABLE()
+#define USARTx_TX_GPIO_CLK_ENABLE() __GPIOC_CLK_ENABLE()
+
+#define USARTx_FORCE_RESET() __USART3_FORCE_RESET()
+#define USARTx_RELEASE_RESET() __USART3_RELEASE_RESET()
+
+/* Definition for USARTx Pins */
+#define USARTx_TX_PIN GPIO_PIN_10
+#define USARTx_TX_GPIO_PORT GPIOC
+#define USARTx_TX_AF GPIO_AF7_USART3
+#define USARTx_RX_PIN GPIO_PIN_11
+#define USARTx_RX_GPIO_PORT GPIOC
+#define USARTx_RX_AF GPIO_AF7_USART3
+
+/* Definition for USARTx's NVIC: used for receiving data over Rx pin */
+#define USARTx_IRQn USART3_IRQn
+#define USARTx_IRQHandler USART3_IRQHandler
+
+/* Definition for USARTx's DMA: used for transmitting data over Tx pin */
+#define USARTx_TX_DMA_CHANNEL DMA_CHANNEL_4
+#define USARTx_TX_DMA_STREAM DMA1_Stream3
+#define USARTx_DMA_TX_IRQHandler DMA1_Stream3_IRQHandler
+#define USARTx_DMA_TX_IRQn DMA1_Stream3_IRQn
+
+/* Definition for TIMx clock resources */
+#define TIMx TIM3
+#define TIMx_CLK_ENABLE __TIM3_CLK_ENABLE
+#define TIMx_FORCE_RESET() __USART3_FORCE_RESET()
+#define TIMx_RELEASE_RESET() __USART3_RELEASE_RESET()
+
+/* Definition for TIMx's NVIC */
+#define TIMx_IRQn TIM3_IRQn
+#define TIMx_IRQHandler TIM3_IRQHandler
+
+/* Periodically, the state of the buffer "UserTxBuffer" is checked.
+ The period depends on CDC_POLLING_INTERVAL */
+#define CDC_POLLING_INTERVAL 5 /* in ms. The max is 65 and the min is 1 */
+
+extern USBD_CDC_ItfTypeDef USBD_CDC_fops;
+
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+#endif /* __USBD_CDC_IF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbd_conf.c b/stmhal/usbd_conf.c new file mode 100644 index 0000000000..8594db13af --- /dev/null +++ b/stmhal/usbd_conf.c @@ -0,0 +1,565 @@ +/**
+ ******************************************************************************
+ * @file USB_Device/CDC_Standalone/Src/usbd_conf.c
+ * @author MCD Application Team
+ * @version V1.0.1
+ * @date 26-February-2014
+ * @brief This file implements the USB Device library callbacks and MSP
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+ *
+ * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.st.com/software_license_agreement_liberty_v2
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f4xx_hal.h"
+#include "usbd_core.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+PCD_HandleTypeDef hpcd;
+
+/* Private function prototypes -----------------------------------------------*/
+/* Private functions ---------------------------------------------------------*/
+
+/*******************************************************************************
+ PCD BSP Routines
+*******************************************************************************/
+/**
+ * @brief Initializes the PCD MSP.
+ * @param hpcd: PCD handle
+ * @retval None
+ */
+void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd)
+{
+ GPIO_InitTypeDef GPIO_InitStruct;
+
+ if(hpcd->Instance == USB_OTG_FS)
+ {
+ /* Configure USB FS GPIOs */
+ __GPIOA_CLK_ENABLE();
+
+ GPIO_InitStruct.Pin = (GPIO_PIN_11 | GPIO_PIN_12);
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ /* Configure VBUS Pin */
+ GPIO_InitStruct.Pin = GPIO_PIN_9;
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = GPIO_PIN_10;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ /* Enable USB FS Clocks */
+ __USB_OTG_FS_CLK_ENABLE();
+
+ /* Set USBFS Interrupt priority */
+ HAL_NVIC_SetPriority(OTG_FS_IRQn, 6, 0);
+
+ /* Enable USBFS Interrupt */
+ HAL_NVIC_EnableIRQ(OTG_FS_IRQn);
+ }
+
+ else if(hpcd->Instance == USB_OTG_HS)
+ {
+ /* Configure USB FS GPIOs */
+ __GPIOA_CLK_ENABLE();
+ __GPIOB_CLK_ENABLE();
+ __GPIOC_CLK_ENABLE();
+ __GPIOH_CLK_ENABLE();
+ __GPIOI_CLK_ENABLE();
+
+ /* CLK */
+ GPIO_InitStruct.Pin = GPIO_PIN_5;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ /* D0 */
+ GPIO_InitStruct.Pin = GPIO_PIN_3;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ /* D1 D2 D3 D4 D5 D6 D7 */
+ GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_5 |\
+ GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /* STP */
+ GPIO_InitStruct.Pin = GPIO_PIN_0;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+ /* NXT */
+ GPIO_InitStruct.Pin = GPIO_PIN_4;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS;
+ HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
+
+ /* DIR */
+ GPIO_InitStruct.Pin = GPIO_PIN_11;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS;
+ HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
+
+ /* Enable USB HS Clocks */
+ __USB_OTG_HS_CLK_ENABLE();
+ __USB_OTG_HS_ULPI_CLK_ENABLE();
+
+ /* Set USBHS Interrupt to the lowest priority */
+ HAL_NVIC_SetPriority(OTG_HS_IRQn, 6, 0);
+
+ /* Enable USBHS Interrupt */
+ HAL_NVIC_EnableIRQ(OTG_HS_IRQn);
+ }
+}
+/**
+ * @brief DeInitializes the PCD MSP.
+ * @param hpcd: PCD handle
+ * @retval None
+ */
+void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd)
+{
+ if(hpcd->Instance == USB_OTG_FS)
+ {
+ /* Disable USB FS Clocks */
+ __USB_OTG_FS_CLK_DISABLE();
+ __SYSCFG_CLK_DISABLE();
+ }
+ else if(hpcd->Instance == USB_OTG_HS)
+ {
+ /* Disable USB FS Clocks */
+ __USB_OTG_HS_CLK_DISABLE();
+ __SYSCFG_CLK_DISABLE();
+ }
+}
+
+/*******************************************************************************
+ LL Driver Callbacks (PCD -> USB Device Library)
+*******************************************************************************/
+
+
+/**
+ * @brief Setup stage callback.
+ * @param hpcd: PCD handle
+ * @retval None
+ */
+void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
+{
+ USBD_LL_SetupStage(hpcd->pData, (uint8_t *)hpcd->Setup);
+}
+
+/**
+ * @brief Data Out stage callback.
+ * @param hpcd: PCD handle
+ * @param epnum: Endpoint Number
+ * @retval None
+ */
+void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+{
+ USBD_LL_DataOutStage(hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff);
+}
+
+/**
+ * @brief Data In stage callback.
+ * @param hpcd: PCD handle
+ * @param epnum: Endpoint Number
+ * @retval None
+ */
+void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+{
+ USBD_LL_DataInStage(hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff);
+}
+
+/**
+ * @brief SOF callback.
+ * @param hpcd: PCD handle
+ * @retval None
+ */
+void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
+{
+ USBD_LL_SOF(hpcd->pData);
+}
+
+/**
+ * @brief Reset callback.
+ * @param hpcd: PCD handle
+ * @retval None
+ */
+void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
+{
+ USBD_SpeedTypeDef speed = USBD_SPEED_FULL;
+
+ /* Set USB Current Speed */
+ switch(hpcd->Init.speed)
+ {
+ case PCD_SPEED_HIGH:
+ speed = USBD_SPEED_HIGH;
+ break;
+
+ case PCD_SPEED_FULL:
+ speed = USBD_SPEED_FULL;
+ break;
+
+ default:
+ speed = USBD_SPEED_FULL;
+ break;
+ }
+ USBD_LL_SetSpeed(hpcd->pData, speed);
+
+ /* Reset Device */
+ USBD_LL_Reset(hpcd->pData);
+}
+
+/**
+ * @brief Suspend callback.
+ * @param hpcd: PCD handle
+ * @retval None
+ */
+void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
+{
+ USBD_LL_Suspend(hpcd->pData);
+}
+
+/**
+ * @brief Resume callback.
+ * @param hpcd: PCD handle
+ * @retval None
+ */
+void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
+{
+ USBD_LL_Resume(hpcd->pData);
+}
+
+/**
+ * @brief ISOC Out Incomplete callback.
+ * @param hpcd: PCD handle
+ * @param epnum: Endpoint Number
+ * @retval None
+ */
+void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+{
+ USBD_LL_IsoOUTIncomplete(hpcd->pData, epnum);
+}
+
+/**
+ * @brief ISOC In Incomplete callback.
+ * @param hpcd: PCD handle
+ * @param epnum: Endpoint Number
+ * @retval None
+ */
+void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+{
+ USBD_LL_IsoINIncomplete(hpcd->pData, epnum);
+}
+
+/**
+ * @brief Connect callback.
+ * @param hpcd: PCD handle
+ * @retval None
+ */
+void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
+{
+ USBD_LL_DevConnected(hpcd->pData);
+}
+
+/**
+ * @brief Disconnect callback.
+ * @param hpcd: PCD handle
+ * @retval None
+ */
+void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
+{
+ USBD_LL_DevDisconnected(hpcd->pData);
+}
+
+/*******************************************************************************
+ LL Driver Interface (USB Device Library --> PCD)
+*******************************************************************************/
+/**
+ * @brief Initializes the Low Level portion of the Device driver.
+ * @param pdev: Device handle
+ * @retval USBD Status
+ */
+USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev)
+{
+#ifdef USE_USB_FS
+ /*Set LL Driver parameters */
+ hpcd.Instance = USB_OTG_FS;
+ hpcd.Init.dev_endpoints = 4;
+ hpcd.Init.use_dedicated_ep1 = 0;
+ hpcd.Init.ep0_mps = 0x40;
+ hpcd.Init.dma_enable = 0;
+ hpcd.Init.low_power_enable = 0;
+ hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
+ hpcd.Init.Sof_enable = 0;
+ hpcd.Init.speed = PCD_SPEED_FULL;
+ hpcd.Init.vbus_sensing_enable = 1;
+ /* Link The driver to the stack */
+ hpcd.pData = pdev;
+ pdev->pData = &hpcd;
+ /*Initialize LL Driver */
+ HAL_PCD_Init(&hpcd);
+
+ HAL_PCD_SetRxFiFo(&hpcd, 0x80);
+ HAL_PCD_SetTxFiFo(&hpcd, 0, 0x40);
+ HAL_PCD_SetTxFiFo(&hpcd, 1, 0x80);
+
+
+#endif
+#ifdef USE_USB_HS
+ /*Set LL Driver parameters */
+ hpcd.Instance = USB_OTG_HS;
+ hpcd.Init.dev_endpoints = 6;
+ hpcd.Init.use_dedicated_ep1 = 0;
+ hpcd.Init.ep0_mps = 0x40;
+
+ /* Be aware that enabling USB-DMA mode will result in data being sent only by
+ multiple of 4 packet sizes. This is due to the fact that USB-DMA does
+ not allow sending data from non word-aligned addresses.
+ For this specific application, it is advised to not enable this option
+ unless required. */
+ hpcd.Init.dma_enable = 0;
+
+ hpcd.Init.low_power_enable = 0;
+ hpcd.Init.phy_itface = PCD_PHY_ULPI;
+ hpcd.Init.Sof_enable = 0;
+ hpcd.Init.speed = PCD_SPEED_HIGH;
+ hpcd.Init.vbus_sensing_enable = 1;
+ /* Link The driver to the stack */
+ hpcd.pData = pdev;
+ pdev->pData = &hpcd;
+ /*Initialize LL Driver */
+ HAL_PCD_Init(&hpcd);
+
+ HAL_PCD_SetRxFiFo(&hpcd, 0x200);
+ HAL_PCD_SetTxFiFo(&hpcd, 0, 0x80);
+ HAL_PCD_SetTxFiFo(&hpcd, 1, 0x174);
+
+
+#endif
+ return USBD_OK;
+}
+
+/**
+ * @brief De-Initializes the Low Level portion of the Device driver.
+ * @param pdev: Device handle
+ * @retval USBD Status
+ */
+USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev)
+{
+ HAL_PCD_DeInit(pdev->pData);
+ return USBD_OK;
+}
+
+/**
+ * @brief Starts the Low Level portion of the Device driver.
+ * @param pdev: Device handle
+ * @retval USBD Status
+ */
+USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev)
+{
+ HAL_PCD_Start(pdev->pData);
+ return USBD_OK;
+}
+
+/**
+ * @brief Stops the Low Level portion of the Device driver.
+ * @param pdev: Device handle
+ * @retval USBD Status
+ */
+USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev)
+{
+ HAL_PCD_Stop(pdev->pData);
+ return USBD_OK;
+}
+
+/**
+ * @brief Opens an endpoint of the Low Level Driver.
+ * @param pdev: Device handle
+ * @param ep_addr: Endpoint Number
+ * @param ep_type: Endpoint Type
+ * @param ep_mps: Endpoint Max Packet Size
+ * @retval USBD Status
+ */
+USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev,
+ uint8_t ep_addr,
+ uint8_t ep_type,
+ uint16_t ep_mps)
+{
+ HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type);
+ return USBD_OK;
+}
+
+/**
+ * @brief Closes an endpoint of the Low Level Driver.
+ * @param pdev: Device handle
+ * @param ep_addr: Endpoint Number
+ * @retval USBD Status
+ */
+USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
+{
+ HAL_PCD_EP_Close(pdev->pData, ep_addr);
+ return USBD_OK;
+}
+
+/**
+ * @brief Flushes an endpoint of the Low Level Driver.
+ * @param pdev: Device handle
+ * @param ep_addr: Endpoint Number
+ * @retval USBD Status
+ */
+USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
+{
+ HAL_PCD_EP_Flush(pdev->pData, ep_addr);
+ return USBD_OK;
+}
+
+/**
+ * @brief Sets a Stall condition on an endpoint of the Low Level Driver.
+ * @param pdev: Device handle
+ * @param ep_addr: Endpoint Number
+ * @retval USBD Status
+ */
+USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
+{
+ HAL_PCD_EP_SetStall(pdev->pData, ep_addr);
+ return USBD_OK;
+}
+
+/**
+ * @brief Clears a Stall condition on an endpoint of the Low Level Driver.
+ * @param pdev: Device handle
+ * @param ep_addr: Endpoint Number
+ * @retval USBD Status
+ */
+USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
+{
+ HAL_PCD_EP_ClrStall(pdev->pData, ep_addr);
+ return USBD_OK;
+}
+
+/**
+ * @brief Returns Stall condition.
+ * @param pdev: Device handle
+ * @param ep_addr: Endpoint Number
+ * @retval Stall (1: yes, 0: No)
+ */
+uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
+{
+ PCD_HandleTypeDef *hpcd = pdev->pData;
+
+ if((ep_addr & 0x80) == 0x80)
+ {
+ return hpcd->IN_ep[ep_addr & 0x7F].is_stall;
+ }
+ else
+ {
+ return hpcd->OUT_ep[ep_addr & 0x7F].is_stall;
+ }
+}
+
+/**
+ * @brief Assigns an USB address to the device
+ * @param pdev: Device handle
+ * @param dev_addr: USB address
+ * @retval USBD Status
+ */
+USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr)
+{
+ HAL_PCD_SetAddress(pdev->pData, dev_addr);
+ return USBD_OK;
+}
+
+/**
+ * @brief Transmits data over an endpoint
+ * @param pdev: Device handle
+ * @param ep_addr: Endpoint Number
+ * @param pbuf: Pointer to data to be sent
+ * @param size: Data size
+ * @retval USBD Status
+ */
+USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev,
+ uint8_t ep_addr,
+ uint8_t *pbuf,
+ uint16_t size)
+{
+ HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size);
+ return USBD_OK;
+}
+
+/**
+ * @brief Prepares an endpoint for reception
+ * @param pdev: Device handle
+ * @param ep_addr: Endpoint Number
+ * @param pbuf:pointer to data to be received
+ * @param size: data size
+ * @retval USBD Status
+ */
+USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev,
+ uint8_t ep_addr,
+ uint8_t *pbuf,
+ uint16_t size)
+{
+ HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size);
+ return USBD_OK;
+}
+
+/**
+ * @brief Returns the last transfered packet size.
+ * @param pdev: Device handle
+ * @param ep_addr: Endpoint Number
+ * @retval Recived Data Size
+ */
+uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
+{
+ return HAL_PCD_EP_GetRxCount(pdev->pData, ep_addr);
+}
+
+/**
+ * @brief Delay routine for the USB Device Library
+ * @param Delay: Delay in ms
+ * @retval None
+ */
+void USBD_LL_Delay(uint32_t Delay)
+{
+ HAL_Delay(Delay);
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbd_conf.h b/stmhal/usbd_conf.h new file mode 100644 index 0000000000..8c02ad0ec2 --- /dev/null +++ b/stmhal/usbd_conf.h @@ -0,0 +1,87 @@ +/**
+ ******************************************************************************
+ * @file USB_Device/CDC_Standalone/Inc/usbd_conf.h
+ * @author MCD Application Team
+ * @version V1.0.1
+ * @date 26-February-2014
+ * @brief General low level driver configuration
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+ *
+ * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.st.com/software_license_agreement_liberty_v2
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_CONF_H
+#define __USBD_CONF_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f4xx_hal.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "mpconfig.h"
+#include "gc.h" // for gc_alloc and gc_free
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+/* Common Config */
+#define USBD_MAX_NUM_INTERFACES 1
+#define USBD_MAX_NUM_CONFIGURATION 1
+#define USBD_MAX_STR_DESC_SIZ 0x100
+#define USBD_SUPPORT_USER_STRING 0
+#define USBD_SELF_POWERED 0
+#define USBD_DEBUG_LEVEL 0
+
+/* Exported macro ------------------------------------------------------------*/
+/* Memory management macros */
+#define USBD_malloc gc_alloc
+#define USBD_free gc_free
+#define USBD_memset memset
+#define USBD_memcpy memcpy
+
+/* DEBUG macros */
+#if (USBD_DEBUG_LEVEL > 0)
+#define USBD_UsrLog(...) printf(__VA_ARGS__);\
+ printf("\n");
+#else
+#define USBD_UsrLog(...)
+#endif
+
+#if (USBD_DEBUG_LEVEL > 1)
+
+#define USBD_ErrLog(...) printf("ERROR: ") ;\
+ printf(__VA_ARGS__);\
+ printf("\n");
+#else
+#define USBD_ErrLog(...)
+#endif
+
+#if (USBD_DEBUG_LEVEL > 2)
+#define USBD_DbgLog(...) printf("DEBUG : ") ;\
+ printf(__VA_ARGS__);\
+ printf("\n");
+#else
+#define USBD_DbgLog(...)
+#endif
+
+/* Exported functions ------------------------------------------------------- */
+
+#endif /* __USBD_CONF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbd_desc.c b/stmhal/usbd_desc.c new file mode 100644 index 0000000000..ca9ea487d9 --- /dev/null +++ b/stmhal/usbd_desc.c @@ -0,0 +1,228 @@ +/**
+ ******************************************************************************
+ * @file USB_Device/CDC_Standalone/Src/usbd_desc.c
+ * @author MCD Application Team
+ * @version V1.0.1
+ * @date 26-February-2014
+ * @brief This file provides the USBD descriptors and string formating method.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+ *
+ * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.st.com/software_license_agreement_liberty_v2
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_core.h"
+#include "usbd_desc.h"
+#include "usbd_conf.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+#define USBD_VID 0x0483
+#define USBD_PID 0x5740
+#define USBD_LANGID_STRING 0x409
+#define USBD_MANUFACTURER_STRING "STMicroelectronics"
+#define USBD_PRODUCT_HS_STRING "STM32 Virtual ComPort in HS Mode"
+#define USBD_SERIALNUMBER_HS_STRING "00000000001A"
+#define USBD_PRODUCT_FS_STRING "STM32 Virtual ComPort in FS Mode"
+#define USBD_SERIALNUMBER_FS_STRING "00000000001B"
+#define USBD_CONFIGURATION_HS_STRING "VCP Config"
+#define USBD_INTERFACE_HS_STRING "VCP Interface"
+#define USBD_CONFIGURATION_FS_STRING "VCP Config"
+#define USBD_INTERFACE_FS_STRING "VCP Interface"
+
+/* Private macro -------------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+uint8_t *USBD_VCP_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
+uint8_t *USBD_VCP_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
+uint8_t *USBD_VCP_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
+uint8_t *USBD_VCP_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
+uint8_t *USBD_VCP_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
+uint8_t *USBD_VCP_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
+uint8_t *USBD_VCP_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
+#ifdef USB_SUPPORT_USER_STRING_DESC
+uint8_t *USBD_VCP_USRStringDesc (USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length);
+#endif /* USB_SUPPORT_USER_STRING_DESC */
+
+/* Private variables ---------------------------------------------------------*/
+USBD_DescriptorsTypeDef VCP_Desc = {
+ USBD_VCP_DeviceDescriptor,
+ USBD_VCP_LangIDStrDescriptor,
+ USBD_VCP_ManufacturerStrDescriptor,
+ USBD_VCP_ProductStrDescriptor,
+ USBD_VCP_SerialStrDescriptor,
+ USBD_VCP_ConfigStrDescriptor,
+ USBD_VCP_InterfaceStrDescriptor,
+};
+
+/* USB Standard Device Descriptor */
+#if defined ( __ICCARM__ ) /*!< IAR Compiler */
+ #pragma data_alignment=4
+#endif
+__ALIGN_BEGIN uint8_t hUSBDDeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END = {
+ 0x12, /* bLength */
+ USB_DESC_TYPE_DEVICE, /* bDescriptorType */
+ 0x00, /* bcdUSB */
+ 0x02,
+ 0x00, /* bDeviceClass */
+ 0x00, /* bDeviceSubClass */
+ 0x00, /* bDeviceProtocol */
+ USB_MAX_EP0_SIZE, /* bMaxPacketSize */
+ LOBYTE(USBD_VID), /* idVendor */
+ HIBYTE(USBD_VID), /* idVendor */
+ LOBYTE(USBD_PID), /* idVendor */
+ HIBYTE(USBD_PID), /* idVendor */
+ 0x00, /* bcdDevice rel. 2.00 */
+ 0x02,
+ USBD_IDX_MFC_STR, /* Index of manufacturer string */
+ USBD_IDX_PRODUCT_STR, /* Index of product string */
+ USBD_IDX_SERIAL_STR, /* Index of serial number string */
+ USBD_MAX_NUM_CONFIGURATION /* bNumConfigurations */
+}; /* USB_DeviceDescriptor */
+
+/* USB Standard Device Descriptor */
+#if defined ( __ICCARM__ ) /*!< IAR Compiler */
+ #pragma data_alignment=4
+#endif
+__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END = {
+ USB_LEN_LANGID_STR_DESC,
+ USB_DESC_TYPE_STRING,
+ LOBYTE(USBD_LANGID_STRING),
+ HIBYTE(USBD_LANGID_STRING),
+};
+
+#if defined ( __ICCARM__ ) /*!< IAR Compiler */
+ #pragma data_alignment=4
+#endif
+__ALIGN_BEGIN uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ] __ALIGN_END;
+
+/* Private functions ---------------------------------------------------------*/
+
+/**
+ * @brief Returns the device descriptor.
+ * @param speed: Current device speed
+ * @param length: Pointer to data length variable
+ * @retval Pointer to descriptor buffer
+ */
+uint8_t *USBD_VCP_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
+{
+ *length = sizeof(hUSBDDeviceDesc);
+ return hUSBDDeviceDesc;
+}
+
+/**
+ * @brief Returns the LangID string descriptor.
+ * @param speed: Current device speed
+ * @param length: Pointer to data length variable
+ * @retval Pointer to descriptor buffer
+ */
+uint8_t *USBD_VCP_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
+{
+ *length = sizeof(USBD_LangIDDesc);
+ return USBD_LangIDDesc;
+}
+
+/**
+ * @brief Returns the product string descriptor.
+ * @param speed: Current device speed
+ * @param length: Pointer to data length variable
+ * @retval Pointer to descriptor buffer
+ */
+uint8_t *USBD_VCP_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
+{
+ if(speed == 0)
+ {
+ USBD_GetString((uint8_t *)USBD_PRODUCT_HS_STRING, USBD_StrDesc, length);
+ }
+ else
+ {
+ USBD_GetString((uint8_t *)USBD_PRODUCT_FS_STRING, USBD_StrDesc, length);
+ }
+ return USBD_StrDesc;
+}
+
+/**
+ * @brief Returns the manufacturer string descriptor.
+ * @param speed: Current device speed
+ * @param length: Pointer to data length variable
+ * @retval Pointer to descriptor buffer
+ */
+uint8_t *USBD_VCP_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
+{
+ USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
+ return USBD_StrDesc;
+}
+
+/**
+ * @brief Returns the serial number string descriptor.
+ * @param speed: Current device speed
+ * @param length: Pointer to data length variable
+ * @retval Pointer to descriptor buffer
+ */
+uint8_t *USBD_VCP_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
+{
+ if(speed == USBD_SPEED_HIGH)
+ {
+ USBD_GetString((uint8_t *)USBD_SERIALNUMBER_HS_STRING, USBD_StrDesc, length);
+ }
+ else
+ {
+ USBD_GetString((uint8_t *)USBD_SERIALNUMBER_FS_STRING, USBD_StrDesc, length);
+ }
+ return USBD_StrDesc;
+}
+
+/**
+ * @brief Returns the configuration string descriptor.
+ * @param speed: Current device speed
+ * @param length: Pointer to data length variable
+ * @retval Pointer to descriptor buffer
+ */
+uint8_t *USBD_VCP_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
+{
+ if(speed == USBD_SPEED_HIGH)
+ {
+ USBD_GetString((uint8_t *)USBD_CONFIGURATION_HS_STRING, USBD_StrDesc, length);
+ }
+ else
+ {
+ USBD_GetString((uint8_t *)USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length);
+ }
+ return USBD_StrDesc;
+}
+
+/**
+ * @brief Returns the interface string descriptor.
+ * @param speed: Current device speed
+ * @param length: Pointer to data length variable
+ * @retval Pointer to descriptor buffer
+ */
+uint8_t *USBD_VCP_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
+{
+ if(speed == 0)
+ {
+ USBD_GetString((uint8_t *)USBD_INTERFACE_HS_STRING, USBD_StrDesc, length);
+ }
+ else
+ {
+ USBD_GetString((uint8_t *)USBD_INTERFACE_FS_STRING, USBD_StrDesc, length);
+ }
+ return USBD_StrDesc;
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
diff --git a/stmhal/usbd_desc.h b/stmhal/usbd_desc.h new file mode 100644 index 0000000000..8b2d8f1034 --- /dev/null +++ b/stmhal/usbd_desc.h @@ -0,0 +1,43 @@ +/**
+ ******************************************************************************
+ * @file USB_Device/CDC_Standalone/Inc/usbd_desc.h
+ * @author MCD Application Team
+ * @version V1.0.1
+ * @date 26-February-2014
+ * @brief Header for usbd_desc.c module
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+ *
+ * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.st.com/software_license_agreement_liberty_v2
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_DESC_H
+#define __USBD_DESC_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_def.h"
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+extern USBD_DescriptorsTypeDef VCP_Desc;
+
+#endif /* __USBD_DESC_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/Class/AUDIO/Inc/usbd_audio.h b/stmhal/usbdev/class/AUDIO/Inc/usbd_audio.h index b9a225f20b..b9a225f20b 100644 --- a/stmhal/usbdev/Class/AUDIO/Inc/usbd_audio.h +++ b/stmhal/usbdev/class/AUDIO/Inc/usbd_audio.h diff --git a/stmhal/usbdev/Class/AUDIO/Inc/usbd_audio_if_template.h b/stmhal/usbdev/class/AUDIO/Inc/usbd_audio_if_template.h index cf407a4846..cf407a4846 100644 --- a/stmhal/usbdev/Class/AUDIO/Inc/usbd_audio_if_template.h +++ b/stmhal/usbdev/class/AUDIO/Inc/usbd_audio_if_template.h diff --git a/stmhal/usbdev/Class/AUDIO/Src/usbd_audio.c b/stmhal/usbdev/class/AUDIO/Src/usbd_audio.c index 32565320a2..32565320a2 100644 --- a/stmhal/usbdev/Class/AUDIO/Src/usbd_audio.c +++ b/stmhal/usbdev/class/AUDIO/Src/usbd_audio.c diff --git a/stmhal/usbdev/Class/AUDIO/Src/usbd_audio_if_template.c b/stmhal/usbdev/class/AUDIO/Src/usbd_audio_if_template.c index 63ac8fed03..63ac8fed03 100644 --- a/stmhal/usbdev/Class/AUDIO/Src/usbd_audio_if_template.c +++ b/stmhal/usbdev/class/AUDIO/Src/usbd_audio_if_template.c diff --git a/stmhal/usbdev/Class/CustomHID/Inc/usbd_customhid.h b/stmhal/usbdev/class/CustomHID/Inc/usbd_customhid.h index 91ff70630e..91ff70630e 100644 --- a/stmhal/usbdev/Class/CustomHID/Inc/usbd_customhid.h +++ b/stmhal/usbdev/class/CustomHID/Inc/usbd_customhid.h diff --git a/stmhal/usbdev/Class/CustomHID/Src/usbd_customhid.c b/stmhal/usbdev/class/CustomHID/Src/usbd_customhid.c index 358f2b7d2c..358f2b7d2c 100644 --- a/stmhal/usbdev/Class/CustomHID/Src/usbd_customhid.c +++ b/stmhal/usbdev/class/CustomHID/Src/usbd_customhid.c diff --git a/stmhal/usbdev/Class/DFU/Inc/usbd_dfu.h b/stmhal/usbdev/class/DFU/Inc/usbd_dfu.h index 21d73a8dca..21d73a8dca 100644 --- a/stmhal/usbdev/Class/DFU/Inc/usbd_dfu.h +++ b/stmhal/usbdev/class/DFU/Inc/usbd_dfu.h diff --git a/stmhal/usbdev/Class/DFU/Inc/usbd_dfu_media_template.h b/stmhal/usbdev/class/DFU/Inc/usbd_dfu_media_template.h index a2bf65968e..a2bf65968e 100644 --- a/stmhal/usbdev/Class/DFU/Inc/usbd_dfu_media_template.h +++ b/stmhal/usbdev/class/DFU/Inc/usbd_dfu_media_template.h diff --git a/stmhal/usbdev/Class/DFU/Src/usbd_dfu.c b/stmhal/usbdev/class/DFU/Src/usbd_dfu.c index 14de9dff8b..14de9dff8b 100644 --- a/stmhal/usbdev/Class/DFU/Src/usbd_dfu.c +++ b/stmhal/usbdev/class/DFU/Src/usbd_dfu.c diff --git a/stmhal/usbdev/Class/DFU/Src/usbd_dfu_media_template.c b/stmhal/usbdev/class/DFU/Src/usbd_dfu_media_template.c index 25606fdb4e..25606fdb4e 100644 --- a/stmhal/usbdev/Class/DFU/Src/usbd_dfu_media_template.c +++ b/stmhal/usbdev/class/DFU/Src/usbd_dfu_media_template.c diff --git a/stmhal/usbdev/Class/HID/Inc/usbd_hid.h b/stmhal/usbdev/class/HID/Inc/usbd_hid.h index 811de0b5af..811de0b5af 100644 --- a/stmhal/usbdev/Class/HID/Inc/usbd_hid.h +++ b/stmhal/usbdev/class/HID/Inc/usbd_hid.h diff --git a/stmhal/usbdev/Class/HID/Src/usbd_hid.c b/stmhal/usbdev/class/HID/Src/usbd_hid.c index 11dca78d5a..11dca78d5a 100644 --- a/stmhal/usbdev/Class/HID/Src/usbd_hid.c +++ b/stmhal/usbdev/class/HID/Src/usbd_hid.c diff --git a/stmhal/usbdev/Class/MSC/Inc/usbd_msc.h b/stmhal/usbdev/class/MSC/Inc/usbd_msc.h index 9329278ded..9329278ded 100644 --- a/stmhal/usbdev/Class/MSC/Inc/usbd_msc.h +++ b/stmhal/usbdev/class/MSC/Inc/usbd_msc.h diff --git a/stmhal/usbdev/Class/MSC/Inc/usbd_msc_bot.h b/stmhal/usbdev/class/MSC/Inc/usbd_msc_bot.h index 41f8ab5a53..41f8ab5a53 100644 --- a/stmhal/usbdev/Class/MSC/Inc/usbd_msc_bot.h +++ b/stmhal/usbdev/class/MSC/Inc/usbd_msc_bot.h diff --git a/stmhal/usbdev/Class/MSC/Inc/usbd_msc_data.h b/stmhal/usbdev/class/MSC/Inc/usbd_msc_data.h index f468267f43..f468267f43 100644 --- a/stmhal/usbdev/Class/MSC/Inc/usbd_msc_data.h +++ b/stmhal/usbdev/class/MSC/Inc/usbd_msc_data.h diff --git a/stmhal/usbdev/Class/MSC/Inc/usbd_msc_scsi.h b/stmhal/usbdev/class/MSC/Inc/usbd_msc_scsi.h index dea247bca8..dea247bca8 100644 --- a/stmhal/usbdev/Class/MSC/Inc/usbd_msc_scsi.h +++ b/stmhal/usbdev/class/MSC/Inc/usbd_msc_scsi.h diff --git a/stmhal/usbdev/Class/MSC/Inc/usbd_msc_storage_template.h b/stmhal/usbdev/class/MSC/Inc/usbd_msc_storage_template.h index 1fc030eea6..1fc030eea6 100644 --- a/stmhal/usbdev/Class/MSC/Inc/usbd_msc_storage_template.h +++ b/stmhal/usbdev/class/MSC/Inc/usbd_msc_storage_template.h diff --git a/stmhal/usbdev/Class/MSC/Src/usbd_msc.c b/stmhal/usbdev/class/MSC/Src/usbd_msc.c index 7817c98b1c..7817c98b1c 100644 --- a/stmhal/usbdev/Class/MSC/Src/usbd_msc.c +++ b/stmhal/usbdev/class/MSC/Src/usbd_msc.c diff --git a/stmhal/usbdev/Class/MSC/Src/usbd_msc_bot.c b/stmhal/usbdev/class/MSC/Src/usbd_msc_bot.c index a430ce7709..a430ce7709 100644 --- a/stmhal/usbdev/Class/MSC/Src/usbd_msc_bot.c +++ b/stmhal/usbdev/class/MSC/Src/usbd_msc_bot.c diff --git a/stmhal/usbdev/Class/MSC/Src/usbd_msc_data.c b/stmhal/usbdev/class/MSC/Src/usbd_msc_data.c index 4d72bd5fce..4d72bd5fce 100644 --- a/stmhal/usbdev/Class/MSC/Src/usbd_msc_data.c +++ b/stmhal/usbdev/class/MSC/Src/usbd_msc_data.c diff --git a/stmhal/usbdev/Class/MSC/Src/usbd_msc_scsi.c b/stmhal/usbdev/class/MSC/Src/usbd_msc_scsi.c index ab94d89665..ab94d89665 100644 --- a/stmhal/usbdev/Class/MSC/Src/usbd_msc_scsi.c +++ b/stmhal/usbdev/class/MSC/Src/usbd_msc_scsi.c diff --git a/stmhal/usbdev/Class/MSC/Src/usbd_msc_storage_template.c b/stmhal/usbdev/class/MSC/Src/usbd_msc_storage_template.c index f75f11a9e5..f75f11a9e5 100644 --- a/stmhal/usbdev/Class/MSC/Src/usbd_msc_storage_template.c +++ b/stmhal/usbdev/class/MSC/Src/usbd_msc_storage_template.c diff --git a/stmhal/usbdev/Class/Template/Inc/usbd_template.h b/stmhal/usbdev/class/Template/Inc/usbd_template.h index 5571dbd1b4..5571dbd1b4 100644 --- a/stmhal/usbdev/Class/Template/Inc/usbd_template.h +++ b/stmhal/usbdev/class/Template/Inc/usbd_template.h diff --git a/stmhal/usbdev/Class/Template/Src/usbd_template.c b/stmhal/usbdev/class/Template/Src/usbd_template.c index 144faa2179..144faa2179 100644 --- a/stmhal/usbdev/Class/Template/Src/usbd_template.c +++ b/stmhal/usbdev/class/Template/Src/usbd_template.c diff --git a/stmhal/usbdev/Class/CDC/Inc/usbd_cdc.h b/stmhal/usbdev/class/cdc/inc/usbd_cdc.h index e60fa2de5a..e60fa2de5a 100644 --- a/stmhal/usbdev/Class/CDC/Inc/usbd_cdc.h +++ b/stmhal/usbdev/class/cdc/inc/usbd_cdc.h diff --git a/stmhal/usbdev/Class/CDC/Inc/usbd_cdc_if_template.h b/stmhal/usbdev/class/cdc/inc/usbd_cdc_if_template.h index d29a6ff384..d29a6ff384 100644 --- a/stmhal/usbdev/Class/CDC/Inc/usbd_cdc_if_template.h +++ b/stmhal/usbdev/class/cdc/inc/usbd_cdc_if_template.h diff --git a/stmhal/usbdev/Class/CDC/Src/usbd_cdc.c b/stmhal/usbdev/class/cdc/src/usbd_cdc.c index c398342dc9..50179a2dea 100644 --- a/stmhal/usbdev/Class/CDC/Src/usbd_cdc.c +++ b/stmhal/usbdev/class/cdc/src/usbd_cdc.c @@ -64,7 +64,7 @@ */
/* Includes ------------------------------------------------------------------*/
-#include "USBD_CDC.h"
+#include "usbd_cdc.h"
#include "usbd_desc.h"
#include "usbd_ctlreq.h"
diff --git a/stmhal/usbdev/Class/CDC/Src/usbd_cdc_if_template.c b/stmhal/usbdev/class/cdc/src/usbd_cdc_if_template.c index b6fa5115c0..b6fa5115c0 100644 --- a/stmhal/usbdev/Class/CDC/Src/usbd_cdc_if_template.c +++ b/stmhal/usbdev/class/cdc/src/usbd_cdc_if_template.c diff --git a/stmhal/usbdev/Core/Inc/usbd_conf_template.h b/stmhal/usbdev/core/inc/usbd_conf_template.h index d80c1da61b..d80c1da61b 100644 --- a/stmhal/usbdev/Core/Inc/usbd_conf_template.h +++ b/stmhal/usbdev/core/inc/usbd_conf_template.h diff --git a/stmhal/usbdev/Core/Inc/usbd_core.h b/stmhal/usbdev/core/inc/usbd_core.h index 5360680b92..5360680b92 100644 --- a/stmhal/usbdev/Core/Inc/usbd_core.h +++ b/stmhal/usbdev/core/inc/usbd_core.h diff --git a/stmhal/usbdev/Core/Inc/usbd_ctlreq.h b/stmhal/usbdev/core/inc/usbd_ctlreq.h index 9edf079247..9edf079247 100644 --- a/stmhal/usbdev/Core/Inc/usbd_ctlreq.h +++ b/stmhal/usbdev/core/inc/usbd_ctlreq.h diff --git a/stmhal/usbdev/Core/Inc/usbd_def.h b/stmhal/usbdev/core/inc/usbd_def.h index 5c0506a145..5c0506a145 100644 --- a/stmhal/usbdev/Core/Inc/usbd_def.h +++ b/stmhal/usbdev/core/inc/usbd_def.h diff --git a/stmhal/usbdev/Core/Inc/usbd_ioreq.h b/stmhal/usbdev/core/inc/usbd_ioreq.h index 04e01b854b..04e01b854b 100644 --- a/stmhal/usbdev/Core/Inc/usbd_ioreq.h +++ b/stmhal/usbdev/core/inc/usbd_ioreq.h diff --git a/stmhal/usbdev/Core/Src/usbd_conf_template.c b/stmhal/usbdev/core/src/usbd_conf_template.c index 8f4608d1f0..8f4608d1f0 100644 --- a/stmhal/usbdev/Core/Src/usbd_conf_template.c +++ b/stmhal/usbdev/core/src/usbd_conf_template.c diff --git a/stmhal/usbdev/Core/Src/usbd_core.c b/stmhal/usbdev/core/src/usbd_core.c index bb44513d7b..bb44513d7b 100644 --- a/stmhal/usbdev/Core/Src/usbd_core.c +++ b/stmhal/usbdev/core/src/usbd_core.c diff --git a/stmhal/usbdev/Core/Src/usbd_ctlreq.c b/stmhal/usbdev/core/src/usbd_ctlreq.c index 80b1da8ea5..80b1da8ea5 100644 --- a/stmhal/usbdev/Core/Src/usbd_ctlreq.c +++ b/stmhal/usbdev/core/src/usbd_ctlreq.c diff --git a/stmhal/usbdev/Core/Src/usbd_ioreq.c b/stmhal/usbdev/core/src/usbd_ioreq.c index 9e396ba566..9e396ba566 100644 --- a/stmhal/usbdev/Core/Src/usbd_ioreq.c +++ b/stmhal/usbdev/core/src/usbd_ioreq.c |