#include "menu_api.h" #include "menu_param.h" #include "menu_lang.h" #include "menu_port.h" #include #include // Globals int32_t g_volume = 50; int32_t g_brightness = 80; uint8_t g_language = 0; // 0=EN, 1=CN // Callbacks MenuErrCode on_enter_main(MenuNodeId id, struct MenuCoreCtx* ctx) { menu_port_log(">> Entered Main Menu"); return MENU_ERR_OK; } MenuErrCode on_enter_settings(MenuNodeId id, struct MenuCoreCtx* ctx) { menu_port_log(">> Entered Settings"); return MENU_ERR_OK; } MenuErrCode on_enter_volume(MenuNodeId id, struct MenuCoreCtx* ctx) { menu_port_log(">> Entered Volume Param Edit"); return MENU_ERR_OK; } MenuErrCode on_enter_brightness(MenuNodeId id, struct MenuCoreCtx* ctx) { menu_port_log(">> Entered Brightness Param Edit"); return MENU_ERR_OK; } MenuErrCode on_render(MenuNodeId id, struct MenuCoreCtx* ctx) { // In a real system, this would draw to screen // Here we just print the current state occasionally or on change // For demo simplicity, we rely on enter/exit logs return MENU_ERR_OK; } void setup_params(void) { menu_param_init(); MenuParam p_vol = {0}; p_vol.id = 1; p_vol.type = MENU_PARAM_TYPE_INT32; p_vol.name = "Volume"; p_vol.value_ptr = &g_volume; p_vol.meta.num.min = 0; p_vol.meta.num.max = 100; p_vol.meta.num.step = 5; menu_param_register(&p_vol); MenuParam p_bri = {0}; p_bri.id = 2; p_bri.type = MENU_PARAM_TYPE_INT32; p_bri.name = "Brightness"; p_bri.value_ptr = &g_brightness; p_bri.meta.num.min = 10; p_bri.meta.num.max = 100; p_bri.meta.num.step = 10; menu_param_register(&p_bri); } void setup_menu(void) { menu_init(); // Root: Main Menu MenuNodeId main = menu_register_node(0, 0, "$MAIN", on_enter_main, NULL); // Child: Settings MenuNodeId settings = menu_register_node(0, main, "$SETTING", on_enter_settings, NULL); // Child: Info MenuNodeId info = menu_register_node(0, main, "$INFO", NULL, NULL); // Child of Settings: Volume MenuNodeId vol_node = menu_register_node(0, settings, "Volume", on_enter_volume, NULL); menu_node_bind_param(vol_node, 1); // Bind to Volume param (ID 1) // Child of Settings: Brightness MenuNodeId bri_node = menu_register_node(0, settings, "Brightness", on_enter_brightness, NULL); menu_node_bind_param(bri_node, 2); // Bind to Brightness param (ID 2) } // Stub for binding param (will implement in API) void bind_param(MenuNodeId node, uint16_t param) { // Need API support } int main(void) { menu_port_init(); setup_params(); setup_menu(); menu_port_log("Menu System Demo Started"); menu_enter(); // Enter root // Simulation Loop int steps = 0; while (steps < 20) { menu_main_loop(0); // Simulate inputs if (steps == 2) { menu_port_log("User Press: ENTER"); menu_post_event(MENU_EVENT_KEY_ENTER, 0); } if (steps == 4) { menu_port_log("User Press: DOWN"); menu_post_event(MENU_EVENT_KEY_DOWN, 0); } steps++; // sleep } return 0; }