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:
iillyyaa
Date:
Fri May 01 15:08:49 2015 +0000
Revision:
3:f308cd7a34ed
Parent:
0:907d2d5e77f7
Child:
4:800a75ffea3c
Next pass at menu population;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
glansberry 0:907d2d5e77f7 1 #ifndef __MENUITEM_H
glansberry 0:907d2d5e77f7 2 #define __MENUITEM_H
glansberry 0:907d2d5e77f7 3
glansberry 0:907d2d5e77f7 4 #include "Terminal.h"
glansberry 0:907d2d5e77f7 5
glansberry 0:907d2d5e77f7 6 extern Terminal term;
glansberry 0:907d2d5e77f7 7
glansberry 0:907d2d5e77f7 8 typedef enum {menu, heading, display, control} MenuType;
glansberry 0:907d2d5e77f7 9 typedef char * (*callback_function)(bool); // type for conciseness
glansberry 0:907d2d5e77f7 10
glansberry 0:907d2d5e77f7 11 #define MAX_NAME_LEN (80-10-10)
glansberry 0:907d2d5e77f7 12
iillyyaa 3:f308cd7a34ed 13 class MenuAction;
iillyyaa 3:f308cd7a34ed 14 class Page;
iillyyaa 3:f308cd7a34ed 15
iillyyaa 3:f308cd7a34ed 16 class MenuItem {
iillyyaa 3:f308cd7a34ed 17 public:
glansberry 0:907d2d5e77f7 18 MenuItem();
iillyyaa 3:f308cd7a34ed 19 MenuItem(const char * name_p, MenuAction *action_p, int level, MenuType type_p, int target_page = -1);
iillyyaa 3:f308cd7a34ed 20 MenuItem(Page &target_page_p); //construct a menu selection item this way
iillyyaa 3:f308cd7a34ed 21 const char *name; //reference to the name
glansberry 0:907d2d5e77f7 22 int level; //0 if primary 1 or greater if this is a sub-menu
glansberry 0:907d2d5e77f7 23 MenuType type; //are we displaying something or controlling something
iillyyaa 3:f308cd7a34ed 24
iillyyaa 3:f308cd7a34ed 25 MenuAction *action; //callback for getting/setting the data
iillyyaa 3:f308cd7a34ed 26
glansberry 0:907d2d5e77f7 27 int name_len;
iillyyaa 3:f308cd7a34ed 28
glansberry 0:907d2d5e77f7 29 int data_col; //column where the data is shown
glansberry 0:907d2d5e77f7 30 int target_page; //the page to go to if called
iillyyaa 3:f308cd7a34ed 31 };
iillyyaa 3:f308cd7a34ed 32
iillyyaa 3:f308cd7a34ed 33 class MenuAction {
iillyyaa 3:f308cd7a34ed 34 public:
iillyyaa 3:f308cd7a34ed 35 MenuAction(char const *name):
iillyyaa 3:f308cd7a34ed 36 m_name(name)
iillyyaa 3:f308cd7a34ed 37 {}
glansberry 0:907d2d5e77f7 38
iillyyaa 3:f308cd7a34ed 39 char const *getName() {
iillyyaa 3:f308cd7a34ed 40 return m_name;
iillyyaa 3:f308cd7a34ed 41 }
iillyyaa 3:f308cd7a34ed 42
iillyyaa 3:f308cd7a34ed 43 virtual void getString(char *buf, int bufLen) {
iillyyaa 3:f308cd7a34ed 44 if(buf && bufLen > 0) {
iillyyaa 3:f308cd7a34ed 45 buf[0] = '\0';
iillyyaa 3:f308cd7a34ed 46 }
iillyyaa 3:f308cd7a34ed 47 }
iillyyaa 3:f308cd7a34ed 48 virtual void doAction() {}
iillyyaa 3:f308cd7a34ed 49
iillyyaa 3:f308cd7a34ed 50 private:
iillyyaa 3:f308cd7a34ed 51 char const *m_name;
iillyyaa 3:f308cd7a34ed 52 };
iillyyaa 3:f308cd7a34ed 53
iillyyaa 3:f308cd7a34ed 54
iillyyaa 3:f308cd7a34ed 55 class MenuDigitalIn: public MenuAction {
iillyyaa 3:f308cd7a34ed 56 public:
iillyyaa 3:f308cd7a34ed 57 MenuDigitalIn(char const *name, DigitalIn const & myIO):
iillyyaa 3:f308cd7a34ed 58 MenuAction(name),
iillyyaa 3:f308cd7a34ed 59 m_io(myIO)
iillyyaa 3:f308cd7a34ed 60 {}
iillyyaa 3:f308cd7a34ed 61
iillyyaa 3:f308cd7a34ed 62 virtual void getString(char *buf, int bufLen) {
iillyyaa 3:f308cd7a34ed 63 snprintf(buf, bufLen, "%d", int(m_io));
iillyyaa 3:f308cd7a34ed 64 }
iillyyaa 3:f308cd7a34ed 65 private:
iillyyaa 3:f308cd7a34ed 66 DigitalIn m_io;
iillyyaa 3:f308cd7a34ed 67 };
iillyyaa 3:f308cd7a34ed 68
iillyyaa 3:f308cd7a34ed 69 class MenuDigitalOut: public MenuAction {
iillyyaa 3:f308cd7a34ed 70 public:
iillyyaa 3:f308cd7a34ed 71 MenuDigitalOut(char const *name, DigitalOut const & myIO):
iillyyaa 3:f308cd7a34ed 72 MenuAction(name),
iillyyaa 3:f308cd7a34ed 73 m_io(myIO)
iillyyaa 3:f308cd7a34ed 74 {}
iillyyaa 3:f308cd7a34ed 75
iillyyaa 3:f308cd7a34ed 76 virtual void getString(char *buf, int bufLen) {
iillyyaa 3:f308cd7a34ed 77 snprintf(buf, bufLen, "%d", int(m_io));
iillyyaa 3:f308cd7a34ed 78 }
iillyyaa 3:f308cd7a34ed 79 virtual void doAction() {
iillyyaa 3:f308cd7a34ed 80 m_io = !m_io;
iillyyaa 3:f308cd7a34ed 81 }
iillyyaa 3:f308cd7a34ed 82 private:
iillyyaa 3:f308cd7a34ed 83 DigitalOut m_io;
iillyyaa 3:f308cd7a34ed 84 };
iillyyaa 3:f308cd7a34ed 85
iillyyaa 3:f308cd7a34ed 86 class MenuTestAction: public MenuAction {
iillyyaa 3:f308cd7a34ed 87 public:
iillyyaa 3:f308cd7a34ed 88 MenuTestAction(char const *name):
iillyyaa 3:f308cd7a34ed 89 MenuAction(name),
iillyyaa 3:f308cd7a34ed 90 m_value(false)
iillyyaa 3:f308cd7a34ed 91 {}
iillyyaa 3:f308cd7a34ed 92
iillyyaa 3:f308cd7a34ed 93 virtual void getString(char *buf, int bufLen) {
iillyyaa 3:f308cd7a34ed 94 snprintf(buf, bufLen, "%d", int(m_value));
iillyyaa 3:f308cd7a34ed 95 }
iillyyaa 3:f308cd7a34ed 96 virtual void doAction() {
iillyyaa 3:f308cd7a34ed 97 m_value = !m_value;
iillyyaa 3:f308cd7a34ed 98 }
iillyyaa 3:f308cd7a34ed 99
iillyyaa 3:f308cd7a34ed 100 private:
iillyyaa 3:f308cd7a34ed 101 bool m_value;
glansberry 0:907d2d5e77f7 102 };
glansberry 0:907d2d5e77f7 103
glansberry 0:907d2d5e77f7 104
glansberry 0:907d2d5e77f7 105 #endif