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

📄 extentest.c

📁 brew平台关于扩展编写的一个简单的例子
💻 C
📖 第 1 页 / 共 2 页
字号:
   example, a generic structure is provided so that app developers need not change app specific
   initialization section every time except for a call to IDisplay_InitAppData(). 
   This is done as follows: InitAppData() is called to initialize AppletData 
   instance. It is app developers responsibility to fill-in app data initialization 
   code of InitAppData(). App developer is also responsible to release memory 
   allocated for data contained in AppletData -- this can be done in 
   IDisplay_FreeAppData().

PROTOTYPE:
   int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)

PARAMETERS:
	clsID: [in]: Specifies the ClassID of the applet which is being loaded

	pIShell: [in]: Contains pointer to the IShell object. 

	pIModule: pin]: Contains pointer to the IModule object to the current module to which
	this app belongs

	ppObj: [out]: On return, *ppObj must point to a valid IApplet structure. Allocation
	of memory for this structure and initializing the base data members is done by AEEApplet_New().

DEPENDENCIES
  none

RETURN VALUE
  AEE_SUCCESS: If the app needs to be loaded and if AEEApplet_New() invocation was
     successful
  EFAILED: If the app does not need to be loaded or if errors occurred in 
     AEEApplet_New(). If this function returns FALSE, the app will not be loaded.

SIDE EFFECTS
  none
===========================================================================*/
int AEEClsCreateInstance(AEECLSID ClsId, IShell *pIShell, IModule *po, void **ppObj)
{
	*ppObj = NULL;
    
	/*1.UI applet*/
	if( ClsId == AEECLSID_UIAPPLET)
	{
		// Create the applet and make room for the applet structure
		if( AEEApplet_New(sizeof(UIApplet),
                          ClsId,
                          pIShell,
                          po,
                          (IApplet**)ppObj,
                          (AEEHANDLER)UIApplet_HandleEvent,
                          (PFNFREEAPPDATA)UIApplet_FreeAppData) ) // the FreeAppData function is called after sending EVT_APP_STOP to the HandleEvent function
                          
		{
			//Initialize applet data, this is called before sending EVT_APP_START
            // to the HandleEvent function
			if(UIApplet_InitAppData((UIApplet*)*ppObj))
			{
				//Data initialized successfully
				return(AEE_SUCCESS);
			}
			else
			{
				//Release the applet. This will free the memory allocated for the applet when
				// AEEApplet_New was called.
				IAPPLET_Release((IApplet*)*ppObj);
				return EFAILED;
			}

        } // end AEEApplet_New

    }
	/*2.Dat Applet*/
	else if(ClsId == AEECLSID_DATAPPLET)
	{
		// Create the applet and make room for the applet structure
		if( AEEApplet_New(sizeof(UIApplet),
			ClsId,
			pIShell,
			po,
			(IApplet**)ppObj,
			(AEEHANDLER)DatApplet_HandleEvent,
			(PFNFREEAPPDATA)DatApplet_FreeAppData) ) // the FreeAppData function is called after sending EVT_APP_STOP to the HandleEvent function
			
		{
			//Initialize applet data, this is called before sending EVT_APP_START
            // to the HandleEvent function
			if(DatApplet_InitAppData((DatApplet*)*ppObj))
			{
				//Data initialized successfully
				return(AEE_SUCCESS);
			}
			else
			{
				//Release the applet. This will free the memory allocated for the applet when
				// AEEApplet_New was called.
				IAPPLET_Release((IApplet*)*ppObj);
				return EFAILED;
			}
			
        } // end AEEApplet_New
	}
    
	/*3.UI extension*/
	else if(ClsId == AEECLSID_UIEXTENSION)
	{
	
		if( UIExtensionCls_New(sizeof(UIExtensionCls), pIShell, po, (IUIExtension **)ppObj) == SUCCESS )
			return AEE_SUCCESS;

	}
	/*4.dat extension*/
	else if(ClsId == AEECLSID_DATEXTENSION)
	{
		if( DatExtensionCls_New(sizeof(DatExtensionCls), pIShell, po, (IDatExtension **)ppObj) == SUCCESS )
			return AEE_SUCCESS;
		
	}
	return(EFAILED);
}

