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
menuitem.h@4:800a75ffea3c, 2015-05-01 (annotated)
- 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?
| User | Revision | Line number | New 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 |