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.
A Menu is light and easy to use. It's composed of a:
- an output interface to show which program is selected,
- a way to change the selection,
- a way to validate the selection and launch the linked program.
If you want a example on how to use it, look at the MenuExample program (http://mbed.org/users/rominos2/code/MenuExample/)
Revision 0:0f92518679f3, committed 2014-09-04
- Comitter:
- rominos2
- Date:
- Thu Sep 04 12:25:13 2014 +0000
- Commit message:
- Initial Release.
Changed in this revision
| Menu.cpp | Show annotated file Show diff for this revision Revisions of this file |
| Menu.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 0f92518679f3 Menu.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Menu.cpp Thu Sep 04 12:25:13 2014 +0000
@@ -0,0 +1,78 @@
+/*
+ Copyright (c) 2014 Romain Berrada
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include "mbed.h"
+#include "Menu.h"
+
+Menu::Program::Program(void* output_argument, int(*program)()) : _output_interface_argument(output_argument), _program(program), _next(NULL) {
+}
+
+Menu::Menu() : _first(NULL) {
+}
+
+void Menu::addProgram(void* output_argument, int(*program)()) {
+ Program* prog = new Program(output_argument, program);
+ if (_first==NULL) { // if first program added
+ _first = prog;
+ return;
+ } else {
+ Program* temp = _first;
+ while (temp->_next!=NULL) temp=temp->_next;
+ temp->_next = prog;
+ }
+}
+
+void Menu::clean() {
+ Program* prg = _first;
+ Program* next;
+ while (prg!=NULL) {
+ next = prg->_next;
+ delete prg;
+ prg = next;
+ }
+}
+
+int Menu::launch() {
+ Program* choice = _first;
+ bool done = false;
+
+ if (choice==NULL) return -1; // if no program
+
+ startMenu();
+ displaySelectedProgram(choice->_output_interface_argument);
+
+ while(!done) {
+ if (isSelectionChanging()) {
+ // change the current choice
+ choice = choice->_next;
+ if (choice==NULL) choice = _first;
+ displaySelectedProgram(choice->_output_interface_argument);
+ }
+
+ if (isValidating()) {
+ // validate the choice
+ done = true;
+ }
+
+ wait(0.1);
+ }
+
+ displaySelectedProgram(NULL);
+ return choice->_program(); // call the program function and return the result
+}
\ No newline at end of file
diff -r 000000000000 -r 0f92518679f3 Menu.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Menu.h Thu Sep 04 12:25:13 2014 +0000
@@ -0,0 +1,93 @@
+/*
+ Copyright (c) 2014 Romain Berrada
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef INCLUDE_MENU_H
+#define INCLUDE_MENU_H
+
+/** A simple Menu Library \n
+ A Menu is light and easy to use. It's composed of a : \n
+ - an output interface to show which program is selected, \n
+ - a way to change the selection, \n
+ - a way to validate the selection and launch the linked program. \n
+
+ If you want a example on how to use it, look at the MenuExample program (http://mbed.org/users/rominos2/code/MenuExample/)
+*/
+class Menu {
+private:
+ /** A Program is reprensented with this nested class.
+ */
+ class Program {
+ private:
+ void* _output_interface_argument; /**< the output displayed when this program is seletected. For example, a LED Color or a message. */
+ int(*_program)(); /**< the function to call when the program is validated. */
+ Program* _next; /**< the next program in the chained list */
+
+ Program(void* output_argument, int(*program)()); /**< Constructor of a Program */
+
+ friend class Menu;
+ };
+
+ Program* _first; /**< First program of the chained list. */
+
+protected:
+ /** Start the Menu.
+ Implementation can make LED blinks or print a message on a screen for example
+ */
+ virtual void startMenu() = 0;
+ /** Implementation must links an input to know if the user change the selection.
+ For example, a switch can be checked.
+ @return 1 if the selection changes, else false.
+ */
+ virtual bool isSelectionChanging() = 0;
+ /** Implementation must links an input to know if the user validate the selection.
+ For example, a switch can be checked.
+ @return 1 if the user validates, else false.
+ */
+ virtual bool isValidating() = 0;
+
+ /** Implementation must links an output to show the selected program has changed.
+ For example, the color of a LED can be changed or a message printed.
+ @param output_argument the argument of the selected program. If NULL, the interface must clear.
+ */
+ virtual void displaySelectedProgram(void* output_argument) = 0;
+
+public:
+ /** Construcor of the Menu.
+ */
+ Menu();
+
+ /** Add a program to the Menu.
+ @param output_argument the output displayed when this program is seletected. For example, a LED Color or a message.
+ @param the function to call when the program is validated.
+ */
+ void addProgram(void* output_argument, int(*program)());
+ /** Free the alocated memory of the Bootstrap.
+ All program will be removed from the list.
+ */
+ void clean();
+ /** Start the Menu. \n
+ First startMenu() is called. \n
+ Then the output interface show the chosen program (with the output argument) and the Bootstrap check isSelectionChanging() and isValidating(). \n
+ Once validate, the function of the program is called. \n
+ @return the result of the program's function.
+ */
+ int launch();
+};
+
+#endif
\ No newline at end of file