⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmiutilapi.h

📁 是一个手机功能的模拟程序
💻 H
字号:
/*
 * Description:
 *		This module contains utilities API for MMI development.
 *
 * Histroy:
 *		2003/11/20	Talcon created.
 *		2004/07/06	robert.chen 
 *			add dynamic memory manager API for MMI
 *			add trace API to log message in internal RAM
 */
 


#ifndef _MMIUTILAPI_H
#define _MMIUTILAPI_H

/*******************************
*if you want to use trace,pls add 
#define TDTRACE 1
#include "mmiutilapi.h"
******************************************/

#define MMI_DBGBUF_SZ		512

/*2004/04/01,talcon add for disable trace*/
#define TDTRACE 0
#define GPRS_TRACE 0
#define PHONEBOOK_TRACE 0
#define CAMERA_TRACE 0
/*end talcon add*/

#ifndef TDTRACE
#define TDTRACE 1
#endif

#ifndef WAP_TRACE
#define WAP_TRACE 1 
#endif

#ifndef MMS_TRACE
#define MMS_TRACE 1
#endif

#if TDTRACE
#define MMI_TRACE_EVENT(f)  MI_dbgPrintf f
#else
#define MMI_TRACE_EVENT(f)
#endif

#ifndef GPRS_TRACE
#define GPRS_TRACE 1
#endif

#if GPRS_TRACE
#define GPRS_TRACE_EVENT(f)  MI_dbgPrintf f
#else
#define GPRS_TRACE_EVENT(f)
#endif


#ifndef PHONEBOOK_TRACE
#define PHONEBOOK_TRACE 1
#endif

#if PHONEBOOK_TRACE
#define PHK_TRACE_EVENT(f)  MI_dbgPrintf f
#else
#define PHK_TRACE_EVENT(f)
#endif

#if CAMERA_TRACE
#define CAM_TRACE_EVENT(f)  MI_dbgPrintf f
#else
#define CAM_TRACE_EVENT(f)
#endif

#if WAP_TRACE
#define WAP_TRACE_EVENT(f) MI_dbgPrintf f
#define WAP_DELAY(x) rvf_delay(x)
#else
#define WAP_TRACE_EVENT(f)
#define WAP_DELAY(x)
#endif

#if MMS_TRACE
#define MMS_TRACE_EVENT(f) MI_dbgPrintf f;\
	rvf_delay(2)
#define MMS_DELAY(x) rvf_delay(x)
#else
#define MMS_TRACE_EVENT(f)
#define MMS_DELAY(x)
#endif

/* robert.chen add, definition for MMI memory management */
#define MMIMEM_INFORMATION	1
#define MMIMEM_UNBLKFREE	1
#define MMIMEM_MONITOR		1
#define MMIMEM_TRACE		1

#define MMI_DYNMEM_POOL_SIZE	(1024*150)		/* 150k bytes */
#define MMI_PARTMEM_MAGICWORD	0x50415254
#define MMI_DYNMEM_MAGICWORD	0x44594e4d
#define MMI_DYNMEM_BLKSZ		256
#define MMI_MEMINUSE_FLAG		0xffffffff
#define MMI_MEMFREE_FLAG		0x0

/* partition memory control block */
typedef struct mmimem_pcb_s
{
	unsigned int	magicWord;	
	void*			pStartAddr;
	unsigned int	poolSize;
	unsigned int	partSize;
	unsigned int	aviableNum;
	unsigned int	totalNum;
	unsigned int	idx;
	struct mmimem_pmHdr_s *pFree;
	struct mmimem_pmHdr_s *pAllocated;
} T_MMIMEM_PCB;

/* partition memory header */
#define MMIMEM_CALLER_LEN	8
typedef struct mmimem_pmHdr_s
{
	struct mmimem_pmHdr_s *next;
	T_MMIMEM_PCB	*pPCB;
#if (MMIMEM_UNBLKFREE == 1)
	unsigned int	inuse;
#endif	
#if (MMIMEM_MONITOR == 1)
	unsigned int line;
	char caller[MMIMEM_CALLER_LEN];	
#endif
} T_MMIMEM_PMHDR;

#define PM_HEADER_LEN	(sizeof(T_MMIMEM_PMHDR))

/* dynamic memory control block */
typedef struct mmimem_dcb_s
{
	unsigned int	magicWord;	
	void*			pStartAddr;
	unsigned int	poolSize;
	struct mmimem_dmHdr_s *pAllocated;	
} T_MMIMEM_DCB;

