📄 mmigprs.c
字号:
/******************************************************************************* CONDAT (UK)******************************************************************************** This software product is the property of Condat (UK) Ltd and may not be disclosed to any third party without the express permission of the owner. ******************************************************************************** $Project name: $Project code: $Module: $File: MmiGprs.c $Revision: $Author: Condat(UK) $Date: ******************************************************************************** Description: GPRS handling for MMI. ******************************************************************************** $History: MmiGprs.c 15/05/2003 - SPR#1983 - SH - Updated to latest from 1.6.3 version. $End*******************************************************************************/#define ENTITY_MFW/* Switch for tracing*/#define TRACE_MMIGPRS#include <string.h>#include <stdio.h>#include <stdlib.h>#if defined (NEW_FRAME)#include "typedefs.h"#include "vsi.h"#include "pei.h"#include "custom.h"#include "gsm.h"#else#include "stddefs.h"#include "custom.h"#include "gsm.h"#include "vsi.h"#endif#include "mfw_sys.h"#include "p_sim.h"#include "cus_aci.h"#include "mfw_mfw.h"#include "mfw_win.h"#include "mfw_kbd.h"/* New Editor changes */#ifndef NEW_EDITOR#include "mfw_edt.h"#endif#include "mfw_lng.h"#include "mfw_tim.h"#include "mfw_icn.h"#include "mfw_mnu.h"#include "mfw_phb.h"#include "mfw_cm.h"#include "mfw_sim.h"#include "mfw_nm.h"#include "mfw_sat.h"#include "mfw_ss.h" /*for convert*/#include "mfw_phb.h"#include "ksd.h"#include "psa.h"#include "mfw_sms.h"#include "mfw_cphs.h"#include "mfw_sat.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 "mfw_gprs.h"#include "dspl.h"#include "MmiGprs.h"#include "MmiBookShared.h"#include "MmiIcons.h" /* Including this header allows us to access the global icon status, for the GPRS icon.*/#include "MmiSmsBroadcast.h" /* Including this to get the info_screen function *//* New Editor changes. Need editor for counter display */#ifdef NEW_EDITOR#include "ATBCommon.h"#include "ATBDisplay.h"#include "ATBEditor.h"#include "AUIEditor.h"#else#include "MmiEditor.h"#endif#include "MmiBookUtils.h"#include "MmiBookMenuWindow.h" /* So we can use bookMenuStart() to create our own menus */#include "MMIColours.h"/* Required to send status to WAP */#ifdef MMI_WAP_ENABLED#include "AUIWapExt.h"#endif#define ULONG_SIZE_IN_DECIMAL 10 /* Max no. of decimal digits a ULONG can have */#define KILOBYTE 1024 /* No of bytes in a kilobyte, used for data counter calculation. */#define PLEASEWAIT_TIMEOUT 35000 /* Time for "please wait" window to time out *//* Counter types */enum{ MMI_GPRS_COUNTER_UPLINK, MMI_GPRS_COUNTER_DOWNLINK};/* GPRS data */typedef struct{ T_MFW_HDR *gprsHandle; /* Provide a handle to the GPRS information. */ T_GPRS_CID cid; /* The context id. Starts at 1 then increments. */ MfwHnd gprsPleaseWait_win; /* Handle for the Please Wait window */ MfwHnd gprsEdit_win; /* Handle for editor window */ MfwHnd menu_win; /* Handler for menu windows */ char *counterstring; /* String for counter digits */ ULONG uplink_counter; /* Value of uplink counter */ ULONG downlink_counter; /* Value of downlink counter */ USHORT counter_type; /* TRUE if uplink counter has been requested */ T_CGSMS_SERVICE SMSService; /* Type of SMS service */ BOOL display; /* Whether to display "OK" windows or not */ USHORT status; /* Current status */}T_MMI_GPRS_DATA;/* GPRS status values */typedef enum{ MMI_GPRS_STATUS_IDLE, MMI_GPRS_STATUS_ATTACHING, MMI_GPRS_STATUS_DETACHING, MMI_GPRS_STATUS_DATA_COUNTER};static T_MMI_GPRS_DATA *mmi_gprs=NULL;/******************************************************************************* LOCAL FUNCTION PROTOTYPES*******************************************************************************/static T_MFW_HND mmiPleaseWait(T_MFW_HND parent_win, USHORT TextId1, USHORT TextId2);static void mmiPleaseWaitCb(T_MFW_HND win, UBYTE identifier, UBYTE reason);static void mmiPleaseWaitDestroy();static void mmiGprsShowCounter(T_MFW_HND win, USHORT identifier);static void mmiGprsDestroyCounter();static char * mmiGprsUpdateCounter(T_MFW_HND win, USHORT identifier);static void mmiGprsShowCounterCb(T_MFW_HND win, USHORT identifier, USHORT reason);/******************************************************************************* $Function: mmiGprsInit $Description: Initialise GPRS $Returns: Handler for MFW GPRS events. $Arguments: None.*******************************************************************************/void mmiGprsInit(void){#ifdef TRACE_MMIGPRS TRACE_FUNCTION("mmiGprsInit()");#endif gprs_init(); /* Allocate memory for mmi data */ mmi_gprs = (T_MMI_GPRS_DATA *)ALLOC_MEMORY(sizeof(T_MMI_GPRS_DATA)); memset(mmi_gprs, 0, sizeof(T_MMI_GPRS_DATA)); mmi_gprs->gprsHandle = gprs_create(0, E_MFW_GPRS_ALL_EVENTS, (MfwCb)GPRSMfwCb); mmi_gprs->cid = GPRS_CID_OMITTED; mmi_gprs->uplink_counter = 0; mmi_gprs->downlink_counter = 0; mmi_gprs->SMSService = CGSMS_SERVICE_OMITTED; mmi_gprs->display = FALSE; return;}/******************************************************************************* $Function: mmiGprsExit $Description: Exit GPRS $Returns: None. $Arguments: None.*******************************************************************************/void mmiGprsExit(void){#ifdef TRACE_MMIGPRS TRACE_FUNCTION("mmiGprsInit()");#endif /* Delete any remaining please wait window (just in case!)*/ mmiPleaseWaitDestroy(); /* Delete the MFW module */ if (mmi_gprs->gprsHandle) gprs_delete(mmi_gprs->gprsHandle); /* Delete MMI data */ FREE_MEMORY((void *)mmi_gprs, sizeof(T_MMI_GPRS_DATA)); gprs_exit(); return;}/******************************************************************************* $Function: mmiGprsStatus $Description: Return status of GPRS. $Returns: GPRS_OFF, GPRS_NOT_ATTACHED, GPRS_ATTACHED $Arguments: None.*******************************************************************************/int mmiGprsStatus(void){ T_MFW_GPRS *gprs; static int previous_result = -1; int result;#ifdef TRACE_MMIGPRS TRACE_FUNCTION("mmiGprsStatus()");#endif /* Keeps track of last status value (for use with WAP later) * Default state is GPRS OFF */ iconsDeleteState(iconIdGPRSOn); result = GPRS_OFF; /* Check if searching or attached */ if (mmi_gprs) { if (mmi_gprs->gprsHandle) { gprs = mmi_gprs->gprsHandle->data; if (gprs) { gprs->data.regState = gprs_status();#ifdef TRACE_MMIGPRS TRACE_EVENT_P1("mmiGprsStatus: regState = %d", gprs->data.regState);#endif if (gprs->data.regState==CGREG_STAT_SEARCHING) { result = GPRS_SEARCHING; } /* Check regState rather than attached to find GPRS status */ else if (gprs->data.regState==CGREG_STAT_REG_HOME || gprs->data.regState==CGREG_STAT_REG_ROAM) { iconsSetState(iconIdGPRSOn); result = GPRS_ATTACHED; } } } } #ifdef MMI_WAP_ENABLED /* If status has changed, notify WAP */ if (result!=previous_result) { AUI_wap_gprs_status(result); }#endif previous_result = result; return result;}/******************************************************************************* $Function: mmiPleaseWait $Description: Creates a "Please Wait" message that will hang around until an "OK" or "Error" message is received by GPRSMfwCb $Returns: Pointer to the created window $Arguments: parent_win - the parent window TextId1 - the first text string to be shown TextId2 - the second text string to be shown*******************************************************************************/static T_MFW_HND mmiPleaseWait(T_MFW_HND parent_win, USHORT TextId1, USHORT TextId2){ T_DISPLAY_DATA display_info; TRACE_FUNCTION("mmiPleaseWait()"); /* Delete any previous window */ mmiPleaseWaitDestroy(); dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TextId1, TextId2, COLOUR_STATUS); dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)mmiPleaseWaitCb, PLEASEWAIT_TIMEOUT, KEY_HUP | KEY_RIGHT ); mmi_gprs->display = TRUE; /* Allow OK and Fail messages to appear. */ mmi_gprs->menu_win = parent_win; /* Store parent window */ /* Show information screen, storing window pointer */ mmi_gprs->gprsPleaseWait_win = info_dialog(parent_win,&display_info); return mmi_gprs->gprsPleaseWait_win;}/******************************************************************************* $Function: mmiPleaseWaitCb $Description: Please wait window callback function. $Returns: None $Arguments: win - the parent window identifier - not used reason - the reason for the callback*******************************************************************************/static void mmiPleaseWaitCb(T_MFW_HND win, UBYTE identifier, UBYTE reason){ TRACE_FUNCTION("mmiPleaseWaitCb()"); /* Dialog already destroyed by this point */ mmi_gprs->gprsPleaseWait_win = NULL; switch(reason) { case INFO_TIMEOUT: /* Delete window */ info_screen(mmi_gprs->menu_win, TxtTimedOut, NULL, NULL); mmi_gprs->status = MMI_GPRS_STATUS_IDLE; break; case INFO_KCD_HUP: case INFO_KCD_RIGHT: /*Cancel current operation */ switch(mmi_gprs->status) { case MMI_GPRS_STATUS_ATTACHING: case MMI_GPRS_STATUS_DETACHING: gprs_attach_abort(); mmi_gprs->status = MMI_GPRS_STATUS_IDLE; mmi_gprs->display = FALSE; break; case MMI_GPRS_STATUS_DATA_COUNTER: gprs_counter_abort(); mmi_gprs->status = MMI_GPRS_STATUS_IDLE; mmi_gprs->display = FALSE; break; } break; } return;}/******************************************************************************* $Function: mmiPleaseWaitDestroy $Description: Check to see if the "Please Wait" window is present, and destroys it if so. $Returns: None. $Arguments: None.*******************************************************************************/static void mmiPleaseWaitDestroy(){ TRACE_FUNCTION("mmiPleaseWaitCb()"); if (mmi_gprs->gprsPleaseWait_win) { SEND_EVENT(mmi_gprs->gprsPleaseWait_win, DIALOG_DESTROY, NULL, NULL); mmi_gprs->gprsPleaseWait_win = NULL; } return;}/******************************************************************************* $Function: mmiGprsResultScreen $Description: Displays a result and returns GPRS to idle status $Returns: None. $Arguments: parent_win - the parent window TextId1 - the first text string to be shown TextId2 - the second text string to be shown *******************************************************************************/static T_MFW_HND mmiGprsResultScreen(T_MFW_HND parent_win, USHORT TextId1, USHORT TextId2){ mmiPleaseWaitDestroy(); info_screen(parent_win, TextId1, TextId2, NULL); mmi_gprs->status = MMI_GPRS_STATUS_IDLE; mmi_gprs->display = FALSE; return;}/******************************************************************************* $Function: GPRSMfwCb $Description: Callback function for MFW GPRS events. $Returns: $Arguments: Event number and generic parameter.*******************************************************************************/int GPRSMfwCb(T_MFW_EVENT event, void* para){ T_MFW_HND win = mfwParent( mfw_header()); T_MFW_GPRS_DATA *gprs_data = (T_MFW_GPRS_DATA *)para; // Structure that stores data from mfw USHORT textId; int gprs_status; TRACE_FUNCTION("GPRSMfwCb()"); switch(event) { case E_MFW_GPRS_S_CNTXT: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_S_CNTXT"); #endif break; case E_MFW_GPRS_S_ATT: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_S_ATT"); #endif mmi_gprs->status = MMI_GPRS_STATUS_ATTACHING; if (mmi_gprs->display) { /* Previous please wait will be destroyed and this new message shown */ mmiPleaseWait(win, TxtGPRS, TxtConnecting); } mmiGprsStatus(); break; case E_MFW_GPRS_S_ACT: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_S_ACT"); #endif /* Notify WAP of context activation */ #ifdef MMI_WAP_ENABLED AUI_wap_gprs_status(GPRS_CONTEXT_ACTIVATE); #endif break; case E_MFW_GPRS_R_ACT: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_R_ACT"); #endif /* Notify WAP of context activation */ #ifdef MMI_WAP_ENABLED AUI_wap_gprs_status(GPRS_CONTEXT_ACTIVATE); #endif break; case E_MFW_GPRS_S_DATA: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_S_DATA"); #endif break; case E_MFW_GPRS_R_DATA: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_R_DATA"); #endif break; case E_MFW_GPRS_S_QOS: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_S_QOS"); #endif break; case E_MFW_GPRS_R_QOS: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_R_QOS"); #endif break; case E_MFW_GPRS_S_QOS_MIN: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_S_QOS_MIN"); #endif break; case E_MFW_GPRS_S_CLASS: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_S_CLASS"); #endif break; case E_MFW_GPRS_S_PDPADDR: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_S_PDPADDR"); #endif break; case E_MFW_GPRS_S_AUTORESP: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_S_AUTORESP"); #endif break; case E_MFW_GPRS_S_ANS: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_S_ANS"); #endif break; case E_MFW_GPRS_R_ANS: #ifdef TRACE_MMIGPRS TRACE_EVENT("GPRSMfwCb: E_MFW_GPRS_R_ANS");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -