test4lg686.c

来自「brew中的一个测试程序」· C语言 代码 · 共 517 行

C
517
字号
/*===========================================================================

FILE: test4lg686.c
===========================================================================*/


/*===============================================================================
INCLUDES AND VARIABLE DEFINITIONS
=============================================================================== */
#include "test4lg686.h"


/*===============================================================================
FUNCTION DEFINITIONS
=============================================================================== */

/*===========================================================================

FUNCTION: AEEClsCreateInstance


===========================================================================*/
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
   *ppObj = NULL;
		
   if(ClsId == AEECLSID_TEST4LG686){
      if(AEEApplet_New(sizeof(CTheApp), ClsId, pIShell,po,(IApplet**)ppObj,
         (AEEHANDLER)test4lg686_HandleEvent,(PFNFREEAPPDATA)test4lg686_FreeAppData)
         == TRUE)
      {
		 // Add your code here .....
		 if(test4lg686_InitAppData((CTheApp*)*ppObj))
			return (AEE_SUCCESS);
      }
   }
	return (EFAILED);
}

/*===========================================================================

FUNCTION test4lg686_HandleEvent


===========================================================================*/
static boolean test4lg686_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{  
	CTheApp *pApp=(CTheApp*)pi;
   switch (eCode) 
	{
      case EVT_APP_START:                        
		    
		    // Add your code here .....
			OnAppStart(pApp,eCode,wParam,dwParam);
      		return(TRUE);
	  case EVT_KEY:
		  ShowMSG(pApp,"                            ");
		  ClearInterface(pApp);
		  if(wParam == AVK_CLR)
		  {
			  if(pApp->pPopMenu)
			  {
				  IMENUCTL_Release(pApp->pPopMenu);
				  pApp->pPopMenu=NULL;
				  IMENUCTL_Redraw(pApp->pIMenuCtl);
				  return TRUE;
			  }	 
		  }
		  if(pApp->pPopMenu)
		  {
				IMENUCTL_HandleEvent(pApp->pPopMenu,eCode,wParam,0);
				return TRUE;
		  }
		  if(pApp->pIMenuCtl)
		  {
				IMENUCTL_HandleEvent(pApp->pIMenuCtl,eCode,wParam,0);
				return TRUE;
		  }
		  break;
	  case EVT_COMMAND:
		   OnComand(pApp,eCode,wParam,dwParam);
		   return TRUE;
      case EVT_APP_STOP:

		    // Add your code here .....

         return TRUE;
      default:
         break;
   }
   return FALSE;
}
//=====================================================================
static boolean test4lg686_InitAppData(CTheApp* pi)
{
	CTheApp* pApp=(CTheApp*)pi;
	AEEDeviceInfo	di;
	
	//get the physical screen size
	ISHELL_GetDeviceInfo(pApp->a.m_pIShell,&di);
	pApp->cxScreen=di.cxScreen;	
	pApp->cyScreen=di.cyScreen;
	
	//get the device font height
	pApp->nNormalFontHeight=IDISPLAY_GetFontMetrics(pApp->a.m_pIDisplay,AEE_FONT_NORMAL, NULL, NULL);
	pApp->nBoldFontHeight=IDISPLAY_GetFontMetrics(pApp->a.m_pIDisplay,AEE_FONT_BOLD,NULL,NULL);
	
	pApp->pIMenuCtl=NULL;
	pApp->pPopMenu=NULL;
	pApp->pIFile=NULL;
	pApp->pIFileMgr=NULL;
	pApp->pIMemStream=NULL;
	pApp->pIRingerMgr=NULL;
	return TRUE;
}
//=======================================================================
static void test4lg686_FreeAppData(CTheApp* pi)
{
	CTheApp* pApp=(CTheApp*)pi;
	if(pApp->pIMenuCtl)
	{
		IMENUCTL_Release(pApp->pIMenuCtl);
		pApp->pIMenuCtl=NULL;
	}
	if(pApp->pPopMenu)
	{
		IMENUCTL_Release(pApp->pPopMenu);
		pApp->pPopMenu=NULL;
	}
	ClearInterface(pApp);
	return;
}
//=======================================================================
static boolean  OnAppStart(CTheApp* pApp,AEEEvent eCode,uint16 wParam,uint32 dwParam)
{
	BuildMainMenu(pApp);
	return TRUE;
}
//=======================================================================
static boolean OnComand(CTheApp *pApp,AEEEvent eCode,uint16 wParam,uint32 dwParam)
{
	switch(wParam) 
	{
		case 100:
			PlayRingerFile(pApp,"midfile.mid");
			break;
		case 101:
			PlayRingerFile(pApp,"mmffile.mmf");
			break;
		case 102:
			PlayRingerFile(pApp,"qcpfile.qcp");
			break;
		case 103:
			PlayRingerFile(pApp,"pmdfile.pmd");
			break;
		case 104:
			PlayStream(pApp,"midfile.mid");
			break;
		case 105:
			PlayStream(pApp,"mmffile.mmf");
			break;
		case 106:
			PlayStream(pApp,"qcpfile.qcp");
			break;
		case 107:
			PlayStream(pApp,"pmdfile.pmd");
			break;
		case 108:
			CreateRinger(pApp,"midfile.mid",1);
			break;
		case 109:
			CreateRinger(pApp,"mmffile.mmf",4);
			break;
		case 110:
			CreateRinger(pApp,"qcpfile.qcp",3);
			break;
		case 111:
			CreateRinger(pApp,"pmdfile.pmd",11);
			break;
		case 112:
			SetRinger(pApp,"midfile.mid",1);
			break;
		case 113:
			SetRinger(pApp,"mmffile.mmf",4);
			break;
		case 114:
			SetRinger(pApp,"qcpfile.qcp",3);
			break;
		case 115:
			SetRinger(pApp,"pmdfile.pmd",11);
			break;
		case 116:
			EnumRinger(pApp);
			break;
		case 201:
			break;
		case 202:
			break;
		case 203:
			break;
		default:
			break;
	}
	return TRUE;
}
//==================================================================
void BuildMainMenu(CTheApp* pApp)
{
	AEERect rct;
	AECHAR szBuf[64];
	rct.x=0;
	rct.y=0;
	rct.dx=pApp->cxScreen-8;
	rct.dy=pApp->cyScreen-pApp->nNormalFontHeight-8;
	ISHELL_CreateInstance(pApp->a.m_pIShell, 
					AEECLSID_MENUCTL, (void **)&pApp->pIMenuCtl);
	
    IMENUCTL_SetRect(pApp->pIMenuCtl, &rct);

	STR_TO_WSTR("1.Play mid file", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,100,szBuf,0);

	STR_TO_WSTR("2.Play mmf file", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,101,szBuf,0);

	STR_TO_WSTR("3.Play qcp file", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,102,szBuf,0);

	STR_TO_WSTR("4.Play pmd file", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,103,szBuf,0);

	STR_TO_WSTR("5.Play stream mid", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,104,szBuf,0);
	
	STR_TO_WSTR("6.Play stream mmf", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,105,szBuf,0);

	STR_TO_WSTR("7.Play stream qcp", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,106,szBuf,0);

	STR_TO_WSTR("8.Play stream pmd", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,107,szBuf,0);

	STR_TO_WSTR("9.Create with mid", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,108,szBuf,0);

	STR_TO_WSTR("10.Create with mmf", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,109,szBuf,0);

	STR_TO_WSTR("11.Create with qcp", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,110,szBuf,0);

	STR_TO_WSTR("12.Create with pmd", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,111,szBuf,0);

	STR_TO_WSTR("13.Set with mid", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,112,szBuf,0);

	STR_TO_WSTR("14.Set with mmf", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,113,szBuf,0);

	STR_TO_WSTR("15.Set with qcp", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,114,szBuf,0);

	STR_TO_WSTR("16.Set with pmd", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,115,szBuf,0);

	STR_TO_WSTR("17.Enum Ringer", szBuf, sizeof(szBuf));
	IMENUCTL_AddItem(pApp->pIMenuCtl,0,0,116,szBuf,0);
    
	IMENUCTL_SetActive(pApp->pIMenuCtl,TRUE);
	return;
}
//==================================================================