/* dynamic memory header */
typedef struct mmimem_dmHdr_s
{
	struct mmimem_dmHdr_s *next;
	T_MMIMEM_DCB	*pDCB;
	unsigned int	size;
#if (MMIMEM_UNBLKFREE == 1)
	unsigned int	inuse;
#endif
#if (MMIMEM_MONITOR == 1)
	unsigned int line;
	char caller[MMIMEM_CALLER_LEN];	
#endif	
} T_MMIMEM_DMHDR;

#define DM_HEADER_LEN	sizeof(T_MMIMEM_DMHDR)

/* memory partition size, music can be divided by 4 */
#define MMI_PARTMEM_0_SIZE		20
#define MMI_PARTMEM_1_SIZE		40
#define MMI_PARTMEM_2_SIZE		80
#define MMI_PARTMEM_3_SIZE		160
#define MMI_PARTMEM_4_SIZE		256
#define MMI_PARTMEM_5_SIZE		512
#define MMI_PARTMEM_6_SIZE		1024
#define MMI_PARTMEM_7_SIZE		2048
#define MMI_PARTMEM_8_SIZE		4096
#define MMI_PARTMEM_9_SIZE		8192

/* memory partition number */
#define MMI_PARTMEM_0_NUM		300		//sz 20
#define MMI_PARTMEM_1_NUM		100		//sz 40
#define MMI_PARTMEM_2_NUM		50		//sz 80
#define MMI_PARTMEM_3_NUM		40		//sz 160
#define MMI_PARTMEM_4_NUM		20		//sz 256
#define MMI_PARTMEM_5_NUM		10		//sz 512
#define MMI_PARTMEM_6_NUM		8		//sz 1024
#define MMI_PARTMEM_7_NUM		6		//sz 2048
#define MMI_PARTMEM_8_NUM		2		//sz 4096
#define MMI_PARTMEM_9_NUM		2		//sz 8192

/* partition pool size */
#define MMI_PARTPOOL_0_SIZE		((MMI_PARTMEM_0_SIZE + PM_HEADER_LEN) * MMI_PARTMEM_0_NUM)
#define MMI_PARTPOOL_1_SIZE		((MMI_PARTMEM_1_SIZE + PM_HEADER_LEN) * MMI_PARTMEM_1_NUM)
#define MMI_PARTPOOL_2_SIZE		((MMI_PARTMEM_2_SIZE + PM_HEADER_LEN) * MMI_PARTMEM_2_NUM)
#define MMI_PARTPOOL_3_SIZE		((MMI_PARTMEM_3_SIZE + PM_HEADER_LEN) * MMI_PARTMEM_3_NUM)
#define MMI_PARTPOOL_4_SIZE		((MMI_PARTMEM_4_SIZE + PM_HEADER_LEN) * MMI_PARTMEM_4_NUM)
#define MMI_PARTPOOL_5_SIZE		((MMI_PARTMEM_5_SIZE + PM_HEADER_LEN) * MMI_PARTMEM_5_NUM)
#define MMI_PARTPOOL_6_SIZE		((MMI_PARTMEM_6_SIZE + PM_HEADER_LEN) * MMI_PARTMEM_6_NUM)
#define MMI_PARTPOOL_7_SIZE		((MMI_PARTMEM_7_SIZE + PM_HEADER_LEN) * MMI_PARTMEM_7_NUM)
#define MMI_PARTPOOL_8_SIZE		((MMI_PARTMEM_8_SIZE + PM_HEADER_LEN) * MMI_PARTMEM_8_NUM)
#define MMI_PARTPOOL_9_SIZE		((MMI_PARTMEM_9_SIZE + PM_HEADER_LEN) * MMI_PARTMEM_9_NUM)


/* partition pool address */
#define MMI_PARTPOOL_0_OFFSET	0
#define MMI_PARTPOOL_1_OFFSET	(MMI_PARTPOOL_0_OFFSET + MMI_PARTPOOL_0_SIZE)  
#define MMI_PARTPOOL_2_OFFSET	(MMI_PARTPOOL_1_OFFSET + MMI_PARTPOOL_1_SIZE)  
#define MMI_PARTPOOL_3_OFFSET	(MMI_PARTPOOL_2_OFFSET + MMI_PARTPOOL_2_SIZE)  
#define MMI_PARTPOOL_4_OFFSET	(MMI_PARTPOOL_3_OFFSET + MMI_PARTPOOL_3_SIZE)  
#define MMI_PARTPOOL_5_OFFSET	(MMI_PARTPOOL_4_OFFSET + MMI_PARTPOOL_4_SIZE) 
#define MMI_PARTPOOL_6_OFFSET	(MMI_PARTPOOL_5_OFFSET + MMI_PARTPOOL_5_SIZE)
#define MMI_PARTPOOL_7_OFFSET	(MMI_PARTPOOL_6_OFFSET + MMI_PARTPOOL_6_SIZE)
#define MMI_PARTPOOL_8_OFFSET	(MMI_PARTPOOL_7_OFFSET + MMI_PARTPOOL_7_SIZE)
#define MMI_PARTPOOL_9_OFFSET	(MMI_PARTPOOL_8_OFFSET + MMI_PARTPOOL_8_SIZE)



