repo2/firmware_eclairexl/menu.h
895 | markw | #pragma once
|
|
/* Simple lightweight menu function */
|
|||
/* menu entry:
|
|||
* i) display function or fixed text
|
|||
* ii) location based actions: left/right/fire -> function
|
|||
* -> result: redraw, exit, nothing
|
|||
* iii) actions that are not impacted by location: typing
|
|||
* iv) no content
|
|||
*/
|
|||
#include "integer.h"
|
|||
#include "joystick.h"
|
|||
typedef void (*menuDisplay) (void * menuData, void * userData); /*Call printf...*/
|
|||
896 | markw | typedef BOOL (*menuAction) (void * menuData, struct joystick_status *, void * userData); /* return true to exit */
|
|
895 | markw | ||
typedef void (*menuPress) (void * menuData, unsigned char key_ascii);
|
|||
struct MenuEntry
|
|||
{
|
|||
menuDisplay displayFunction;
|
|||
union
|
|||
{
|
|||
char * txt;
|
|||
void * userData;
|
|||
int val;
|
|||
};
|
|||
menuAction actionFunction;
|
|||
unsigned char flags;
|
|||
#define MENU_FLAG_EXIT 1
|
|||
#define MENU_FLAG_LEFT 2
|
|||
#define MENU_FLAG_RIGHT 4
|
|||
#define MENU_FLAG_MOVE (MENU_FLAG_LEFT|MENU_FLAG_RIGHT)
|
|||
#define MENU_FLAG_FIRE 8
|
|||
#define MENU_FLAG_FINAL 16
|
|||
#define MENU_FLAG_MAYEXIT 32
|
|||
#define MENU_FLAG_SD 64
|
|||
942 | markw | #define MENU_FLAG_KEYPRESS 128
|
|
895 | markw | };
|
|
942 | markw | int display_menu(const char * title, struct MenuEntry * entries, menuPress hotkeys, void * menuData);
|
|
895 | markw | ||
/*
|
|||
* Example menu
|
|||
void menuPressTest(unsigned char key)
|
|||
{
|
|||
printf("Key pressed:%c\n",key);
|
|||
wait_us(2000000);
|
|||
}
|
|||
BOOL menuFire(struct joystick_status * joy)
|
|||
{
|
|||
printf("Fire:%d",joy->fire_);
|
|||
wait_us(2000000);
|
|||
return 0;
|
|||
}
|
|||
BOOL menuMove(struct joystick_status * joy)
|
|||
{
|
|||
printf("Move:%d",joy->x_);
|
|||
wait_us(2000000);
|
|||
return 0;
|
|||
}
|
|||
struct MenuEntry entries[] =
|
|||
{
|
|||
{0,"Subtitle",0,0},
|
|||
{0,0,0,0}, //blank line
|
|||
{0,"Fire",&menuFire,MENU_FLAG_FIRE},
|
|||
{0,"Move",&menuMove,MENU_FLAG_MOVE},
|
|||
{0,"Test",0,MENU_FLAG_FINAL}
|
|||
};
|
|||
display_menu("Settings",&entries[0], &menuPressTest);
|
|||
*/
|