From a6787edcea4ff1aa6113eff85c3b866ae0c6cb8c Mon Sep 17 00:00:00 2001 From: Damien George Date: Sat, 22 Mar 2014 12:46:23 +0000 Subject: [PATCH] stmhal: Tidy up USB device configuration. Make it use less RAM. --- stmhal/stm32f4xx_hal_msp.c | 2 +- stmhal/usbd_cdc_interface.c | 13 +- stmhal/usbd_conf.h | 10 +- .../usbdev/class/cdc_msc/inc/usbd_cdc_msc.h | 10 +- .../usbdev/class/cdc_msc/src/usbd_cdc_msc.c | 14 +- stmhal/usbdev/core/inc/usbd_conf_template.h | 163 ----------- stmhal/usbdev/core/src/usbd_conf_template.c | 258 ------------------ 7 files changed, 25 insertions(+), 445 deletions(-) delete mode 100644 stmhal/usbdev/core/inc/usbd_conf_template.h delete mode 100644 stmhal/usbdev/core/src/usbd_conf_template.c diff --git a/stmhal/stm32f4xx_hal_msp.c b/stmhal/stm32f4xx_hal_msp.c index f5611e1082..816b1427e9 100644 --- a/stmhal/stm32f4xx_hal_msp.c +++ b/stmhal/stm32f4xx_hal_msp.c @@ -47,7 +47,7 @@ /* Includes ------------------------------------------------------------------*/ #include "stm32f4xx_hal.h" -#include "usbd_cdc.h" +#include "usbd_cdc_msc.h" #include "usbd_cdc_interface.h" /** @addtogroup STM32F4xx_HAL_Driver diff --git a/stmhal/usbd_cdc_interface.c b/stmhal/usbd_cdc_interface.c index e0f387eb7e..6316439356 100644 --- a/stmhal/usbd_cdc_interface.c +++ b/stmhal/usbd_cdc_interface.c @@ -28,11 +28,22 @@ /* Includes ------------------------------------------------------------------*/ #include #include "stm32f4xx_hal.h" -#include "usbd_cdc.h" +#include "usbd_cdc_msc.h" #include "usbd_cdc_interface.h" #include "pendsv.h" #include "usb.h" +// CDC control commands +#define CDC_SEND_ENCAPSULATED_COMMAND 0x00 +#define CDC_GET_ENCAPSULATED_RESPONSE 0x01 +#define CDC_SET_COMM_FEATURE 0x02 +#define CDC_GET_COMM_FEATURE 0x03 +#define CDC_CLEAR_COMM_FEATURE 0x04 +#define CDC_SET_LINE_CODING 0x20 +#define CDC_GET_LINE_CODING 0x21 +#define CDC_SET_CONTROL_LINE_STATE 0x22 +#define CDC_SEND_BREAK 0x23 + /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ #define APP_RX_DATA_SIZE 1024 // I think this must be at least CDC_DATA_FS_OUT_PACKET_SIZE (was 2048) diff --git a/stmhal/usbd_conf.h b/stmhal/usbd_conf.h index cc3ad73f98..d37cd4a8ba 100644 --- a/stmhal/usbd_conf.h +++ b/stmhal/usbd_conf.h @@ -36,7 +36,6 @@ #include #include "mpconfig.h" -#include "gc.h" // for gc_alloc and gc_free /* Exported types ------------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/ @@ -47,17 +46,18 @@ #define USBD_SUPPORT_USER_STRING 0 #define USBD_SELF_POWERED 0 #define USBD_DEBUG_LEVEL 0 - -// for MSC device -#define MSC_MEDIA_PACKET 8192 /* Exported macro ------------------------------------------------------------*/ /* Memory management macros */ +/* +these should not be used because the GC is reset on a soft reset but the usb is not +#include "gc.h" #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__);\ diff --git a/stmhal/usbdev/class/cdc_msc/inc/usbd_cdc_msc.h b/stmhal/usbdev/class/cdc_msc/inc/usbd_cdc_msc.h index 6b738adde4..5299f31e96 100644 --- a/stmhal/usbdev/class/cdc_msc/inc/usbd_cdc_msc.h +++ b/stmhal/usbdev/class/cdc_msc/inc/usbd_cdc_msc.h @@ -5,11 +5,9 @@ #include "usbd_msc_scsi.h" #include "usbd_ioreq.h" -// CDC endpoint parameters -#define CDC_DATA_FS_MAX_PACKET_SIZE 64 // Endpoint IN & OUT Packet size -#define CDC_CMD_PACKET_SIZE 8 // Control Endpoint Packet size -#define CDC_DATA_FS_IN_PACKET_SIZE CDC_DATA_FS_MAX_PACKET_SIZE -#define CDC_DATA_FS_OUT_PACKET_SIZE CDC_DATA_FS_MAX_PACKET_SIZE +// CDC and MSC packet sizes +#define CDC_DATA_FS_MAX_PACKET_SIZE (64) // endpoint IN & OUT packet size +#define MSC_MEDIA_PACKET (2048) // was 8192; how low can it go whilst still working? #if 0 // CDC @@ -34,7 +32,7 @@ #define MSC_IFACE_NUM (0) #define MSC_IN_EP (0x81) #define MSC_OUT_EP (0x01) -#elif 0 +#elif 1 // CDC + MSC #define USB_CDC_MSC_CONFIG_DESC_SIZ (98) #define NUM_INTERFACES (3) diff --git a/stmhal/usbdev/class/cdc_msc/src/usbd_cdc_msc.c b/stmhal/usbdev/class/cdc_msc/src/usbd_cdc_msc.c index 8ebf33a109..df080ee4f0 100644 --- a/stmhal/usbdev/class/cdc_msc/src/usbd_cdc_msc.c +++ b/stmhal/usbdev/class/cdc_msc/src/usbd_cdc_msc.c @@ -3,17 +3,9 @@ #define USB_DESC_TYPE_ASSOCIATION (0x0b) -/* currently unused -#define CDC_SEND_ENCAPSULATED_COMMAND 0x00 -#define CDC_GET_ENCAPSULATED_RESPONSE 0x01 -#define CDC_SET_COMM_FEATURE 0x02 -#define CDC_GET_COMM_FEATURE 0x03 -#define CDC_CLEAR_COMM_FEATURE 0x04 -#define CDC_SET_LINE_CODING 0x20 -#define CDC_GET_LINE_CODING 0x21 -#define CDC_SET_CONTROL_LINE_STATE 0x22 -#define CDC_SEND_BREAK 0x23 -*/ +#define CDC_CMD_PACKET_SIZE 8 // Control Endpoint Packet size +#define CDC_DATA_FS_IN_PACKET_SIZE CDC_DATA_FS_MAX_PACKET_SIZE +#define CDC_DATA_FS_OUT_PACKET_SIZE CDC_DATA_FS_MAX_PACKET_SIZE #define BOT_GET_MAX_LUN 0xFE #define BOT_RESET 0xFF diff --git a/stmhal/usbdev/core/inc/usbd_conf_template.h b/stmhal/usbdev/core/inc/usbd_conf_template.h deleted file mode 100644 index d80c1da61b..0000000000 --- a/stmhal/usbdev/core/inc/usbd_conf_template.h +++ /dev/null @@ -1,163 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_conf_template.h - * @author MCD Application Team - * @version V2.0.0 - * @date 18-February-2014 - * @brief General low level driver configuration - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2014 STMicroelectronics

