📄 mfw_gprs.c
字号:
/*+--------------------------------------------------------------------+| PROJECT: MMI-Framework (8417) $Workfile:: mfw_gprs.c $|| $Author: KGT $Revision:: 1 $|| CREATED: 13.02.2001 $Modtime:: 13.02.2001 || STATE : code |+--------------------------------------------------------------------+ MODULE : MFW_GPRS PURPOSE : This modul contains functions needed for the GPRS management in MFW.*//* include necessary header files ----------------------------------*/#ifndef NEW_FRAME #error GPRS need NEW_FRAME#endif /* NEW_FRAME */#include <string.h>#include <stdio.h>#include <stdlib.h>#include "typedefs.h"#include "mfw_mfw.h"#include "vsi.h"#include "custom.h"#include "gsm.h"#include "message.h"#include "prim.h"#include "aci_cmh.h" /* include types declared in ACI */#include "gaci_cmh.h" /* include types declared in GACI *///#include "cus_aci.h"#include "p_sim.h"#include "pcm.h"#include "mfw_win.h"#include "mfw_gprs.h"/* import of external globals --------------------------------------*/EXTERN MfwHdr *current_mfw_elem;/* definition of globals -------------------------------------------*//* definition of constants -----------------------------------------*//* definition of internal functions --------------------------------*/static BOOL gprs_sign_exec ( T_MFW_HDR *cur_elem, T_MFW_EVENT event, T_MFW_GPRS_PARA *para );/*+--------------------------------------------------------------------+| PROJECT: MMI-Framework (8417) MODULE: MFW_GPRS || STATE : code ROUTINE: gprs_init |+--------------------------------------------------------------------+ PURPOSE : initialize for GPRS magangement*/void gprs_init ( void ){ TRACE_FUNCTION ("gprs_init()"); /* * set callback for MFW commands */ mfwCommand[MfwTypGprs] = (MfwCb) gprsCommand;}/*+--------------------------------------------------------------------+| PROJECT: MMI-Framework (8417) MODULE: MFW_GPRS || STATE : code ROUTINE: gprs_exit |+--------------------------------------------------------------------+ PURPOSE : finalize for GPRS magangement*/void gprs_exit ( void ){ TRACE_FUNCTION ("gprs_exit()");}/*+--------------------------------------------------------------------+| PROJECT: MMI-Framework (8417) MODULE: MFW_GPRS || STATE : code ROUTINE: gprs_create |+--------------------------------------------------------------------+ PURPOSE : create event for gprs management PARAMETERS : RETURNS :*/T_MFW_HND gprs_create ( T_MFW_HND h, T_MFW_EVENT event, T_MFW_CB cbfunc ){ T_MFW_HDR *hdr; T_MFW_GPRS *gprs_data; T_CGATT_STATE state; T_CGCLASS_CLASS cls; T_CGREG_STAT regState; USHORT lac; USHORT ci; MfwHdr *insert_status =0; TRACE_FUNCTION ("gprs_create()"); hdr = (T_MFW_HDR *) mfwAlloc(sizeof (T_MFW_HDR)); gprs_data = (T_MFW_GPRS *) mfwAlloc(sizeof (T_MFW_GPRS)); if ( !hdr OR !gprs_data ) { TRACE_ERROR("ERROR: gprs_create() Mem Alloc Failed."); if(hdr) mfwFree((U8*)hdr,sizeof(MfwHdr)); if(gprs_data) mfwFree((U8*)gprs_data,sizeof(T_MFW_GPRS)); return FALSE; } /* * initialisation of the handler */ gprs_data->emask = event; gprs_data->handler = cbfunc; hdr->data = gprs_data; /* store gprs control block in node */ hdr->type = MfwTypGprs; /* store type of event handler */ /* * initialisation of gprs data */ gprs_data->data.numContexts = 0; gprs_data->data.tclass = NULL; gprs_data->data.regState = NULL; gprs_data->data.attached = NULL; gprs_data->data.contexts = (T_MFW_GPRS_CONTEXT *) mfwAlloc(sizeof(T_MFW_GPRS_CONTEXT) * MAX_CID_PLUS_EINS); /* * installation of the handler */ insert_status = mfwInsert((T_MFW_HDR *)h, hdr); if(!insert_status) { TRACE_ERROR("ERROR: gprs_create() Failed to Install Handler. "); mfwFree((U8*)hdr,sizeof(MfwHdr)); mfwFree((U8*)gprs_data,sizeof(T_MFW_GPRS)); return 0; } return insert_status;}/*+--------------------------------------------------------------------+| PROJECT: MMI-Framework (8417) MODULE: MFW_GPRS || STATE : code ROUTINE: gprs_delete |+--------------------------------------------------------------------+ PURPOSE : delete event for gprs management PARAMETERS : RETURNS : MFW_RES_OK, on success MFW_RES_ILL_HND, on failure*/T_MFW_RES gprs_delete ( T_MFW_HND h ){ T_MFW_GPRS *gprs_data; TRACE_FUNCTION ("gprs_delete()"); if ( !h OR !((T_MFW_HDR *)h)->data ) return MFW_RES_ILL_HND; /* * deinstallation of the handler */ //if ( !mfwRemove((T_MFW_HDR *)h) ) if ( !mfwRemove(h) ) return MFW_RES_ILL_HND; gprs_data = ((T_MFW_HDR *) h)->data; while ( gprs_data->data.numContexts ) { mfwFree((U8 *)&(gprs_data->data.contexts[gprs_data->data.numContexts]), sizeof(T_MFW_GPRS_CONTEXT)); gprs_data->data.numContexts--; } mfwFree((U8 *)&(gprs_data->data), sizeof(T_MFW_GPRS_DATA)); mfwFree((U8 *)(((T_MFW_HDR *) h)->data),sizeof(T_MFW_GPRS)); mfwFree((U8 *)h,sizeof(T_MFW_HDR)); return MFW_RES_OK;}/*+--------------------------------------------------------------------+| PROJECT : MMI-Framework (8417) MODULE : MFW_GPRS || STATE : code ROUTINE : gprsCommand |+--------------------------------------------------------------------+ PURPOSE : handle mfw windows command PARAMETERS : Returns : 0, on failure 1, on success*/int gprsCommand (U32 cmd, void *h){ switch ( cmd ) { case MfwCmdDelete: /* delete me */ if ( !h ) return 0; gprs_delete(h); return 1; default: break; } return 0;}/*+--------------------------------------------------------------------+| PROJECT: MMI-Framework (8417) MODULE: MFW_GPRS || STATE : code ROUTINE: gprs_signal |+--------------------------------------------------------------------+ PURPOSE : send a event signal. PARAMETERS : event : current event *para : pointer to the event parameters*/void gprs_signal( T_MFW_EVENT event, void *para){/*MC, SPR 1389, we have to enable the display whenever we send an event up to the MMI*/ UBYTE temp = dspl_Enable(0); TRACE_FUNCTION ("gprs_signal()"); if ( mfwSignallingMethod EQ 0 ) { /* * focus is on a window */ if ( mfwFocus ) { /* * send event to sim management handler if available */ if (gprs_sign_exec (mfwFocus, event, para)) { dspl_Enable(temp);/*MC, SPR 1389*/ return; } } /* * acutal focussed window is not available or has no * network management registration handler, then search * all nodes from the root. */ if ( mfwRoot ) gprs_sign_exec (mfwRoot, event, para); } else { MfwHdr *h = 0; /* * Focus set, then start here */ if ( mfwFocus ) h = mfwFocus; /* * Focus not set, then start at root */ if ( !h ) h = mfwRoot; /* * while elements found */ while ( h ) { /* * Signal consumed, then return */ if ( gprs_sign_exec (h, event, para) ) { dspl_Enable(temp);/*MC, SPR 1389*/ return; } /* * All windows tried inclusive root */ if ( h == mfwRoot ) { dspl_Enable(temp);/*MC, SPR 1389*/ return; } /* * get parent window */ h = mfwParent(mfwParent(h)); /* * look for next element */ if ( h ) h = ((MfwWin * )(h->data))->elems; } gprs_sign_exec (mfwRoot, event, para); } dspl_Enable(temp);/*MC, SPR 1389*/}/*+--------------------------------------------------------------------+| PROJECT: MMI-Framework (8417) MODULE: MFW_GPRS || STATE : code ROUTINE: gprs_sign_exec |+--------------------------------------------------------------------+ PURPOSE : Handle a signal if GPRS management handler. PARAMETERS : RETURNS : TRUE, if signal is processed FALSE, if signal is not processed*/BOOL gprs_sign_exec ( T_MFW_HDR *cur_elem, T_MFW_EVENT event, T_MFW_GPRS_PARA *para ){ int i,j; T_CGATT_STATE state; T_GPRS_CONT_REC tst_ctrc[MAX_CID_PLUS_EINS]; SHORT tst_cid; USHORT lac; USHORT ci; TRACE_FUNCTION ("gprs_sign_exec()"); /* * while event handler is available */ while ( cur_elem ) { /* * if handler is GPRS management handler */ if ( cur_elem->type EQ MfwTypGprs ) { T_MFW_GPRS *gprs_data; gprs_data = (T_MFW_GPRS *)cur_elem->data; /* * if event is expected by the call back function */ if ( gprs_data->emask & event ) { gprs_data->event = event; switch ( event ) { case E_MFW_GPRS_S_CNTXT: /* * Check if contexts is defined in ACI ( if too many context * are defined, the new one will not be defined */ qAT_PlusCGDCONT(CMD_SRC_LCL, &tst_ctrc, &tst_cid); if ( tst_cid >= gprs_data->data.numContexts + 1) { /* * insert the new context */ memcpy (&(gprs_data->data.contexts[gprs_data->data.numContexts]), para, sizeof (T_MFW_GPRS_CONTEXT)); gprs_data->data.numContexts++; } break; case E_MFW_GPRS_S_ATT: case E_MFW_GPRS_R_EREP_ATT: /* SPR#1983 - SH -'attached' is now of correct type. * Don't check if unchanged, as this rejects some cases
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -