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
test_main.cpp@6:e992366d0684, 2015-05-04 (annotated)
- Committer:
- glansberry
- Date:
- Mon May 04 14:43:35 2015 +0000
- Revision:
- 6:e992366d0684
- Parent:
- 0:907d2d5e77f7
Modified to make terminal embedded in TestConsole class; More changes for debugging
Who changed what in which revision?
User | Revision | Line number | New 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 |