2015-02-24 10:35:19 +00:00
|
|
|
// FIXME: Copyright license here
|
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
* Headers
|
|
|
|
*------------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
#include "board.h"
|
|
|
|
|
2015-02-27 12:39:45 +00:00
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
* Internal variables
|
|
|
|
*------------------------------------------------------------------------------*/
|
|
|
|
typedef struct {
|
2015-11-07 17:18:47 +00:00
|
|
|
/* static initialization, called whether or not the usb config is active */
|
2015-04-09 20:38:47 +00:00
|
|
|
void (* configure) ( void );
|
2015-11-07 17:18:47 +00:00
|
|
|
/* initialization function after the config was selected */
|
2015-02-27 12:39:45 +00:00
|
|
|
void (* init) ( void );
|
2015-11-07 17:18:47 +00:00
|
|
|
/* de-initialization before selecting new config */
|
2015-04-09 20:38:47 +00:00
|
|
|
void (* exit) ( void );
|
2015-11-07 17:18:47 +00:00
|
|
|
/* main loop content for given configuration */
|
2015-02-27 12:39:45 +00:00
|
|
|
void (* run) ( void );
|
|
|
|
} conf_func;
|
|
|
|
|
|
|
|
conf_func config_func_ptrs[] = {
|
2015-04-09 20:38:47 +00:00
|
|
|
{Sniffer_configure, Sniffer_init, Sniffer_exit, Sniffer_run}, /* CFG_NUM_SNIFF */
|
|
|
|
{CCID_configure, CCID_init, CCID_exit, CCID_run}, /* CFG_NUM_CCID */
|
|
|
|
{Phone_configure, Phone_init, Phone_exit, Phone_run}, /* CFG_NUM_PHONE */
|
|
|
|
{MITM_configure, MITM_init, MITM_exit, MITM_run}, /* CFG_NUM_MITM */
|
2015-02-27 12:39:45 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2015-02-24 10:35:19 +00:00
|
|
|
/*------------------------------------------------------------------------------
|
|
|
|
* Internal variables
|
|
|
|
*------------------------------------------------------------------------------*/
|
2015-04-09 20:38:47 +00:00
|
|
|
volatile enum confNum simtrace_config = CFG_NUM_SNIFF;
|
2015-02-24 10:35:19 +00:00
|
|
|
|
|
|
|
/*------------------------------------------------------------------------------
|
2015-04-09 20:38:47 +00:00
|
|
|
* Main
|
2015-02-24 10:35:19 +00:00
|
|
|
*------------------------------------------------------------------------------*/
|
2015-04-12 13:20:57 +00:00
|
|
|
#define MAX_USB_ITER BOARD_MCK/72 // This should be around a second
|
2015-02-24 10:35:19 +00:00
|
|
|
extern int main( void )
|
|
|
|
{
|
2015-02-25 13:15:57 +00:00
|
|
|
uint8_t isUsbConnected = 0;
|
2015-04-09 20:38:47 +00:00
|
|
|
enum confNum last_simtrace_config = simtrace_config;
|
2015-04-16 09:09:37 +00:00
|
|
|
unsigned int i = 0;
|
2015-02-25 13:15:57 +00:00
|
|
|
|
2015-03-05 14:43:01 +00:00
|
|
|
LED_Configure(LED_NUM_RED);
|
2015-02-24 10:35:19 +00:00
|
|
|
LED_Configure(LED_NUM_GREEN);
|
2015-05-06 06:46:32 +00:00
|
|
|
LED_Set(LED_NUM_RED);
|
2015-02-24 10:35:19 +00:00
|
|
|
|
|
|
|
/* Disable watchdog*/
|
|
|
|
WDT_Disable( WDT ) ;
|
|
|
|
|
|
|
|
PIO_InitializeInterrupts(0);
|
|
|
|
|
2015-02-25 13:15:57 +00:00
|
|
|
SIMtrace_USB_Initialize();
|
|
|
|
|
|
|
|
printf("%s", "USB init\n\r");
|
2015-04-12 13:20:57 +00:00
|
|
|
while(USBD_GetState() < USBD_STATE_CONFIGURED){
|
2015-06-24 14:00:13 +00:00
|
|
|
if(i >= MAX_USB_ITER*3) {
|
2015-04-12 13:20:57 +00:00
|
|
|
TRACE_ERROR("Resetting board (USB could not be configured)\n");
|
|
|
|
NVIC_SystemReset();
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
|
2015-04-16 09:09:37 +00:00
|
|
|
for (i = 0; i < sizeof(config_func_ptrs)/sizeof(config_func_ptrs[0]); ++i)
|
2015-04-09 20:38:47 +00:00
|
|
|
{
|
|
|
|
config_func_ptrs[i].configure();
|
|
|
|
}
|
|
|
|
|
|
|
|
config_func_ptrs[simtrace_config-1].init();
|
|
|
|
last_simtrace_config = simtrace_config;
|
|
|
|
|
2015-02-25 13:15:57 +00:00
|
|
|
printf("%s", "Start\n\r");
|
2015-02-24 10:35:19 +00:00
|
|
|
while(1) {
|
2015-02-25 13:15:57 +00:00
|
|
|
|
|
|
|
if (USBD_GetState() < USBD_STATE_CONFIGURED) {
|
|
|
|
|
|
|
|
if (isUsbConnected) {
|
|
|
|
isUsbConnected = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (isUsbConnected == 0) {
|
|
|
|
printf("USB is now configured\n\r");
|
2015-05-06 06:46:32 +00:00
|
|
|
LED_Set(LED_NUM_GREEN);
|
|
|
|
LED_Clear(LED_NUM_RED);
|
2015-02-25 13:15:57 +00:00
|
|
|
|
|
|
|
isUsbConnected = 1;
|
2015-04-09 20:38:47 +00:00
|
|
|
}
|
2015-03-02 15:12:16 +00:00
|
|
|
|
|
|
|
|
2015-04-09 20:38:47 +00:00
|
|
|
if (last_simtrace_config != simtrace_config) {
|
|
|
|
config_func_ptrs[last_simtrace_config-1].exit();
|
2015-02-27 12:39:45 +00:00
|
|
|
config_func_ptrs[simtrace_config-1].init();
|
2015-04-09 20:38:47 +00:00
|
|
|
last_simtrace_config = simtrace_config;
|
2015-02-27 12:39:45 +00:00
|
|
|
} else {
|
|
|
|
config_func_ptrs[simtrace_config-1].run();
|
2015-02-24 10:35:19 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|