Library which creates a serial test console, it supports pages and menu items. The items are added and the pages are added as necessary when the user sets it up. This is a great too for creating an easy to maintain menu system, whether for a test sytem, or anything else.

Dependencies:   Terminal

Revision:
0:907d2d5e77f7
Child:
6:e992366d0684
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test_main.cpp	Fri May 01 03:56:34 2015 +0000
@@ -0,0 +1,101 @@
+#ifdef TEST   //define test to make this an active main
+#include <mbed.h>
+#include "Terminal.h"
+#include "SerialTerm.h"
+#include "ASCIIGraph.h"
+#include "testconsole.h"
+#include "page.h"
+#include "menuitem.h"
+
+Terminal term(SERIAL_TX, SERIAL_RX);
+Ticker heartbeat;
+
+    
+volatile bool tick = false;  // this is the primary flag that indicates that it is time to run the control loop
+static int ERROR_Overrun = 0;  //this counts the number of times that the code was still running when the interrupt tried to trigger it again (ie code is running too slow)
+
+/***********************************************************************************************
+ * \brief    Interrupt for the main loop timer
+ *
+ **********************************************************************************************/   
+void tick_int() {
+    if (!tick) tick = true;  //detect if interrupt has not yet finished
+    else ERROR_Overrun++ ;    
+}
+
+//prototype callback for the menu system, if the command key has been pressed, then cmd is true
+//otherwise it should simple return a string that gets printed
+char * test_callback(bool cmd){
+    
+    static int i;
+    static bool count = true;
+    static char buffer[20];
+    
+    if(cmd) {
+        term.locate(TERM_LOC_DEBUG);
+         term.printf("test_callback");
+         }
+    if(cmd) count = !count;
+    
+    if(count) i++;
+    
+    sprintf(buffer, "%d", i);
+    return buffer;   
+    }   
+
+char * null_callback(bool cmd){
+    
+    return NULL;   
+    }   
+
+
+int main(void){
+
+    term.baud(115200);
+
+//create the Pages for the console
+//    term.printf("\nsizeof page %d, menuitem %d\n",sizeof(Page), sizeof(MenuItem));
+    TestConsole console("Test Program");
+
+    Page &pageHome = console.add_page(Page("Home"));
+    Page &pagePower = console.add_page(Page("Page1"));
+    Page &pageBattery = console.add_page(Page("Page2"));
+    Page &pageAccel = console.add_page(Page("Page3"));
+    
+ //       pageHome.add_item(MenuItem(pagePower.Name, &pagePower.set_active(),  0, menu)); 
+ #define CREATE_PAGE_SELECT_MENU_ITEM(x) add_item(MenuItem(x.Name, x.page_num)); 
+        pageHome.CREATE_PAGE_SELECT_MENU_ITEM(pagePower); 
+        pageHome.CREATE_PAGE_SELECT_MENU_ITEM(pageBattery);
+        pageHome.CREATE_PAGE_SELECT_MENU_ITEM(pageAccel);
+ 
+        
+                pagePower.add_item(MenuItem("Display", NULL, 0, heading));
+                pagePower.add_item(MenuItem("Eject Button Status", test_callback, 0, display));
+
+                pageBattery.add_item(MenuItem("Display", NULL, 0, heading));
+                pageBattery.add_item(MenuItem("Battery Voltage", test_callback, 0, display));
+
+                pageAccel.add_item(MenuItem("Display", NULL, 0, heading));
+                pageAccel.add_item(MenuItem("Battery Voltage", test_callback, 0, display));
+
+
+    heartbeat.attach(&tick_int, 0.1); // the address of the function to be attached (tick_int) and the interval 10000uS
+    
+    
+    wait(2);  //give the man a chance to read the messages, if any
+    
+            
+    while(1) {
+        while(tick){    //put real-time code in here
+                    
+               console.tick();
+                
+                tick=false;   //keep this as the last item in the while loop
+                
+                }
+                
+            }               
+    
+}
+
+#endif
\ No newline at end of file