blob: 2113131421e27ef11fe68e58490aad6722197a7e [file] [log] [blame]
Christina Quast32906bb2015-02-24 11:35:19 +01001// FIXME: Copyright license here
2/*------------------------------------------------------------------------------
3 * Headers
4 *------------------------------------------------------------------------------*/
5
6#include "board.h"
Christina Quast32906bb2015-02-24 11:35:19 +01007
8/*------------------------------------------------------------------------------
Christina Quast32906bb2015-02-24 11:35:19 +01009 * Internal variables
10 *------------------------------------------------------------------------------*/
Christina Quastfb524b92015-02-27 13:39:45 +010011typedef struct {
Christina Quast95d66162015-04-09 22:38:47 +020012 void (* configure) ( void );
Christina Quastfb524b92015-02-27 13:39:45 +010013 void (* init) ( void );
Christina Quast95d66162015-04-09 22:38:47 +020014 void (* exit) ( void );
Christina Quastfb524b92015-02-27 13:39:45 +010015 void (* run) ( void );
16} conf_func;
17
18conf_func config_func_ptrs[] = {
Christina Quast95d66162015-04-09 22:38:47 +020019 {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 Quastfb524b92015-02-27 13:39:45 +010023};
24
25
26/*------------------------------------------------------------------------------
27 * Internal variables
28 *------------------------------------------------------------------------------*/
Christina Quast95d66162015-04-09 22:38:47 +020029volatile enum confNum simtrace_config = CFG_NUM_SNIFF;
Christina Quast32906bb2015-02-24 11:35:19 +010030
31/*------------------------------------------------------------------------------
Christina Quast95d66162015-04-09 22:38:47 +020032 * Main
Christina Quast32906bb2015-02-24 11:35:19 +010033 *------------------------------------------------------------------------------*/
Christina Quastde688672015-04-12 15:20:57 +020034#define MAX_USB_ITER BOARD_MCK/72 // This should be around a second
Christina Quast32906bb2015-02-24 11:35:19 +010035extern int main( void )
36{
Christina Quast1161b272015-02-25 14:15:57 +010037 uint8_t isUsbConnected = 0;
Christina Quast95d66162015-04-09 22:38:47 +020038 enum confNum last_simtrace_config = simtrace_config;
Christina Quast2379ac82015-04-16 11:09:37 +020039 unsigned int i = 0;
Christina Quast1161b272015-02-25 14:15:57 +010040
Christina Quastb5ebebe2015-03-05 15:43:01 +010041 LED_Configure(LED_NUM_RED);
Christina Quast32906bb2015-02-24 11:35:19 +010042 LED_Configure(LED_NUM_GREEN);
Christina Quast9dbf1c92015-05-06 08:46:32 +020043 LED_Set(LED_NUM_RED);
Christina Quast32906bb2015-02-24 11:35:19 +010044
45 /* Disable watchdog*/
46 WDT_Disable( WDT ) ;
47
48 PIO_InitializeInterrupts(0);
49
Christina Quast1161b272015-02-25 14:15:57 +010050 SIMtrace_USB_Initialize();
51
52 printf("%s", "USB init\n\r");
Christina Quastde688672015-04-12 15:20:57 +020053 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 Quast2379ac82015-04-16 11:09:37 +020061 for (i = 0; i < sizeof(config_func_ptrs)/sizeof(config_func_ptrs[0]); ++i)
Christina Quast95d66162015-04-09 22:38:47 +020062 {
63 config_func_ptrs[i].configure();
64 }
65
66 config_func_ptrs[simtrace_config-1].init();
67 last_simtrace_config = simtrace_config;
68
Christina Quast32906bb2015-02-24 11:35:19 +010069
70 TRACE_DEBUG("%s", "Start\n\r");
Christina Quastcafde002015-03-02 16:12:16 +010071
Christina Quast1161b272015-02-25 14:15:57 +010072 printf("%s", "Start\n\r");
Christina Quast32906bb2015-02-24 11:35:19 +010073 while(1) {
Christina Quast1161b272015-02-25 14:15:57 +010074
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 Quast9dbf1c92015-05-06 08:46:32 +020085 LED_Set(LED_NUM_GREEN);
86 LED_Clear(LED_NUM_RED);
Christina Quast1161b272015-02-25 14:15:57 +010087
88 isUsbConnected = 1;
89// TC_Start(TC0, 0);
Christina Quast95d66162015-04-09 22:38:47 +020090 }
Christina Quastcafde002015-03-02 16:12:16 +010091
92// for (int i=0; i <10000; i++);
93
Christina Quast32906bb2015-02-24 11:35:19 +010094/* FIXME: Or should we move the while loop into every case, and break out
95 in case the config changes? */
Christina Quast95d66162015-04-09 22:38:47 +020096 if (last_simtrace_config != simtrace_config) {
97 config_func_ptrs[last_simtrace_config-1].exit();
Christina Quastfb524b92015-02-27 13:39:45 +010098 config_func_ptrs[simtrace_config-1].init();
Christina Quast95d66162015-04-09 22:38:47 +020099 last_simtrace_config = simtrace_config;
Christina Quastfb524b92015-02-27 13:39:45 +0100100 } else {
101 config_func_ptrs[simtrace_config-1].run();
Christina Quast32906bb2015-02-24 11:35:19 +0100102 }
103 }
104}