#define MMI_PARTMEM_POOL_NUM	10
#define MMI_PARTMEM_POOL_SIZE	(((MMI_PARTPOOL_0_SIZE + MMI_PARTPOOL_1_SIZE + MMI_PARTPOOL_2_SIZE + \
								   MMI_PARTPOOL_3_SIZE + MMI_PARTPOOL_4_SIZE + MMI_PARTPOOL_5_SIZE + \
								   MMI_PARTPOOL_6_SIZE + MMI_PARTPOOL_7_SIZE + MMI_PARTPOOL_8_SIZE + \
								   MMI_PARTPOOL_9_SIZE) + 3) / 4)

#if (MMIMEM_INFORMATION == 1)
typedef struct mmimem_info_s
{
	unsigned int	min_reqsz;		/* minimum requested memory block size */
	unsigned int	max_reqsz;		/* maximum requested memory block size */
	unsigned int	max_allocsz;	/* maximum allocated memory block size */
	unsigned char	max_allocpart[MMI_PARTMEM_POOL_NUM];
	unsigned char	cur_allocpart[MMI_PARTMEM_POOL_NUM];
	unsigned char	max_dyn_used;	/* percent of used dynamic memory */
	unsigned char	cur_dyn_used;
} T_MMIMEM_INFO;
#endif

#ifdef _MMIUTILAPI_C_
/* partition memory space for all partition pools */
unsigned int mmiPartMem[MMI_PARTMEM_POOL_SIZE];

/* partition memory pools config */
T_MMIMEM_PCB mmiPCBTbl[MMI_PARTMEM_POOL_NUM] = 
{
	{MMI_PARTMEM_MAGICWORD, (unsigned char*)&mmiPartMem[0],						    MMI_PARTPOOL_0_SIZE, MMI_PARTMEM_0_SIZE, MMI_PARTMEM_0_NUM, MMI_PARTMEM_0_NUM,	0, NULL, 	NULL},
	{MMI_PARTMEM_MAGICWORD, (unsigned char*)&mmiPartMem[0] + MMI_PARTPOOL_1_OFFSET,	MMI_PARTPOOL_1_SIZE, MMI_PARTMEM_1_SIZE, MMI_PARTMEM_1_NUM, MMI_PARTMEM_1_NUM,	1, NULL, 	NULL},
	{MMI_PARTMEM_MAGICWORD, (unsigned char*)&mmiPartMem[0] + MMI_PARTPOOL_2_OFFSET,	MMI_PARTPOOL_2_SIZE, MMI_PARTMEM_2_SIZE, MMI_PARTMEM_2_NUM, MMI_PARTMEM_2_NUM,	2, NULL, 	NULL},
    {MMI_PARTMEM_MAGICWORD, (unsigned char*)&mmiPartMem[0] + MMI_PARTPOOL_3_OFFSET,	MMI_PARTPOOL_3_SIZE, MMI_PARTMEM_3_SIZE, MMI_PARTMEM_3_NUM, MMI_PARTMEM_3_NUM,	3, NULL, 	NULL},                                                                                                                                                                             
	{MMI_PARTMEM_MAGICWORD, (unsigned char*)&mmiPartMem[0] + MMI_PARTPOOL_4_OFFSET,	MMI_PARTPOOL_4_SIZE, MMI_PARTMEM_4_SIZE, MMI_PARTMEM_4_NUM, MMI_PARTMEM_4_NUM,	4, NULL, 	NULL},
	{MMI_PARTMEM_MAGICWORD, (unsigned char*)&mmiPartMem[0] + MMI_PARTPOOL_5_OFFSET,	MMI_PARTPOOL_5_SIZE, MMI_PARTMEM_5_SIZE, MMI_PARTMEM_5_NUM, MMI_PARTMEM_5_NUM,	5, NULL, 	NULL},
	{MMI_PARTMEM_MAGICWORD, (unsigned char*)&mmiPartMem[0] + MMI_PARTPOOL_6_OFFSET,	MMI_PARTPOOL_6_SIZE, MMI_PARTMEM_6_SIZE, MMI_PARTMEM_6_NUM, MMI_PARTMEM_6_NUM,	6, NULL, 	NULL},
	{MMI_PARTMEM_MAGICWORD, (unsigned char*)&mmiPartMem[0] + MMI_PARTPOOL_7_OFFSET,	MMI_PARTPOOL_7_SIZE, MMI_PARTMEM_7_SIZE, MMI_PARTMEM_7_NUM, MMI_PARTMEM_7_NUM,	7, NULL, 	NULL},
	{MMI_PARTMEM_MAGICWORD, (unsigned char*)&mmiPartMem[0] + MMI_PARTPOOL_8_OFFSET,	MMI_PARTPOOL_8_SIZE, MMI_PARTMEM_8_SIZE, MMI_PARTMEM_8_NUM, MMI_PARTMEM_8_NUM,	8, NULL, 	NULL},
	{MMI_PARTMEM_MAGICWORD, (unsigned char*)&mmiPartMem[0] + MMI_PARTPOOL_9_OFFSET,	MMI_PARTPOOL_9_SIZE, MMI_PARTMEM_9_SIZE, MMI_PARTMEM_9_NUM, MMI_PARTMEM_9_NUM,	9, NULL, 	NULL}
};

