Blame view
doc/README.menu
2.91 KB
b69bf52df Add generic, reus... |
1 2 3 |
/* * Copyright 2010-2011 Calxeda, Inc. * |
1a4596601 Add GPL-2.0+ SPDX... |
4 |
* SPDX-License-Identifier: GPL-2.0+ |
b69bf52df Add generic, reus... |
5 6 7 8 9 10 11 12 13 14 15 |
*/ U-boot provides a set of interfaces for creating and using simple, text based menus. Menus are displayed as lists of labeled entries on the console, and an entry can be selected by entering its label. To use the menu code, enable CONFIG_MENU, and include "menu.h" where the interfaces should be available. Menus are composed of items. Each item has a key used to identify it in the menu, and an opaque pointer to data controlled by the consumer. |
317d6c57d common, menu: sho... |
16 17 18 19 |
If you want to show a menu, instead starting the shell, define CONFIG_MENU_SHOW. You have to code the int menu_show(int bootdelay) function, which handle your menu. This function returns the remaining bootdelay. |
b69bf52df Add generic, reus... |
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
Interfaces ---------- #include "menu.h" /* * Consumers of the menu interfaces will use a struct menu * as the * handle for a menu. struct menu is only fully defined in menu.c, * preventing consumers of the menu interfaces from accessing its * contents directly. */ struct menu; /* * NOTE: See comments in common/menu.c for more detailed documentation on * these interfaces. */ /* * menu_create() - Creates a menu handle with default settings */ |
b41bc5a82 common, menu: use... |
40 |
struct menu *menu_create(char *title, int timeout, int prompt, |
fc9d64ffc menu: Add support... |
41 42 43 |
void (*item_data_print)(void *), char *(*item_choice)(void *), void *item_choice_data); |
b69bf52df Add generic, reus... |
44 45 46 47 48 49 50 51 52 53 54 55 |
/* * menu_item_add() - Adds or replaces a menu item */ int menu_item_add(struct menu *m, char *item_key, void *item_data); /* * menu_default_set() - Sets the default choice for the menu */ int menu_default_set(struct menu *m, char *item_key); /* |
6a3439fda menu: export menu... |
56 57 58 59 60 |
* menu_default_choice() - Set *choice to point to the default item's data */ int menu_default_choice(struct menu *m, void **choice); /* |
b69bf52df Add generic, reus... |
61 |
* menu_get_choice() - Returns the user's selected menu entry, or the |
b41bc5a82 common, menu: use... |
62 |
* default if the menu is set to not prompt or the timeout expires. |
b69bf52df Add generic, reus... |
63 64 65 66 67 68 69 |
*/ int menu_get_choice(struct menu *m, void **choice); /* * menu_destroy() - frees the memory used by a menu and its items. */ int menu_destroy(struct menu *m); |
e0611dd97 common, menu: add... |
70 71 72 73 74 |
/* * menu_display_statusline(struct menu *m); * shows a statusline for every menu_display call. */ void menu_display_statusline(struct menu *m); |
b69bf52df Add generic, reus... |
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
Example Code ------------ This example creates a menu that always prompts, and allows the user to pick from a list of tools. The item key and data are the same. #include "menu.h" char *tools[] = { "Hammer", "Screwdriver", "Nail gun", NULL }; char *pick_a_tool(void) { struct menu *m; int i; char *tool = NULL; |
b41bc5a82 common, menu: use... |
95 |
m = menu_create("Tools", 0, 1, NULL); |
b69bf52df Add generic, reus... |
96 97 98 99 100 101 |
for(i = 0; tools[i]; i++) { if (menu_item_add(m, tools[i], tools[i]) != 1) { printf("failed to add item!"); menu_destroy(m); return NULL; |
6b62b9a31 Coding Style cleanup |
102 |
} |
b69bf52df Add generic, reus... |
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
} if (menu_get_choice(m, (void **)&tool) != 1) printf("Problem picking tool! "); menu_destroy(m); return tool; } void caller(void) { char *tool = pick_a_tool(); if (tool) { printf("picked a tool: %s ", tool); use_tool(tool); } } |