From 2363fa032750dead33e3a676b95148e5989f16af Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 5 Mar 2017 10:16:25 +0100 Subject: [PATCH] Generate USB Strings from apps/*/usb_strings.txt files at compile time This way we can skip the manually-crafted USB string definitions in the dfu_desc.c and usb.c files. --- .gitignore | 1 + firmware/Makefile | 9 +- firmware/apps/cardem/usb_strings.txt | 8 + firmware/apps/dfu/usb_strings.txt | 5 + .../usb/device/dfu/dfu_desc.c | 105 +-------- firmware/libcommon/source/usb.c | 200 +----------------- 6 files changed, 27 insertions(+), 301 deletions(-) create mode 100644 firmware/apps/cardem/usb_strings.txt create mode 100644 firmware/apps/dfu/usb_strings.txt diff --git a/.gitignore b/.gitignore index 4ed3fa39..f3f0bf53 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ tags *.p host/simtrace2-remsim host/simtrace2-remsim-usb2udp +usb_strings_generated.h diff --git a/firmware/Makefile b/firmware/Makefile index 09cc5d84..b9f267bd 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -139,6 +139,7 @@ INCLUDES += -Ilibboard/common/include -Ilibboard/$(BOARD)/include INCLUDES += -Ilibcommon/include INCLUDES += -Ilibosmocore/include INCLUDES += -Isrc_simtrace -Iinclude +INCLUDES += -Iapps/$(APP) CFLAGS += -Wall -Wchar-subscripts -Wcomment -Wimplicit-int #-Wformat=2 CFLAGS += -Werror-implicit-function-declaration -Wmain -Wparentheses @@ -179,11 +180,17 @@ OUTPUT := $(BIN)/$(OUTPUT) # Rules #------------------------------------------------------------------------------- -all: $(BIN) $(OBJ) $(MEMORIES) +all: apps/$(APP)/usb_strings_generated.h $(BIN) $(OBJ) $(MEMORIES) $(BIN) $(OBJ): mkdir $@ +usbstring/usbstring: usbstring/usbstring.c + gcc $^ -o $@ + +apps/$(APP)/usb_strings_generated.h: apps/$(APP)/usb_strings.txt usbstring/usbstring + cat $< | usbstring/usbstring > $@ + define RULES C_OBJECTS_$(1) = $(addprefix $(OBJ)/$(1)_, $(C_OBJECTS)) ASM_OBJECTS_$(1) = $(addprefix $(OBJ)/$(1)_, $(ASM_OBJECTS)) diff --git a/firmware/apps/cardem/usb_strings.txt b/firmware/apps/cardem/usb_strings.txt new file mode 100644 index 00000000..a9c3a8e8 --- /dev/null +++ b/firmware/apps/cardem/usb_strings.txt @@ -0,0 +1,8 @@ +sysmocom - s.f.m.c. GmbH +SIMtrace 2 compatible device +SIMtrace Sniffer +SIMtrace CCID +SIMtrace Phone +SIMtrace MITM +CardEmulator USIM1 +CardEmulator USIM2 diff --git a/firmware/apps/dfu/usb_strings.txt b/firmware/apps/dfu/usb_strings.txt new file mode 100644 index 00000000..bdf20486 --- /dev/null +++ b/firmware/apps/dfu/usb_strings.txt @@ -0,0 +1,5 @@ +sysmocom - s.f.m.c. GmbH +SIMtrace 2 compatible device +DFU (Device Firmare Upgrade) +RAM +Flash (Application Partition) diff --git a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_desc.c b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_desc.c index cfd26658..10a95ed3 100644 --- a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_desc.c +++ b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_desc.c @@ -85,114 +85,13 @@ const struct dfu_desc dfu_cfg_descriptor = { .func_dfu = DFU_FUNC_DESC }; +#include "usb_strings_generated.h" + #if 0 -#include "usb_strings.h" - - -static const unsigned char *usb_strings[] = { - USB_STRINGS_GENERATED -#ifdef BOARD_USB_SERIAL - NULL -#endif -}; - void set_usb_serial_str(const uint8_t *serial_usbstr) { usb_strings[STR_SERIAL] = serial_usbstr; } -#else -static const unsigned char langDesc[] = { - USBStringDescriptor_LENGTH(1), - USBGenericDescriptor_STRING, - USBStringDescriptor_ENGLISH_US -}; - -static const unsigned char manufStringDescriptor[] = { - USBStringDescriptor_LENGTH(24), - USBGenericDescriptor_STRING, - USBStringDescriptor_UNICODE('s'), - USBStringDescriptor_UNICODE('y'), - USBStringDescriptor_UNICODE('s'), - USBStringDescriptor_UNICODE('m'), - USBStringDescriptor_UNICODE('o'), - USBStringDescriptor_UNICODE('c'), - USBStringDescriptor_UNICODE('o'), - USBStringDescriptor_UNICODE('m'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('-'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('s'), - USBStringDescriptor_UNICODE('.'), - USBStringDescriptor_UNICODE('f'), - USBStringDescriptor_UNICODE('.'), - USBStringDescriptor_UNICODE('m'), - USBStringDescriptor_UNICODE('.'), - USBStringDescriptor_UNICODE('c'), - USBStringDescriptor_UNICODE('.'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('G'), - USBStringDescriptor_UNICODE('m'), - USBStringDescriptor_UNICODE('b'), - USBStringDescriptor_UNICODE('H'), -}; - -static const unsigned char productStringDescriptor[] = { - USBStringDescriptor_LENGTH(10), - USBGenericDescriptor_STRING, - USBStringDescriptor_UNICODE('S'), - USBStringDescriptor_UNICODE('I'), - USBStringDescriptor_UNICODE('M'), - USBStringDescriptor_UNICODE('t'), - USBStringDescriptor_UNICODE('r'), - USBStringDescriptor_UNICODE('a'), - USBStringDescriptor_UNICODE('c'), - USBStringDescriptor_UNICODE('e'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('2'), -}; - - -static const unsigned char configStringDescriptor[] = { - USBStringDescriptor_LENGTH(3), - USBGenericDescriptor_STRING, - USBStringDescriptor_UNICODE('D'), - USBStringDescriptor_UNICODE('F'), - USBStringDescriptor_UNICODE('U'), -}; - -static const unsigned char altRamStringDescriptor[] = { - USBStringDescriptor_LENGTH(3), - USBGenericDescriptor_STRING, - USBStringDescriptor_UNICODE('R'), - USBStringDescriptor_UNICODE('A'), - USBStringDescriptor_UNICODE('M'), -}; - -static const unsigned char altAppStringDescriptor[] = { - USBStringDescriptor_LENGTH(11), - USBGenericDescriptor_STRING, - USBStringDescriptor_UNICODE('F'), - USBStringDescriptor_UNICODE('l'), - USBStringDescriptor_UNICODE('a'), - USBStringDescriptor_UNICODE('s'), - USBStringDescriptor_UNICODE('h'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('('), - USBStringDescriptor_UNICODE('A'), - USBStringDescriptor_UNICODE('p'), - USBStringDescriptor_UNICODE('p'), - USBStringDescriptor_UNICODE(')'), -}; - -/** List of string descriptors used by the device */ -static const unsigned char *usb_strings[] = { - langDesc, - [STR_MANUF] = manufStringDescriptor, - [STR_PROD] = productStringDescriptor, - [STR_CONFIG] = configStringDescriptor, - [_STR_FIRST_ALT] = altRamStringDescriptor, - [_STR_FIRST_ALT+1] = altAppStringDescriptor, -}; #endif static const USBConfigurationDescriptor *conf_desc_arr[] = { diff --git a/firmware/libcommon/source/usb.c b/firmware/libcommon/source/usb.c index c1fc1113..c1effec0 100644 --- a/firmware/libcommon/source/usb.c +++ b/firmware/libcommon/source/usb.c @@ -42,188 +42,7 @@ /*------------------------------------------------------------------------------ * USB String descriptors *------------------------------------------------------------------------------*/ - -static const unsigned char langDesc[] = { - - USBStringDescriptor_LENGTH(1), - USBGenericDescriptor_STRING, - USBStringDescriptor_ENGLISH_US -}; - -const unsigned char manufStringDescriptor[] = { - - USBStringDescriptor_LENGTH(24), - USBGenericDescriptor_STRING, - USBStringDescriptor_UNICODE('s'), - USBStringDescriptor_UNICODE('y'), - USBStringDescriptor_UNICODE('s'), - USBStringDescriptor_UNICODE('m'), - USBStringDescriptor_UNICODE('o'), - USBStringDescriptor_UNICODE('c'), - USBStringDescriptor_UNICODE('o'), - USBStringDescriptor_UNICODE('m'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('-'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('s'), - USBStringDescriptor_UNICODE('.'), - USBStringDescriptor_UNICODE('f'), - USBStringDescriptor_UNICODE('.'), - USBStringDescriptor_UNICODE('m'), - USBStringDescriptor_UNICODE('.'), - USBStringDescriptor_UNICODE('c'), - USBStringDescriptor_UNICODE('.'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('G'), - USBStringDescriptor_UNICODE('m'), - USBStringDescriptor_UNICODE('b'), - USBStringDescriptor_UNICODE('H'), -}; - -const unsigned char productStringDescriptor[] = { - - USBStringDescriptor_LENGTH(10), - USBGenericDescriptor_STRING, - USBStringDescriptor_UNICODE('S'), - USBStringDescriptor_UNICODE('I'), - USBStringDescriptor_UNICODE('M'), - USBStringDescriptor_UNICODE('t'), - USBStringDescriptor_UNICODE('r'), - USBStringDescriptor_UNICODE('a'), - USBStringDescriptor_UNICODE('c'), - USBStringDescriptor_UNICODE('e'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('2'), -}; - -const unsigned char snifferConfigStringDescriptor[] = { - - USBStringDescriptor_LENGTH(16), - USBGenericDescriptor_STRING, - USBStringDescriptor_UNICODE('S'), - USBStringDescriptor_UNICODE('I'), - USBStringDescriptor_UNICODE('M'), - USBStringDescriptor_UNICODE('t'), - USBStringDescriptor_UNICODE('r'), - USBStringDescriptor_UNICODE('a'), - USBStringDescriptor_UNICODE('c'), - USBStringDescriptor_UNICODE('e'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('S'), - USBStringDescriptor_UNICODE('n'), - USBStringDescriptor_UNICODE('i'), - USBStringDescriptor_UNICODE('f'), - USBStringDescriptor_UNICODE('f'), - USBStringDescriptor_UNICODE('e'), - USBStringDescriptor_UNICODE('r'), -}; - -const unsigned char CCIDConfigStringDescriptor[] = { - - USBStringDescriptor_LENGTH(13), - USBGenericDescriptor_STRING, - USBStringDescriptor_UNICODE('S'), - USBStringDescriptor_UNICODE('I'), - USBStringDescriptor_UNICODE('M'), - USBStringDescriptor_UNICODE('t'), - USBStringDescriptor_UNICODE('r'), - USBStringDescriptor_UNICODE('a'), - USBStringDescriptor_UNICODE('c'), - USBStringDescriptor_UNICODE('e'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('C'), - USBStringDescriptor_UNICODE('C'), - USBStringDescriptor_UNICODE('I'), - USBStringDescriptor_UNICODE('D'), -}; - -const unsigned char phoneConfigStringDescriptor[] = { - - USBStringDescriptor_LENGTH(14), - USBGenericDescriptor_STRING, - USBStringDescriptor_UNICODE('S'), - USBStringDescriptor_UNICODE('I'), - USBStringDescriptor_UNICODE('M'), - USBStringDescriptor_UNICODE('t'), - USBStringDescriptor_UNICODE('r'), - USBStringDescriptor_UNICODE('a'), - USBStringDescriptor_UNICODE('c'), - USBStringDescriptor_UNICODE('e'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('P'), - USBStringDescriptor_UNICODE('h'), - USBStringDescriptor_UNICODE('o'), - USBStringDescriptor_UNICODE('n'), - USBStringDescriptor_UNICODE('e'), -}; - -const unsigned char MITMConfigStringDescriptor[] = { - - USBStringDescriptor_LENGTH(13), - USBGenericDescriptor_STRING, - USBStringDescriptor_UNICODE('S'), - USBStringDescriptor_UNICODE('I'), - USBStringDescriptor_UNICODE('M'), - USBStringDescriptor_UNICODE('t'), - USBStringDescriptor_UNICODE('r'), - USBStringDescriptor_UNICODE('a'), - USBStringDescriptor_UNICODE('c'), - USBStringDescriptor_UNICODE('e'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('M'), - USBStringDescriptor_UNICODE('I'), - USBStringDescriptor_UNICODE('T'), - USBStringDescriptor_UNICODE('M'), -}; - -const unsigned char cardem_usim1_intf_str[] = { - - USBStringDescriptor_LENGTH(18), - USBGenericDescriptor_STRING, - USBStringDescriptor_UNICODE('C'), - USBStringDescriptor_UNICODE('a'), - USBStringDescriptor_UNICODE('r'), - USBStringDescriptor_UNICODE('d'), - USBStringDescriptor_UNICODE('E'), - USBStringDescriptor_UNICODE('m'), - USBStringDescriptor_UNICODE('u'), - USBStringDescriptor_UNICODE('l'), - USBStringDescriptor_UNICODE('a'), - USBStringDescriptor_UNICODE('t'), - USBStringDescriptor_UNICODE('o'), - USBStringDescriptor_UNICODE('r'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('U'), - USBStringDescriptor_UNICODE('S'), - USBStringDescriptor_UNICODE('I'), - USBStringDescriptor_UNICODE('M'), - USBStringDescriptor_UNICODE('1'), -}; - -const unsigned char cardem_usim2_intf_str[] = { - - USBStringDescriptor_LENGTH(18), - USBGenericDescriptor_STRING, - USBStringDescriptor_UNICODE('C'), - USBStringDescriptor_UNICODE('a'), - USBStringDescriptor_UNICODE('r'), - USBStringDescriptor_UNICODE('d'), - USBStringDescriptor_UNICODE('E'), - USBStringDescriptor_UNICODE('m'), - USBStringDescriptor_UNICODE('u'), - USBStringDescriptor_UNICODE('l'), - USBStringDescriptor_UNICODE('a'), - USBStringDescriptor_UNICODE('t'), - USBStringDescriptor_UNICODE('o'), - USBStringDescriptor_UNICODE('r'), - USBStringDescriptor_UNICODE(' '), - USBStringDescriptor_UNICODE('U'), - USBStringDescriptor_UNICODE('S'), - USBStringDescriptor_UNICODE('I'), - USBStringDescriptor_UNICODE('M'), - USBStringDescriptor_UNICODE('2'), -}; - +#include "usb_strings_generated.h" enum strDescNum { PRODUCT_STRING = 1, MANUF_STR, @@ -236,19 +55,6 @@ enum strDescNum { STRING_DESC_CNT }; -/** List of string descriptors used by the device */ -static const unsigned char *stringDescriptors[] = { - langDesc, - [PRODUCT_STRING] = productStringDescriptor, - [MANUF_STR] = manufStringDescriptor, - [SNIFFER_CONF_STR] = snifferConfigStringDescriptor, - [CCID_CONF_STR] = CCIDConfigStringDescriptor, - [PHONE_CONF_STR] = phoneConfigStringDescriptor, - [MITM_CONF_STR] = MITMConfigStringDescriptor, - [CARDEM_USIM1_INTF_STR] = cardem_usim1_intf_str, - [CARDEM_USIM2_INTF_STR] = cardem_usim2_intf_str, -}; - /*------------------------------------------------------------------------------ * USB Device descriptors *------------------------------------------------------------------------------*/ @@ -776,8 +582,8 @@ static const USBDDriverDescriptors driverDescriptors = { 0, /* No high-speed configuration descriptor */ 0, /* No high-speed device qualifier descriptor */ 0, /* No high-speed other speed configuration descriptor */ - stringDescriptors, - STRING_DESC_CNT /* cnt string descriptors in list */ + usb_strings, + ARRAY_SIZE(usb_strings),/* cnt string descriptors in list */ }; /*----------------------------------------------------------------------------