📄 mfw_mfw.c
字号:
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) $Workfile:: mfw_mfw.c $|
| $Author: root $ CONDAT GmbH $Revision: 1.1.1.1 $|
| CREATED: 21.09.98 $Modtime:: 23.03.00 10:47 $|
| STATE : code |
+--------------------------------------------------------------------+
MODULE : MFW_MFW
PURPOSE : element chaining functions
EXPORT :
TO DO :
$History:: mfw_mfw.c $
*
* ***************** Version 11 *****************
* User: Es Date: 23.03.00 Time: 14:43
* Updated in $/GSM/Condat/MS/SRC/MFW
* Added 'mfwParent(elem)'
*
* ***************** Version 10 *****************
* User: Es Date: 18.02.00 Time: 15:45
* Updated in $/GSM/Condat/MS/SRC/MFW
* fixed alloc/free bug (shrink)
* changed MfwMemLarge macro
* added constants for MMI event handler return values
*
* ***************** Version 9 *****************
* User: Kk Date: 10.01.00 Time: 14:03
* Updated in $/GSM/Condat/MS/SRC/MFW
*
* ***************** Version 4 *****************
* User: Rm Date: 12/22/99 Time: 4:34p
* Updated in $/GSM/Condat/SND-MMI/MFW
*
* ***************** Version 3 *****************
* User: Be Date: 29.11.99 Time: 14:31
* Updated in $/GSM/Condat/SND-MMI/MFW
* target integration
*
* ***************** Version 2 *****************
* User: Es Date: 22.11.99 Time: 10:24
* Updated in $/GSM/Condat/SND-MMI/MFW
*
* ***************** Version 1 *****************
* User: Es Date: 18.11.99 Time: 16:35
* Created in $/GSM/Condat/SND-MMI/MFW
* Initial
*
* ***************** Version 6 *****************
* User: Es Date: 1.04.99 Time: 17:07
* Updated in $/GSM/DEV/MS/SRC/MFW
* removed lots of traces
*
* ***************** Version 5 *****************
* User: Es Date: 18.02.99 Time: 17:01
* Updated in $/GSM/DEV/MS/SRC/MFW
*
* ***************** Version 4 *****************
* User: Es Date: 17.02.99 Time: 19:11
* Updated in $/GSM/DEV/MS/SRC/MFW
*
* ***************** Version 3 *****************
* User: Es Date: 27.01.99 Time: 15:06
* Updated in $/GSM/DEV/MS/SRC/MFW
*
* ***************** Version 2 *****************
* User: Es Date: 23.12.98 Time: 16:19
* Updated in $/GSM/DEV/MS/SRC/MFW
*/
#define ENTITY_MFW
#undef TRACE_MEMORY
#include <stdio.h>
#include <string.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 <stdio.h>
//#include <string.h>
#include "mfw_mfw.h"
#include "mfw_sys.h"
#include "mfw_win.h"
U16 mfwMemDynTotal = 0; /* sample memory usage */
U16 mfwMemLowWater = 0xffff; /* sample memory usage */
MfwHdr *mfwFocus = 0; /* the focus node */
MfwHdr *mfwRoot = 0; /* root of MFW elements */
MfwCb mfwCommand [MfwTypMax]; /* MFW commands to modules */
// modify by clrobert, for purpose of showing MFW memory usage on emulator
// chang
//static MfwMemHdr mfwMem; /* root of free memory list */
//static U8 *mfwMemBase; /* mfw dynamic memory pool */
//static U8 *mfwMemEnd; /* end of mfw memory */
//static U16 mfwMemLeft; /* space left in pool */
// to
#ifdef _INNOVATION_EMULATOR_
U16 mfwMemBlock = 0;
MfwMemHdr mfwMem; /* root of free memory list */
U8 *mfwMemBase; /* mfw dynamic memory pool */
U8 *mfwMemEnd; /* end of mfw memory */
U16 mfwMemLeft; /* space left in pool */
#else
static MfwMemHdr mfwMem; /* root of free memory list */
static U8 *mfwMemBase; /* mfw dynamic memory pool */
static U8 *mfwMemEnd; /* end of mfw memory */
static U16 mfwMemLeft; /* space left in pool */
#endif
// modify end
static MfwHdr mfwEorc = {0, MfwTypMax, 0}; /* end of root chain */
U8 mfwSignallingMethod = 0; /* default is focus+root */
EXTERN MfwHdr * current_mfw_elem;
static EcMemInfo *memInfoRoot = 0; //the start of ec memory link
static EcMemInfo memInfoNull = {0, 0,0, 0}; // end of chain
extern MfwHnd idle_get_window (void);
static void regEcMemory(MfwHnd addr,int size);
static void freeEcMemory(MfwHnd addr,int size);
void Trace_All(char *name,MfwHnd handle);
static unsigned char needreg=0; //the flag indicate if need call regecmemory function
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW |
| STATE : code ROUTINE : mfwInit |
+--------------------------------------------------------------------+
PURPOSE : initialize framework
*/
MfwRes mfwInit (void *externalRoot, U16 dynMemSize)
{
int i;
// modify by clrobert
// add
#ifdef _INNOVATION_EMULATOR_
mfwMemBlock = 0;
#endif
// add end
mfwFocus = 0; /* initially no focus */
memInfoRoot=&memInfoNull; //yq add for reset the start of ec memory link
dynMemSize &= ~(sizeof(MfwMemHdr)-1); /* align to header size */
mfwMemDynTotal = dynMemSize;
if (dynMemSize)
{
mfwRoot = &mfwEorc; /* points to end of chain */
mfwMemBase = (U8 *) externalRoot; /* setup memory handler */
mfwMemEnd = (U8 *) externalRoot + dynMemSize;
mfwMem.next = 0;
mfwMem.len = 0;
((MfwMemHdr *) mfwMemBase)->next = dynMemSize;
((MfwMemHdr *) mfwMemBase)->len = dynMemSize;
mfwMemLeft = dynMemSize;
memset(mfwMemBase+sizeof(MfwMemHdr),0,
dynMemSize-sizeof(MfwMemHdr));
}
else
{
mfwRoot = (MfwHdr *) externalRoot; /* setup root pointer */
if (!mfwRoot)
mfwRoot = &mfwEorc; /* points to end of chain */
mfwMemBase = 0;
mfwMemEnd = 0;
mfwMem.next = 0;
mfwMem.len = 0;
}
for (i = 0; i < MfwTypMax; i++) /* init command table */
mfwCommand[i] = 0;
return MfwResOk;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW |
| STATE : code ROUTINE : mfwExit |
+--------------------------------------------------------------------+
PURPOSE : finalize framework
*/
void mfwExit (void)
{
TRACE_FUNCTION("mfwExit()");
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW |
| STATE : code ROUTINE : mfwSignallingMethod|
+--------------------------------------------------------------------+
PURPOSE : Defines the signalling method
*/
MfwRes mfwSetSignallingMethod (U8 method)
{
mfwSignallingMethod = method;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW |
| STATE : code ROUTINE : mfwInsert |
+--------------------------------------------------------------------+
PURPOSE : chain up framework element
*/
MfwHdr *mfwInsert (MfwHdr *h, MfwHdr *e)
{
if (!e) /* nothing to insert */
return 0;
if (!h) /* use root chain */
{
e->next = mfwRoot;
mfwRoot = e;
}
else if (h->type == MfwTypWin) /* use window chain */
{
e->next = ((MfwWin *) (h->data))->elems;
((MfwWin *) h->data)->elems = e;
if (mfwFocus == e->next) /* was focus window ? */
mfwFocus = e; /* yes: reassign focus */
}
else /* insert into any chain */
{
//es e->next = h->next;
//es h->next = e;
return 0;
}
return e;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW |
| STATE : code ROUTINE : mfwAppend |
+--------------------------------------------------------------------+
PURPOSE : chain up framework element at end of chain
*/
MfwHdr *mfwAppend (MfwHdr **h, MfwHdr *e)
{
if (!e) /* nothing to append */
return 0;
if (!h) /* append to header chain */
h = &mfwRoot;
if ((*h)->type == MfwTypMax) /* empty chain */
{
if (mfwFocus == *h)
mfwFocus = e;
e->next = *h;
*h = e;
return e;
}
while ((*h)->next && (*h)->next->type != MfwTypMax)
h = &((*h)->next);
e->next = (*h)->next;
(*h)->next = e;
return e;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW |
| STATE : code ROUTINE : mfwRemove |
+--------------------------------------------------------------------+
PURPOSE : unchain element and return its root
*/
MfwHdr **mfwRemove (MfwHdr *e)
{
MfwHdr **rp, **rpr, *h;
if (!e) /* nothing to remove */
return 0;
h = e; /* find elements root */
while (h->next && h->type != MfwTypMax)
h = h->next;
if (h->type != MfwTypMax)
return 0;
h = h->next; /* h points to root element */
if (!h) /* remove from header chain */
rp = &mfwRoot;
else if (h->type == MfwTypWin) /* remove from window chain */
rp = &(((MfwWin*)(h->data))->elems);
else /* don't remove from normal */
return 0;
rpr = rp;
while (*rp && (*rp)->type != MfwTypMax)
{
if (*rp == e)
{
*rp = e->next;
if (mfwFocus == e) /* first element of window */
mfwFocus = e->next;
return rpr;
}
rp = &((*rp)->next);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -