Christina Quast | 32906bb | 2015-02-24 11:35:19 +0100 | [diff] [blame] | 1 | // FIXME: Copyright license here |
| 2 | /*------------------------------------------------------------------------------ |
| 3 | * Headers |
| 4 | *------------------------------------------------------------------------------*/ |
| 5 | |
| 6 | #include "board.h" |
Christina Quast | 32906bb | 2015-02-24 11:35:19 +0100 | [diff] [blame] | 7 | |
| 8 | /*------------------------------------------------------------------------------ |
Christina Quast | 32906bb | 2015-02-24 11:35:19 +0100 | [diff] [blame] | 9 | * Internal variables |
| 10 | *------------------------------------------------------------------------------*/ |
Christina Quast | fb524b9 | 2015-02-27 13:39:45 +0100 | [diff] [blame] | 11 | typedef struct { |
Christina Quast | 95d6616 | 2015-04-09 22:38:47 +0200 | [diff] [blame] | 12 | void (* configure) ( void ); |
Christina Quast | fb524b9 | 2015-02-27 13:39:45 +0100 | [diff] [blame] | 13 | void (* init) ( void ); |
Christina Quast | 95d6616 | 2015-04-09 22:38:47 +0200 | [diff] [blame] | 14 | void (* exit) ( void ); |
Christina Quast | fb524b9 | 2015-02-27 13:39:45 +0100 | [diff] [blame] | 15 | void (* run) ( void ); |
| 16 | } conf_func; |
| 17 | |
| 18 | conf_func config_func_ptrs[] = { |
Christina Quast | 95d6616 | 2015-04-09 22:38:47 +0200 | [diff] [blame] | 19 | {Sniffer_configure, Sniffer_init, Sniffer_exit, Sniffer_run}, /* CFG_NUM_SNIFF */ |
| 20 | {CCID_configure, CCID_init, CCID_exit, CCID_run}, /* CFG_NUM_CCID */ |
| 21 | {Phone_configure, Phone_init, Phone_exit, Phone_run}, /* CFG_NUM_PHONE */ |
| 22 | {MITM_configure, MITM_init, MITM_exit, MITM_run}, /* CFG_NUM_MITM */ |
Christina Quast | fb524b9 | 2015-02-27 13:39:45 +0100 | [diff] [blame] | 23 | }; |
| 24 | |
| 25 | |
| 26 | /*------------------------------------------------------------------------------ |
| 27 | * Internal variables |
| 28 | *------------------------------------------------------------------------------*/ |
Christina Quast | 95d6616 | 2015-04-09 22:38:47 +0200 | [diff] [blame] | 29 | volatile enum confNum simtrace_config = CFG_NUM_SNIFF; |
Christina Quast | 32906bb | 2015-02-24 11:35:19 +0100 | [diff] [blame] | 30 | |
| 31 | /*------------------------------------------------------------------------------ |
Christina Quast | 95d6616 | 2015-04-09 22:38:47 +0200 | [diff] [blame] | 32 | * Main |
Christina Quast | 32906bb | 2015-02-24 11:35:19 +0100 | [diff] [blame] | 33 | *------------------------------------------------------------------------------*/ |
Christina Quast | de68867 | 2015-04-12 15:20:57 +0200 | [diff] [blame] | 34 | #define MAX_USB_ITER BOARD_MCK/72 // This should be around a second |
Christina Quast | 32906bb | 2015-02-24 11:35:19 +0100 | [diff] [blame] | 35 | extern int main( void ) |
| 36 | { |
Christina Quast | 1161b27 | 2015-02-25 14:15:57 +0100 | [diff] [blame] | 37 | uint8_t isUsbConnected = 0; |
Christina Quast | 95d6616 | 2015-04-09 22:38:47 +0200 | [diff] [blame] | 38 | enum confNum last_simtrace_config = simtrace_config; |
Christina Quast | 2379ac8 | 2015-04-16 11:09:37 +0200 | [diff] [blame] | 39 | unsigned int i = 0; |
Christina Quast | 1161b27 | 2015-02-25 14:15:57 +0100 | [diff] [blame] | 40 | |
Christina Quast | b5ebebe | 2015-03-05 15:43:01 +0100 | [diff] [blame] | 41 | LED_Configure(LED_NUM_RED); |
Christina Quast | 32906bb | 2015-02-24 11:35:19 +0100 | [diff] [blame] | 42 | LED_Configure(LED_NUM_GREEN); |
Christina Quast | 9dbf1c9 | 2015-05-06 08:46:32 +0200 | [diff] [blame^] | 43 | LED_Set(LED_NUM_RED); |
Christina Quast | 32906bb | 2015-02-24 11:35:19 +0100 | [diff] [blame] | 44 | |
| 45 | /* Disable watchdog*/ |
| 46 | WDT_Disable( WDT ) ; |
| 47 | |
| 48 | PIO_InitializeInterrupts(0); |
| 49 | |
Christina Quast | 1161b27 | 2015-02-25 14:15:57 +0100 | [diff] [blame] | 50 | SIMtrace_USB_Initialize(); |
| 51 | |
| 52 | printf("%s", "USB init\n\r"); |
Christina Quast | de68867 | 2015-04-12 15:20:57 +0200 | [diff] [blame] | 53 | while(USBD_GetState() < USBD_STATE_CONFIGURED){ |
| 54 | if(i >= MAX_USB_ITER) { |
| 55 | TRACE_ERROR("Resetting board (USB could not be configured)\n"); |
| 56 | NVIC_SystemReset(); |
| 57 | } |
| 58 | i++; |
| 59 | } |
| 60 | |
Christina Quast | 2379ac8 | 2015-04-16 11:09:37 +0200 | [diff] [blame] | 61 | for (i = 0; i < sizeof(config_func_ptrs)/sizeof(config_func_ptrs[0]); ++i) |
Christina Quast | 95d6616 | 2015-04-09 22:38:47 +0200 | [diff] [blame] | 62 | { |
| 63 | config_func_ptrs[i].configure(); |
| 64 | } |
| 65 | |
| 66 | config_func_ptrs[simtrace_config-1].init(); |
| 67 | last_simtrace_config = simtrace_config; |
| 68 | |
Christina Quast | 32906bb | 2015-02-24 11:35:19 +0100 | [diff] [blame] | 69 | |
| 70 | TRACE_DEBUG("%s", "Start\n\r"); |
Christina Quast | cafde00 | 2015-03-02 16:12:16 +0100 | [diff] [blame] | 71 | |
Christina Quast | 1161b27 | 2015-02-25 14:15:57 +0100 | [diff] [blame] | 72 | printf("%s", "Start\n\r"); |
Christina Quast | 32906bb | 2015-02-24 11:35:19 +0100 | [diff] [blame] | 73 | while(1) { |
Christina Quast | 1161b27 | 2015-02-25 14:15:57 +0100 | [diff] [blame] | 74 | |
| 75 | /* Device is not configured */ |
| 76 | if (USBD_GetState() < USBD_STATE_CONFIGURED) { |
| 77 | |
| 78 | if (isUsbConnected) { |
| 79 | isUsbConnected = 0; |
| 80 | // TC_Stop(TC0, 0); |
| 81 | } |
| 82 | } |
| 83 | else if (isUsbConnected == 0) { |
| 84 | printf("USB is now configured\n\r"); |
Christina Quast | 9dbf1c9 | 2015-05-06 08:46:32 +0200 | [diff] [blame^] | 85 | LED_Set(LED_NUM_GREEN); |
| 86 | LED_Clear(LED_NUM_RED); |
Christina Quast | 1161b27 | 2015-02-25 14:15:57 +0100 | [diff] [blame] | 87 | |
| 88 | isUsbConnected = 1; |
| 89 | // TC_Start(TC0, 0); |
Christina Quast | 95d6616 | 2015-04-09 22:38:47 +0200 | [diff] [blame] | 90 | } |
Christina Quast | cafde00 | 2015-03-02 16:12:16 +0100 | [diff] [blame] | 91 | |
| 92 | // for (int i=0; i <10000; i++); |
| 93 | |
Christina Quast | 32906bb | 2015-02-24 11:35:19 +0100 | [diff] [blame] | 94 | /* FIXME: Or should we move the while loop into every case, and break out |
| 95 | in case the config changes? */ |
Christina Quast | 95d6616 | 2015-04-09 22:38:47 +0200 | [diff] [blame] | 96 | if (last_simtrace_config != simtrace_config) { |
| 97 | config_func_ptrs[last_simtrace_config-1].exit(); |
Christina Quast | fb524b9 | 2015-02-27 13:39:45 +0100 | [diff] [blame] | 98 | config_func_ptrs[simtrace_config-1].init(); |
Christina Quast | 95d6616 | 2015-04-09 22:38:47 +0200 | [diff] [blame] | 99 | last_simtrace_config = simtrace_config; |
Christina Quast | fb524b9 | 2015-02-27 13:39:45 +0100 | [diff] [blame] | 100 | } else { |
| 101 | config_func_ptrs[simtrace_config-1].run(); |
Christina Quast | 32906bb | 2015-02-24 11:35:19 +0100 | [diff] [blame] | 102 | } |
| 103 | } |
| 104 | } |