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 Jul 24 22:18:19 2015 +0000
Revision:
9:b1fdd7ea6f72
Parent:
6:e992366d0684
Fixed bug is choosing the first page.

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 "testconsole.h"
glansberry 0:907d2d5e77f7 5 #include "page.h"
glansberry 0:907d2d5e77f7 6 #include "menuitem.h"
glansberry 0:907d2d5e77f7 7
glansberry 6:e992366d0684 8
glansberry 6:e992366d0684 9
glansberry 6:e992366d0684 10 Terminal term(DEBUG_TX, DEBUG_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
glansberry 0:907d2d5e77f7 27 int main(void){
glansberry 0:907d2d5e77f7 28
glansberry 0:907d2d5e77f7 29 term.baud(115200);
glansberry 0:907d2d5e77f7 30
glansberry 0:907d2d5e77f7 31 //create the Pages for the console
glansberry 0:907d2d5e77f7 32 // term.printf("\nsizeof page %d, menuitem %d\n",sizeof(Page), sizeof(MenuItem));
glansberry 6:e992366d0684 33 TestConsole console("KV2 Test Program");
glansberry 0:907d2d5e77f7 34
glansberry 0:907d2d5e77f7 35 Page &pageHome = console.add_page(Page("Home"));
glansberry 6:e992366d0684 36 Page &page1 = console.add_page(Page("Page1"));
glansberry 6:e992366d0684 37 Page &page2 = console.add_page(Page("Page2"));
glansberry 6:e992366d0684 38
glansberry 6:e992366d0684 39 // pageHome.add(pagePower.Name, &pagePower.set_active(), 0, menu));
glansberry 6:e992366d0684 40 pageHome
glansberry 6:e992366d0684 41 .add(page1)
glansberry 6:e992366d0684 42 .add(page2)
glansberry 6:e992366d0684 43
glansberry 6:e992366d0684 44 //These macros are actually in the menuitem.h file but commented here below for reference
glansberry 6:e992366d0684 45 //#define MAKE_PORT(x, io) (new Menu##io(#x, io(x))) //use this macro to create a port (it saves name as well as creatign the IO
glansberry 6:e992366d0684 46 //#define REUSE_PORT(x, io, port) (new Menu##io(#x, port)) //use this macro if you created the port externally
glansberry 6:e992366d0684 47
glansberry 0:907d2d5e77f7 48
glansberry 6:e992366d0684 49 page1
glansberry 6:e992366d0684 50 .add("DISPLAY")
glansberry 6:e992366d0684 51 .add("Eject Button Status", MAKE_PORT(PA_1, DigitalIn))
glansberry 6:e992366d0684 52 .add("Push button status", MAKE_PORT(PUSH_BUT_IN, DigitalIn))
glansberry 6:e992366d0684 53 .add("Battery voltage", MAKE_PORT(A1, AnalogIn))
glansberry 6:e992366d0684 54 .add("Dock sense", MAKE_PORT(PA_2, DigitalIn))
glansberry 6:e992366d0684 55 .add("CONTROL")
glansberry 6:e992366d0684 56 .add("MCU regulator disable", MAKE_PORT(PA_3, DigitalOut))
glansberry 6:e992366d0684 57 .add("Battery Read Enable", MAKE_PORT(PA_4, DigitalOut))
glansberry 6:e992366d0684 58 .add("Dock Read Enable", MAKE_PORT(PA_5, DigitalOut));
glansberry 0:907d2d5e77f7 59
glansberry 6:e992366d0684 60
glansberry 6:e992366d0684 61 page2
glansberry 6:e992366d0684 62 .add("DISPLAY")
glansberry 6:e992366d0684 63 .add("Battery voltage", MAKE_PORT(A0, AnalogIn))
glansberry 6:e992366d0684 64 .add("Accumulated Charge", new MenuNotImplementedAction("N/A"))
glansberry 6:e992366d0684 65 .add("CHRG line", MAKE_PORT(PA_0, DigitalIn))
glansberry 6:e992366d0684 66 .add("High/Low Charge thresholds", new MenuNotImplementedAction("N/A"))
glansberry 6:e992366d0684 67 .add("Status Register", new MenuNotImplementedAction("N/A"))
glansberry 6:e992366d0684 68 .add("Control Register", new MenuNotImplementedAction("N/A"));
glansberry 0:907d2d5e77f7 69
glansberry 0:907d2d5e77f7 70
glansberry 0:907d2d5e77f7 71 heartbeat.attach(&tick_int, 0.1); // the address of the function to be attached (tick_int) and the interval 10000uS
glansberry 0:907d2d5e77f7 72
glansberry 0:907d2d5e77f7 73
glansberry 6:e992366d0684 74 wait(2);
glansberry 0:907d2d5e77f7 75
glansberry 0:907d2d5e77f7 76
glansberry 0:907d2d5e77f7 77 while(1) {
glansberry 0:907d2d5e77f7 78 while(tick){ //put real-time code in here
glansberry 0:907d2d5e77f7 79
glansberry 0:907d2d5e77f7 80 console.tick();
glansberry 0:907d2d5e77f7 81
glansberry 0:907d2d5e77f7 82 tick=false; //keep this as the last item in the while loop
glansberry 0:907d2d5e77f7 83
glansberry 0:907d2d5e77f7 84 }
glansberry 0:907d2d5e77f7 85
glansberry 0:907d2d5e77f7 86 }
glansberry 0:907d2d5e77f7 87
glansberry 0:907d2d5e77f7 88 }
glansberry 0:907d2d5e77f7 89
glansberry 0:907d2d5e77f7 90 #endif