From 8ded459c686c820c55ae324e5869ff05355174f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Mon, 25 Dec 2017 13:20:41 +0100 Subject: [PATCH] make it possible to disable VFS and MSC via makefile --- .../Class/MSC_CDC/usbd_msc_cdc.c | 11 +++++++- USB/usb_device.c | 2 ++ USB/usbd_desc.c | 6 ++--- USB/usbd_storage_if.c | 4 +-- framework/unit_registry.c | 5 +++- gex.mk | 26 ++++++++++++++----- platform/platform.c | 3 +-- tasks/task_main.c | 8 ++++++ 8 files changed, 49 insertions(+), 16 deletions(-) diff --git a/USB/STM32_USB_Device_Library/Class/MSC_CDC/usbd_msc_cdc.c b/USB/STM32_USB_Device_Library/Class/MSC_CDC/usbd_msc_cdc.c index c655db3..7d05557 100644 --- a/USB/STM32_USB_Device_Library/Class/MSC_CDC/usbd_msc_cdc.c +++ b/USB/STM32_USB_Device_Library/Class/MSC_CDC/usbd_msc_cdc.c @@ -164,7 +164,9 @@ static uint8_t USBD_MSC_CDC_Init(struct _USBD_HandleTypeDef *pdev, uint8_t cfgid { // this is not correct, but will work if neither returns BUSY (which they don't) uint8_t ret = 0; +#ifndef DISABLE_MSC ret |= USBD_MSC_Init(pdev, cfgidx); +#endif ret |= USBD_CDC_Init(pdev, cfgidx); return ret; } @@ -172,7 +174,9 @@ static uint8_t USBD_MSC_CDC_Init(struct _USBD_HandleTypeDef *pdev, uint8_t cfgid static uint8_t USBD_MSC_CDC_DeInit(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx) { uint8_t ret = 0; +#ifndef DISABLE_MSC ret |= USBD_MSC_DeInit(pdev, cfgidx); +#endif ret |= USBD_CDC_DeInit(pdev, cfgidx); return ret; } @@ -199,7 +203,9 @@ static uint8_t USBD_MSC_CDC_Setup(struct _USBD_HandleTypeDef *pdev, USBD_SetupRe } // class specific, or Interface -> Clear Feature +#ifndef DISABLE_MSC USBD_MSC_Setup(pdev, req); +#endif USBD_CDC_Setup(pdev, req); return USBD_OK; } @@ -291,6 +297,9 @@ uint8_t *USBD_MSC_CDC_GetFSCfgDesc (uint16_t *length) // Optionally hide settings (if lock jumper is installed) bool msc_visible = SystemSettings.editable; +#ifdef DISABLE_MSC + msc_visible = false; +#endif USBD_MSC_CDC_CfgFSDesc[14] = (uint8_t) (msc_visible ? 0x08 : 0xFF); return USBD_MSC_CDC_CfgFSDesc; @@ -316,7 +325,7 @@ uint8_t *USBD_MSC_CDC_GetUsrStrDescriptor(struct _USBD_HandleTypeDef *pdev, uin { const char *str; switch (index) { - case 0x04: str = "Settings Virtual Mass Storage"; break; + case 0x04: str = "Settings VFS"; break; case 0x05: str = "Virtual Comport ACM"; break; case 0x06: str = "Virtual Comport CDC"; break; default: str = "No Descriptor"; diff --git a/USB/usb_device.c b/USB/usb_device.c index c89e048..9ead3f0 100644 --- a/USB/usb_device.c +++ b/USB/usb_device.c @@ -75,7 +75,9 @@ void MX_USB_DEVICE_Init(void) USBD_RegisterClass(&hUsbDeviceFS, &USBD_MSC_CDC); +#ifndef DISABLE_MSC USBD_MSC_RegisterStorage(&hUsbDeviceFS, &USBD_Storage_Interface_fops_FS); +#endif USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS); USBD_Start(&hUsbDeviceFS); diff --git a/USB/usbd_desc.c b/USB/usbd_desc.c index e27ba3c..1df44b6 100644 --- a/USB/usbd_desc.c +++ b/USB/usbd_desc.c @@ -72,7 +72,7 @@ /** @defgroup USBD_DESC_Private_Defines * @{ */ -#define USBD_VID 1155 +#define USBD_VID 1155 // TODO choose a VID:PID (eg. via pid.codes - 0x1209) #define USBD_PID_FS 22314 #define USBD_LANGID_NUM 1033 #define USBD_MANUFACTURER_STRING "MightyPork" @@ -220,7 +220,7 @@ uint8_t * USBD_FS_LangIDStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *leng */ uint8_t * USBD_FS_ProductStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length) { - USBD_GetString (USBD_PRODUCT_STRING_FS, USBD_StrDesc, length); + USBD_GetString ((uint8_t *) USBD_PRODUCT_STRING_FS, USBD_StrDesc, length); return USBD_StrDesc; } @@ -233,7 +233,7 @@ uint8_t * USBD_FS_ProductStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *len */ uint8_t * USBD_FS_ManufacturerStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length) { - USBD_GetString (USBD_MANUFACTURER_STRING, USBD_StrDesc, length); + USBD_GetString ((uint8_t *) USBD_MANUFACTURER_STRING, USBD_StrDesc, length); return USBD_StrDesc; } diff --git a/USB/usbd_storage_if.c b/USB/usbd_storage_if.c index 018e1e9..a5bf599 100644 --- a/USB/usbd_storage_if.c +++ b/USB/usbd_storage_if.c @@ -47,8 +47,8 @@ */ /* Includes ------------------------------------------------------------------*/ -#include #include "platform.h" +#include "platform/status_led.h" #include "usbd_storage_if.h" /* USER CODE BEGIN INCLUDE */ #include "vfs/vfs_manager.h" @@ -101,7 +101,7 @@ */ /* USER CODE BEGIN INQUIRY_DATA_FS */ /* USB Mass storage Standard Inquiry Data */ -int8_t STORAGE_Inquirydata_FS[] = {/* 36 */ +uint8_t STORAGE_Inquirydata_FS[] = {/* 36 */ /* LUN 0 */ 0x00, 0x80, diff --git a/framework/unit_registry.c b/framework/unit_registry.c index b9b715f..e506384 100644 --- a/framework/unit_registry.c +++ b/framework/unit_registry.c @@ -249,7 +249,10 @@ bool ureg_load_units(PayloadParser *pp) // TYPE pp_string(pp, typebuf, 16); Unit *const pUnit = ureg_instantiate(typebuf); - assert_param(pUnit); + if (!pUnit) { + dbg("!! Unknown unit type %s, aborting load.", typebuf); + break; + } // NAME pp_string(pp, typebuf, 16); diff --git a/gex.mk b/gex.mk index b42f206..c56b500 100644 --- a/gex.mk +++ b/gex.mk @@ -11,7 +11,6 @@ GEX_SRC_DIR = \ User/units/pin \ User/TinyFrame \ User/CWPack \ - User/vfs \ User/tasks GEX_SOURCES = \ @@ -19,12 +18,7 @@ GEX_SOURCES = \ User/USB/usbd_cdc_if.c \ User/USB/usbd_conf.c \ User/USB/usbd_desc.c \ - User/USB/usbd_storage_if.c \ User/USB/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c \ - User/USB/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc.c \ - User/USB/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_bot.c \ - User/USB/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_data.c \ - User/USB/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_scsi.c \ User/USB/STM32_USB_Device_Library/Class/MSC_CDC/usbd_msc_cdc.c \ User/USB/STM32_USB_Device_Library/Core/Src/usbd_core.c \ User/USB/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c \ @@ -67,7 +61,7 @@ GEX_CDEFS_BASE = \ -D__packed="__attribute__((__packed__))" \ -DUSE_FULL_LL_DRIVER \ -# TODO implement debug build choice +# TODO implement debug build choice - enable or disable debugging ifeq '1' '1' GEX_CDEFS = $(GEX_CDEFS_BASE) \ -DUSE_FULL_ASSERT=1 \ @@ -87,3 +81,21 @@ GEX_CDEFS = $(GEX_CDEFS_BASE) \ -DUSE_STACK_MONITOR=0 \ -DUSE_DEBUG_UART=0 endif + + +# TODO implement debug build choice - enable or disable MSC +ifeq '1' '1' + +GEX_SOURCES += \ + User/USB/usbd_storage_if.c \ + User/USB/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc.c \ + User/USB/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_bot.c \ + User/USB/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_data.c \ + User/USB/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_scsi.c + +GEX_SRC_DIR += \ + User/vfs + +else +GEX_CDEFS += -DDISABLE_MSC +endif diff --git a/platform/platform.c b/platform/platform.c index 3bf9f4e..8d915c9 100644 --- a/platform/platform.c +++ b/platform/platform.c @@ -12,8 +12,6 @@ #include "units/neopixel/unit_neopixel.h" #include "units/test/unit_test.h" -// ----- RELEASE AVAILABLE RESOURCES ----- - void plat_init_resources(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); @@ -24,6 +22,7 @@ void plat_init_resources(void) // --- Common unit drivers --- ureg_add_type(&UNIT_PIN); + ureg_add_type(&UNIT_TEST); // --- platform specific resource releases and claims --- diff --git a/tasks/task_main.c b/tasks/task_main.c index 3c148da..d84db31 100644 --- a/tasks/task_main.c +++ b/tasks/task_main.c @@ -19,8 +19,10 @@ void TaskMain(void const * argument) { dbg("> Main task started!"); +#ifndef DISABLE_MSC vfs_if_usbd_msc_init(); vfs_mngr_init(1); +#endif uint32_t startTime = xTaskGetTickCount(); uint32_t cnt = 1; @@ -33,7 +35,11 @@ void TaskMain(void const * argument) uint32_t elapsed = now - startTime; if (elapsed >= 100) { // interval 100ms or more - slow periodic + +#ifndef DISABLE_MSC vfs_mngr_periodic(elapsed); +#endif + LockJumper_Check(); startTime = now; @@ -61,6 +67,7 @@ void TaskMain(void const * argument) // } +#ifndef DISABLE_MSC // MSC - read/write etc if (msg & (USBEVT_FLAG_EPx_IN(MSC_EPIN_ADDR))) { USBD_MSC_DataIn(&hUsbDeviceFS, MSC_EPIN_ADDR); @@ -69,6 +76,7 @@ void TaskMain(void const * argument) if (msg & (USBEVT_FLAG_EPx_OUT(MSC_EPOUT_ADDR))) { USBD_MSC_DataOut(&hUsbDeviceFS, MSC_EPOUT_ADDR); } +#endif // CDC - config packets and data in/out if (msg & (USBEVT_FLAG_EPx_IN(CDC_IN_EP))) {