A C library for creating hierarchical menu systems on displays with Raspberry Pi Pico.
- Hierarchical menu structure
- Support for action items and submenus
- Scrolling support for long menus
- Customizable draw callback for any display
- Works with buttons, keypads, and rotary encoders
// Create a new menu
menu_t *menu_create(const char *title);
// Add an action item to a menu
int menu_add_action(menu_t *menu, const char *label, menu_callback_t callback);
// Add a submenu item to a menu
int menu_add_submenu(menu_t *parent_menu, const char *label, menu_t *submenu);
// Initialize menu system
void menu_system_init(menu_system_t *menu_system, menu_t *root_menu,
uint8_t visible_count, void (*draw_callback)(menu_system_t *));
// Navigate up in menu
void menu_system_up(menu_system_t *menu_system);
// Navigate down in menu
void menu_system_down(menu_system_t *menu_system);
// Select current menu item
void menu_system_select(menu_system_t *menu_system);
// Go back to parent menu
void menu_system_back(menu_system_t *menu_system);
// Get currently selected item
menu_item_t *menu_system_get_selected(menu_system_t *menu_system);
// Refresh menu display
void menu_system_refresh(menu_system_t *menu_system);
// Destroy menu and free resources
void menu_destroy(menu_t *menu);menu_t *root = menu_create("Main Menu");
menu_add_action(root, "Action 1", my_callback);
menu_add_submenu(root, "Settings", settings_menu);
menu_system_t menu_system;
menu_system_init(&menu_system, root, 4, draw_callback);
// In your input handler:
menu_system_up(&menu_system); // Navigate up
menu_system_down(&menu_system); // Navigate down
menu_system_select(&menu_system); // Select item
menu_system_back(&menu_system); // Go backAn example application is provided.
- 2025.11.22 - v1.0.0 - First release