Function pointer struct in main for run,init
diff --git a/sam3s_example/simtrace/phone.c b/sam3s_example/simtrace/phone.c
index 0d077fb..d08be1b 100644
--- a/sam3s_example/simtrace/phone.c
+++ b/sam3s_example/simtrace/phone.c
@@ -214,6 +214,13 @@
 
     USART_SetTransmitterEnabled(USART_PHONE, 1);
     USART_SetReceiverEnabled(USART_PHONE, 1);
+
+    /*  Configure ISO7816 driver */
+    // FIXME:    PIO_Configure(pPwr, PIO_LISTSIZE( pPwr ));
+
+
+
+
 // FIXME: Or do I need to call VBUS_CONFIGURE() here instead, which will call USBD_Connect() later?
 //    USBD_Connect();
 // FIXME: USB clock? USB PMC?
@@ -232,3 +239,12 @@
 */
 
 }
+
+void Phone_run( void )
+{
+    // FIXME: Function Phone_run not implemented yet
+
+    /* Send and receive chars */
+    // ISO7816_GetChar(&rcv_char);
+    // ISO7816_SendChar(char_to_send);
+}
diff --git a/sam3s_example/simtrace/simtrace_main.c b/sam3s_example/simtrace/simtrace_main.c
index dbc74e5..a4f1763 100644
--- a/sam3s_example/simtrace/simtrace_main.c
+++ b/sam3s_example/simtrace/simtrace_main.c
@@ -8,6 +8,21 @@
 /*------------------------------------------------------------------------------
  *         Internal variables
  *------------------------------------------------------------------------------*/
+typedef struct {
+    void (* init) ( void );
+    void (* run) ( void );
+} conf_func;
+
+conf_func config_func_ptrs[] = {
+    {Sniffer_Init, Sniffer_run},  /*  CFG_NUM_SNIFF */
+    {Phone_Master_Init, Phone_run},  /* CFG_NUM_PHONE */
+    {MITM_init, MITM_run},  /* CFG_NUM_MITM */
+};
+
+
+/*------------------------------------------------------------------------------
+ *         Internal variables
+ *------------------------------------------------------------------------------*/
 uint8_t simtrace_config = 0;
 uint8_t conf_changed = 1;
 
@@ -55,54 +70,13 @@
 //            TC_Start(TC0, 0);
         }    
     
-
 /*  FIXME: Or should we move the while loop into every case, and break out
     in case the config changes? */
-        switch(simtrace_config) {
-            case CFG_NUM_SNIFF:
-                if (conf_changed) {
-                    Sniffer_Init();
-                    printf("****+ Changed to CFG_NUM_SNIFF\n\r");
-                    conf_changed = 0;
-                } else {
-                    if (rcvdChar != 0) {
-                        TRACE_DEBUG("Rcvd char _%x_ \n\r", rcvdChar);
-                        rcvdChar = 0;
-                    }
-                }
-                break;
-/*            case CONF_CCID_READER:
-                if (conf_changed) {
-                    // Init
-                    conf_changed = 0;
-                } else {
-                    // Receive char
-                }
-                break;  */
-            case CFG_NUM_PHONE:
-                if (conf_changed) {
-                    Phone_Master_Init();
-                    printf("****+ Changed to CFG_NUM_PHONE\n\r");
-                    conf_changed = 0;
-                    /*  Configure ISO7816 driver */
-                    // FIXME:    PIO_Configure(pPwr, PIO_LISTSIZE( pPwr ));
-                } else {
-                    /* Send and receive chars */
-                    // ISO7816_GetChar(&rcv_char);
-                    // ISO7816_SendChar(char_to_send);
-                }
-                break;
-            case CFG_NUM_MITM:
-                if (conf_changed) {
-                    printf("****+ Changed to CFG_NUM_MITM\n\r");
-                    // Init
-                    conf_changed = 0;
-                } else {
-                    // Receive char
-                }
-                break;
-            default:
-                break;
+        if (conf_changed) {
+            config_func_ptrs[simtrace_config-1].init();
+            conf_changed = 0;
+        } else {
+            config_func_ptrs[simtrace_config-1].run();
         }
     }
 }
diff --git a/sam3s_example/simtrace/sniffer.c b/sam3s_example/simtrace/sniffer.c
index c83b95e..4654526 100644
--- a/sam3s_example/simtrace/sniffer.c
+++ b/sam3s_example/simtrace/sniffer.c
@@ -77,3 +77,11 @@
 
     USART_SetReceiverEnabled(USART_PHONE, 1);
 }
+
+void Sniffer_run( void )
+{
+    if (rcvdChar != 0) {
+        TRACE_DEBUG("Rcvd char _%x_ \n\r", rcvdChar);
+        rcvdChar = 0;
+    }
+}