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.
diff --git a/.gitignore b/.gitignore
index 4ed3fa3..f3f0bf5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,4 @@
*.p
host/simtrace2-remsim
host/simtrace2-remsim-usb2udp
+usb_strings_generated.h
diff --git a/firmware/Makefile b/firmware/Makefile
index 09cc5d8..b9f267b 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -139,6 +139,7 @@
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 @@
# 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 0000000..a9c3a8e
--- /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 0000000..bdf2048
--- /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 cfd2665..10a95ed 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 @@
.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 c1fc111..c1effec 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 @@
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 @@
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 */
};
/*----------------------------------------------------------------------------