- * - * 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__ - -#include "stm32f4xx.h" -#include -#include -#include - -/* Includes ------------------------------------------------------------------*/ - -/** @addtogroup USBD_OTG_DRIVER - * @{ - */ - -/** @defgroup USBD_CONF - * @brief usb otg low level driver configuration file - * @{ - */ - -/** @defgroup USBD_CONF_Exported_Defines - * @{ - */ - -#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 1 -#define USBD_DEBUG_LEVEL 2 - -/* MSC Class Config */ -#define MSC_MEDIA_PACKET 8192 - -/* CDC Class Config */ -#define USBD_CDC_INTERVAL 2000 - - /* DFU Class Config */ -#define USBD_DFU_MAX_ITF_NUM 1 -#define USBD_DFU_XFERS_IZE 1024 - - /* AUDIO Class Config */ -#define USBD_AUDIO_FREQ 22100 - -/** @defgroup USBD_Exported_Macros - * @{ - */ - - /* Memory management macros */ -#define USBD_malloc malloc -#define USBD_free 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 - -/** - * @} - */ - - - -/** - * @} - */ - - -/** @defgroup USBD_CONF_Exported_Types - * @{ - */ -/** - * @} - */ - - -/** @defgroup USBD_CONF_Exported_Macros - * @{ - */ -/** - * @} - */ - -/** @defgroup USBD_CONF_Exported_Variables - * @{ - */ -/** - * @} - */ - -/** @defgroup USBD_CONF_Exported_FunctionsPrototype - * @{ - */ -/** - * @} - */ - - -#endif //__USBD_CONF__H__ - - -/** - * @} - */ - -/** - * @} - */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/stmhal/usbdev/core/src/usbd_conf_template.c b/stmhal/usbdev/core/src/usbd_conf_template.c deleted file mode 100644 index 8f4608d1f0..0000000000 --- a/stmhal/usbdev/core/src/usbd_conf_template.c +++ /dev/null @@ -1,258 +0,0 @@ -/** - ****************************************************************************** - * @file usbd_storage_template.c - * @author MCD Application Team - * @version V2.0.0 - * @date 18-February-2014 - * @brief Memory management layer - ****************************************************************************** - * @attention - * - *

© COPYRIGHT 2014 STMicroelectronics