//===================================================================
void PlayRingerFile(CTheApp* pApp,const char *filename)
{
	ClearInterface(pApp);
	ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_RINGERMGR, 
										(void **)(&pApp->pIRingerMgr));
	IRINGERMGR_PlayFile(pApp->pIRingerMgr,filename,0);
	return;
}
//====================================================================
void PlayStream(CTheApp* pApp,const char *filename)
{
	FileInfo fi;
	ClearInterface(pApp);

	
	
	ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_RINGERMGR, 
										(void **)&pApp->pIRingerMgr);
	
	ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_FILEMGR, 
										(void **)(&pApp->pIFileMgr));
	
	pApp->pIFile=IFILEMGR_OpenFile(pApp->pIFileMgr,filename, _OFM_READ);

	IFILE_GetInfo(pApp->pIFile, &fi);
	pApp->pBuf=(byte *) MALLOC(fi.dwSize);

	IFILE_Read(pApp->pIFile, (void *)pApp->pBuf, fi.dwSize);
	
	ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_MEMASTREAM, 
										(void **)(&pApp->pIMemStream));

	IMEMASTREAM_Set(pApp->pIMemStream,pApp->pBuf,fi.dwSize, 0, 0);
    IRINGERMGR_PlayStream(pApp->pIRingerMgr, (IAStream*)pApp->pIMemStream,0);
	

	return;
}
//====================================================================
void CreateRinger(CTheApp* pApp,const char *filename,AEESoundPlayerFile format)
{
	FileInfo fi;
	AECHAR rngName[20]={'\0'};
	AEERingerID ringerId;

	ClearInterface(pApp);
	
	STR_TO_WSTR(filename, rngName, sizeof(rngName));

	

	ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_RINGERMGR, 
										(void **)&pApp->pIRingerMgr);

	
	//ringerId=IRINGERMGR_GetRingerID(pApp->pIRingerMgr,rngName);
	
	ringerId=GetRingerId(pApp,rngName);
	
	if(ringerId!=AEE_RINGER_ID_NONE)
	{
		if(SUCCESS!=IRINGERMGR_Remove(pApp->pIRingerMgr, ringerId))
		{
			ShowMSG(pApp,"Not remove");
			return;
		}
	}
	ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_FILEMGR, 
										(void **)(&pApp->pIFileMgr));
	
	pApp->pIFile=IFILEMGR_OpenFile(pApp->pIFileMgr,filename, _OFM_READ);

	IFILE_GetInfo(pApp->pIFile, &fi);
	pApp->pBuf=(byte *) MALLOC(fi.dwSize+1);
	MEMSET(pApp->pBuf,0,fi.dwSize+1);

	IFILE_Read(pApp->pIFile, (void *)pApp->pBuf, fi.dwSize);
	
	ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_MEMASTREAM, 
										(void **)(&pApp->pIMemStream));

	IMEMASTREAM_Set(pApp->pIMemStream,pApp->pBuf,fi.dwSize, 0, 0);

	if(SUCCESS==IRINGERMGR_Create(pApp->pIRingerMgr,(AECHAR*)rngName, format,
											(IAStream*)pApp->pIMemStream))
	{
		ShowMSG(pApp,"Create Ok");
	}
	else
	{
		ShowMSG(pApp,"Create Failed");
	}

	
	return;
}
//===================================================================
AEERingerID GetRingerId(CTheApp *pApp,AECHAR* rngName)
{
	AEERingerInfo ri;
	AEERingerID ringerId;
	WSTRUPPER(rngName);
	
	ringerId=AEE_RINGER_ID_NONE;
	if(IRINGERMGR_EnumRingerInit(pApp->pIRingerMgr)==SUCCESS)
	{
		while(IRINGERMGR_EnumNextRinger(pApp->pIRingerMgr,&ri)==TRUE)
		{
			if (!ri.bReadOnly && STRLEN(ri.szFile) > 0)//skip phone's default tones -- they are readonly
			{
				WSTRUPPER(ri.szName);
					
				if(WSTRCMP(rngName,ri.szName) ==0)
				{
					ringerId = ri.id;
					break;
				}
			}
		}
	}
	return ringerId;
}
//===================================================================

