Kuvée / TestConsoleLib

Dependencies:   Terminal

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?

UserRevisionLine numberNew 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 }