/*******************************************************************************
* File Name : menu.h
* Author : lxyppc
* Version : V1.0
* Date : 10-03-05
* Description : menu header
*******************************************************************************/
#ifndef MENU_H
#define MENU_H
// Menu message definition
#define MSG_SCROLL 0x00000001ul
#define MSG_KEY_UP 0x00000002ul
#define MSG_KEY_DOWN 0x00000003ul
#define MSG_SECOND 0x00000004ul
#define MSG_SENSE 0x00000005ul
#define MSG_INIT 0x00000006ul
#define MSG_POWER 0x00000007ul
#define MSG_GRAV_XY 0x00000008ul
#define MSG_GRAV_Z 0x00000009ul
#define MakeMsgGrav_XY(pMsg,x,y) \
{\
(pMsg)->message = MSG_GRAV_XY;\
(pMsg)->param = (void*)((x) | (((unsigned long)(y))<<16));\
}
#define MakeMsgGrav_Z(pMsg,z) \
{\
(pMsg)->message = MSG_GRAV_Z;\
(pMsg)->param = (void*)(z);\
}
// Here Gravity X is MMA Y axis output
#define GetGravX(pMsg) (u16)(((u32)(pMsg)->param>>16) & 0x0FFF)
// Here Gravity Y is MMA X axis output
#define GetGravY(pMsg) (u16)((u32)(pMsg)->param & 0x0FFF)
#define GetGravZ(pMsg) (u16)((u32)(pMsg)->param & 0x0FFF)
// POWER mode definition
#define PWR_CHG 0x0001
#define PWR_GOOD 0x0002
#define GetBatValue(pMsg) (u16)(((u32)(pMsg)->param)>>16)
// Menu type definition
#define MT_NULL 0x00
#define MT_SUB 0x01 // Has sub menu
#define MT_CHECK 0x02 // Has check box
typedef const char* LPCSTR;
typedef struct _Msg
{
void* param;
unsigned long message;
}Msg;
typedef enum{
MR_Finish,
MR_Error,
MR_Continue,
}MenuResult;
typedef MenuResult(*MenuFunc_t)(void* param, Msg* pVoid);
typedef struct _MenuItem
{
const struct _MenuItem* parent;
union{
const void* justMakeInitialEasy;
const MenuFunc_t pfnMenu;
const struct _MenuItem* child;
};
unsigned char index; // menu index
unsigned char cnt; // menu count
unsigned char res; // menu resource
unsigned char type;
}MenuItem;
MenuFunc_t InitialMenu();
unsigned long MenuProcess(Msg* msg);
MenuResult PopupMenu(const MenuItem* menu);
unsigned long GetMessage(Msg* msg);
unsigned long PostMessage(Msg* msg);
#endif