blob: c7283df05f018d05d4af70772a83a1130e2f3c7f [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 *------------------------------------------------------------------------------*/
34
35extern 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 Quast1161b272015-02-25 14:15:57 +010039
Christina Quastb5ebebe2015-03-05 15:43:01 +010040 LED_Configure(LED_NUM_RED);
Christina Quast32906bb2015-02-24 11:35:19 +010041 LED_Configure(LED_NUM_GREEN);
42 LED_Set(LED_NUM_GREEN);
43
44 /* Disable watchdog*/
45 WDT_Disable( WDT ) ;
46
47 PIO_InitializeInterrupts(0);
48
Christina Quast1161b272015-02-25 14:15:57 +010049 SIMtrace_USB_Initialize();
50
51 printf("%s", "USB init\n\r");
52
Christina Quast95d66162015-04-09 22:38:47 +020053 for (unsigned int i = 0; i < sizeof(config_func_ptrs)/sizeof(config_func_ptrs[0]); ++i)
54 {
55 config_func_ptrs[i].configure();
56 }
57
58 config_func_ptrs[simtrace_config-1].init();
59 last_simtrace_config = simtrace_config;
60
Christina Quastcafde002015-03-02 16:12:16 +010061// FIXME: why don't we get any interrupts with this line?:
Christina Quastc5a78d72015-03-10 15:35:33 +010062 while(USBD_GetState() < USBD_STATE_CONFIGURED);
Christina Quast32906bb2015-02-24 11:35:19 +010063
64 TRACE_DEBUG("%s", "Start\n\r");
Christina Quastcafde002015-03-02 16:12:16 +010065
Christina Quast1161b272015-02-25 14:15:57 +010066 printf("%s", "Start\n\r");
Christina Quast32906bb2015-02-24 11:35:19 +010067 while(1) {
Christina Quast1161b272015-02-25 14:15:57 +010068
69 /* Device is not configured */
70 if (USBD_GetState() < USBD_STATE_CONFIGURED) {
71
72 if (isUsbConnected) {
73 isUsbConnected = 0;
74// TC_Stop(TC0, 0);
75 }
76 }
77 else if (isUsbConnected == 0) {
78 printf("USB is now configured\n\r");
79
80 isUsbConnected = 1;
81// TC_Start(TC0, 0);
Christina Quast95d66162015-04-09 22:38:47 +020082 }
Christina Quastcafde002015-03-02 16:12:16 +010083
84// for (int i=0; i <10000; i++);
85
Christina Quast32906bb2015-02-24 11:35:19 +010086/* FIXME: Or should we move the while loop into every case, and break out
87 in case the config changes? */
Christina Quast95d66162015-04-09 22:38:47 +020088 if (last_simtrace_config != simtrace_config) {
89 config_func_ptrs[last_simtrace_config-1].exit();
Christina Quastfb524b92015-02-27 13:39:45 +010090 config_func_ptrs[simtrace_config-1].init();
Christina Quast95d66162015-04-09 22:38:47 +020091 last_simtrace_config = simtrace_config;
Christina Quastfb524b92015-02-27 13:39:45 +010092 } else {
93 config_func_ptrs[simtrace_config-1].run();
Christina Quast32906bb2015-02-24 11:35:19 +010094 }
95 }
96}