- * - * 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_storage.h" - - -/** @addtogroup STM32_USBD_DEVICE_LIBRARY -* @{ -*/ - - -/** @defgroup USBD_STORAGE -* @brief usbd core module -* @{ -*/ - -/** @defgroup USBD_STORAGE_Private_TypesDefinitions -* @{ -*/ -/** -* @} -*/ - - -/** @defgroup USBD_STORAGE_Private_Defines -* @{ -*/ -#define STORAGE_LUN_NBR 1 -#define STORAGE_BLK_NBR 0x10000 -#define STORAGE_BLK_SIZ 0x200 -/** -* @} -*/ - - -/** @defgroup USBD_STORAGE_Private_Macros -* @{ -*/ -/** -* @} -*/ - - - - -/** @defgroup USBD_STORAGE_Private_FunctionPrototypes -* @{ -*/ - -/** -* @} -*/ - - -/** @defgroup USBD_STORAGE_Private_Functions -* @{ -*/ - -int8_t STORAGE_Init (uint8_t lun); - -int8_t STORAGE_GetCapacity (uint8_t lun, - uint32_t *block_num, - uint16_t *block_size); - -int8_t STORAGE_IsReady (uint8_t lun); - -int8_t STORAGE_IsWriteProtected (uint8_t lun); - -int8_t STORAGE_Read (uint8_t lun, - uint8_t *buf, - uint32_t blk_addr, - uint16_t blk_len); - -int8_t STORAGE_Write (uint8_t lun, - uint8_t *buf, - uint32_t blk_addr, - uint16_t blk_len); - -int8_t STORAGE_GetMaxLun (void); - -/** @defgroup USBD_STORAGE_Private_Variables -* @{ -*/ - -/* USB Mass storage Standard Inquiry Data */ -int8_t STORAGE_Inquirydata[] = {//36 - - /* LUN 0 */ - 0x00, - 0x80, - 0x02, - 0x02, - (STANDARD_INQUIRY_DATA_LEN - 5), - 0x00, - 0x00, - 0x00, - 'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', /* Manufacturer : 8 bytes */ - 'P', 'r', 'o', 'd', 'u', 'c', 't', ' ', /* Product : 16 Bytes */ - ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', - '0', '.', '0' ,'1', /* Version : 4 Bytes */ -}; - -USBD_StorageTypeDef USBD_MSD_fops = -{ - STORAGE_Init, - STORAGE_GetCapacity, - STORAGE_IsReady, - STORAGE_IsWriteProtected, - STORAGE_Read, - STORAGE_Write, - STORAGE_GetMaxLun, - STORAGE_Inquirydata, - -}; -/** - * @} - */ - -/** @defgroup USBD_CORE_Private_Functions - * @{ - */ - -/** - * @brief STORAGE_Init - * Initailizes the storage unit (medium) - * @param lun: logical unit number - * @retval status (0 : Ok / -1 : Error) - */ - -int8_t STORAGE_Init (uint8_t lun) -{ - return (0); -} - -/** - * @brief STORAGE_GetCapacity - * return medium capacity - * @param lun: logical unit number - * @param block_num: number of total block number - * @param block_size: block size - * @retval status (0 : Ok / -1 : Error) - */ -int8_t STORAGE_GetCapacity (uint8_t lun, uint32_t *block_num, uint16_t *block_size) -{ - - *block_num = STORAGE_BLK_NBR - 1; - *block_size = STORAGE_BLK_SIZ; - - return (0); -} - -/** - * @brief STORAGE_IsReady - * check whether the medium is ready - * @param lun: logical unit number - * @retval status (0 : Ok / -1 : Error) - */ -int8_t STORAGE_IsReady (uint8_t lun) -{ - - return (0); -} - -/** - * @brief STORAGE_IsWriteProtected - * check whether the medium is write protected - * @param lun: logical unit number - * @retval status (0 : write enabled / -1 : otherwise) - */ -int8_t STORAGE_IsWriteProtected (uint8_t lun) -{ - return 0; -} - -/** - * @brief STORAGE_Read - * Read data from the medium - * @param lun: logical unit number - * @param blk_addr: logical block address - * @param blk_len: blocks number - * @retval status (0 : Ok / -1 : Error) - */ -int8_t STORAGE_Read (uint8_t lun, - uint8_t *buf, - uint32_t blk_addr, - uint16_t blk_len) -{ - return (0); -} - -/** - * @brief STORAGE_Write - * Write data into the medium - * @param lun: logical unit number - * @param blk_addr: logical block address - * @param blk_len: blocks number - * @retval status (0 : Ok / -1 : Error) - */ -int8_t STORAGE_Write (uint8_t lun, - uint8_t *buf, - uint32_t blk_addr, - uint16_t blk_len) -{ - return (0); -} - - -/** - * @brief STORAGE_GetMaxLun - * return the Max Supported LUNs - * @param none - * @retval lun(s) number - */ -int8_t STORAGE_GetMaxLun (void) -{ - return (STORAGE_LUN_NBR - 1); -} -/** -* @} -*/ - - -/** -* @} -*/ - - -/** -* @} -*/ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ -