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

Committer:
glansberry
Date:
Fri May 01 03:56:34 2015 +0000
Revision:
0:907d2d5e77f7
Child:
6:e992366d0684
Planned Menu is constructed,  needs callbacks

Who changed what in which revision?

UserRevisionLine numberNew contents of line
glansberry 0:907d2d5e77f7 1 #ifdef TEST //define test to make this an active main
glansberry 0:907d2d5e77f7 2 #include <mbed.h>
glansberry 0:907d2d5e77f7 3 #include "Terminal.h"
glansberry 0:907d2d5e77f7 4 #include "SerialTerm.h"
glansberry 0:907d2d5e77f7 5 #include "ASCIIGraph.h"
glansberry 0:907d2d5e77f7 6 #include "testconsole.h"
glansberry 0:907d2d5e77f7 7 #include "page.h"
glansberry 0:907d2d5e77f7 8 #include "menuitem.h"
glansberry 0:907d2d5e77f7 9
glansberry 0:907d2d5e77f7 10 Terminal term(SERIAL_TX, SERIAL_RX);
glansberry 0:907d2d5e77f7 11 Ticker heartbeat;
glansberry 0:907d2d5e77f7 12
glansberry 0:907d2d5e77f7 13
glansberry 0:907d2d5e77f7 14 volatile bool tick = false; // this is the primary flag that indicates that it is time to run the control loop
glansberry 0:907d2d5e77f7 15 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)
glansberry 0:907d2d5e77f7 16
glansberry 0:907d2d5e77f7 17 /***********************************************************************************************
glansberry 0:907d2d5e77f7 18 * \brief Interrupt for the main loop timer
glansberry 0:907d2d5e77f7 19 *
glansberry 0:907d2d5e77f7 20 **********************************************************************************************/
glansberry 0:907d2d5e77f7 21 void tick_int() {
glansberry 0:907d2d5e77f7 22 if (!tick) tick = true; //detect if interrupt has not yet finished
glansberry 0:907d2d5e77f7 23 else ERROR_Overrun++ ;
glansberry 0:907d2d5e77f7 24 }
glansberry 0:907d2d5e77f7 25
glansberry 0:907d2d5e77f7 26 //prototype callback for the menu system, if the command key has been pressed, then cmd is true
glansberry 0:907d2d5e77f7 27 //otherwise it should simple return a string that gets printed
glansberry 0:907d2d5e77f7 28 char * test_callback(bool cmd){
glansberry 0:907d2d5e77f7 29
glansberry 0:907d2d5e77f7 30 static int i;
glansberry 0:907d2d5e77f7 31 static bool count = true;
glansberry 0:907d2d5e77f7 32 static char buffer[20];
glansberry 0:907d2d5e77f7 33
glansberry 0:907d2d5e77f7 34 if(cmd) {
glansberry 0:907d2d5e77f7 35 term.locate(TERM_LOC_DEBUG);
glansberry 0:907d2d5e77f7 36 term.printf("test_callback");
glansberry 0:907d2d5e77f7 37 }
glansberry 0:907d2d5e77f7 38 if(cmd) count = !count;
glansberry 0:907d2d5e77f7 39
glansberry 0:907d2d5e77f7 40 if(count) i++;
glansberry 0:907d2d5e77f7 41
glansberry 0:907d2d5e77f7 42 sprintf(buffer, "%d", i);
glansberry 0:907d2d5e77f7 43 return buffer;
glansberry 0:907d2d5e77f7 44 }
glansberry 0:907d2d5e77f7 45
glansberry 0:907d2d5e77f7 46 char * null_callback(bool cmd){
glansberry 0:907d2d5e77f7 47
glansberry 0:907d2d5e77f7 48 return NULL;
glansberry 0:907d2d5e77f7 49 }
glansberry 0:907d2d5e77f7 50
glansberry 0:907d2d5e77f7 51
glansberry 0:907d2d5e77f7 52 int main(void){
glansberry 0:907d2d5e77f7 53
glansberry 0:907d2d5e77f7 54 term.baud(115200);
glansberry 0:907d2d5e77f7 55
glansberry 0:907d2d5e77f7 56 //create the Pages for the console
glansberry 0:907d2d5e77f7 57 // term.printf("\nsizeof page %d, menuitem %d\n",sizeof(Page), sizeof(MenuItem));
glansberry 0:907d2d5e77f7 58 TestConsole console("Test Program");
glansberry 0:907d2d5e77f7 59
glansberry 0:907d2d5e77f7 60 Page &pageHome = console.add_page(Page("Home"));
glansberry 0:907d2d5e77f7 61 Page &pagePower = console.add_page(Page("Page1"));
glansberry 0:907d2d5e77f7 62 Page &pageBattery = console.add_page(Page("Page2"));
glansberry 0:907d2d5e77f7 63 Page &pageAccel = console.add_page(Page("Page3"));
glansberry 0:907d2d5e77f7 64
glansberry 0:907d2d5e77f7 65 // pageHome.add_item(MenuItem(pagePower.Name, &pagePower.set_active(), 0, menu));
glansberry 0:907d2d5e77f7 66 #define CREATE_PAGE_SELECT_MENU_ITEM(x) add_item(MenuItem(x.Name, x.page_num));
glansberry 0:907d2d5e77f7 67 pageHome.CREATE_PAGE_SELECT_MENU_ITEM(pagePower);
glansberry 0:907d2d5e77f7 68 pageHome.CREATE_PAGE_SELECT_MENU_ITEM(pageBattery);
glansberry 0:907d2d5e77f7 69 pageHome.CREATE_PAGE_SELECT_MENU_ITEM(pageAccel);
glansberry 0:907d2d5e77f7 70
glansberry 0:907d2d5e77f7 71
glansberry 0:907d2d5e77f7 72 pagePower.add_item(MenuItem("Display", NULL, 0, heading));
glansberry 0:907d2d5e77f7 73 pagePower.add_item(MenuItem("Eject Button Status", test_callback, 0, display));
glansberry 0:907d2d5e77f7 74
glansberry 0:907d2d5e77f7 75 pageBattery.add_item(MenuItem("Display", NULL, 0, heading));
glansberry 0:907d2d5e77f7 76 pageBattery.add_item(MenuItem("Battery Voltage", test_callback, 0, display));
glansberry 0:907d2d5e77f7 77
glansberry 0:907d2d5e77f7 78 pageAccel.add_item(MenuItem("Display", NULL, 0, heading));
glansberry 0:907d2d5e77f7 79 pageAccel.add_item(MenuItem("Battery Voltage", test_callback, 0, display));
glansberry 0:907d2d5e77f7 80
glansberry 0:907d2d5e77f7 81
glansberry 0:907d2d5e77f7 82 heartbeat.attach(&tick_int, 0.1); // the address of the function to be attached (tick_int) and the interval 10000uS
glansberry 0:907d2d5e77f7 83
glansberry 0:907d2d5e77f7 84
glansberry 0:907d2d5e77f7 85 wait(2); //give the man a chance to read the messages, if any
glansberry 0:907d2d5e77f7 86
glansberry 0:907d2d5e77f7 87
glansberry 0:907d2d5e77f7 88 while(1) {
glansberry 0:907d2d5e77f7 89 while(tick){ //put real-time code in here
glansberry 0:907d2d5e77f7 90
glansberry 0:907d2d5e77f7 91 console.tick();
glansberry 0:907d2d5e77f7 92
glansberry 0:907d2d5e77f7 93 tick=false; //keep this as the last item in the while loop
glansberry 0:907d2d5e77f7 94
glansberry 0:907d2d5e77f7 95 }
glansberry 0:907d2d5e77f7 96
glansberry 0:907d2d5e77f7 97 }
glansberry 0:907d2d5e77f7 98
glansberry 0:907d2d5e77f7 99 }
glansberry 0:907d2d5e77f7 100
glansberry 0:907d2d5e77f7 101 #endif