FreeCalypso > hg > leo2moko-debug
diff g23m/condat/ms/src/mfw/mfw_mmi.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/ms/src/mfw/mfw_mmi.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,753 @@ +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) $Workfile:: mfw_mmi.c $| +| $Author:: Es $ CONDAT GmbH $Revision:: 8 $| +| CREATED: 21.09.98 $Modtime:: 1.07.99 10:03 $| +| STATE : code | ++--------------------------------------------------------------------+ + + MODULE : MFW_MMI + + PURPOSE : MFW test application + + EXPORT : + + TO DO : + + $History:: mfw_mmi.c $ + * + * ***************** Version 8 ***************** + * User: Es Date: 6.07.99 Time: 12:21 + * Updated in $/GSM/DEV/MS/SRC/MFW +*/ + +#define ENTITY_MFW + +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +#if defined (NEW_FRAME) + +#include "typedefs.h" +#include "vsi.h" +#include "pei.h" +#include "custom.h" +#include "gsm.h" + +#else + +#include "STDDEFS.H" +#include "custom.h" +#include "gsm.h" +#include "vsi.h" + +#endif + +#include "mfw_mfw.h" +#include "mfw_sys.h" +#include "mfw_win.h" +#include "mfw_edt.h" +#include "mfw_icn.h" +#include "mfw_mnu.h" +#include "mfw_kbd.h" +#include "mfw_tim.h" +#include "dspl.h" +#include "drv_key.h" +#include "drv_tmr.h" + +#include "prim.h" +#ifndef PCM_2_FFS +#include "pcm.h" +#endif + + +#include "mfw_nm.h" +#include "mfw_sim.h" +#include "mfw_cm.h" + +#include "mfw_mmi.h" + + + +static U16 scrX, scrY; /* sreen size */ +static U8 mfwMem [2048]; /* mfw memory pool */ +//Default colour +#define MFW_COLOUR 0x00000000,0x00FFFFFF +#define MFW_ICN_COLOUR 0x00000000,0x00FFFFFF + +static int initialized = 0; + +static void volInit (void); +static void volExit (void); +static void editInit (MfwHnd e); +static void editExit (void); +static void phoneInit (void); +static void phoneExit (void); +static void mainInit (void); +static void mainExit (void); + + + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_MMI | +| STATE : code ROUTINE : mmi_main | ++--------------------------------------------------------------------+ + + PURPOSE : start MMI + +*/ + +void mmi_main (void) +{ + mmiInit(); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_MMI | +| STATE : code ROUTINE : mmiInit | ++--------------------------------------------------------------------+ + + PURPOSE : initialize application + +*/ + +void mmiInit (void) +{ + if (initialized) + mmiExit(); + + initialized = 1; + + mfwInit(mfwMem,sizeof(mfwMem)); /* MFW INITIALIZATION */ + winInit(&scrX,&scrY); /* init window handler */ + edtInit(); /* init editor handler */ + icnInit(); /* init icon handler */ + mnuInit(); /* init menu handler */ + kbdInit(); /* init keyboard handler */ + timInit(); /* init timer handler */ + + /* MMI MODULES SETUP */ + volInit(); /* init volume control */ + mainInit(); /* init main control */ +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_MMI | +| STATE : code ROUTINE : mmiExit | ++--------------------------------------------------------------------+ + + PURPOSE : exit application + +*/ + +void mmiExit (void) +{ + if (!initialized) + return; + + mainExit(); + volExit(); + + timExit(); /* finit timer handler */ + kbdExit(); /* finit keyboard handler */ + mnuExit(); /* finit menu handler */ + icnExit(); /* finit icon handler */ + edtExit(); /* finit edit handler */ + winExit(); /* finit window handler */ + mfwExit(); /* exit mfw */ + + initialized = 0; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_MMI | +| STATE : code ROUTINE : volControl | ++--------------------------------------------------------------------+ + + PURPOSE : setup volume control + +*/ + +#define MAX_VOLUME 10 + +static MfwHnd volWin; /* the volume window */ +static MfwHnd volKbd; /* the volume keyboard */ +static MfwHnd volTim; /* the volume timer */ +static int curVolume; /* current volume */ +static U32 curKey; /* current key */ + +static void volShow (void) +{ + timStop(volTim); + dspl_ClearAll(); + dspl_TextOut(20,12,DSPL_TXTATTR_NORMAL,"VOLUME"); + dspl_DrawRect(20,22,20+curVolume*6,22+5); +} + +static int volEventWin (MfwEvt e, MfwWin *w) +{ + switch (e) + { + case MfwWinVisible: + if (w->flags & MfwWinVisible) + volShow(); + break; + default: + return 0; + } + + return 1; +} + +static int volEventKbd (MfwEvt e, MfwKbd *kc) +{ + curKey = e; + volShow(); + if (curKey & KEY_MAKE) + ((MfwTim *) mfwControl(volTim))->time = 500; + else + ((MfwTim *) mfwControl(volTim))->time = 2000; + timStart(volTim); + + return 1; +} + +static int volEventTim (MfwEvt e, MfwTim *tc) +{ + if (!(curKey & KEY_MAKE)) + { + winHide(volWin); + return 1; + } + + if (curKey & KEY_VOLUP) + { + if (curVolume < MAX_VOLUME) + curVolume++; + } + else + { + if (curVolume > 0) + curVolume--; + } + volShow(); + timStart(volTim); + + return 1; +} + +static void volInit (void) +{ + U32 events; + + events = KEY_VOLUP + KEY_VOLDOWN + KEY_MAKE; + curVolume = 3; + volWin = winCreate(0,0,MfwWinVisible,(MfwCb) volEventWin); + volKbd = kbdCreate(0,events,(MfwCb) volEventKbd); + volTim = timCreate(0,2000,(MfwCb) volEventTim); +} + +static void volExit (void) +{ + timDelete(volTim); + kbdDelete(volKbd); + winDelete(volWin); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_MMI | +| STATE : code ROUTINE : editControl | ++--------------------------------------------------------------------+ + + PURPOSE : general editor control + +*/ + +static MfwHnd myHandle = 0; /* editors handle */ +static MfwHnd editTim; /* the editor timer */ + +static U8 editControls [KCD_MAX] = /* edit control keys: */ +{ + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + ecBack, ecDel, ecNone, ecNone, ecUp, ecDown, ecLeft, ecRight, + ecNone, ecNone, ecEnter, ecNone, ecNone, ecNone, + ecNone, ecNone, ecEnter, ecNone, ecNone, ecNone, ecNone +}; + +static char editHeader [128]; /* editor information */ +static U8 editAlphaMode; /* alpha mode flag */ +static U8 editAlphaLevel; /* alpha level selected */ +static U8 editAlphaKey; /* alpha mode current key */ +static U8 editAlpha [10][4] = /* alpha mode characters */ +{ + {'-','!','?',','}, + {'a','b','c','1'}, {'d','e','f','2'}, {'g','h','i','3'}, + {'j','k','l','4'}, {'m','n','o','5'}, {'p','q','r','6'}, + {'s','t','u','7'}, {'v','w','x','8'}, {'y','z',' ','9'} +}; + + +static void editShowHeader (void) +{ + sprintf(editHeader,"%c [%c]", + (editAlphaMode)?'A':'N', + (editAlphaMode && editAlphaKey != KCD_MAX)? + editAlpha[editAlphaKey][editAlphaLevel]:' '); + dspl_TextOut(2,0,DSPL_TXTATTR_NORMAL,editHeader); + dspl_DrawRect(1,8,98,30); +} + +static int editEventTim (MfwEvt e, MfwTim *t) +{ + if (!editAlphaMode) + return 1; + + edtChar(myHandle,editAlpha[editAlphaKey][editAlphaLevel]); + editAlphaLevel = 3; + editAlphaKey = KCD_MAX; + + return 1; +} + +static int editEventKbd (MfwEvt e, MfwKbd *k) +{ + if (editAlphaMode) + { + if (editAlphaKey != KCD_MAX && editAlphaKey != k->code) + { + timStop(editTim); + edtChar(myHandle,editAlpha[editAlphaKey][editAlphaLevel]); + editAlphaLevel = 3; + editAlphaKey = KCD_MAX; + } + if (k->code <= KCD_9) + { + editAlphaKey = k->code; + editAlphaLevel++; + if (editAlphaLevel > 3) + editAlphaLevel = 0; + editShowHeader(); + timStart(editTim); + return 1; + } + } + switch (k->code) + { + case KCD_CLEAR: + return 0; + case KCD_ABC: + editAlphaMode = (U8) !editAlphaMode; + if (editAlphaMode) + { + editAlphaLevel = 3; + editAlphaKey = KCD_MAX; + } + editShowHeader(); + return 1; + default: + break; + } + edtChar(myHandle,editControls[k->code]); + + return 1; +} + +static void editInit (MfwHnd e) +{ + myHandle = e; + editTim = timCreate(0,1000,(MfwCb) editEventTim); + + editAlphaLevel = 3; + editAlphaKey = KCD_MAX; +} + +static void editExit (void) +{ + myHandle = 0; + timDelete(editTim); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_MMI | +| STATE : code ROUTINE : PhonebookControl | ++--------------------------------------------------------------------+ + + PURPOSE : setup main window control + +*/ + +static MfwHnd phoneWin; /* the phonebook window */ +static MfwHnd phoneKbd; /* the phone keyboard */ +static MfwHnd phoneEdt; /* the phone editor */ +static MfwHnd phoneOldFocus; /* previous focus */ + +#define PhoneNumSize 32 +#define PhoneAlphaSize 224 + +static struct phoneBookTag +{ + char number [32]; + char alpha [224]; +} phoneADN [100] = +{ + {"03039094231","Jie Volckarts"}, + {"03039094267","Karsten Klawon"}, + {"03039094108","Erwin Schmid"}, + {"",""} +}; + +static int phoneIndex; +static int phoneEditing = 0; +static int phoneFailure = 0; + +static MfwEdtAttr phoneEditAttr = +{ /* edit attributes: */ + {3,10,95,20}, /* edit area */ + 0,0,0, /* fg color, font, mode */ + editControls, /* control key array */ + 0,0 /* edit buffer, size */ +}; + + +static void phoneSetEdit (void) +{ + if (editAlphaMode) + { + phoneEditAttr.text = phoneADN[phoneIndex].alpha; + phoneEditAttr.size = PhoneAlphaSize; + } + else + { + phoneEditAttr.text = phoneADN[phoneIndex].number; + phoneEditAttr.size = PhoneNumSize; + } + edtReset(phoneEdt); +} + +static void phoneShowHeader (void) +{ + char hdr [8]; + + editShowHeader(); + sprintf(hdr," %s%3d",editAlphaMode?" Name ":"Number",phoneIndex); + dspl_TextOut(39,0,DSPL_TXTATTR_INVERS,hdr); +} + +static void phoneShow (void) +{ + dspl_ClearAll(); + phoneShowHeader(); + edtShow(phoneEdt); +} + +static int phoneEventWin (MfwEvt e, MfwWin *w) +{ + switch (e) + { + case MfwWinVisible: + if (w->flags & MfwWinVisible) + phoneShow(); + break; + default: + return 0; + } + + return 1; +} + +static int phoneEventKbd (MfwEvt e, MfwKbd *kc) +{ + if (phoneFailure) + { + phoneFailure = 0; + e = KEY_CLEAR; + } + if (phoneEditing) + phoneEditing = editEventKbd(e,kc); + if (phoneEditing) + return 1; + + switch (e & ~KEY_MAKE) + { + case KEY_MNUUP: + if (phoneIndex > 0) + phoneIndex--; + break; + case KEY_MNUDOWN: + if (phoneIndex < 99) + phoneIndex++; + break; + case KEY_ABC: + editAlphaMode = (U8) !editAlphaMode; + break; + case KEY_OK: + phoneEditAttr.mode = edtCurBar1; + phoneEditing = 1; + break; + case KEY_CLEAR: + phoneEditAttr.mode = 0; + phoneEditing = 0; + winFocus(phoneOldFocus); + phoneExit(); + return 1; + default: + return 1; /* superflous !? */ +// return editEventKbd(e,kc); + } + phoneSetEdit(); + winShow(phoneWin); + + return 1; +} + +static void phoneInit (void) +{ + U32 keys = 0x7fffffff & ~KEY_VOLUP & ~KEY_VOLDOWN; + + phoneWin = winCreate(0,0,MfwWinVisible,(MfwCb) phoneEventWin); + phoneKbd = kbdCreate(phoneWin,keys,(MfwCb) phoneEventKbd); + phoneEdt = edtCreate(phoneWin,&phoneEditAttr,0,0); + editInit(phoneEdt); + phoneEditing = 0; + phoneFailure = 0; + phoneIndex = 0; /* start with index 0 */ +} + +static void phoneExit (void) +{ + editExit(); + edtDelete(phoneEdt); + kbdDelete(phoneKbd); + winDelete(phoneWin); +} + +static int viewPhonebook (void) +{ + phoneInit(); + editAlphaMode = 1; /* start alphanumeric */ + phoneSetEdit(); + phoneOldFocus = winFocus(phoneWin); /* make me the first one */ + winShow(phoneWin); + + return 0; +} + +static int searchPhonebook (void) +{ + phoneInit(); + phoneOldFocus = winFocus(phoneWin); /* make me the first one */ + phoneFailure = 1; + dspl_ClearAll(); + dspl_TextOut(5,12,DSPL_TXTATTR_NORMAL,"not implemented"); + return 0; +} + +static int newPhonebook (void) +{ + phoneInit(); + while (phoneIndex < 99 && (strlen(phoneADN[phoneIndex].alpha) + || strlen(phoneADN[phoneIndex].number))) + phoneIndex++; + editAlphaMode = 1; /* start alphanumeric */ + phoneSetEdit(); + phoneOldFocus = winFocus(phoneWin); /* make me the first one */ + winShow(phoneWin); + + return 0; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_MMI | +| STATE : code ROUTINE : MessagesControl | ++--------------------------------------------------------------------+ + + PURPOSE : setup main window control + +*/ + +static int doMessages (void) +{ + dspl_ClearAll(); + dspl_TextOut(30,12,DSPL_TXTATTR_NORMAL,"Sorry.."); + return 0; +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : MMI-Framework (8417) MODULE : MFW_MMI | +| STATE : code ROUTINE : mainControl | ++--------------------------------------------------------------------+ + + PURPOSE : setup main window control + +*/ + +static MfwHnd mainWin; /* the main window */ +static MfwHnd mainKbd; /* the main keyboard */ +static MfwHnd mainTim; /* the main timer */ +static MfwHnd mainMnu; /* the main menu */ + + + +static char phoneMenuIcons [] = +{ + 0x00,0x00, 0x7E,0x7E, 0x41,0x82, 0x59,0x9C, /* VIEW */ + 0x41,0xA2, 0x5D,0xA2, 0x41,0xA2, 0x5D,0x9C, + 0x41,0x82, 0x41,0x82, 0x7F,0xFE, 0x00,0x00, + + 0x00,0x00, 0x7E,0x7E, 0x41,0x82, 0x59,0xBA, /* SEARCH */ + 0x41,0x8A, 0x5D,0x92, 0x41,0x92, 0x5D,0x82, + 0x41,0x92, 0x41,0x82, 0x7F,0xFE, 0x00,0x00, + + 0x00,0x00, 0x7E,0x7E, 0x41,0x81, 0x59,0xBB, /* NEW */ + 0x41,0x87, 0x5D,0x8E, 0x41,0x8C, 0x5D,0xB2, + 0x41,0x82, 0x41,0x82, 0x7F,0xFE, 0x00,0x00, +}; + +static MfwIcnAttr phoneMenuIconAttr = +{ + {80,18,16,12}, /* icon area */ + 3, /* number of icons */ + phoneMenuIcons, /* icon array */ + MFW_ICN_COLOUR +}; + +static MfwMnuItem phoneMenuItems [] = +{ + {&phoneMenuIconAttr,0,"VIEW",0,viewPhonebook}, + {&phoneMenuIconAttr,0,"SEARCH",0,searchPhonebook}, + {&phoneMenuIconAttr,0,"NEW",0,newPhonebook} +}; + +static MfwMnuAttr phoneMenuAttr = +{ + {20,5,80,10}, /* one menu line */ + MNU_LEFT, + phoneMenuItems, + 3, + MENUCOLOUR_LISTDEF +}; + + +static char mainMenuIcons [] = +{ + 0x00,0x00, 0x7E,0x7E, 0x41,0x82, 0x59,0xBA, /* PHONEBOOK */ + 0x41,0x82, 0x5D,0xB2, 0x41,0x82, 0x5D,0x82, + 0x41,0x82, 0x41,0x82, 0x7F,0xFE, 0x00,0x00, + + 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, /* MESSAGES */ + 0x7F,0xFE, 0x50,0x0A, 0x48,0x12, 0x4C,0x32, + 0x52,0x4A, 0x61,0x86, 0x7F,0xFE, 0x00,0x00 +}; + +static MfwIcnAttr mainMenuIconAttr = +{ + {80,18,16,12}, /* icon area */ + 2, /* number of icons */ + mainMenuIcons. /* icon array */ + MFW_ICN_COLOUR +}; + +static MfwMnuItem mainMenuItems [] = +{ + {&mainMenuIconAttr,0," PHONEBOOK",&phoneMenuAttr,0}, + {&mainMenuIconAttr,0," MESSAGES",0,doMessages} +}; + +static MfwMnuAttr mainMenuAttr = +{ + {20,5,80,18}, /* two menu lines */ + MNU_LEFT | MNU_CUR_STAR, + mainMenuItems, + 2, + MENUCOLOUR_LISTDEF +}; + + +static void mainShow (void) +{ + timStop(mainTim); + dspl_ClearAll(); + mnuShow(mainMnu); +} + +static int mainEventWin (MfwEvt e, MfwWin *w) +{ + switch (e) + { + case MfwWinVisible: + if (w->flags & MfwWinVisible) + mainShow(); + break; + default: + return 0; + } + + return 1; +} + +static int mainEventTim (MfwEvt e, MfwTim *t) +{ + winShow(mainWin); + winFocus(mainWin); + + return 1; +} + +static int mainEventKbd (MfwEvt e, MfwKbd *kc) +{ + switch (e & ~KEY_MAKE) + { + case KEY_MNUUP: + mnuUp(mainMnu); + break; + case KEY_MNUDOWN: + mnuDown(mainMnu); + break; + case KEY_OK: + mnuSelect(mainMnu); + break; + case KEY_CLEAR: + mnuEscape(mainMnu); + break; + } + + return 1; +} + +static void mainInit (void) +{ + U32 keys = KEY_MNUUP + KEY_MNUDOWN + KEY_OK + KEY_CLEAR; + + mainWin = winCreate(0,0,MfwWinVisible,(MfwCb) mainEventWin); + mainTim = timCreate(0,1000,(MfwCb) mainEventTim); + mainKbd = kbdCreate(0,keys,(MfwCb) mainEventKbd); + mainMnu = mnuCreate(mainWin,&mainMenuAttr,0,0,0,0); + + timStart(mainTim); +} + +static void mainExit (void) +{ + mnuDelete(mainMnu); + kbdDelete(mainKbd); + timDelete(mainTim); + winDelete(mainWin); +} +