📄 mmiutilapi.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 + -