Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Terminal
testconsole.cpp@6:e992366d0684, 2015-05-04 (annotated)
- Committer:
- glansberry
- Date:
- Mon May 04 14:43:35 2015 +0000
- Revision:
- 6:e992366d0684
- Parent:
- 3:f308cd7a34ed
- Child:
- 7:903c8e16ed25
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 | #include "testconsole.h" |
| glansberry | 0:907d2d5e77f7 | 2 | |
| glansberry | 6:e992366d0684 | 3 | TestConsole::TestConsole(const char * name_p, PinName tx, PinName rx, int baud_rate): |
| glansberry | 6:e992366d0684 | 4 | term(tx, rx), |
| glansberry | 6:e992366d0684 | 5 | name(name_p), |
| glansberry | 0:907d2d5e77f7 | 6 | num_pages(0), |
| glansberry | 0:907d2d5e77f7 | 7 | current_page(0) |
| glansberry | 0:907d2d5e77f7 | 8 | { |
| glansberry | 6:e992366d0684 | 9 | term.baud(baud_rate); |
| glansberry | 6:e992366d0684 | 10 | active_page = page[current_page]; |
| glansberry | 6:e992366d0684 | 11 | // term.printf("TestConsole::TestConsole('%')\r\n",name); |
| glansberry | 1:c6deb449c132 | 12 | term.HideCursor(); |
| glansberry | 6:e992366d0684 | 13 | for(int i = 0; i < MAX_PAGES; i++) page[i] = NULL; //init all pages to NULL |
| glansberry | 1:c6deb449c132 | 14 | |
| glansberry | 0:907d2d5e77f7 | 15 | } |
| glansberry | 0:907d2d5e77f7 | 16 | |
| glansberry | 6:e992366d0684 | 17 | //Page& TestConsole::add_page(Page const &page_p){ |
| glansberry | 6:e992366d0684 | 18 | Page* TestConsole::add_page(const char * name_p){ |
| glansberry | 6:e992366d0684 | 19 | if(num_pages >= MAX_PAGES) |
| glansberry | 6:e992366d0684 | 20 | { |
| glansberry | 6:e992366d0684 | 21 | term.printf("MAX_PAGES Exceeded adding'%s'\r\n", name_p); |
| glansberry | 6:e992366d0684 | 22 | return NULL; //return valid reference to home page on |
| glansberry | 6:e992366d0684 | 23 | |
| glansberry | 6:e992366d0684 | 24 | } |
| glansberry | 6:e992366d0684 | 25 | |
| glansberry | 6:e992366d0684 | 26 | page[num_pages] = new Page(name_p, &term); |
| glansberry | 6:e992366d0684 | 27 | Page* this_page = page[num_pages]; |
| glansberry | 6:e992366d0684 | 28 | this_page->page_num = num_pages; //let the page know what number it is to help with lookups |
| glansberry | 0:907d2d5e77f7 | 29 | |
| glansberry | 0:907d2d5e77f7 | 30 | if(num_pages == 0) { //if this is the first page, set it active |
| glansberry | 6:e992366d0684 | 31 | this_page->set_active(); |
| glansberry | 0:907d2d5e77f7 | 32 | } |
| glansberry | 6:e992366d0684 | 33 | //term.printf("Added page '%s'\r\n", this_page->name); |
| glansberry | 6:e992366d0684 | 34 | num_pages++; |
| glansberry | 6:e992366d0684 | 35 | return this_page; |
| glansberry | 0:907d2d5e77f7 | 36 | |
| glansberry | 0:907d2d5e77f7 | 37 | } |
| glansberry | 0:907d2d5e77f7 | 38 | |
| glansberry | 0:907d2d5e77f7 | 39 | int TestConsole::page_change(int new_page){ |
| glansberry | 6:e992366d0684 | 40 | if(NULL == page[current_page]) { |
| glansberry | 6:e992366d0684 | 41 | term.printf("invalid page passed to page_chage\r\n"); |
| glansberry | 6:e992366d0684 | 42 | return current_page; |
| glansberry | 6:e992366d0684 | 43 | } |
| glansberry | 0:907d2d5e77f7 | 44 | previous_page = current_page; //save a copy of the page so we can go back |
| glansberry | 0:907d2d5e77f7 | 45 | current_page = new_page; |
| glansberry | 6:e992366d0684 | 46 | active_page = page[current_page]; |
| glansberry | 6:e992366d0684 | 47 | |
| glansberry | 6:e992366d0684 | 48 | active_page->display(); |
| glansberry | 0:907d2d5e77f7 | 49 | |
| glansberry | 6:e992366d0684 | 50 | active_page->ack_active(); |
| glansberry | 0:907d2d5e77f7 | 51 | return current_page; |
| glansberry | 0:907d2d5e77f7 | 52 | } |
| glansberry | 0:907d2d5e77f7 | 53 | |
| glansberry | 0:907d2d5e77f7 | 54 | //here, using knowledge of the page, we process commands |
| glansberry | 0:907d2d5e77f7 | 55 | int TestConsole::process_cmd(char cmd){ |
| iillyyaa | 3:f308cd7a34ed | 56 | if('x' == cmd) { |
| iillyyaa | 3:f308cd7a34ed | 57 | page_change(previous_page); |
| iillyyaa | 3:f308cd7a34ed | 58 | return 0; |
| iillyyaa | 3:f308cd7a34ed | 59 | } |
| glansberry | 6:e992366d0684 | 60 | |
| iillyyaa | 3:f308cd7a34ed | 61 | for(int index=0; index < active_page->num_menuitems; index++) { |
| iillyyaa | 3:f308cd7a34ed | 62 | MenuItem *item = &active_page->item[index]; |
| iillyyaa | 3:f308cd7a34ed | 63 | if(active_page->command_letter[index] != cmd) continue; |
| glansberry | 0:907d2d5e77f7 | 64 | |
| iillyyaa | 3:f308cd7a34ed | 65 | if(item->type == menu) { |
| iillyyaa | 3:f308cd7a34ed | 66 | // for menuitems that goto other menus, just change the page |
| iillyyaa | 3:f308cd7a34ed | 67 | page_change(item->target_page); |
| iillyyaa | 3:f308cd7a34ed | 68 | } else if(item->action) { |
| iillyyaa | 3:f308cd7a34ed | 69 | // otherwise call the callaback |
| iillyyaa | 3:f308cd7a34ed | 70 | item->action->doAction(); |
| glansberry | 0:907d2d5e77f7 | 71 | } |
| iillyyaa | 3:f308cd7a34ed | 72 | return 0; |
| iillyyaa | 3:f308cd7a34ed | 73 | } |
| iillyyaa | 3:f308cd7a34ed | 74 | |
| glansberry | 0:907d2d5e77f7 | 75 | return 1; |
| iillyyaa | 3:f308cd7a34ed | 76 | } |
| glansberry | 0:907d2d5e77f7 | 77 | |
| glansberry | 0:907d2d5e77f7 | 78 | int TestConsole::tick(void){ |
| glansberry | 0:907d2d5e77f7 | 79 | if (term.readable()){ //if there is a character |
| glansberry | 0:907d2d5e77f7 | 80 | if(process_cmd(term.getc())){ |
| glansberry | 0:907d2d5e77f7 | 81 | term.locate(TERM_LOC_FEEDBACK); |
| glansberry | 0:907d2d5e77f7 | 82 | term.printf("invalid command"); |
| glansberry | 0:907d2d5e77f7 | 83 | } |
| glansberry | 0:907d2d5e77f7 | 84 | } |
| glansberry | 0:907d2d5e77f7 | 85 | |
| glansberry | 0:907d2d5e77f7 | 86 | //go through the list of pages, and see if any want to become active |
| glansberry | 6:e992366d0684 | 87 | for(int index=0; index < num_pages; index++){ |
| glansberry | 6:e992366d0684 | 88 | if(active_page->check_active()){ |
| glansberry | 6:e992366d0684 | 89 | page_change(index); |
| glansberry | 6:e992366d0684 | 90 | term.locate((TERMINAL_WIDTH - strlen(name))/2, 0); |
| glansberry | 6:e992366d0684 | 91 | term.printf("%s", name); |
| glansberry | 6:e992366d0684 | 92 | } |
| glansberry | 0:907d2d5e77f7 | 93 | } |
| glansberry | 0:907d2d5e77f7 | 94 | |
| glansberry | 0:907d2d5e77f7 | 95 | |
| glansberry | 6:e992366d0684 | 96 | active_page->update(); |
| glansberry | 0:907d2d5e77f7 | 97 | return 0; |
| glansberry | 0:907d2d5e77f7 | 98 | } |