owhw: fix GPIO definitions (output low level by default)
diff --git a/firmware/include_board/owhw/board.h b/firmware/include_board/owhw/board.h
index cd15339..a0960ee 100644
--- a/firmware/include_board/owhw/board.h
+++ b/firmware/include_board/owhw/board.h
@@ -26,11 +26,13 @@
#define PIN_USIM1_CLK_TC {PIO_PA29, PIOA, ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
#define PINS_TC_USIM1 PIN_USIM1_IO_TC, PIN_USIM1_CLK_TC
-#define PIN_SET_USIM1_PRES {PIO_PA12, PIOA, ID_PIOA, PIO_OUTPUT, PIO_DEFAULT}
+#define PIN_SET_USIM1_PRES {PIO_PA12, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}
#define PIN_USIM1_nRST {PIO_PA23, PIOA, ID_PIOA, PIO_INPUT, PIO_DEFAULT}
+#define PIN_USIM1_VCC {PIO_PB3, PIOB, ID_PIOB, PIO_INPUT, PIO_DEFAULT}
-#define PIN_SET_USIM2_PRES {PIO_PA14, PIOA, ID_PIOA, PIO_OUTPUT, PIO_DEFAULT}
+#define PIN_SET_USIM2_PRES {PIO_PA14, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}
#define PIN_USIM2_nRST {PIO_PA7, PIOA, ID_PIOA, PIO_INPUT, PIO_DEFAULT}
+#define PIN_USIM2_VCC {PIO_PB2, PIOB, ID_PIOB, PIO_INPUT, PIO_DEFAULT}
#define PINS_USIM1 PINS_TC_USIM1, PINS_ISO7816_USIM1, PIN_USIM1_nRST, PIN_SET_USIM1_PRES
#define PINS_USIM2 PINS_TC_USIM2, PINS_ISO7816_USIM2, PIN_USIM2_nRST, PIN_SET_USIM2_PRES
@@ -41,3 +43,5 @@
#define SIMTRACE_PRODUCT_ID 0x60e3 /* FIXME */
#define USB_VENDOR_ID SIMTRACE_VENDOR_ID
#define USB_PRODUCT_ID SIMTRACE_PRODUCT_ID
+
+#define HAVE_CARDEM
diff --git a/firmware/include_board/simtrace/board.h b/firmware/include_board/simtrace/board.h
index 97b34ad..d7d94f5 100644
--- a/firmware/include_board/simtrace/board.h
+++ b/firmware/include_board/simtrace/board.h
@@ -76,3 +76,8 @@
#define SIMTRACE_PRODUCT_ID 0x60e3
#define USB_VENDOR_ID SIMTRACE_VENDOR_ID
#define USB_PRODUCT_ID SIMTRACE_PRODUCT_ID
+
+#define HAVE_SNIFFER
+#define HAVE_CCID
+#define HAVE_CARDEM
+#define HAVE_MITM
diff --git a/firmware/src_simtrace/card_emu_target.c b/firmware/src_simtrace/card_emu_target.c
deleted file mode 100644
index d3c4eec..0000000
--- a/firmware/src_simtrace/card_emu_target.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdint.h>
-
-#include "board.h"
-#include "card_emu.h"
-
-#if 0
-void card_emu_process_rx_byte(struct card_handle *ch, uint8_t byte);
-int card_emu_tx_byte(struct card_handle *ch);
-void card_emu_io_statechg(struct card_handle *ch, enum card_io io, int active);
-#endif
-
-static struct Usart_info usart_info[2] = {
- {
- .base = USART_PHONE,
- .id = ID_USART_PHONE,
- .state = USART_RCV
- }, {}
-};
-
-static Usart *get_usart_by_chan(uint8_t uart_chan)
-{
- switch (uart_chan) {
- case 0:
- return USART_PHONE;
- }
- return NULL;
-}
-
-void card_emu_uart_enable(uint8_t uart_chan, uint8_t rxtx)
-{
- Usart *usart = get_usart_by_chan(uart_chan);
- USART_SetTransmitterEnabled(usart, 0);
- USART_SetReceiverEnabled(usart, 1);
-}
-
-int card_emu_uart_tx(uint8_t uart_chan, uint8_t byte)
-{
- Usart_info *ui = &usart_info[uart_chan];
- ISO7816_SendChar(byte, ui);
- return 1;
-}
diff --git a/firmware/src_simtrace/ccid.c b/firmware/src_simtrace/ccid.c
index 2c70eea..7ff99da 100644
--- a/firmware/src_simtrace/ccid.c
+++ b/firmware/src_simtrace/ccid.c
@@ -27,6 +27,8 @@
* ----------------------------------------------------------------------------
*/
+#ifdef HAVE_CCID
+
/*------------------------------------------------------------------------------
* Headers
*------------------------------------------------------------------------------*/
@@ -178,3 +180,4 @@
CCID_SmartCardRequest();
}
+#endif
diff --git a/firmware/src_simtrace/main.c b/firmware/src_simtrace/main.c
index a1058e1..2b0bed5 100644
--- a/firmware/src_simtrace/main.c
+++ b/firmware/src_simtrace/main.c
@@ -21,37 +21,52 @@
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 = Phone_configure,
.init = Phone_init,
.exit = Phone_exit,
.run = Phone_run,
},
+#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
diff --git a/firmware/src_simtrace/mitm.c b/firmware/src_simtrace/mitm.c
index d010f17..90c8502 100644
--- a/firmware/src_simtrace/mitm.c
+++ b/firmware/src_simtrace/mitm.c
@@ -27,6 +27,8 @@
* ----------------------------------------------------------------------------
*/
+#ifdef HAVE_MITM
+
/*------------------------------------------------------------------------------
* Headers
*------------------------------------------------------------------------------*/
@@ -63,3 +65,4 @@
Phone_run();
CCID_run();
}
+#endif /* HAVE_MITM */
diff --git a/firmware/src_simtrace/sniffer.c b/firmware/src_simtrace/sniffer.c
index 42b36ee..382ee14 100644
--- a/firmware/src_simtrace/sniffer.c
+++ b/firmware/src_simtrace/sniffer.c
@@ -27,6 +27,8 @@
* ----------------------------------------------------------------------------
*/
+#ifdef HAVE_SNIFFER
+
/*------------------------------------------------------------------------------
* Headers
*------------------------------------------------------------------------------*/
@@ -94,3 +96,4 @@
{
check_data_from_phone();
}
+#endif /* HAVE_SNIFFER */
diff --git a/firmware/src_simtrace/usb.c b/firmware/src_simtrace/usb.c
index 686f6bf..f6174c3 100644
--- a/firmware/src_simtrace/usb.c
+++ b/firmware/src_simtrace/usb.c
@@ -32,6 +32,7 @@
*----------------------------------------------------------------------------*/
#include "board.h"
+#include "utils.h"
#include <cciddriverdescriptors.h>
@@ -193,6 +194,7 @@
* USB Device descriptors
*------------------------------------------------------------------------------*/
+#ifdef HAVE_SNIFFER
typedef struct _SIMTraceDriverConfigurationDescriptorSniffer {
/** Standard configuration descriptor. */
@@ -261,7 +263,10 @@
0x10
}
};
+#endif /* HAVE_SNIFFER */
+
+#ifdef HAVE_CCID
/*
/// CCIDDriverConfiguration Descriptors
/// List of descriptors that make up the configuration descriptors of a
@@ -367,8 +372,10 @@
0x10
},
};
+#endif /* HAVE_CCID */
+#ifdef HAVE_CARDEM
/* SIM card emulator */
typedef struct _SIMTraceDriverConfigurationDescriptorPhone {
@@ -437,8 +444,9 @@
0x10
}
};
+#endif /* HAVE_CARDEM */
-
+#ifdef HAVE_MITM
typedef struct _SIMTraceDriverConfigurationDescriptorMITM {
/** Standard configuration descriptor. */
@@ -587,6 +595,22 @@
0x10
}
};
+#endif /* HAVE_CARDEM */
+
+const USBConfigurationDescriptor *configurationDescriptorsArr[] = {
+#ifdef HAVE_SNIFFER
+ &configurationDescriptorSniffer.configuration,
+#endif
+#ifdef HAVE_CCID
+ &configurationDescriptorCCID.configuration,
+#endif
+#ifdef HAVE_CARDEM
+ &configurationDescriptorPhone.configuration,
+#endif
+#ifdef HAVE_MITM
+ &configurationDescriptorMITM.configuration,
+#endif
+};
/** Standard USB device descriptor for the CDC serial driver */
const USBDeviceDescriptor deviceDescriptor = {
@@ -607,14 +631,7 @@
MANUF_STR, /* Indesx of manufacturer string descriptor */
PRODUCT_STRING, /* Index of product string descriptor */
0, /* No string descriptor for serial number */
- 4 /* Device has 4 possible configurations */
-};
-
-const USBConfigurationDescriptor *configurationDescriptorsArr[] = {
- &configurationDescriptorSniffer.configuration,
- &configurationDescriptorCCID.configuration,
- &configurationDescriptorPhone.configuration,
- &configurationDescriptorMITM.configuration,
+ ARRAY_SIZE(configurationDescriptorsArr) /* Device has N possible configs */
};
/* AT91SAM3S only supports full speed, but not high speed USB */