/*UI applet*/
/*===========================================================================
FUNCTION SampleAppWizard_HandleEvent

DESCRIPTION
	This is the EventHandler for this app. All events to this app are handled in this
	function. All APPs must supply an Event Handler.

PROTOTYPE:
	boolean SampleAppWizard_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)

PARAMETERS:
	pi: Pointer to the AEEApplet structure. This structure contains information specific
	to this applet. It was initialized during the AEEClsCreateInstance() function.

	ecode: Specifies the Event sent to this applet

   wParam, dwParam: Event specific data.

DEPENDENCIES
  none

RETURN VALUE
  TRUE: If the app has processed the event
  FALSE: If the app did not process the event

SIDE EFFECTS
  none
===========================================================================*/
static boolean UIApplet_HandleEvent(UIApplet* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{  
	IUIExtension* pUIExtension = NULL;
	int iRet = 0;
	char* pBuf = NULL;
    switch (eCode) 
	{
        // App is told it is starting up
        case EVT_APP_START:                        
		    // Add your code here...
			/*start Dat applet run background*/
			ISHELL_StartBackgroundApplet(pMe->a.m_pIShell,AEECLSID_DATAPPLET,NULL);
            return(TRUE);


        // App is told it is exiting
        case EVT_APP_STOP:
            // Add your code here...

      		return(TRUE);


        // App is being suspended 
        case EVT_APP_SUSPEND:
		    // Add your code here...

      		return(TRUE);


        // App is being resumed
        case EVT_APP_RESUME:
		    // Add your code here...

      		return(TRUE);


        // An SMS message has arrived for this app. Message is in the dwParam above as (char *)
        // sender simply uses this format "//BREW:ClassId:Message", example //BREW:0x00000001:Hello World
        case EVT_APP_MESSAGE:
		    // Add your code here...

      		return(TRUE);

        // A key was pressed. Look at the wParam above to see which key was pressed. The key
        // codes are in AEEVCodes.h. Example "AVK_1" means that the "1" key was pressed.
        case EVT_KEY:
		    // Add your code here...

      		return(TRUE);

		case EVT_DATA_UPDATE:/*receive the event sended by dat applet*/
			
			pBuf = (char*)(dwParam);
			IUIExtension_Show(pMe->m_pUiExtension,pBuf,8);
			return TRUE;


        // If nothing fits up to this point then we'll just break out
        default:
            break;
   }

   return FALSE;
}


// this function is called when your application is starting up
boolean UIApplet_InitAppData(UIApplet* pMe)
{
    // Get the device information for this handset.
    // Reference all the data by looking at the pMe->DeviceInfo structure
    // Check the API reference guide for all the handy device info you can get
    pMe->DeviceInfo.wStructSize = sizeof(pMe->DeviceInfo);
    ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->DeviceInfo);

    // Insert your code here for initializing or allocating resources...
	if(SUCCESS != (ISHELL_CreateInstance(pMe->a.m_pIShell, 
										AEECLSID_UIEXTENSION, 
										(void **)&pMe->m_pUiExtension)))
	{
		return FALSE;
	}

    // if there have been no failures up to this point then return success
    return TRUE;
}

// this function is called when your application is exiting
void UIApplet_FreeAppData(UIApplet* pMe)
{
    // insert your code here for freeing any resources you have allocated...

    // example to use for releasing each interface:
    // if ( pMe->pIMenuCtl != NULL )         // check for NULL first
    // {
    //    IMENUCTL_Release(pMe->pIMenuCtl)   // release the interface
    //    pMe->pIMenuCtl = NULL;             // set to NULL so no problems trying to free later
    // }
    //
	if(NULL != pMe->m_pUiExtension)
	{
		IUIExtension_Release(pMe->m_pUiExtension);
		pMe->m_pUiExtension = NULL;
	}

}

/*dat applet*/
static boolean DatApplet_HandleEvent(DatApplet* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{  
	IDatExtension* pDatExtension = NULL;
	int iLoop = 0;
    switch (eCode) 
	{
        // App is told it is starting up
	case EVT_APP_START:                        
		// Add your code here...
		
		return(TRUE);
		
	case EVT_APP_START_BACKGROUND :/*start backgroud*/
//		ISHELL_SetTimer(pMe->a.m_pIShell,20,TimeNotify,(void*)pMe);	
		IDatExtension_SendData(pMe->m_pDatExtension,TimeNotify);
		
		return TRUE;		
		
        // App is told it is exiting
	case EVT_APP_STOP:
		// Add your code here...
		
      		return(TRUE);
			
			
			// App is being suspended 
	case EVT_APP_SUSPEND:
		// Add your code here...
		
      		return(TRUE);
			
			
			// App is being resumed
	case EVT_APP_RESUME:
		// Add your code here...
		
      		return(TRUE);
			
			
			// An SMS message has arrived for this app. Message is in the dwParam above as (char *)
			// sender simply uses this format "//BREW:ClassId:Message", example //BREW:0x00000001:Hello World
	case EVT_APP_MESSAGE:
		// Add your code here...
		
      		return(TRUE);
			
			// A key was pressed. Look at the wParam above to see which key was pressed. The key
			// codes are in AEEVCodes.h. Example "AVK_1" means that the "1" key was pressed.
	case EVT_KEY:
		// Add your code here...
		
      		return(TRUE);
			
			// If nothing fits up to this point then we'll just break out
	default:
		break;
	}
	
	return FALSE;
}


// this function is called when your application is starting up
boolean DatApplet_InitAppData(DatApplet* pMe)
{
    // Get the device information for this handset.
    // Reference all the data by looking at the pMe->DeviceInfo structure
    // Check the API reference guide for all the handy device info you can get
    pMe->DeviceInfo.wStructSize = sizeof(pMe->DeviceInfo);
    ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->DeviceInfo);
	
    // Insert your code here for initializing or allocating resources...
	if(SUCCESS != (ISHELL_CreateInstance(pMe->a.m_pIShell, 
		AEECLSID_DATEXTENSION, 
		(void **)&pMe->m_pDatExtension)))
	{
		return FALSE;
	}
    // if there have been no failures up to this point then return success
    return TRUE;
}

// this function is called when your application is exiting
void DatApplet_FreeAppData(DatApplet* pMe)
{
    // insert your code here for freeing any resources you have allocated...
	
    // example to use for releasing each interface:
    // if ( pMe->pIMenuCtl != NULL )         // check for NULL first
    // {
    //    IMENUCTL_Release(pMe->pIMenuCtl)   // release the interface
    //    pMe->pIMenuCtl = NULL;             // set to NULL so no problems trying to free later
    // }
    //
	if(NULL != pMe->m_pDatExtension)
	{
		IDatExtension_Release(pMe->m_pDatExtension);
		pMe->m_pDatExtension = NULL;
	}
	
}

⌨️ 快捷键说明

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