Kuvée / TestConsoleLib

Dependencies:   Terminal

Committer:
glansberry
Date:
Fri May 01 16:12:44 2015 +0000
Revision:
4:800a75ffea3c
Parent:
3:f308cd7a34ed
Child:
5:4a240f717b9d
Builds and runs toggling IO on Nucleo Board

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
glansberry 4:800a75ffea3c 86 class MenuAnalogIn: public MenuAction {
glansberry 4:800a75ffea3c 87 public:
glansberry 4:800a75ffea3c 88 MenuAnalogIn(char const *name, AnalogIn const & myIO):
glansberry 4:800a75ffea3c 89 MenuAction(name),
glansberry 4:800a75ffea3c 90 m_io(myIO)
glansberry 4:800a75ffea3c 91 {}
glansberry 4:800a75ffea3c 92
glansberry 4:800a75ffea3c 93 virtual void getString(char *buf, int bufLen) {
glansberry 4:800a75ffea3c 94 snprintf(buf, bufLen, "%d", int(m_io));
glansberry 4:800a75ffea3c 95 }
glansberry 4:800a75ffea3c 96
glansberry 4:800a75ffea3c 97 private:
glansberry 4:800a75ffea3c 98 AnalogIn m_io;
glansberry 4:800a75ffea3c 99 };
glansberry 4:800a75ffea3c 100
iillyyaa 3:f308cd7a34ed 101 class MenuTestAction: public MenuAction {
iillyyaa 3:f308cd7a34ed 102 public:
iillyyaa 3:f308cd7a34ed 103 MenuTestAction(char const *name):
iillyyaa 3:f308cd7a34ed 104 MenuAction(name),
iillyyaa 3:f308cd7a34ed 105 m_value(false)
iillyyaa 3:f308cd7a34ed 106 {}
iillyyaa 3:f308cd7a34ed 107
iillyyaa 3:f308cd7a34ed 108 virtual void getString(char *buf, int bufLen) {
iillyyaa 3:f308cd7a34ed 109 snprintf(buf, bufLen, "%d", int(m_value));
iillyyaa 3:f308cd7a34ed 110 }
iillyyaa 3:f308cd7a34ed 111 virtual void doAction() {
iillyyaa 3:f308cd7a34ed 112 m_value = !m_value;
iillyyaa 3:f308cd7a34ed 113 }
iillyyaa 3:f308cd7a34ed 114
iillyyaa 3:f308cd7a34ed 115 private:
iillyyaa 3:f308cd7a34ed 116 bool m_value;
glansberry 0:907d2d5e77f7 117 };
glansberry 0:907d2d5e77f7 118
glansberry 0:907d2d5e77f7 119
glansberry 0:907d2d5e77f7 120 #endif