fast-feedback virtual target task code on STM Nucleo

Dependencies:   mbed

Revision:
6:13d180af7501
Parent:
5:849446d19406
Child:
8:973dcd190672
--- a/config.cpp	Thu May 24 14:47:48 2018 +0000
+++ b/config.cpp	Thu May 24 15:34:58 2018 +0000
@@ -25,7 +25,7 @@
         }
     };
     
-    HelpResponder help_;
+    HelpResponder* help_ = 0;
     
     struct CallbackHandler
     {
@@ -42,6 +42,7 @@
             command(command), responder(resp), prev(0), next(0) { }
         
         static void append(CallbackHandler** list, CallbackHandler* item) {
+                       
             if ((*list) == 0) {
                 // no content
                 (*list) = item;
@@ -50,16 +51,19 @@
                 
             } else {
                 // search the end of the list
-                while((*list)->next != 0) {
-                    *list = (*list)->next;
+                CallbackHandler* current = *list;
+                while(current->next != 0) {
+                    current = current->next;
                 }
                 
-                (*list)->next = item;
-                item->prev = (*list);
+                current->next = item;
+                item->prev = current;
+                item->next = 0;
             }
         }
         
         static void drop(CallbackHandler** head, CallbackHandler* item) {
+            
             if (item == 0) {
                 return;
             }
@@ -98,19 +102,31 @@
         }
         
         static CallbackHandler* helpCommand(const char& command) {
-            return new CallbackHandler(command, &help_);
+            return new CallbackHandler(command, help_);
         }
     };
     
-    CallbackHandler* handlers_ = CallbackHandler::helpCommand(CMD_CHAR_HELP);
+    
+    CallbackHandler* handlers_ = 0;
+    
+    void initialize_() {
+        help_ = new HelpResponder();
+        CallbackHandler::append(&handlers_, CMD_CHAR_HELP, help_);
+    }
     
     void addCommand(const char& command, CommandResponder* resp)
     {
+        if (handlers_ == 0) {
+            initialize_();
+        }
         CallbackHandler::append(&handlers_, command, resp);
     }
     
     void removeCommand(const char& command)
     {
+        if (handlers_ == 0) {
+            initialize_();
+        }
         CallbackHandler::drop(&handlers_, command);
     }
     
@@ -124,10 +140,12 @@
         
         CallbackHandler* current = handlers_;
         while(current != 0) {
+            
             if ( current->responder->parse(in) ) {
                 // the handler accepted the input character
                 break;
             }
+            current = current->next;
         }
         
         if (current != 0) {