/* dynamic memory space */
unsigned int mmiDynMem[(MMI_DYNMEM_POOL_SIZE+3)/4];

/* dynamic memory config */
T_MMIMEM_DCB mmiDynMemCB =
{ MMI_DYNMEM_MAGICWORD, &mmiDynMem[0], MMI_DYNMEM_POOL_SIZE, NULL};
#endif

#ifndef _MMIUTILAPI_C_
#define EXTERN_LCL	extern
#else
#define EXTERN_LCL
#endif

/***
 * memory manager API error code
 */
#define EC_MMIMEM_OK		0	/* request executed successfully */
#define EC_MMIMEM_ERROR		-1	/* a general error */
#define EC_MMIMEM_FULL		-2	/* no free memory space can be allocated */	
#define EC_MMIMEM_NOTALLOC	-3	/* the memory to be free is not allocated previously */
#define EC_MMIMEM_PTRERROR	-4 	/* the memory pointer error */

/* Output printf-like formated string to rivieratracer */
EXTERN_LCL void MI_dbgPrintf(const char* const format, ...);

/* Initialize the MMI dynamic memory and partition memory */
EXTERN_LCL int MI_mmimem_Init(void);

/* Allocate a memory block, if success, return EC_MMIMEM_OK,
 * otherwise return a negative number indicating the reason. 
 */
#if (MMIMEM_MONITOR == 1)
EXTERN_LCL int MI_mmimem_Alloc(void **buf, unsigned int size, char* name, int line);
#else
EXTERN_LCL int MI_mmimem_Alloc(void **buf, unsigned int size);
#endif

/* Free a previously allocated memory block, if success return EC_MMIMEM_OK, 
 * otherwise return a negative number indicating the reason.
 */
#if (MMIMEM_MONITOR == 1)
#if (MMIMEM_UNBLKFREE == 1)
EXTERN_LCL int MI_mmimem_Free(void *buf, char* name, int line);
#else //MMIMEM_UNBLKFREE
EXTERN_LCL int MI_mmimem_Free(void *buf, unsigned int suspend, char* name, int line);
#endif 
#else  //MMIMEM_MONITOR
#if (MMIMEM_UNBLKFREE == 1)
EXTERN_LCL int MI_mmimem_Free(void *buf);
#else
EXTERN_LCL int MI_mmimem_Free(void *buf,  unsigned int suspend);
#endif
#endif 

/* Dump memory statistic information to external tracer */
EXTERN_LCL void MI_mmimem_Dump(void);

#if (MMIMEM_INFORMATION == 1)
/* Get mmi memory usage information */
EXTERN_LCL void MI_mmimem_Info(T_MMIMEM_INFO *pInfo);
#endif

#if (MMIMEM_MONITOR == 1)
#define MI_ALLOC(p,s,r)		r = MI_mmimem_Alloc((void**)&p, s, __FILE__, __LINE__)
#if (MMIMEM_UNBLKFREE == 1)
#define MI_FREE(p,r)		r =	MI_mmimem_Free((void*)p, __FILE__, __LINE__)
#else
#define MI_FREE(p,r)		r =	MI_mmimem_Free((void*)p, 20, __FILE__, __LINE__)
#define MI_FREE_ISR(p,r)	r = MI_mmimem_Free((void*)p, 0, __FILE__, __LINE__)
#endif
#else //MMIMEM_MONITOR
#define MI_ALLOC(p,s,r)		r = MI_mmimem_Alloc((void**)&p, s)
#if (MMIMEM_UNBLKFREE == 1)
#define MI_FREE(p,r)		r =	MI_mmimem_Free((void*)p)
#else
#define MI_FREE(p,r)		r =	MI_mmimem_Free((void*)p, 20)
#define MI_FREE_ISR(p,r)	r = MI_mmimem_Free((void*)p, 0)
#endif
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -