FreeCalypso > hg > fc-magnetite
diff src/ui3/bmi/mmiGprs.c @ 421:6a4d9f47793e
src/ui3/bmi: file renames to make the case consistent
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 21 Jan 2018 03:28:53 +0000 |
parents | src/ui3/bmi/MmiGprs.c@e8ddbb0837ed |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ui3/bmi/mmiGprs.c Sun Jan 21 03:28:53 2018 +0000 @@ -0,0 +1,2174 @@ +/******************************************************************************* + + 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 + + Oct 18,2006 REF:DR OMAPS00099409 x0047075 + Description:TC2.1.5(BMI/MFW) - GPRS - GPRS Detach error + Solution : The response P_CGREG_STAT_NOT_REG from the lower layer is now translated as GPRS_OFF by BMI. + + May 29,2006 REF: DR OMAPS00078997 x0043641 + Description: GPRS - DETACH (ERROR) + Solution: A condition is added when not regeistered, no searching the gprs status + is updated as not attached. + + Feb 24, 2006 REF:DR OMAPS00068976 x0035544 + Description: GPRS attach icon - MMI follow up issue of OMAPS00051034 + solution: a Check is added for the idle mode display and querry the GPRS status of + network registration and update the GPRS state and attach icon display accordingly. + + 15/05/2003 - SPR#1983 - SH - Updated to latest from 1.6.3 version. + + Dec 02, 2005 REF: DR OMAPS00048551 x0039928 + Description: MMI Cloud displays ""GPRS Detached"" in place + of ""GPRS Not Attached"" when unable to attach.. + Solution: A condition is added to check if the request is for attach and then display + "GPRS Not Attached" in case it fails. + + Dec 01, 2005 REF: DR OMAPS00048530 x0039928 + Description: After the GPRS detach the MMI shows it is attached. + Solution: A check is made to display "GPRS Attached" only when an GPRS attach is + requested but not when GPRS detach is request. + + Jun 14, 2005 REF: MMI-FIX-30439 x0018858 + Description: The homezone/cityzone tags were not being displayed properly. + Solution: Modified to save the tags properly in caches and also made the + appropriate modifications to update the same properly during mobility. + + $End + +*******************************************************************************/ + +#define ENTITY_MFW + +/* Switch for tracing*/ +#define TRACE_MMIGPRS + +#ifdef TRACE_MMIGPRS +#define trace(x) TRACE_EVENT(x) +#define tracefunction(x) TRACE_FUNCTION(x) +#define trace_P1(x,a) TRACE_EVENT_P1(x,a) +#define trace_P2(x,a,b) TRACE_EVENT_P2(x,a,b) +#define trace_P3(x,a,b,c) TRACE_EVENT_P3(x,a,b,c) +#define trace_P4(x,a,b,c,d) TRACE_EVENT_P4(x,a,b,c,d) +#define trace_P5(x,a,b,c,d,e) TRACE_EVENT_P5(x,a,b,c,d,e) +#define trace_P6(x,a,b,c,d,e,f) TRACE_EVENT_P6(x,a,b,c,d,e,f) +#else +#define trace(x) /* */ +#define tracefunction(x) /* */ +#define trace_P1(x,a) /* */ +#define trace_P2(x,a,b) /* */ +#define trace_P3(x,a,b,c) /* */ +#define trace_P4(x,a,b,c,d) /* */ +#define trace_P5(x,a,b,c,d,e) /* */ +#define trace_P6(x,a,b,c,d,e,f) /* */ +#endif + +#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 "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_all.h" +#include "aci_cmh.h" /* include types declared in ACI */ +#include "ati_cmd.h" +#include "aci_cmd.h" +#include "aci.h" +#include "dti_conn_mng.h" +#include "dti_cntrl_mng.h" +#include "gaci.h" /* include types declared in GACI */ +#include "gaci_cmh.h" + +#ifdef FF_2TO1_PS +#include "aci_all.h" +#include "ati_cmd.h" +#include "aci_cmd.h" +#include "aci.h" +#include "dti_conn_mng.h" +#include "dti_cntrl_mng.h" +#include "gaci.h" /* include types declared in GACI */ +#endif +#include "mfw_ss.h" /*for convert*/ +#include "mfw_cphs.h" +#include "mfw_sat.h" +#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" + +#ifdef NEPTUNE_BOARD +#define GPRS_ICON_SET 1 +#define EDGE_ICON_SET 2 +#endif + +static T_MMI_GPRS_DATA *gprs_data=NULL; + +/******************************************************************************* + + $Function: GPRS_Data + + $Description: Initialise GPRS + + $Returns: Handler for MFW GPRS events. + + $Arguments: None. + +*******************************************************************************/ + +T_MMI_GPRS_DATA *GPRS_Data(void) +{ + if (gprs_data==NULL) + { + TRACE_EVENT("***ERROR*** MMI GPRS not initialised properly"); + } + + return gprs_data; +} + +/******************************************************************************* + + $Function: GPRS_Init + + $Description: Initialise GPRS + + $Returns: Handler for MFW GPRS events. + + $Arguments: None. + +*******************************************************************************/ + +void GPRS_Init(void) +{ + T_MMI_GPRS_DATA *data; + + tracefunction("GPRS_Init()"); + + gprs_init(); + + /* Allocate memory for mmi data */ + data = (T_MMI_GPRS_DATA *)ALLOC_MEMORY(sizeof(T_MMI_GPRS_DATA)); + gprs_data = data; + memset(data, 0, sizeof(T_MMI_GPRS_DATA)); + + data->mfw_gprs = gprs_create(0, E_MFW_GPRS_ALL_EVENTS, (MfwCb)GPRS_MfwCb); + data->cid = GPRS_CID_OMITTED; + data->uplink_counter = 0; + data->downlink_counter = 0; + data->sms_service = SMS_SERVICE_OMITTED; + data->display = FALSE; + data->notify_win = NULL; + data->callback = NULL; + data->reg_status = GPRS_OFF; + + return; +} + + +/******************************************************************************* + + $Function: GPRS_SetCallback + + $Description: Specify a callback function, where GPRS connection information will + be sent, or NULL to switch off notification. + + $Returns: None. + + $Arguments: win - window handler, or NULL + callback - callback function, or NULL + +*******************************************************************************/ + +void GPRS_SetCallback(T_MFW_HND win, T_GPRS_CB callback) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + + tracefunction("GPRS_SetCallback()"); + + if (!data) + { + return; + } + + data->notify_win = win; + data->callback = callback; + + return; +} + + +/******************************************************************************* + + $Function: GPRS_Exit + + $Description: Exit GPRS + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ + +void GPRS_Exit(void) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + + tracefunction("GPRS_Exit()"); + + if (data) + { + /* Delete any remaining please wait window (just in case!)*/ + GPRS_PleaseWaitDestroy(); + + /* Delete the MFW module */ + if (data->mfw_gprs) + { + gprs_delete(data->mfw_gprs); + } + + /* Delete MMI data */ + FREE_MEMORY((void *)data, sizeof(T_MMI_GPRS_DATA)); + gprs_data = NULL; + } + + gprs_exit(); + return; +} + + +/******************************************************************************* + + $Function: GPRS_Status + + $Description: Return status of GPRS. + + $Returns: GPRS_OFF, GPRS_NOT_ATTACHED, GPRS_ATTACHED + + $Arguments: None. + +*******************************************************************************/ + +int GPRS_Status(void) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + T_MFW_GPRS *gprs; + int result; + +#ifdef NEPTUNE_BOARD + int iStatus = 0; + int iDisplayIcn = 0; +#endif + + tracefunction("GPRS_Status()"); + + if (!data) + { + return GPRS_OFF; + } + + /* Keeps track of last status value, so we only need to call callback when a change occurs. + * Default state is GPRS OFF */ + + iconsDeleteState(iconIdGPRSOn); + +#ifdef NEPTUNE_BOARD + /* OMAPS00074454 - For Edge Icon Display */ + iconsDeleteState(iconIdEdgeOn); + /* END */ +#endif + result = GPRS_OFF; + + /* Check if searching or attached */ + + if (data->mfw_gprs) + { + gprs = ((T_MFW_HDR *)data->mfw_gprs)->data; +//x0035544 Feb 23, 2006 DR:OMAPS00068976 + /* Check for the idle mode and querry the status of network registration + *and update the GPRS state and attach icon display accordingly */ + if (gprs && (idleIsFocussed() ||data->menu_win == NULL) ) + { +#ifdef NEPTUNE_BOARD + iDisplayIcn = mfw_gprs_edge_status (&iStatus); + + /* Status is obtained from AT command and assigned. */ + gprs->data.Reg_state.p_reg_State = (T_P_CGREG_STAT) iStatus; + + if ((gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_SEARCHING) && + (iDisplayIcn == GPRS_ICON_SET)) + { + result = GPRS_SEARCHING; + } + + else if((gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_SEARCHING) && + (iDisplayIcn == EDGE_ICON_SET)) + { + result = EDGE_SEARCHING; + } + + /* Check regState and iDisplayIcn For display of GPRS*/ + else if ((gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_REG_HOME || + gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_REG_ROAM ) && + (iDisplayIcn == GPRS_ICON_SET)) + { + iconsSetState(iconIdGPRSOn); + result = GPRS_ATTACHED; + } + + /* Check regState and iDisplayIcn For display of EDGE*/ + else if ((gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_REG_HOME || + gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_REG_ROAM ) && + (iDisplayIcn == EDGE_ICON_SET)) + { + iconsSetState(iconIdEdgeOn); + result = EDGE_ATTACHED; + } + else if ((gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_NO_CELL || + gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_LIMITED || + gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_UNKN || + gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_REG_DEN ) && + (iDisplayIcn == EDGE_ICON_SET)) + { + iconsDeleteState(iconIdGPRSOn ); + result = GPRS_ERROR; + } + else if ((gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_NO_CELL || + gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_LIMITED || + gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_UNKN || + gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_REG_DEN ) && + (iDisplayIcn == EDGE_ICON_SET)) + { + iconsDeleteState(iconIdEdgeOn ); + result = EDGE_ERROR; + } + /* May 29, 2006 Ref bug OMAPS00078997 */ + else if (gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_NOT_REG ) + { + iconsDeleteState(iconIdGPRSOn ); + iconsDeleteState(iconIdEdgeOn ); + result = GPRS_OFF; + } + else + { + iconsDeleteState(iconIdGPRSOn); + iconsDeleteState(iconIdEdgeOn); + } + +#else + + gprs->data.Reg_state.p_reg_State = p_gprs_status(); + + trace_P1("GPRS_Status: p_regState = %d", gprs->data.Reg_state.p_reg_State); + + if (gprs->data.Reg_state.p_reg_State ==P_CGREG_STAT_SEARCHING) + { + result = GPRS_SEARCHING; + } + + /* Check regState rather than attached to find GPRS status */ + + else if (gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_REG_HOME || + gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_REG_ROAM ) + { + iconsSetState(iconIdGPRSOn); + result = GPRS_ATTACHED; + } + else if(gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_NO_CELL || + gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_LIMITED || + gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_UNKN || + gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_REG_DEN) + + { + iconsDeleteState(iconIdGPRSOn ); + result = GPRS_ERROR; + } + //Oct 18,2006 REF:DR OMAPS00099409 x0047075 + // Description:TC2.1.5(BMI/MFW) - GPRS - GPRS Detach error + //Solution : The response P_CGREG_STAT_NOT_REG from the lower layer is now translated as GPRS_OFF by BMI. + else if (gprs->data.Reg_state.p_reg_State == P_CGREG_STAT_NOT_REG ) + { + iconsDeleteState(iconIdGPRSOn ); + result = GPRS_OFF; + } +#endif + + } + else if (gprs ) + { + +#ifdef NEPTUNE_BOARD + iDisplayIcn = mfw_gprs_edge_status (&iStatus); + + /* Status is obtained from AT command and assigned. */ + /* x0045876, 14-Aug-2006 (WR - enumerated type mixed with another type) */ + /* gprs->data.Reg_state.regState = iStatus; */ + gprs->data.Reg_state.regState = (T_CGREG_STAT) iStatus; + + if ((gprs->data.Reg_state.regState==CGREG_STAT_SEARCHING) && + (iDisplayIcn == GPRS_ICON_SET)) + { + result = GPRS_SEARCHING; + } + + else if((gprs->data.Reg_state.regState==CGREG_STAT_SEARCHING) && + (iDisplayIcn == EDGE_ICON_SET)) + { + result = EDGE_SEARCHING; + } + + /* Check regState and iDisplayIcn For display of GPRS*/ + else if ((gprs->data.Reg_state.regState==CGREG_STAT_REG_HOME || + gprs->data.Reg_state.regState==CGREG_STAT_REG_ROAM) && + (iDisplayIcn == GPRS_ICON_SET)) + { + iconsSetState(iconIdGPRSOn); + result = GPRS_ATTACHED; + } + + /* Check regState and iDisplayIcn For display of EDGE*/ + else if ((gprs->data.Reg_state.regState==CGREG_STAT_REG_HOME || + gprs->data.Reg_state.regState==CGREG_STAT_REG_ROAM) && + (iDisplayIcn == EDGE_ICON_SET)) + { + iconsSetState(iconIdEdgeOn); + result = EDGE_ATTACHED; + } +#else + + //x0035544 Feb 23, 2006 DR:OMAPS00068976 + gprs->data.Reg_state.regState = gprs_status(); + + trace_P1("GPRS_Status: regState = %d", gprs->data.Reg_state.regState); + //x0035544 Feb 23, 2006 DR:OMAPS00068976 + if (gprs->data.Reg_state.regState==CGREG_STAT_SEARCHING) + { + result = GPRS_SEARCHING; + } + + /* Check regState rather than attached to find GPRS status */ + //x0035544 Feb 23, 2006 DR:OMAPS00068976 + else if (gprs->data.Reg_state.regState==CGREG_STAT_REG_HOME || + gprs->data.Reg_state.regState ==CGREG_STAT_REG_ROAM) + { + iconsSetState(iconIdGPRSOn); + result = GPRS_ATTACHED; + } +#endif + } + } + + /* If status has changed, notify */ + if (data->callback!=NULL && result!=data->reg_status) + { + data->callback(result); + } + + data->reg_status = result; + + return result; +} + +/******************************************************************************* + + $Function: GPRS_ResultScreen + + $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 + + [afo 03/10/03] Moved function to an earlier location in the file and changed + the return type to void. We were taking liberties with C which we + got away with using the TI compiler but which Visual C flagged as + an error. + + We seem to be a bit slack on function scope and return values in + some cases in this file. + +*******************************************************************************/ + +static void GPRS_ResultScreen(T_MFW_HND parent_win, USHORT TextId1, USHORT TextId2) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + + tracefunction("GPRS_ResultScreen()"); + + if (!data) + { + return; + } + + GPRS_PleaseWaitDestroy(); + + info_screen(parent_win, TextId1, TextId2, NULL); + + data->display = FALSE; + + return; +} + +/******************************************************************************* + + $Function: GPRS_Attach + + $Description: Attempts an attach to the GPRS network. + + $Returns: MMI_GPRS_STATUS_ATTACHING or MMI_GPRS_STATUS_IDLE + + $Arguments: win - Parent window - if this is provided, status dialogues will be shown + +*******************************************************************************/ + +int GPRS_Attach(T_MFW_HND win) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + + tracefunction("GPRS_Attach()"); + + if (!data) + { + /* x0045876, 14-Aug-2006 (WR - non-void function "GPRS_Attach" should return a value) */ + /* return; */ + return 0; + } + + data->status = MMI_GPRS_STATUS_ATTACHING; + + if (win) + { + GPRS_PleaseWait(win, TxtPleaseWait, NULL); + } + + /* Perform the attach */ + + if (gprs_attach(CGATT_STATE_ATTACHED)==MFW_RES_OK) + { + trace("GPRSAttach executing, awaiting confirmation."); + } + else + { + /* Show result */ + if (win) + { + GPRS_ResultScreen(win, TxtFailed, TxtNull); + } + data->status = MMI_GPRS_STATUS_IDLE; + } + + return data->status; +} + + +/******************************************************************************* + + $Function: GPRS_Detach + + $Description: Detach from the GPRS network. + + $Returns: MMI_GPRS_STATUS_DETACHING or MMI_GPRS_STATUS_IDLE + + $Arguments: None + +*******************************************************************************/ + +int GPRS_Detach(T_MFW_HND win) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + + tracefunction("GPRS_Detach()"); + + if (!data) + { + /* x0045876, 14-Aug-2006 (WR - non-void function "GPRS_Detach" should return a value) */ + /* return; */ + return 0; + } + + data->status = MMI_GPRS_STATUS_DETACHING; + + if (win) + { + GPRS_PleaseWait(win, TxtPleaseWait, NULL); + } + + if (gprs_attach(CGATT_STATE_DETACHED)==MFW_RES_OK) + { + trace("GPRSDetach executing, awaiting confirmation."); + } + else + { + if (win) + { + GPRS_ResultScreen(win, TxtFailed, TxtNull); + } + data->status = MMI_GPRS_STATUS_IDLE; + } + + return data->status; +} + + +/******************************************************************************* + + $Function: GPRS_ContextDefine + + $Description: Define a PDP context + + $Returns: TRUE if successful, FALSE otherwise + + $Arguments: cid - Context ID + IPAddress - IP address of context + APN - Access Point Name of context + +*******************************************************************************/ +#ifdef FF_2TO1_PS +int GPRS_ContextDefine(SHORT cid, char *IPAddress, char *APN) +{ + static T_PDP_CONTEXT context; + + strcpy(context.pdp_apn, APN); + strcpy(context.pdp_type, "IP"); + strcpy((char*)context.pdp_addr.ip_address.ipv4_addr.a4, (char*)IPAddress); + + context.pdp_addr.ctrl_ip_address = NAS_is_ipv4; + + /* x0045876, 14-Aug-2006 (WR - integer conversion resulted in a change of sign) */ + /* + context.d_comp = CGDCONT_D_COMP_OMITTED; + context.h_comp = CGDCONT_H_COMP_OMITTED; + */ + context.d_comp = (U8) CGDCONT_D_COMP_OMITTED; + context.h_comp = (U8) CGDCONT_H_COMP_OMITTED; + +// memset(&context.qos,0,sizeof(T_PS_qos)); +// memset(&context.min_qos,0,sizeof(T_PS_qos)); + + if (gprs_definePDPContext(cid, &context)!=MFW_RES_OK) + { + return FALSE; + } + + return TRUE; +} +#else +int GPRS_ContextDefine(SHORT cid, char *IPAddress, char *APN) +{ + static T_PDP_CONTEXT context; + + strcpy(context.pdp_apn, APN); + strcpy(context.pdp_type, "IP"); + strcpy((char*)context.pdp_addr.ip_address.ipv4_addr.a4, (char*)IPAddress); + context.pdp_addr.ctrl_ip_address = NAS_is_ipv4; + context.d_comp = (U8)CGDCONT_D_COMP_OMITTED; + context.h_comp = (U8)CGDCONT_H_COMP_OMITTED; +// memset(&context.qos,0,sizeof(T_QOS)); +// memset(&context.min_qos,0,sizeof(T_QOS)); + + if (gprs_definePDPContext(cid, &context)!=MFW_RES_OK) + { + return FALSE; + } + + return TRUE; +} +#endif + + +/******************************************************************************* + + $Function: GPRS_ContextActivate + + $Description: Activates a PDP context + + $Returns: TRUE if successful, FALSE otherwise + + $Arguments: cid - Context ID + +*******************************************************************************/ + +int GPRS_ContextActivate(SHORT cid) +{ + SHORT cids[2]; + + tracefunction("GPRS_ContextActivate()"); + + cids[0] = cid; + cids[1] = 0; + + if (gprs_contextActivation(CGACT_STATE_ACTIVATED, cids)==MFW_RES_OK) + { + trace("GPRS_ContextActivate: Failed."); + return FALSE; + } + + trace("GPRS_ContextActivate: Executing, awaiting confirmation."); + return TRUE; +} + + +/******************************************************************************* + + $Function: GPRS_ContextDeactivate + + $Description: Dectivates a PDP context + + $Returns: TRUE if successful, FALSE otherwise + + $Arguments: cid - Context ID + +*******************************************************************************/ + +int GPRS_ContextDeactivate(SHORT cid) +{ + SHORT cids[2]; + + tracefunction("GPRS_ContextDeactivate()"); + + cids[0] = cid; + cids[1] = 0; + + if (gprs_contextActivation(CGACT_STATE_DEACTIVATED, cids)==MFW_RES_OK) + { + trace("GPRS_ContextDeactivate: Failed."); + return FALSE; + } + + trace("GPRS_ContextDeactivate: Executing, awaiting confirmation."); + return TRUE; +} + + +/******************************************************************************* + + $Function: GPRS_SetQOS + + $Description: Set quality of service + + $Returns: TRUE if succeeded, FALSE if failed + + $Arguments: cid - context ID + preced...etc. - quality of service parameters + +*******************************************************************************/ + +#ifdef FF_2TO1_PS +int GPRS_SetQOS(SHORT cid, UBYTE preced, UBYTE delay, UBYTE relclass, UBYTE peak, UBYTE mean) +{ + T_PS_qos QOS; + + tracefunction("GPRS_SetQOS()"); + + QOS.qos_r97.preced = preced; + QOS.qos_r97.delay = delay; + QOS.qos_r97.relclass = relclass; + QOS.qos_r97.peak = peak; + QOS.qos_r97.mean = mean; + + if (gprs_setQOS(cid, &QOS)!=MFW_RES_OK) + { + trace("GPRS_MenuSetQOS: Failed"); + return FALSE; + } + + trace("GPRS_MenuSetQOS: OK"); + + return TRUE; +} +#else +int GPRS_SetQOS(SHORT cid, UBYTE preced, UBYTE delay, UBYTE relclass, UBYTE peak, UBYTE mean) +{ + T_PS_qos QOS; + + tracefunction("GPRS_SetQOS()"); + + QOS.qos_r97.preced = preced; + QOS.qos_r97.delay = delay; + QOS.qos_r97.relclass = relclass; + QOS.qos_r97.peak = peak; + QOS.qos_r97.mean = mean; + + + if (gprs_setQOS(cid, &QOS)!=MFW_RES_OK) + { + trace("GPRS_MenuSetQOS: Failed"); + return FALSE; + } + + trace("GPRS_MenuSetQOS: OK"); + + return TRUE; +} +#endif + +/******************************************************************************* + + $Function: GPRS_SetMinQOS + + $Description: Set minimum quality of service + + $Returns: TRUE if succeeded, FALSE if failed + + $Arguments: cid - context ID + preced...etc. - quality of service parameters + +*******************************************************************************/ + +#ifdef FF_2TO1_PS +int GPRS_SetMinQOS(SHORT cid, UBYTE preced, UBYTE delay, UBYTE relclass, UBYTE peak, UBYTE mean) +{ + T_PS_qos QOS; + + tracefunction("GPRS_SetMinQOS()"); + + QOS.qos_r97.preced = preced; + QOS.qos_r97.delay = delay; + QOS.qos_r97.relclass = relclass; + QOS.qos_r97.peak = peak; + QOS.qos_r97.mean = mean; + + if (gprs_setQOSMin(cid, &QOS)!=MFW_RES_OK) + { + trace("GPRS_MenuSetMinQOS: Failed"); + return FALSE; + } + + trace("GPRS_MenuSetMinQOS: OK"); + + return TRUE; +} +#else +int GPRS_SetMinQOS(SHORT cid, UBYTE preced, UBYTE delay, UBYTE relclass, UBYTE peak, UBYTE mean) +{ + T_PS_qos QOS; + + tracefunction("GPRS_SetMinQOS()"); + + QOS.qos_r97.preced = preced; + QOS.qos_r97.delay = delay; + QOS.qos_r97.relclass = relclass; + QOS.qos_r97.peak = peak; + QOS.qos_r97.mean = mean; + + if (gprs_setQOSMin(cid, &QOS)!=MFW_RES_OK) + { + trace("GPRS_MenuSetMinQOS: Failed"); + return FALSE; + } + + trace("GPRS_MenuSetMinQOS: OK"); + + return TRUE; +} +#endif + +/******************************************************************************* + + $Function: GPRS_SmsService + + $Description: Return SMS Service type + + $Returns: SMS_SERVICE_xxx + + $Arguments: None. + +*******************************************************************************/ + +UBYTE GPRS_SmsService(void) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + + tracefunction("GPRS_SmsService"); + + if (!data) + { + return SMS_SERVICE_OMITTED; + } + + return data->sms_service; +} + + +/******************************************************************************* + + $Function: GPRS_SetSmsService + + $Description: Set SMS Service type + + $Returns: TRUE if set proceeded OK + + $Arguments: None. + +*******************************************************************************/ + +UBYTE GPRS_SetSmsService(UBYTE service) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + T_CGSMS_SERVICE ACISmsService; + UBYTE old_service = 0; /* Warning Correction - 29-11-2005 */ + tracefunction("GPRS_SetSmsService"); + trace_P1("Service: %d", service); + + switch(service) + { + case SMS_SERVICE_GPRS: + ACISmsService = CGSMS_SERVICE_GPRS; + break; + case SMS_SERVICE_CS: + ACISmsService = CGSMS_SERVICE_CS; + break; + case SMS_SERVICE_GPRS_PREF: + ACISmsService = CGSMS_SERVICE_GPRS_PREFERRED; + break; + case SMS_SERVICE_CS_PREF: + ACISmsService = CGSMS_SERVICE_CS_PREFERRED; + break; + default: + ACISmsService = CGSMS_SERVICE_CS; + break; + } + + if (data) + { + old_service = data->sms_service; + data->sms_service = service; + } + + if (gprs_setServiceSMS(ACISmsService) != MFW_RES_OK) + { + trace("gprs_setServiceSMS failed"); + /* Failed - set service back to old value */ + if (data) + { + data->sms_service = old_service; + } + return FALSE; + } + + return TRUE; +} + + +/******************************************************************************* + + $Function: GPRS_MfwCb + + $Description: Callback function for MFW GPRS events. + + $Returns: + + $Arguments: Event number and generic parameter. + +*******************************************************************************/ + +static int GPRS_MfwCb(T_MFW_EVENT event, void* para) +{ + + T_MMI_GPRS_DATA *data = GPRS_Data(); + 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 result; + + tracefunction("GPRS_MfwCb()"); + + if (!data) + { + return FALSE; /* Warning Correction - provide return value */ + } + + /* Result of GPRS_NOTHING will not be sent */ + + result = GPRS_NOTHING; + + /* Find GPRS status */ + + if (idleIsFocussed()) + { + /* Update idle screen icons to show any change in GPRS status */ + iconsShow(); + } + else + { + /* iconsShow calls GPRS_Status; if we don't call that, call this on its own */ + GPRS_Status(); + } + + switch(event) + { + case E_MFW_GPRS_S_CNTXT: + trace("GPRS_MfwCb: E_MFW_GPRS_S_CNTXT"); + break; + + case E_MFW_GPRS_S_ATT: + trace("GPRS_MfwCb: E_MFW_GPRS_S_ATT"); + + // Dec 01, 2005 REF: DR OMAPS00048530 x0039928 + // Fix : Set the current status to attaching or detaching depending on the request. + if (data->reg_status!= GPRS_ATTACHED) + data->status = MMI_GPRS_STATUS_ATTACHING; + else + data->status = MMI_GPRS_STATUS_DETACHING; + + if (data->display) + { + if (data->reg_status!= GPRS_ATTACHED) + { + /* Previous please wait will be destroyed and this new message shown */ + GPRS_PleaseWait(win, TxtGPRS, TxtAttaching); + } + else + { + /* MZ cq10952 Info string */ + GPRS_PleaseWait(win, TxtGPRS, TxtDetaching); + } + } + break; + + case E_MFW_GPRS_S_ACT: + trace("GPRS_MfwCb: E_MFW_GPRS_S_ACT"); + + /* Notify of context activation */ + result = GPRS_CONTEXT_ACTIVATE; + break; + + case E_MFW_GPRS_R_ACT: + trace("GPRS_MfwCb: E_MFW_GPRS_R_ACT"); + + /* Notify of context activation */ + result = GPRS_CONTEXT_ACTIVATE; + break; + + case E_MFW_GPRS_S_DATA: + trace("GPRS_MfwCb: E_MFW_GPRS_S_DATA"); + break; + + case E_MFW_GPRS_R_DATA: + trace("GPRS_MfwCb: E_MFW_GPRS_R_DATA"); + break; + + case E_MFW_GPRS_S_QOS: + trace("GPRS_MfwCb: E_MFW_GPRS_S_QOS"); + break; + + case E_MFW_GPRS_R_QOS: + trace("GPRS_MfwCb: E_MFW_GPRS_R_QOS"); + break; + + case E_MFW_GPRS_S_QOS_MIN: + trace("GPRS_MfwCb: E_MFW_GPRS_S_QOS_MIN"); + break; + + case E_MFW_GPRS_S_CLASS: + trace("GPRS_MfwCb: E_MFW_GPRS_S_CLASS"); + break; + + case E_MFW_GPRS_S_PDPADDR: + trace("GPRS_MfwCb: E_MFW_GPRS_S_PDPADDR"); + break; + + case E_MFW_GPRS_S_AUTORESP: + trace("GPRS_MfwCb: E_MFW_GPRS_S_AUTORESP"); + break; + + case E_MFW_GPRS_S_ANS: + trace("GPRS_MfwCb: E_MFW_GPRS_S_ANS"); + break; + + case E_MFW_GPRS_R_ANS: + trace("GPRS_MfwCb: E_MFW_GPRS_R_ANS"); + break; + + case E_MFW_GPRS_S_EREP: + trace("GPRS_MfwCb: E_MFW_GPRS_S_EREPG"); + break; + + case E_MFW_GPRS_R_EREP_RJ: + trace("GPRS_MfwCb: E_MFW_GPRS_R_EREP_RJ"); + + /* Notify of context deactivation */ + + result = GPRS_CONTEXT_DEACTIVATE; + break; + + case E_MFW_GPRS_R_EREP_ATT: + trace("GPRS_MfwCb: E_MFW_GPRS_R_EREP_ATT"); + + /* Attach status has changed, display message as appropriate */ + + if (data->display) + { + if (data->reg_status==GPRS_ATTACHED) + textId = TxtAttached; + else + textId = TxtNotAttached; + + /* Show result */ + GPRS_ResultScreen(win, TxtGPRS, textId); + } + data->status = MMI_GPRS_STATUS_IDLE; + + break; + + case E_MFW_GPRS_R_EREP_ACT: + trace("GPRS_MfwCb: E_MFW_GPRS_R_EREP_ACT"); + + /* Notify of context activation */ + result = GPRS_CONTEXT_ACTIVATE; + break; + + case E_MFW_GPRS_R_EREP_DEACT: + trace("GPRS_MfwCb: E_MFW_GPRS_R_EREP_DEACT"); + + /* Notify of context deactivation */ + result = GPRS_CONTEXT_DEACTIVATE; + break; + + case E_MFW_GPRS_R_EREP_CLASS: + trace("GPRS_MfwCb: E_MFW_GPRS_R_EREP_CLASS"); + break; + + case E_MFW_GPRS_R_REG: + trace("GPRS_MfwCb: E_MFW_GPRS_R_REG"); + //x0035544 Feb 23, 2006 DR:OMAPS00068976 + trace_P1("regState: %d", gprs_data->Reg_state.p_reg_State); + + switch (data->reg_status) + { + case GPRS_ATTACHED: +#ifdef MMI_HOMEZONE_ENABLED + //Jun 14, 2005 REF: MMI-FIX-30439 x0018858 + //begin 30439 + /* Cell reselection for homezone */ + homezoneUpdate(gprs_data->lac, gprs_data->ci, 0); + //end 30439 +#endif + // Dec 01, 2005 REF: DR OMAPS00048530 x0039928 + // Fix : Display GPRS attached only if the request is for attaching. + if(data->status == MMI_GPRS_STATUS_ATTACHING) + { + /* Show result */ + if (data->display) + { + GPRS_ResultScreen(win, TxtGPRS, TxtAttached); + } + } + data->status = MMI_GPRS_STATUS_IDLE; + break; + + case GPRS_OFF: +#ifdef MMI_HOMEZONE_ENABLED + //Jun 14, 2005 REF: MMI-FIX-30439 x0018858 + //begin 30439 + /* Cell reselection for homezone */ + homezoneUpdate(0,0,0); + //end 30439 +#endif + // Dec 02, 2005 REF: DR OMAPS00048551 x0039928 + // Fix : Display GPRS not attached if gprs attach fails + // and the current status is attaching. + if(data->status == MMI_GPRS_STATUS_ATTACHING) + { + /* Show result */ + if (data->display) + { + GPRS_ResultScreen(win, TxtGPRS, TxtNotAttached); + } + } + else + { + /* Show result */ + if (data->display) + { + GPRS_ResultScreen(win, TxtGPRS, TxtDetached); + } + } + data->status = MMI_GPRS_STATUS_IDLE; + break; + + case GPRS_SEARCHING: /* not registered, searching */ +#ifdef MMI_HOMEZONE_ENABLED + //Jun 14, 2005 REF: MMI-FIX-30439 x0018858 + //begin 30439 + /* Cell reselection for homezone */ + homezoneUpdate(0, 0, 0); + //end 30439 +#endif + data->status = MMI_GPRS_STATUS_ATTACHING; + if (data->display) + { + GPRS_PleaseWait(win, TxtGPRS, TxtSearching); /* SPR#1986 */ + } + break; + + default: + data->status = MMI_GPRS_STATUS_IDLE; + /* Show result */ + if (data->display) + { + GPRS_ResultScreen(win, TxtGPRS, TxtError); + } + break; + } + + break; + + case E_MFW_GPRS_S_SMSSERV: + trace("GPRS_MfwCb: E_MFW_GPRS_S_SMSSERV"); + trace_P1("Service: %d", data->sms_service); + + data->status = MMI_GPRS_STATUS_IDLE; + + /* Display "Using <service>" */ + + if (data->display) + { + USHORT TxtId2, TxtId1 = TxtUsing; + switch(data->sms_service) + { + case SMS_SERVICE_GPRS: /* GPRS */ + TxtId2 = TxtGPRS; + break; + case SMS_SERVICE_CS: /* circuit switched */ + TxtId2 = TxtCSD; + break; + case SMS_SERVICE_GPRS_PREF: /* GPRS preferred */ + TxtId2 = TxtGPRSPreferred; + break; + case SMS_SERVICE_CS_PREF: /* circuit switched preferred */ + TxtId2 = TxtCSDPreferred; + break; + default: /* Shouldn't happen, but... */ + TxtId1 = TxtFailed; + TxtId2 = TxtNull; + break; + } + + /* Show result */ + GPRS_ResultScreen(win, TxtId1, TxtId2); + } + break; + + case E_MFW_GPRS_OK: + trace("GPRS_MfwCb: E_MFW_GPRS_OK"); + break; + + case E_MFW_GPRS_ERROR: + trace("GPRS_MfwCb: E_MFW_GPRS_ERROR"); + + data->status = MMI_GPRS_STATUS_IDLE; + + /* Display "GPRS Error" */ + + if (data->display) + { + /* Delete please wait window */ + GPRS_PleaseWaitDestroy(); + + /* Show result */ + GPRS_ResultScreen(win, TxtGPRS, TxtFailed); + } + + /* Notify of error */ + result = GPRS_ERROR; + break; + + case E_MFW_GPRS_CONNECT: + trace("GPRS_MfwCb: E_MFW_GPRS_CONNECT"); + + data->status = MMI_GPRS_STATUS_IDLE; + + if (data->display) + { + /* Delete please wait window */ + GPRS_PleaseWaitDestroy(); + + /* Display "CONNECTED" window */ + info_screen(win, TxtGPRS, TxtConnected, NULL); + } + break; + + case E_MFW_GPRS_ERR_CONNECT: + trace("GPRS_MfwCb: E_MFW_GPRS_ERR_CONNECT"); + + data->status = MMI_GPRS_STATUS_IDLE; + + /* Display "GPRS No Answer" */ + if (data->display) + { + /* Show result */ + GPRS_ResultScreen(win, TxtGPRS, TxtNoAnswer); + } + break; + + case E_MFW_GPRS_COUNTER: + trace("GPRS_MfwCb: E_MFW_GPRS_COUNTER"); + + /* Add values returned from ACI + * to total counter */ + + data->uplink_counter += (ULONG)(gprs_data->counter.octets_uplink); + data->downlink_counter += (ULONG)(gprs_data->counter.octets_downlink); + + /* Only display counter if user has requested it */ + + if (data->display) + { + data->display = FALSE; + /* Delete please wait window */ + GPRS_PleaseWaitDestroy(); + + GPRS_ShowCounter(win); + } + break; + + default: + trace_P1("GPRS_MfwCb: event = %d", event); + break; + } + + /* Send a notification if appropriate */ + + if (data->callback!=NULL && result!=GPRS_NOTHING) + { + data->callback(result); + } + + return TRUE; +} + + +/******************************************************************************* + + $Function: GPRS_MenuAttach + + $Description: Attempts an attach to the GPRS network. + + $Returns: TRUE if proceeding, FALSE if failed + + $Arguments: Standard menu option parameters + +*******************************************************************************/ + +int GPRS_MenuAttach(MfwMnu* m, MfwMnuItem* i) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + T_MFW_HND win = mfw_parent(mfw_header()); +/* int gprsStatus; */ /* Warning Correction */ + + tracefunction("GPRS_MenuAttach()"); + + if (!data) + { + return FALSE; + } + + if (!data->mfw_gprs) + { + data->mfw_gprs = gprs_create(0, E_MFW_GPRS_ALL_EVENTS, (MfwCb)GPRS_MfwCb); + /* Set CID to 0; on increment will become 1. */ + data->cid = GPRS_CID_OMITTED; + } + + if (data->reg_status==(int)GPRS_ATTACHED) + { + /* Show result */ + GPRS_ResultScreen(win, TxtAlreadyAttached, TxtAttached); + return FALSE; + } + + GPRS_Attach(win); + + return TRUE; +} + + +/******************************************************************************* + + $Function: GPRS_MenuDetach + + $Description: Attempts a detach from the GPRS network. + + $Returns: TRUE if proceeding, FALSE if failed + + $Arguments: Standard menu option parameters + +*******************************************************************************/ + +int GPRS_MenuDetach(MfwMnu* m, MfwMnuItem* i) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + T_MFW_HND win = mfw_parent(mfw_header()); +/* int gprsStatus; */ /* Warning Correction */ + + tracefunction("GPRS_MenuDetach()"); + + if (!data) + { + return FALSE; + } + + /* Check to make sure gprs handle exists */ + + if (!data->mfw_gprs) + { + /* Show result */ + GPRS_ResultScreen(win, TxtNotAttached, TxtNull); + return FALSE; + } + + if (data->reg_status==(int)GPRS_OFF) + { + GPRS_ResultScreen(win, TxtNotAttached, TxtNull); + return FALSE; + } + + if (data->reg_status==(int)GPRS_SEARCHING) + { + GPRS_ResultScreen(win, TxtGPRS, TxtNotAvailable); + return FALSE; + } + + /* Try to detach */ + + GPRS_Detach(win); + + return TRUE; +} + + +/******************************************************************************* + + $Function: GPRS_MenuIncomingDataCount + + $Description: Show data counter for last incoming call + + $Returns: TRUE if proceeding, FALSE if failed + + $Arguments: Standard menu option parameters + +*******************************************************************************/ + +int GPRS_MenuIncomingDataCount(MfwMnu* m, MfwMnuItem* i) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + T_MFW_HND win = mfw_parent(mfw_header()); + T_MFW_RES result; + + tracefunction("GPRS_MenuIncomingDataCount()"); + + if (!data) + { + return FALSE; + } + + data->counter_type = MMI_GPRS_COUNTER_DOWNLINK; /* SPR#1875 - SH - Now DOWNLINK */ + data->display = TRUE; + data->status = MMI_GPRS_STATUS_DATA_COUNTER; + GPRS_PleaseWait(win, TxtPleaseWait, NULL); /* SPR#1986 */ + + /* If a data call is in progress, counter is now reset every + * time we check it - MMI keeps track of total. + * If a data call is not in progress, display current total from MMI */ + + result = gprs_counter(TRUE); + + switch(result) + { + /* Waiting for rAT_PercentSNCNT callback, don't update display yet */ + + case MFW_RES_OK: + trace("gprs_counter executing, awaiting confirmation."); + break; + + /* We're not connected - display current total */ + + case MfwResDone: + GPRS_PleaseWaitDestroy(); + data->display = FALSE; + GPRS_ShowCounter(win); + break; + + /* Error has occurred */ + + default: + GPRS_PleaseWaitDestroy(); + data->display = FALSE; + info_screen(win, TxtGPRS,TxtError, NULL); + break; + } + + return TRUE; +} + + +/******************************************************************************* + + $Function: GPRS_MenuOutgoingDataCount + + $Description: Show data counter for last incoming call + + $Returns: TRUE if proceeding, FALSE if failed + + $Arguments: Standard menu option parameters + +*******************************************************************************/ + +int GPRS_MenuOutgoingDataCount(MfwMnu* m, MfwMnuItem* i) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + T_MFW_HND win = mfw_parent(mfw_header()); + T_MFW_RES result; + + tracefunction("GPRS_MenuOutgoingDataCount()"); + + if (!data) + { + return FALSE; + } + + data->counter_type = MMI_GPRS_COUNTER_UPLINK; /* SPR#1875 - SH - Now UPLINK */ + data->display = TRUE; + data->status = MMI_GPRS_STATUS_DATA_COUNTER; + GPRS_PleaseWait(win, TxtPleaseWait, NULL); /* SPR#1986 */ + + /* If a data call is in progress, counter is now reset every + * time we check it - MMI keeps track of total. + * If a data call is not in progress, display current total from MMI */ + + result = gprs_counter(TRUE); + + switch(result) + { + /* Waiting for rAT_PercentSNCNT callback, don't update display yet */ + + case MFW_RES_OK: + trace("gprs_counter executing, awaiting confirmation."); + break; + + /* We're not connected - display current total */ + + case MfwResDone: + GPRS_PleaseWaitDestroy(); + data->display = FALSE; + GPRS_ShowCounter(win); + break; + + /* Error has occurred */ + + default: + GPRS_PleaseWaitDestroy(); + data->display = FALSE; + info_screen(win, TxtGPRS,TxtError, NULL); + break; + } + + return TRUE; +} + + + +/******************************************************************************* + + $Function: GPRS_MenuSelectSms + + $Description: Sets cursor position for this menu based on the current settings + + $Returns: TRUE if proceeding, FALSE if failed + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int GPRS_MenuSelectSms(MfwMnu* menu, MfwMnuItem* item) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + T_MFW_HND win = mfwParent( mfw_header()); /* GPRS menu window */ +/* T_MFW_GPRS *gprs; */ /* Warning Correction */ + + tracefunction("GPRS_MenuSelectSms()"); + + if (!data) + { + return FALSE; + } + + data->menu_win = bookMenuStart(win, SMSServiceAttributes(), 0); + + SEND_EVENT(data->menu_win, DEFAULT_OPTION, NULL, &data->sms_service); // Add our own callback + + return TRUE; +} + + +/******************************************************************************* + + $Function: GPRS_MenuSelectSms_set + + $Description: Send SMS by GPRS/CSD + + $Returns: TRUE if proceeding, FALSE if failed + + $Arguments: menu - pointer to the current menu + item - pointer to the current menu item + +*******************************************************************************/ + +int GPRS_MenuSelectSms_set(MfwMnu* menu, MfwMnuItem* item) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + T_MFW_HND win = mfwParent( mfw_header()); /* GPRS menu window */ + + tracefunction("GPRS_MenuSelectSms_set()"); + trace_P1("Menu level: %d", menu->lCursor[menu->level]); + + if (!data) + { + return FALSE; + } + + if (!data->mfw_gprs) + { + TRACE_EVENT("** No MFW gprs **"); + return FALSE; + } + + data->display = TRUE; + + if(!GPRS_SetSmsService(menu->lCursor[menu->level])) + { + info_screen(win, TxtFailed, NULL, NULL); + } + + return TRUE; +} + + +/******************************************************************************* + + $Function: GPRS_PleaseWait + + $Description: Creates a "Please Wait" message that will hang around until an "OK" or + "Error" message is received by GPRS_MfwCb + + $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 GPRS_PleaseWait(T_MFW_HND parent_win, USHORT TextId1, USHORT TextId2) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + T_DISPLAY_DATA display_info; + + tracefunction("GPRS_PleaseWait()"); + + if (!data) + { + return NULL; + } + + /* Delete any previous window */ + GPRS_PleaseWaitDestroy(); + + dlg_initDisplayData_TextId( &display_info, TxtNull, TxtCancel, TextId1, TextId2, COLOUR_STATUS); + dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)GPRS_PleaseWaitCb, PLEASEWAIT_TIMEOUT, KEY_HUP | KEY_RIGHT ); + + data->display = TRUE; /* Allow OK and Fail messages to appear. */ + data->menu_win = parent_win; /* Store parent window */ + + /* Show information screen, storing window pointer */ + data->pleasewait_win = info_dialog(parent_win,&display_info); + + return data->pleasewait_win; +} + + +/******************************************************************************* + + $Function: GPRS_PleaseWaitCb + + $Description: Please wait window callback function. + + $Returns: None + + $Arguments: win - the parent window + identifier - not used + reason - the reason for the callback + +*******************************************************************************/ + +static void GPRS_PleaseWaitCb(T_MFW_HND win, UBYTE identifier, UBYTE reason) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + + tracefunction("GPRS_PleaseWaitCb()"); + + if (!data) + { + return; + } + + /* Dialog already destroyed by this point */ + + data->pleasewait_win = NULL; + + switch(reason) + { + case INFO_TIMEOUT: + + /* Delete window */ + + info_screen(data->menu_win, TxtTimedOut, NULL, NULL); + data->status = MMI_GPRS_STATUS_IDLE; + break; + + case INFO_KCD_HUP: + case INFO_KCD_RIGHT: + + /*Cancel current operation */ + + switch(data->status) + { + case MMI_GPRS_STATUS_ATTACHING: + case MMI_GPRS_STATUS_DETACHING: + gprs_attach_abort(); + data->status = MMI_GPRS_STATUS_IDLE; + data->display = FALSE; + break; + case MMI_GPRS_STATUS_DATA_COUNTER: + gprs_counter_abort(); + data->status = MMI_GPRS_STATUS_IDLE; + data->display = FALSE; + break; + } + break; + } + + return; +} + + +/******************************************************************************* + + $Function: GPRS_PleaseWaitDestroy + + $Description: Check to see if the "Please Wait" window is present, and destroys it + if so. + + $Returns: None. + + $Arguments: None. + +*******************************************************************************/ + +static void GPRS_PleaseWaitDestroy(void) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + + tracefunction("GPRS_PleaseWaitDestroy()"); + + if (!data) + { + return; + } + + if (data->pleasewait_win) + { + SEND_EVENT(data->pleasewait_win, DIALOG_DESTROY, NULL, NULL); + data->pleasewait_win = NULL; + } + + return; +} + + +/******************************************************************************* + + $Function: GPRS_ShowCounter + + $Description: Generic counter displaying function + + $Returns: + + $Arguments: Standard menu option parameters + +*******************************************************************************/ + +static void GPRS_ShowCounter(T_MFW_HND win) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); +#ifdef NEW_EDITOR + T_AUI_EDITOR_DATA editor_data; +#else + T_EDITOR_DATA editor_data; +#endif +/* T_MFW_GPRS *gprs; */ /* Warning Correction */ + USHORT titleId; + + tracefunction("GPRS_ShowCounter()"); + + if (!data) + { + return; + } + + /* Destroy old editor if it exists */ + + if (data->edit_win) + { + GPRS_DestroyCounter(); + } + + /* Set appropriate title string (corrected) */ + + switch(data->counter_type) + { + case MMI_GPRS_COUNTER_DOWNLINK: + titleId = TxtIncomingData; + break; + + case MMI_GPRS_COUNTER_UPLINK: + titleId = TxtOutgoingData; + break; + + default: + titleId = TxtNull; + break; + } + + data->counterstring = (char *)ALLOC_MEMORY(ULONG_SIZE_IN_DECIMAL); + GPRS_UpdateCounter(); + + /* New Editor */ +#ifdef NEW_EDITOR + AUI_edit_SetDefault(&editor_data); + AUI_edit_SetDisplay(&editor_data, ZONE_FULL_SK_TITLE, COLOUR_EDITOR_XX, EDITOR_FONT); + AUI_edit_SetEvents(&editor_data, data->counter_type, FALSE, FOREVER, (T_AUI_EDIT_CB)GPRS_ShowCounterCb); + AUI_edit_SetTextStr(&editor_data, TxtReset, TxtSoftBack, titleId, NULL); + AUI_edit_SetMode(&editor_data, ED_MODE_READONLY, ED_CURSOR_NONE); + AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)data->counterstring, ULONG_SIZE_IN_DECIMAL); + + data->edit_win = AUI_edit_Start(win, &editor_data); +#else /* NEW_EDITOR */ + editor_data.TextString = NULL; + editor_data.LeftSoftKey = TxtSoftOK; + editor_data.RightSoftKey = TxtReset; + editor_data.AlternateLeftSoftKey = NULL; + editor_data.Callback = (T_EDIT_CB)GPRS_ShowCounterCb; + editor_data.Identifier = data->counter_type; + editor_data.hide = FALSE; + editor_data.mode = READ_ONLY_MODE; + editor_data.timeout = FOREVER; + editor_data.min_enter = 0; + editor_data.destroyEditor = FALSE; + editor_data.editor_attr.win.px = 0; + editor_data.editor_attr.win.py = Mmi_layout_line(1)+4; + editor_data.editor_attr.win.sx = SCREEN_SIZE_X; + editor_data.editor_attr.win.sy = Mmi_layout_line(2)+4; + editor_data.editor_attr.edtCol = COLOUR_EDITOR_XX; + editor_data.editor_attr.font = 0; + editor_data.editor_attr.mode = edtCurNone; + editor_data.editor_attr.controls = 0; + editor_data.editor_attr.size = ULONG_SIZE_IN_DECIMAL; + editor_data.TextId = titleId; + + editor_data.editor_attr.text = data->counterstring; + + /* Create the dialog handler */ + + data->edit_win = editor_start(win, &editor_data); /* start the editor */ +#endif /* NEW_EDITOR */ + + return; +} + + +/******************************************************************************* + + $Function: GPRS_ShowCounterCb + + $Description: Change text string for the counter we've just changed + + $Returns: nothing. + + $Arguments: win - the editor window + identifier - the type of counter we're updating + reason - the event that caused the callback + +*******************************************************************************/ + +static void GPRS_ShowCounterCb(T_MFW_HND win, USHORT identifier, USHORT reason) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + T_DISPLAY_DATA display_info; + + tracefunction("GPRS_ShowCounterCb()"); + + if (!data) + { + return; + } + + switch(reason) + { + /* Prompt whether to reset */ + + case INFO_KCD_LEFT: + dlg_initDisplayData_TextId(&display_info, TxtCancel, TxtReset, TxtDataCounterReset, TxtNull, COLOUR_STATUS); + dlg_initDisplayData_events(&display_info, (T_VOID_FUNC) GPRS_ResetCounter, TEN_SECS, KEY_HUP|KEY_CLEAR|KEY_LEFT|KEY_RIGHT ); + + info_dialog(win, &display_info); + break; + + /* Press hangup key or select OK + * Calls GPRS_DestroyCounter to destroy window */ + case INFO_KCD_RIGHT: + case INFO_KCD_HUP: + GPRS_DestroyCounter(); + break; + } + + return; +} + + +/******************************************************************************* + + $Function: GPRS_ResetCounter + + $Description: Callback from dialogue prompting whether to reset the data counter + + $Returns: None + + $Arguments: Standard callback parameters + +*******************************************************************************/ + +static void GPRS_ResetCounter(T_MFW_HND win, UBYTE identifier, UBYTE reason) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + + tracefunction("GPRS_ResetCounter()"); + + if (!data) + { + return; + } + + switch(reason) + { + /* RSK - Reset counter */ + + case INFO_KCD_RIGHT: + if (data->counter_type==MMI_GPRS_COUNTER_UPLINK) + { + data->uplink_counter = 0; + } + else + { + data->downlink_counter = 0; + } + + GPRS_ShowCounter(win); + break; + + /* LSK or HUP - cancel without resetting */ + + case INFO_KCD_LEFT: + case INFO_KCD_HUP: + break; + } + + return; +} + + +/******************************************************************************* + + $Function: GPRS_DestroyCounter + + $Description: Destroy counter display + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +static void GPRS_DestroyCounter() +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + + tracefunction("GPRS_DestroyCounter()"); + + if (!data) + { + return; + } + + if (data->edit_win) + { + + /* New Editor */ + +#ifdef NEW_EDITOR + AUI_edit_Destroy(data->edit_win); +#else + editor_destroy(data->edit_win); +#endif + FREE_MEMORY((void *)data->counterstring, ULONG_SIZE_IN_DECIMAL); + data->counterstring = NULL; + data->edit_win = NULL; + } + + return; +} + +/******************************************************************************* + + $Function: GPRS_UpdateCounter + + $Description: Change text string for the counter we've just changed + + $Returns: None + + $Arguments: None + +*******************************************************************************/ + +static void GPRS_UpdateCounter(void) +{ + T_MMI_GPRS_DATA *data = GPRS_Data(); + ULONG counter; + + tracefunction("GPRS_UpdateCounter()"); + + if (!data) + { + return; + } + + counter = 0; + + switch(data->counter_type) + { + case MMI_GPRS_COUNTER_UPLINK: + counter = data->uplink_counter; + break; + + case MMI_GPRS_COUNTER_DOWNLINK: + counter = data->downlink_counter; + break; + } + + if (counter<1024) + { + sprintf(data->counterstring, "%d bytes",counter); // Counter is <1K, display bytes + } + else + { + counter = counter/KILOBYTE; + if (counter<1024) + sprintf(data->counterstring, "%dKB",counter); // Counter is <1M, display Kbytes + else + { + counter = counter/KILOBYTE; + sprintf(data->counterstring, "%dMB",counter); // Display Mbytes + } + } + + return; +} +