From d8a003dfd7dbef3d4772e750be34abd48def0072 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 27 Feb 2017 20:31:09 +0100 Subject: [PATCH] Structure build system to build for multiple boards/apps/environments --- .gitignore | 10 +- firmware/Makefile | 53 +++-- firmware/README.txt | 33 +++ firmware/apps/cardem/Makefile | 3 + firmware/{src_simtrace => apps/cardem}/main.c | 0 firmware/apps/ccid/main.c | 0 firmware/apps/dfu/Makefile | 1 + firmware/apps/dfu/main.c | 107 +++++++++ firmware/apps/trace/main.c | 0 firmware/apps/triple_play/Makefile | 3 + firmware/apps/triple_play/main.c | 207 ++++++++++++++++++ .../usb/device/dfu/dfu_driver.c | 4 +- firmware/libboard/common/include/manifest.h | 10 + .../libboard/common/resources/sam3s4/dfu.ld | 140 ++++++++++++ firmware/libboard/common/source/manifest.c | 7 + firmware/libboard/owhw/source/owhw.c | 1 + .../qmod/source}/board_qmod.c | 0 .../include}/card_emu.h | 0 .../include}/cardemu_prot.h | 0 .../include}/simtrace.h | 0 .../include}/tc_etu.h | 0 .../source}/card_emu.c | 0 .../{src_simtrace => libcommon/source}/ccid.c | 0 .../source}/host_communication.c | 0 .../source}/iso7816_4.c | 0 .../{src_simtrace => libcommon/source}/mitm.c | 0 .../source}/mode_cardemu.c | 0 .../source}/phone.c | 0 firmware/libcommon/source/req_ctx.c | 1 + .../source}/simtrace_iso7816.c | 0 .../source}/sniffer.c | 0 .../source}/tc_etu.c | 0 .../{src_simtrace => libcommon/source}/usb.c | 0 33 files changed, 552 insertions(+), 28 deletions(-) create mode 100644 firmware/README.txt create mode 100644 firmware/apps/cardem/Makefile rename firmware/{src_simtrace => apps/cardem}/main.c (100%) create mode 100644 firmware/apps/ccid/main.c create mode 100644 firmware/apps/dfu/Makefile create mode 100644 firmware/apps/dfu/main.c create mode 100644 firmware/apps/trace/main.c create mode 100644 firmware/apps/triple_play/Makefile create mode 100644 firmware/apps/triple_play/main.c create mode 100644 firmware/libboard/common/include/manifest.h create mode 100644 firmware/libboard/common/resources/sam3s4/dfu.ld create mode 100644 firmware/libboard/common/source/manifest.c rename firmware/{src_simtrace => libboard/qmod/source}/board_qmod.c (100%) rename firmware/{src_simtrace => libcommon/include}/card_emu.h (100%) rename firmware/{src_simtrace => libcommon/include}/cardemu_prot.h (100%) rename firmware/{src_simtrace => libcommon/include}/simtrace.h (100%) rename firmware/{src_simtrace => libcommon/include}/tc_etu.h (100%) rename firmware/{src_simtrace => libcommon/source}/card_emu.c (100%) rename firmware/{src_simtrace => libcommon/source}/ccid.c (100%) rename firmware/{src_simtrace => libcommon/source}/host_communication.c (100%) rename firmware/{src_board => libcommon/source}/iso7816_4.c (100%) rename firmware/{src_simtrace => libcommon/source}/mitm.c (100%) rename firmware/{src_simtrace => libcommon/source}/mode_cardemu.c (100%) rename firmware/{src_simtrace => libcommon/source}/phone.c (100%) rename firmware/{src_simtrace => libcommon/source}/simtrace_iso7816.c (100%) rename firmware/{src_simtrace => libcommon/source}/sniffer.c (100%) rename firmware/{src_simtrace => libcommon/source}/tc_etu.c (100%) rename firmware/{src_simtrace => libcommon/source}/usb.c (100%) diff --git a/.gitignore b/.gitignore index 4653f1c1..4ed3fa39 100644 --- a/.gitignore +++ b/.gitignore @@ -7,11 +7,15 @@ cscope.out */__pycache__ *.E *.pyc -sam3s_example/mains/zwizwa_ccid.c -Baselibc -venv tags *.hobj *.o +*.a +*.lst +*.map +*.elf +*.size +*.bin +*.p host/simtrace2-remsim host/simtrace2-remsim-usb2udp diff --git a/firmware/Makefile b/firmware/Makefile index da92ce3f..703c456d 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -34,11 +34,11 @@ # Chip & board used for compilation # (can be overriden by adding CHIP=chip and BOARD=board to the command-line) -CHIP = sam3s2 -BOARD = simtrace +CHIP ?= sam3s4 +BOARD ?= qmod # Defines which are the available memory targets for the SAM3S-EK board. -MEMORIES = flash +MEMORIES ?= flash dfu # Trace level used for compilation # (can be overriden by adding TRACE_LEVEL=#number to the command-line) @@ -48,9 +48,7 @@ MEMORIES = flash # TRACE_LEVEL_ERROR 2 # TRACE_LEVEL_FATAL 1 # TRACE_LEVEL_NO_TRACE 0 -TRACE_LEVEL = 4 -#FIXME: Remove this variable -NOAUTOCALLBACK=no +TRACE_LEVEL ?= 4 DEBUG_PHONE_SNIFF=0 @@ -60,11 +58,12 @@ DEBUG_PHONE_SNIFF=0 OPTIMIZATION = -O0 # Output file basename -OUTPUT = project +APP = dfu # Output directories +OUTPUT = $(BOARD)-$(APP) BIN = bin -OBJ = obj +OBJ = obj/$(BOARD) #------------------------------------------------------------------------------- # Tools @@ -132,7 +131,7 @@ CFLAGS += -Dprintf=iprintf CFLAGS += -D__ARM CFLAGS += --param max-inline-insns-single=500 -mcpu=cortex-m3 -mthumb # -mfix-cortex-m3-ldrd CFLAGS += -ffunction-sections -g $(OPTIMIZATION) $(INCLUDES) -D$(CHIP) -DTRACE_LEVEL=$(TRACE_LEVEL) -DDEBUG_PHONE_SNIFF=$(DEBUG_PHONE_SNIFF) -CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\" +CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\" -DBOARD=\"$(BOARD)\" -DAPPLICATION=\"$(APP)\" ASFLAGS = -mcpu=cortex-m3 -mthumb -Wall -g $(OPTIMIZATION) $(INCLUDES) -D$(CHIP) -D__ASSEMBLY__ LDFLAGS = -mcpu=cortex-m3 -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=ResetException -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols $(LIB) #LD_OPTIONAL=-Wl,--print-gc-sections -Wl,--stats @@ -150,16 +149,27 @@ VPATH += $(AT91LIB)/libchip_sam3s/source/ $(AT91LIB)/libchip_sam3s/cmsis VPATH += libboard/common/source libboard/$(BOARD)/source VPATH += libcommon/source VPATH += libosmocore/source src_board src_simtrace +VPATH += apps/$(APP) # Objects built from C source files -C_CMSIS = core_cm3.o -C_LOWLEVEL = board_cstartup_gnu.o board_lowlevel.o syscalls.o exceptions.o -C_LIBLEVEL = spi.o pio.o pmc.o usart.o pio_it.o pio_capture.o uart_console.o iso7816_4.o wdt.o efc.o flashd.o led.o tc.o unique_id.o boardver_adc.o dfu_desc.o dfu_runtime.o -C_CCID = cciddriver.o USBD.o USBDDriver.o USBD_HAL.o USBRequests.o USBDCallbacks.o USBDescriptors.o USBDDriverCallbacks.o -C_SIMTRACE = simtrace_iso7816.o usb.o ccid.o sniffer.o mitm.o ringbuffer.o host_communication.o iso7816_fidi.o tc_etu.o req_ctx.o card_emu.o mode_cardemu.o i2c.o wwan_led.o wwan_perst.o -C_OSMOCORE = timer.o rbtree.o -C_APPLEVEL = main.o board_$(BOARD).o -C_OBJECTS = $(C_CMSIS) $(C_LOWLEVEL) $(C_LIBLEVEL) $(C_APPLEVEL) $(C_CCID) $(C_SIMTRACE) $(C_OSMOCORE) +C_OSMOCORE = $(notdir $(wildcard libosmocore/source/*.c)) +C_LIBCHIP = $(notdir $(wildcard $(AT91LIB)/libchip_sam3s/source/*.c) $(wildcard $(AT91LIB)/libchip_sam3s/cmsis/*.c)) + +C_LIBUSB = USBDescriptors.c USBRequests.c USBD.c USBDCallbacks.c USBDDriver.c USBDDriverCallbacks.c +C_LIBUSB_RT = dfu.c dfu_desc.c dfu_runtime.c +C_LIBUSB_DFU = dfu.c dfu_desc.c dfu_driver.c +C_LIBCOMMON = syscalls.c req_ctx.c ringbuffer.c + +C_BOARD = $(notdir $(wildcard libboard/common/source/*.c)) +C_BOARD += $(notdir $(wildcard libboard/$(BOARD)/source/*.c)) + +C_APPLEVEL = $(notdir $(wildcard apps/$(APP)/*.c)) + +C_FILES = $(C_OSMOCORE) $(C_LIBCHIP) $(C_LIBUSB) $(C_LIBCOMMON) $(C_BOARD) $(C_APPLEVEL) + +-include apps/$(APP)/Makefile + +C_OBJECTS = $(C_FILES:%.c=%.o) # Append OBJ and BIN directories to output filename OUTPUT := $(BIN)/$(OUTPUT) @@ -178,18 +188,18 @@ C_OBJECTS_$(1) = $(addprefix $(OBJ)/$(1)_, $(C_OBJECTS)) ASM_OBJECTS_$(1) = $(addprefix $(OBJ)/$(1)_, $(ASM_OBJECTS)) $(1): $$(ASM_OBJECTS_$(1)) $$(C_OBJECTS_$(1)) - @$(CC) $(LDFLAGS) $(LD_OPTIONAL) -T"$$@.ld" -Wl,-Map,$(OUTPUT)-$$@.map -o $(OUTPUT)-$$@.elf $$^ $(LIBS) + @$(CC) $(LDFLAGS) $(LD_OPTIONAL) -T"libboard/common/resources/$(CHIP)/$$@.ld" -Wl,-Map,$(OUTPUT)-$$@.map -o $(OUTPUT)-$$@.elf $$^ $(LIBS) @$(NM) $(OUTPUT)-$$@.elf >$(OUTPUT)-$$@.elf.txt @$(OBJCOPY) -O binary $(OUTPUT)-$$@.elf $(OUTPUT)-$$@.bin @$(SIZE) $$^ $(OUTPUT)-$$@.elf $$(C_OBJECTS_$(1)): $(OBJ)/$(1)_%.o: %.c Makefile $(OBJ) $(BIN) @echo [COMPILING $$<] - @$(CC) $(CFLAGS) -D$(1) -Wa,-ahlms=$(BIN)/$$*.lst -c -o $$@ $$< + @$(CC) $(CFLAGS) -D$(1) -DENVIRONMENT=\"$(1)\" -Wa,-ahlms=$(BIN)/$$*.lst -c -o $$@ $$< $$(ASM_OBJECTS_$(1)): $(OBJ)/$(1)_%.o: %.S Makefile $(OBJ) $(BIN) @echo [ASSEMBLING $$@] - @$(CC) $(ASFLAGS) -D$(1) -c -o $$@ $$< + @$(CC) $(ASFLAGS) -D$(1) -DENVIRONMENT=\"$(1)\" -c -o $$@ $$< debug_$(1): $(1) $(GDB) -x "$(BOARD_LIB)/resources/gcc/$(BOARD)_$(1).gdb" -ex "reset" -readnow -se $(OUTPUT)-$(1).elf @@ -207,6 +217,3 @@ log: clean: -rm -fR $(OBJ)/*.o $(BIN)/*.bin $(BIN)/*.elf $(BIN)/*.elf.txt $(BIN)/*.map $(BIN)/*.lst - -rmbak: - -rm *~ $(BIN)/*~ diff --git a/firmware/README.txt b/firmware/README.txt new file mode 100644 index 00000000..67a28d94 --- /dev/null +++ b/firmware/README.txt @@ -0,0 +1,33 @@ + +== BOARDS + +A board defines a given circuit board, i.e. SIMtrace, OWHW, QMOD + +It defines the given hardware model for which the program is to be +compiled. + +Current boards supported are: +* simtrace: The good old Osmocom SIMtrace PCB with SAM3 instead of + SAM7, open hardware. +* qmod: A sysmocom-proprietary quad mPCIe carrier board, publicly available +* owhw: An undisclosed sysmocom-internal board, not publicly available + +== APPLICATIONS + +An application is a specific piece of software with given +functionality. + +== ENVIRONMENTS + +An environment is a runtime environment, typically defined by a linker +script. The current runtime environments include +* flash: Run natively from start of flash memory +* dfu: Run after a DFU bootloader from an offset after the first 16k + of flash (the first 16k are reserved for the bootloader) +* ram: Run from within the RAM of the chip, downloaded via JTAG/SWD + + +== Building + +A given software build is made for a specific combination of an APP +running in a certain ENVIRONMENT on a given BOARD. diff --git a/firmware/apps/cardem/Makefile b/firmware/apps/cardem/Makefile new file mode 100644 index 00000000..8a2f29b3 --- /dev/null +++ b/firmware/apps/cardem/Makefile @@ -0,0 +1,3 @@ +C_FILES += $(C_LIBUSB_RT) + +C_FILES += card_emu.c ccid.c host_communication.c iso7816_4.c iso7816_fidi.c mitm.c mode_cardemu.c simtrace_iso7816.c sniffer.c tc_etu.c usb.c diff --git a/firmware/src_simtrace/main.c b/firmware/apps/cardem/main.c similarity index 100% rename from firmware/src_simtrace/main.c rename to firmware/apps/cardem/main.c diff --git a/firmware/apps/ccid/main.c b/firmware/apps/ccid/main.c new file mode 100644 index 00000000..e69de29b diff --git a/firmware/apps/dfu/Makefile b/firmware/apps/dfu/Makefile new file mode 100644 index 00000000..0d19e699 --- /dev/null +++ b/firmware/apps/dfu/Makefile @@ -0,0 +1 @@ +C_FILES += $(C_LIBUSB_DFU) diff --git a/firmware/apps/dfu/main.c b/firmware/apps/dfu/main.c new file mode 100644 index 00000000..9b2facfa --- /dev/null +++ b/firmware/apps/dfu/main.c @@ -0,0 +1,107 @@ +#include "board.h" +#include "utils.h" +#include "usb/device/dfu/dfu.h" +#include "usb/common/dfu/usb_dfu.h" +#include "manifest.h" + +unsigned int g_unique_id[4]; + +/*---------------------------------------------------------------------------- + * Callbacks + *----------------------------------------------------------------------------*/ + +#if 0 +void USBDDriverCallbacks_ConfigurationChanged(uint8_t cfgnum) +{ + TRACE_INFO_WP("cfgChanged%d ", cfgnum); + simtrace_config = cfgnum; +} +#endif + +/* returns '1' in case we should break any endless loop */ +static void check_exec_dbg_cmd(void) +{ + int ch; + + if (!UART_IsRxReady()) + return; + + ch = UART_GetChar(); + + //board_exec_dbg_cmd(ch); +} + +/*------------------------------------------------------------------------------ + * Main + *------------------------------------------------------------------------------*/ +#define MAX_USB_ITER BOARD_MCK/72 // This should be around a second +extern int main(void) +{ + uint8_t isUsbConnected = 0; + unsigned int i = 0; + + LED_Configure(LED_NUM_RED); + LED_Configure(LED_NUM_GREEN); + LED_Set(LED_NUM_RED); + + /* Disable watchdog */ + WDT_Disable(WDT); + + //req_ctx_init(); + + PIO_InitializeInterrupts(0); + + EEFC_ReadUniqueID(g_unique_id); + + printf("\r\n\r\n" + "=============================================================================\r\n" + "DFU bootloader %s for board %s (C) 2010-2017 by Harald Welte\r\n" + "=============================================================================\r\n", + manifest_revision, manifest_board); + + TRACE_INFO("Serial Nr. %08x-%08x-%08x-%08x\r\n", + g_unique_id[0], g_unique_id[1], + g_unique_id[2], g_unique_id[3]); + + //board_main_top(); + + TRACE_INFO("USB init...\r\n"); + USBDFU_Initialize(&dfu_descriptors); + + while (USBD_GetState() < USBD_STATE_CONFIGURED) { + check_exec_dbg_cmd(); +#if 0 + if (i >= MAX_USB_ITER * 3) { + TRACE_ERROR("Resetting board (USB could " + "not be configured)\r\n"); + NVIC_SystemReset(); + } +#endif + i++; + } + + TRACE_INFO("entering main loop...\r\n"); + while (1) { +#if TRACE_LEVEL >= TRACE_LEVEL_DEBUG + const char rotor[] = { '-', '\\', '|', '/' }; + putchar('\b'); + putchar(rotor[i++ % ARRAY_SIZE(rotor)]); +#endif + check_exec_dbg_cmd(); + //osmo_timers_prepare(); + //osmo_timers_update(); + + if (USBD_GetState() < USBD_STATE_CONFIGURED) { + + if (isUsbConnected) { + isUsbConnected = 0; + } + } else if (isUsbConnected == 0) { + TRACE_INFO("USB is now configured\r\n"); + LED_Set(LED_NUM_GREEN); + LED_Clear(LED_NUM_RED); + + isUsbConnected = 1; + } + } +} diff --git a/firmware/apps/trace/main.c b/firmware/apps/trace/main.c new file mode 100644 index 00000000..e69de29b diff --git a/firmware/apps/triple_play/Makefile b/firmware/apps/triple_play/Makefile new file mode 100644 index 00000000..8a2f29b3 --- /dev/null +++ b/firmware/apps/triple_play/Makefile @@ -0,0 +1,3 @@ +C_FILES += $(C_LIBUSB_RT) + +C_FILES += card_emu.c ccid.c host_communication.c iso7816_4.c iso7816_fidi.c mitm.c mode_cardemu.c simtrace_iso7816.c sniffer.c tc_etu.c usb.c diff --git a/firmware/apps/triple_play/main.c b/firmware/apps/triple_play/main.c new file mode 100644 index 00000000..3b843c87 --- /dev/null +++ b/firmware/apps/triple_play/main.c @@ -0,0 +1,207 @@ +// FIXME: Copyright license here +/*------------------------------------------------------------------------------ + * Headers + *------------------------------------------------------------------------------*/ + +#include "board.h" +#include "simtrace.h" +#include "utils.h" +#include "req_ctx.h" +#include "osmocom/core/timer.h" + +uint32_t g_unique_id[4]; + +/*------------------------------------------------------------------------------ + * Internal variables + *------------------------------------------------------------------------------*/ +typedef struct { + /* static initialization, called whether or not the usb config is active */ + void (*configure) (void); + /* initialization function after the config was selected */ + void (*init) (void); + /* de-initialization before selecting new config */ + void (*exit) (void); + /* main loop content for given configuration */ + void (*run) (void); + /* Interrupt handler for USART1 */ + void (*usart0_irq) (void); + /* Interrupt handler for USART1 */ + void (*usart1_irq) (void); +} conf_func; + +static const conf_func config_func_ptrs[] = { + /* array slot 0 is empty, usb configs start at 1 */ +#ifdef HAVE_SNIFFER + [CFG_NUM_SNIFF] = { + .configure = Sniffer_configure, + .init = Sniffer_init, + .exit = Sniffer_exit, + .run = Sniffer_run, + }, +#endif +#ifdef HAVE_CCID + [CFG_NUM_CCID] = { + .configure = CCID_configure, + .init = CCID_init, + .exit = CCID_exit, + .run = CCID_run, + }, +#endif +#ifdef HAVE_CARDEM + [CFG_NUM_PHONE] = { + .configure = mode_cardemu_configure, + .init = mode_cardemu_init, + .exit = mode_cardemu_exit, + .run = mode_cardemu_run, + .usart0_irq = mode_cardemu_usart0_irq, + .usart1_irq = mode_cardemu_usart1_irq, + }, +#endif +#ifdef HAVE_MITM + [CFG_NUM_MITM] = { + .configure = MITM_configure, + .init = MITM_init, + .exit = MITM_exit, + .run = MITM_run, + }, +#endif +}; + +/*------------------------------------------------------------------------------ + * Internal variables + *------------------------------------------------------------------------------*/ +#if defined(HAVE_SNIFFER) +static volatile enum confNum simtrace_config = CFG_NUM_SNIFF; +#elif defined(HAVE_CARDEM) +static volatile enum confNum simtrace_config = CFG_NUM_PHONE; +#elif defined(HAVE_CCID) +static volatile enum confNum simtrace_config = CFG_NUM_CCID; +#endif + +/*---------------------------------------------------------------------------- + * Callbacks + *----------------------------------------------------------------------------*/ + +void USBDDriverCallbacks_ConfigurationChanged(uint8_t cfgnum) +{ + TRACE_INFO_WP("cfgChanged%d ", cfgnum); + simtrace_config = cfgnum; +} + +void USART1_IrqHandler(void) +{ + config_func_ptrs[simtrace_config].usart1_irq(); +} + +void USART0_IrqHandler(void) +{ + config_func_ptrs[simtrace_config].usart0_irq(); +} + +/* returns '1' in case we should break any endless loop */ +static void check_exec_dbg_cmd(void) +{ + int ch; + + if (!UART_IsRxReady()) + return; + + ch = UART_GetChar(); + + board_exec_dbg_cmd(ch); +} + +/*------------------------------------------------------------------------------ + * Main + *------------------------------------------------------------------------------*/ +#define MAX_USB_ITER BOARD_MCK/72 // This should be around a second +extern int main(void) +{ + uint8_t isUsbConnected = 0; + enum confNum last_simtrace_config = simtrace_config; + unsigned int i = 0; + + LED_Configure(LED_NUM_RED); + LED_Configure(LED_NUM_GREEN); + LED_Set(LED_NUM_RED); + + /* Disable watchdog */ + WDT_Disable(WDT); + + req_ctx_init(); + + PIO_InitializeInterrupts(0); + + EEFC_ReadUniqueID(g_unique_id); + + printf("\r\n\r\n" + "=============================================================================\r\n" + "SIMtrace2 firmware " GIT_REVISION " (C) 2010-2017 by Harald Welte\r\n" + "=============================================================================\r\n"); + + TRACE_INFO("Serial Nr. %08x-%08x-%08x-%08x\r\n", + g_unique_id[0], g_unique_id[1], + g_unique_id[2], g_unique_id[3]); + + board_main_top(); + + TRACE_INFO("USB init...\r\n"); + SIMtrace_USB_Initialize(); + + while (USBD_GetState() < USBD_STATE_CONFIGURED) { + check_exec_dbg_cmd(); +#if 0 + if (i >= MAX_USB_ITER * 3) { + TRACE_ERROR("Resetting board (USB could " + "not be configured)\r\n"); + NVIC_SystemReset(); + } +#endif + i++; + } + + TRACE_INFO("calling configure of all configurations...\r\n"); + for (i = 1; i < sizeof(config_func_ptrs) / sizeof(config_func_ptrs[0]); + ++i) { + if (config_func_ptrs[i].configure) + config_func_ptrs[i].configure(); + } + + TRACE_INFO("calling init of config %u...\r\n", simtrace_config); + config_func_ptrs[simtrace_config].init(); + last_simtrace_config = simtrace_config; + + TRACE_INFO("entering main loop...\r\n"); + while (1) { +#if TRACE_LEVEL >= TRACE_LEVEL_DEBUG + const char rotor[] = { '-', '\\', '|', '/' }; + putchar('\b'); + putchar(rotor[i++ % ARRAY_SIZE(rotor)]); +#endif + check_exec_dbg_cmd(); + osmo_timers_prepare(); + osmo_timers_update(); + + if (USBD_GetState() < USBD_STATE_CONFIGURED) { + + if (isUsbConnected) { + isUsbConnected = 0; + } + } else if (isUsbConnected == 0) { + TRACE_INFO("USB is now configured\r\n"); + LED_Set(LED_NUM_GREEN); + LED_Clear(LED_NUM_RED); + + isUsbConnected = 1; + } + if (last_simtrace_config != simtrace_config) { + TRACE_INFO("USB config chg %u -> %u\r\n", + last_simtrace_config, simtrace_config); + config_func_ptrs[last_simtrace_config].exit(); + config_func_ptrs[simtrace_config].init(); + last_simtrace_config = simtrace_config; + } else { + config_func_ptrs[simtrace_config].run(); + } + } +} diff --git a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_driver.c b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_driver.c index 94bfc024..217ec097 100644 --- a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_driver.c +++ b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_driver.c @@ -48,7 +48,7 @@ __dfudata struct dfudata g_dfu = { .total_bytes = 0, }; -WEAK void dfu_drv_updatatus(void) +WEAK void dfu_drv_updstatus(void) { TRACE_INFO("DFU: updstatus()\n\r"); @@ -446,7 +446,7 @@ void USBDFU_Initialize(const USBDDriverDescriptors *pDescriptors) USBDDriver_Initialize(&usbdDriver, pDescriptors, if_altsettings); USBD_Init(); - USBD_ConfigureSpeed(1); + //USBD_ConfigureSpeed(1); } void USBDFU_SwitchToApp(void) diff --git a/firmware/libboard/common/include/manifest.h b/firmware/libboard/common/include/manifest.h new file mode 100644 index 00000000..6c1b2026 --- /dev/null +++ b/firmware/libboard/common/include/manifest.h @@ -0,0 +1,10 @@ + +#ifndef _MANIFEST_H +#define _MANIFEST_H + +extern const char *manifest_application; +extern const char *manifest_revision; +extern const char *manifest_board; +extern const char *manifest_environment; + +#endif /* !_MANIFEST_H */ diff --git a/firmware/libboard/common/resources/sam3s4/dfu.ld b/firmware/libboard/common/resources/sam3s4/dfu.ld new file mode 100644 index 00000000..c91c4c14 --- /dev/null +++ b/firmware/libboard/common/resources/sam3s4/dfu.ld @@ -0,0 +1,140 @@ +/* ---------------------------------------------------------------------------- + * ATMEL Microcontroller Software Support + * ---------------------------------------------------------------------------- + * Copyright (c) 2009, Atmel Corporation + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the disclaimer below. + * + * Atmel's name may not be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * ---------------------------------------------------------------------------- + */ + +/*------------------------------------------------------------------------------ + * Linker script for running in internal FLASH on the ATSAM3S4 + *----------------------------------------------------------------------------*/ + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") +OUTPUT_ARCH(arm) +SEARCH_DIR(.) + +/* Memory Spaces Definitions */ +MEMORY +{ + rom (rx) : ORIGIN = 0x00404000, LENGTH = 0x0003c000 /* flash, 256K */ + ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x0000c000 /* sram, 48K */ +} + +/* Section Definitions */ +SECTIONS +{ + .text : + { + . = ALIGN(4); + _sfixed = .; + KEEP(*(.vectors .vectors.*)) + *(.text .text.* .gnu.linkonce.t.*) + *(.glue_7t) *(.glue_7) + *(.rodata .rodata* .gnu.linkonce.r.*) + *(.ARM.extab* .gnu.linkonce.armextab.*) + + /* Support C constructors, and C destructors in both user code + and the C library. This also provides support for C++ code. */ + . = ALIGN(4); + KEEP(*(.init)) + . = ALIGN(4); + __preinit_array_start = .; + KEEP (*(.preinit_array)) + __preinit_array_end = .; + + . = ALIGN(4); + __init_array_start = .; + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + __init_array_end = .; + + . = ALIGN(0x4); + KEEP (*crtbegin.o(.ctors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*crtend.o(.ctors)) + + . = ALIGN(4); + KEEP(*(.fini)) + + . = ALIGN(4); + __fini_array_start = .; + KEEP (*(.fini_array)) + KEEP (*(SORT(.fini_array.*))) + __fini_array_end = .; + + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*crtend.o(.dtors)) + + . = ALIGN(4); + _efixed = .; /* End of text section */ + } > rom + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + PROVIDE_HIDDEN (__exidx_start = .); + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > rom + PROVIDE_HIDDEN (__exidx_end = .); + + . = ALIGN(4); + _etext = .; + + .relocate : AT (_etext) + { + . = ALIGN(4); + _srelocate = .; + *(.ramfunc .ramfunc.*); + *(.data .data.*); + . = ALIGN(4); + _erelocate = .; + } > ram + + /* .bss section which is used for uninitialized data */ + .bss (NOLOAD) : + { + . = ALIGN(4); + _sbss = . ; + _szero = .; + *(.bss .bss.*) + *(COMMON) + . = ALIGN(4); + _ebss = . ; + _ezero = .; + } > ram + + /* stack section */ + .stack (NOLOAD): + { + . = ALIGN(8); + *(.stack .stack.*) + } > ram + + . = ALIGN(4); + _end = . ; +} diff --git a/firmware/libboard/common/source/manifest.c b/firmware/libboard/common/source/manifest.c new file mode 100644 index 00000000..e6d8d59c --- /dev/null +++ b/firmware/libboard/common/source/manifest.c @@ -0,0 +1,7 @@ + +#include "manifest.h" + +const char *manifest_application = APPLICATION; +const char *manifest_revision = GIT_VERSION; +const char *manifest_board = BOARD; +const char *manifest_environment = ENVIRONMENT; diff --git a/firmware/libboard/owhw/source/owhw.c b/firmware/libboard/owhw/source/owhw.c index c020d64d..d1e54e66 100644 --- a/firmware/libboard/owhw/source/owhw.c +++ b/firmware/libboard/owhw/source/owhw.c @@ -19,6 +19,7 @@ #include "chip.h" #include "board.h" +#include "utils.h" static const Pin pins_cardsim[] = PINS_CARDSIM; diff --git a/firmware/src_simtrace/board_qmod.c b/firmware/libboard/qmod/source/board_qmod.c similarity index 100% rename from firmware/src_simtrace/board_qmod.c rename to firmware/libboard/qmod/source/board_qmod.c diff --git a/firmware/src_simtrace/card_emu.h b/firmware/libcommon/include/card_emu.h similarity index 100% rename from firmware/src_simtrace/card_emu.h rename to firmware/libcommon/include/card_emu.h diff --git a/firmware/src_simtrace/cardemu_prot.h b/firmware/libcommon/include/cardemu_prot.h similarity index 100% rename from firmware/src_simtrace/cardemu_prot.h rename to firmware/libcommon/include/cardemu_prot.h diff --git a/firmware/src_simtrace/simtrace.h b/firmware/libcommon/include/simtrace.h similarity index 100% rename from firmware/src_simtrace/simtrace.h rename to firmware/libcommon/include/simtrace.h diff --git a/firmware/src_simtrace/tc_etu.h b/firmware/libcommon/include/tc_etu.h similarity index 100% rename from firmware/src_simtrace/tc_etu.h rename to firmware/libcommon/include/tc_etu.h diff --git a/firmware/src_simtrace/card_emu.c b/firmware/libcommon/source/card_emu.c similarity index 100% rename from firmware/src_simtrace/card_emu.c rename to firmware/libcommon/source/card_emu.c diff --git a/firmware/src_simtrace/ccid.c b/firmware/libcommon/source/ccid.c similarity index 100% rename from firmware/src_simtrace/ccid.c rename to firmware/libcommon/source/ccid.c diff --git a/firmware/src_simtrace/host_communication.c b/firmware/libcommon/source/host_communication.c similarity index 100% rename from firmware/src_simtrace/host_communication.c rename to firmware/libcommon/source/host_communication.c diff --git a/firmware/src_board/iso7816_4.c b/firmware/libcommon/source/iso7816_4.c similarity index 100% rename from firmware/src_board/iso7816_4.c rename to firmware/libcommon/source/iso7816_4.c diff --git a/firmware/src_simtrace/mitm.c b/firmware/libcommon/source/mitm.c similarity index 100% rename from firmware/src_simtrace/mitm.c rename to firmware/libcommon/source/mitm.c diff --git a/firmware/src_simtrace/mode_cardemu.c b/firmware/libcommon/source/mode_cardemu.c similarity index 100% rename from firmware/src_simtrace/mode_cardemu.c rename to firmware/libcommon/source/mode_cardemu.c diff --git a/firmware/src_simtrace/phone.c b/firmware/libcommon/source/phone.c similarity index 100% rename from firmware/src_simtrace/phone.c rename to firmware/libcommon/source/phone.c diff --git a/firmware/libcommon/source/req_ctx.c b/firmware/libcommon/source/req_ctx.c index a4ecee29..5eb82ea7 100644 --- a/firmware/libcommon/source/req_ctx.c +++ b/firmware/libcommon/source/req_ctx.c @@ -21,6 +21,7 @@ #include #include +#include "chip.h" #include "utils.h" #include "trace.h" #include "req_ctx.h" diff --git a/firmware/src_simtrace/simtrace_iso7816.c b/firmware/libcommon/source/simtrace_iso7816.c similarity index 100% rename from firmware/src_simtrace/simtrace_iso7816.c rename to firmware/libcommon/source/simtrace_iso7816.c diff --git a/firmware/src_simtrace/sniffer.c b/firmware/libcommon/source/sniffer.c similarity index 100% rename from firmware/src_simtrace/sniffer.c rename to firmware/libcommon/source/sniffer.c diff --git a/firmware/src_simtrace/tc_etu.c b/firmware/libcommon/source/tc_etu.c similarity index 100% rename from firmware/src_simtrace/tc_etu.c rename to firmware/libcommon/source/tc_etu.c diff --git a/firmware/src_simtrace/usb.c b/firmware/libcommon/source/usb.c similarity index 100% rename from firmware/src_simtrace/usb.c rename to firmware/libcommon/source/usb.c