void SetRinger(CTheApp* pApp,const char *filename,AEESoundPlayerFile format)
{
	AECHAR rngName[20]={'\0'};
	AEERingerID ringerId ;
	CreateRinger(pApp,filename,format);
	
	ClearInterface(pApp);

	STR_TO_WSTR(filename, rngName, sizeof(rngName));
				
	ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_RINGERMGR, 
										(void **)&pApp->pIRingerMgr); 
	
	//ringerId =	IRINGERMGR_GetRingerID(pApp->pIRingerMgr,filename);
	
	ringerId=GetRingerId(pApp,rngName);
	if(ringerId==AEE_RINGER_ID_NONE)
	{
		ShowMSG(pApp,"Have no ringer");
		return;
	}
	//have to modify the second para to 1 sometimes.
	//if(SUCCESS==IRINGERMGR_SetRinger(pApp->pIRingerMgr,1, ringerId))
	if(SUCCESS==IRINGERMGR_SetRinger(pApp->pIRingerMgr,0, ringerId))
	{
		ShowMSG(pApp,"Set Ok");
	}
	else
	{
		ShowMSG(pApp,"Set failed");
	}
	return;
}
//====================================================================
void EnumRinger(CTheApp* pApp)
{
	uint16 i=200;
	AEERingerInfo ri;
	AEERect rct;
	
	rct.x=pApp->nNormalFontHeight;
	rct.y=pApp->nNormalFontHeight;
	rct.dx=pApp->cxScreen-pApp->nNormalFontHeight-pApp->nNormalFontHeight;
	rct.dy=pApp->nNormalFontHeight*5;
	
	if(pApp->pPopMenu)
	{
		IMENUCTL_Release(pApp->pPopMenu);
		pApp->pPopMenu=NULL;
	}
	ISHELL_CreateInstance(pApp->a.m_pIShell, 
					AEECLSID_MENUCTL, (void **)&pApp->pPopMenu);
	IMENUCTL_SetRect(pApp->pPopMenu, &rct);

	ClearInterface(pApp);
	
	ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_RINGERMGR, 
										(void **)&pApp->pIRingerMgr);
	if(IRINGERMGR_EnumRingerInit(pApp->pIRingerMgr)==SUCCESS)
	{
		while(IRINGERMGR_EnumNextRinger(pApp->pIRingerMgr,&ri)==TRUE)
		{
			if (!ri.bReadOnly && STRLEN(ri.szFile) > 0)//skip phone's default tones -- they are readonly
			{
				IMENUCTL_AddItem(pApp->pPopMenu,NULL,NULL,
                                             i, (AECHAR*)ri.szName, 0);
				i++;
			}
		}
	}
	IMENUCTL_SetActive(pApp->pPopMenu,TRUE);
	return;
}
//====================================================================
void ClearInterface(CTheApp* pApp)
{
	
	
	if(pApp->pIRingerMgr)
	{
		IRINGERMGR_RegisterNotify(pApp->pIRingerMgr,NULL,NULL);
		IRINGERMGR_Stop(pApp->pIRingerMgr);
		IRINGERMGR_Release(pApp->pIRingerMgr);
		pApp->pIRingerMgr=NULL;
	}
	if(pApp->pIFile)
	{
		IFILE_Release(pApp->pIFile);
		pApp->pIFile=NULL;
	}
	if(pApp->pIFileMgr)
	{
		IFILEMGR_Release(pApp->pIFileMgr);
		pApp->pIFileMgr=NULL;
	}
	if(pApp->pIMemStream)
	{
		IMEMASTREAM_Release(pApp->pIMemStream);
		pApp->pIMemStream=NULL;
	}
	return;
}
//==================================================================
void ShowMSG(CTheApp* pApp,const char* pszStr)
{
	AECHAR szBuf[128];
	STR_TO_WSTR((char*)pszStr,szBuf,sizeof(szBuf));
	
	IDISPLAY_DrawText(pApp->a.m_pIDisplay,AEE_FONT_NORMAL,szBuf,-1,0,
								pApp->cyScreen-pApp->nNormalFontHeight-4,
									NULL,IDF_ALIGN_CENTER);

	IDISPLAY_Update(pApp->a.m_pIDisplay);
	return;
}

⌨️ 快捷键说明

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