diff src/aci2/mfw/mfw_gprs.c @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/aci2/mfw/mfw_gprs.c	Mon Sep 26 00:29:36 2016 +0000
@@ -0,0 +1,2134 @@
+/*
++--------------------------------------------------------------------+
+| 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.
+
+$History: Mfw_gprs.c
+
+	Feb 24, 2006 REF:DR OMAPS00068976 x0035544
+	Description: GPRS attach icon - MMI follow up issue of OMAPS00051034
+	solution: Added the function p_gprs_status() to querry the gprs status and to
+	store the status info in the structure variable stat.
+	
+$End	
+*/
+
+/* 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              */
+
+// ADDED BY RAVI - 30-11-2005
+#if (defined(FF_2TO1_PS) || (BOARD == 61))
+#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"
+#endif
+// END RAVI
+
+#include "gaci_cmh.h" /* include types declared in GACI             */
+//#include "cus_aci.h"
+#include "prim.h"
+#ifndef PCM_2_FFS
+#include "pcm.h"
+#endif
+
+#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;
+ #if(BOARD != 61) 
+  T_CGATT_STATE   state;   // OMAPS00041266 - RAVI
+  T_CGCLASS_CLASS cls;  // OMAPS00041266 - RAVI
+  T_CGREG_STAT    regState;  // OMAPS00041266 - RAVI
+  USHORT      lac; // OMAPS00041266 - RAVI
+  USHORT      ci;  // OMAPS00041266 - RAVI
+#endif  
+  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 = (T_CGCLASS_CLASS)NULL;
+  //x0035544 Feb 23, 2006 DR:OMAPS00068976
+  gprs_data->data.Reg_state.regState = (T_CGREG_STAT)NULL;
+  gprs_data->data.attached = (T_CGATT_STATE)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;
+  #if(BOARD != 61)
+  T_GPRS_CONT_REC tst_ctrc[MAX_CID_PLUS_EINS];
+  #endif
+  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
+             */
+#ifndef FF_2TO1_PS
+            qAT_PlusCGDCONT(CMD_SRC_LCL, &tst_ctrc, &tst_cid);
+#endif            
+  
+            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
+			 * where signal needs to be sent to BMI
+			 */
+			 
+            gprs_data->data.attached = para->attached;
+            
+            /*
+             * set all contexts to deactivated after detach
+             */
+            if ( gprs_data->data.attached == CGATT_STATE_DETACHED )
+            {
+              for ( i=0; i > gprs_data->data.numContexts; i++)
+              {
+                  gprs_data->data.contexts[i].activated = CGACT_STATE_DEACTIVATED;
+              }
+            }
+            else
+        	{
+			  if (qAT_PlusCGCLASS(CMD_SRC_LCL, &gprs_data->data.tclass) == AT_FAIL )
+			  {
+			    TRACE_EVENT("MFW_GPRS: Error. qAT_PlusCGCLASS failed");
+			  }
+			//x0035544 Feb 23, 2006 DR:OMAPS00068976
+			  if (qAT_PercentCGREG(CMD_SRC_LCL, &gprs_data->data.Reg_state.p_reg_State, &lac, &ci) == AT_FAIL )
+			  {
+			    TRACE_EVENT("MFW_GPRS: Error. qAT_PercentCGREG failed");
+        	  }
+        	}
+            break;
+
+          case E_MFW_GPRS_S_ACT:
+            /*
+             * search in the known context for the context ids given
+             * in the parameter
+             */ 
+            for ( i=0; i > gprs_data->data.numContexts; i++)
+            {
+              j=0;
+
+              do
+              {
+                /* 
+                 * set the new activation state for the found context id
+                 */
+                if ( para->contextAct.ids[j] == gprs_data->data.contexts[i].id)
+                {
+                  gprs_data->data.contexts[i].activated = para->contextAct.state;
+                }
+              }
+              while ( j < MAX_CID && 
+                (para->contextAct.ids[j] != gprs_data->data.contexts[i].id) );
+            }
+            break;
+
+          case E_MFW_GPRS_S_DATA:
+            /* 
+             * if attached mode was detached, set mode to attached
+             */ 
+              if ( gprs_data->data.attached == CGATT_STATE_DETACHED )
+              {
+                gprs_data->data.attached = CGATT_STATE_ATTACHED; 
+              }
+            
+            /*
+             * search in the known context for the context ids given
+             * in the parameter
+             */ 
+             for ( i=0; i < gprs_data->data.numContexts; i++)
+            {
+              j=0;
+
+              do
+              {
+                /* 
+                 * if context id of parameter is known, set the activation state 
+                 * to activated when it was detached and copy L2P value
+                 */
+                if ( para->contextL2P.ids[j] == gprs_data->data.contexts[i].id)
+                {
+                  if ( gprs_data->data.contexts[j].activated == CGACT_STATE_DEACTIVATED )
+                  {
+                    gprs_data->data.contexts[j].activated = CGACT_STATE_ACTIVATED;
+                  }
+          
+                  if (!(gprs_data->data.contexts[i].L2P) )
+                    gprs_data->data.contexts[i].L2P = 
+                     (char *)  mfwAlloc(sizeof(char) * strlen(para->contextL2P.L2P));
+
+                  memcpy (gprs_data->data.contexts[i].L2P, para->contextL2P.L2P,
+                          strlen( para->contextL2P.L2P ) * sizeof(char));
+                }
+                j++;
+              }
+              while ( j < MAX_CID && 
+                ( para->contextL2P.ids[j]!= gprs_data->data.contexts[i].id) );
+            }
+            break;
+
+          case E_MFW_GPRS_R_ACT:
+          case E_MFW_GPRS_R_DATA:
+          case E_MFW_GPRS_R_ANS:
+            gprs_data->data.link_id = para->link_id;
+            break;
+
+          case E_MFW_GPRS_S_QOS:
+          case E_MFW_GPRS_R_QOS:
+            for ( i=0; (i > gprs_data->data.numContexts) && 
+                (gprs_data->data.contexts[i].id == para->context.id); i++);
+
+            if (gprs_data->data.contexts[i].id == para->context.id) 
+              memcpy (&(gprs_data->data.contexts[i].data.qos), 
+#ifdef FF_2TO1_PS
+                      &(para->context.data.qos), sizeof(T_PS_qos));
+#else
+                      &(para->context.data.qos), sizeof(T_QOS));
+#endif            
+            else
+              TRACE_ERROR("context id not defined");
+            break;
+
+          case E_MFW_GPRS_S_QOS_MIN:
+            for ( i=0; (i > gprs_data->data.numContexts) && 
+                (gprs_data->data.contexts[i].id == para->context.id); i++);
+
+            if (gprs_data->data.contexts[i].id == para->context.id) 
+              memcpy (&(gprs_data->data.contexts[i].data.min_qos), 
+#ifdef FF_2TO1_PS
+                &(para->context.data.min_qos), sizeof(T_PS_qos));
+#else
+                &(para->context.data.min_qos), sizeof(T_QOS));
+#endif            
+            else
+              TRACE_ERROR("context id not defined");
+            break;
+
+          case E_MFW_GPRS_S_CLASS:
+          case E_MFW_GPRS_R_EREP_CLASS:
+            memcpy (&(gprs_data->data.tclass), &(para->tclass), sizeof (T_CGCLASS_CLASS));
+            break;
+
+          case E_MFW_GPRS_R_EREP_ACT:
+            /*
+             * search for context
+             */
+            /* SPR#2243 - SH - Changed 'para->context' to 'para->erepAct' */
+            for ( i=0; (i > gprs_data->data.numContexts) && 
+                (gprs_data->data.contexts[i].id == para->erepAct.cid); i++);
+
+            /*
+             * if context found, copy PDP address data to MFW data
+             */
+            /* SPR#2243 - SH - Changed 'para->context' to 'para->erepAct' */
+            if (gprs_data->data.contexts[i].id == para->erepAct.cid) 
+            {
+#ifdef FF_2TO1_PS
+              memcpy (&(gprs_data->data.contexts[i].data.attributes.pdp_addr), 
+                &para->erepAct.pdp_addr, sizeof(T_NAS_ip));
+              memcpy (&(gprs_data->data.contexts[i].data.attributes.pdp_type), 
+                &para->erepAct.pdp_type, sizeof(T_NAS_ip));
+#else
+              memcpy (&(gprs_data->data.contexts[i].data.pdp_addr), 
+                para->erepAct.pdp_addr, sizeof(T_PDP_ADDRESS));
+              memcpy (&(gprs_data->data.contexts[i].data.pdp_type), 
+                para->erepAct.pdp_type, sizeof(T_PDP_TYPE));
+#endif              
+              gprs_data->data.contexts[i].activated = CGACT_STATE_ACTIVATED;
+            }
+            else
+            {
+              if (gprs_data->data.numContexts < MAX_CID )
+              {
+#ifdef FF_2TO1_PS
+                memcpy (&(gprs_data->data.contexts[gprs_data->data.numContexts].data.attributes.pdp_addr),
+                  &para->erepAct.pdp_addr, sizeof (T_NAS_ip));
+                memcpy (&(gprs_data->data.contexts[gprs_data->data.numContexts].data.attributes.pdp_type),
+                  para->erepAct.pdp_type, sizeof (T_PDP_TYPE));
+                gprs_data->data.contexts[gprs_data->data.numContexts].id = (U8)para->erepAct.cid;
+#else
+                memcpy (&(gprs_data->data.contexts[gprs_data->data.numContexts].data.pdp_addr), para->erepAct.pdp_addr, 
+                  sizeof (T_PDP_ADDRESS));
+                memcpy (&(gprs_data->data.contexts[gprs_data->data.numContexts].data.pdp_type), para->erepAct.pdp_type, 
+                  sizeof (T_PDP_TYPE));
+                gprs_data->data.contexts[gprs_data->data.numContexts].id = para->erepAct.cid;
+#endif                
+                gprs_data->data.contexts[gprs_data->data.numContexts].activated = CGACT_STATE_ACTIVATED;
+                gprs_data->data.numContexts++;
+              }
+              else
+                TRACE_ERROR("MFW_GPRS: ERROR: Too many contexts!");
+            }
+            break;
+
+            /* SPR#2243 - SH - This is now a separate case from the above.
+             * Uses para->context throughout. */
+          case E_MFW_GPRS_S_PDPADDR:
+            /*
+             * search for context
+             */
+              for ( i=0; (i > gprs_data->data.numContexts) && 
+                (gprs_data->data.contexts[i].id == para->context.id); i++);
+
+            /*
+             * if context found, copy PDP address data to MFW data
+             */
+              if (gprs_data->data.contexts[i].id == para->context.id) 
+            {
+#ifdef FF_2TO1_PS
+              memcpy (&(gprs_data->data.contexts[i].data.attributes.pdp_addr), 
+                &para->context.data.attributes.pdp_addr, sizeof(T_NAS_ip));
+              memcpy (&(gprs_data->data.contexts[i].data.attributes.pdp_type), 
+                &para->context.data.attributes.pdp_type, sizeof(T_PDP_TYPE));
+#else
+              memcpy (&(gprs_data->data.contexts[i].data.pdp_addr), 
+                para->context.data.pdp_addr, sizeof(T_PDP_ADDRESS));
+              memcpy (&(gprs_data->data.contexts[i].data.pdp_type), 
+                para->context.data.pdp_type, sizeof(T_PDP_TYPE));
+#endif              
+              gprs_data->data.contexts[i].activated = para->context.activated;
+            }
+            else
+            {
+              if (gprs_data->data.numContexts < MAX_CID )
+              {
+#ifdef FF_2TO1_PS
+                memcpy (&(gprs_data->data.contexts[gprs_data->data.numContexts].data.attributes.pdp_addr),
+                  &para->context.data.attributes.pdp_addr, sizeof (T_NAS_ip));
+                memcpy (&(gprs_data->data.contexts[gprs_data->data.numContexts].data.attributes.pdp_type),
+                  &para->context.data.attributes.pdp_type, sizeof (T_PDP_TYPE));
+                gprs_data->data.contexts[gprs_data->data.numContexts].id = para->context.data.cid;
+#else
+                memcpy (&(gprs_data->data.contexts[gprs_data->data.numContexts].data.pdp_addr), para->context.data.pdp_addr, 
+                  sizeof (T_PDP_ADDRESS));
+                memcpy (&(gprs_data->data.contexts[gprs_data->data.numContexts].data.pdp_type), para->context.data.pdp_type, 
+                  sizeof (T_PDP_TYPE));
+                gprs_data->data.contexts[gprs_data->data.numContexts].id = para->context.id;
+#endif                
+                gprs_data->data.contexts[gprs_data->data.numContexts].activated = para->context.activated;
+                gprs_data->data.numContexts++;
+              }
+              else
+                TRACE_ERROR("MFW_GPRS: ERROR: Too many contexts!");
+            }
+            break;
+
+          case E_MFW_GPRS_R_EREP_DEACT:
+            /*
+             * search for context
+             */
+            for ( i=0; (i < gprs_data->data.numContexts) && 
+                (gprs_data->data.contexts[i].id != para->erepAct.cid); i++);
+
+            /*
+             * if context found, set mode to deactivated
+             */
+            if (gprs_data->data.contexts[i].id == para->erepAct.cid) 
+            {
+              gprs_data->data.contexts[i].activated = CGACT_STATE_DEACTIVATED;
+            }
+            else
+            {
+              for ( i=0; (i < gprs_data->data.numContexts) && 
+#ifdef FF_2TO1_PS
+              ( strcmp(gprs_data->data.contexts[i].data.attributes.pdp_type, para->erepAct.pdp_type) ||
+				    strcmp((const char *)&gprs_data->data.contexts[i].data.attributes.pdp_addr.ip_address.ipv4_addr.a4,
+              (const char *)&para->erepAct.pdp_addr.ip_address.ipv4_addr.a4) ); i++);
+
+#else
+                  ( strcmp(gprs_data->data.contexts[i].data.pdp_type, para->erepAct.pdp_type) ||
+				    strcmp(gprs_data->data.contexts[i].data.pdp_addr, para->erepAct.pdp_addr) ); i++);
+#endif              
+
+              /*
+               * if context found, set mode to deactivated
+               */
+#ifdef FF_2TO1_PS
+              if (!strcmp((const char *)&gprs_data->data.contexts[i].data.attributes.pdp_type, (const char *)&para->erepAct.pdp_type) &&
+                  !strcmp((const char *)&gprs_data->data.contexts[i].data.attributes.pdp_addr.ip_address.ipv4_addr.a4, (const char *)&para->erepAct.pdp_addr.ip_address.ipv4_addr.a4) ) 
+#else
+              if (!strcmp(gprs_data->data.contexts[i].data.pdp_type, para->erepAct.pdp_type) &&
+                  !strcmp(gprs_data->data.contexts[i].data.pdp_addr, para->erepAct.pdp_addr) ) 
+#endif                  
+              {
+                gprs_data->data.contexts[i].activated = CGACT_STATE_DEACTIVATED;
+			  }
+            }
+            
+            break;
+
+          case E_MFW_GPRS_S_AUTORESP:
+            gprs_data->data.autoResponse = para->mode;
+            break;
+
+          case E_MFW_GPRS_S_ANS:
+            break;
+
+          case E_MFW_GPRS_S_EREP:
+            /*
+             * copy new event reporting settings to MFW data
+             */
+            gprs_data->data.eventRep.mode = para->eventRep.mode;
+            gprs_data->data.eventRep.bfr  = para->eventRep.bfr;            
+            break;
+
+          case E_MFW_GPRS_R_EREP_RJ:
+            break;
+
+          case E_MFW_GPRS_R_REG:
+            /*
+             * copy new registration status to MFW data
+             */
+             /* SH - now with cell reselection data */
+	     //x0035544 Feb 23, 2006 DR:OMAPS00068976
+            gprs_data->data.Reg_state.regState = para->cell.stat;
+            gprs_data->data.lac = para->cell.lac;
+            gprs_data->data.ci = para->cell.ci;
+
+            /*
+       * check if attachement state has changed
+       */
+            if (qAT_PlusCGATT(CMD_SRC_LCL, &state) != AT_FAIL )
+              gprs_data->data.attached = state;
+            else
+              TRACE_EVENT("MFW_GPRS: Error. qAT_PlusCGATT failed");
+      break;
+
+          case E_MFW_GPRS_S_SMSSERV:
+            /*
+             * copy new SMS service mode to MFW data
+             */
+            gprs_data->data.SMSService = para->service;
+            break;
+
+            case E_MFW_GPRS_COUNTER:
+            	/* SPR#1574 - SH - Small change to ensure counter value copied correctly */
+				memcpy(&gprs_data->data.counter, &para->counter, sizeof(T_MFW_GPRS_COUNTER));
+            break;
+
+          case E_MFW_GPRS_OK:
+          case E_MFW_GPRS_ERROR:
+          case E_MFW_GPRS_CONNECT:
+          case E_MFW_GPRS_ERR_CONNECT:
+            break;
+
+
+          default:
+            /*
+             * an event has been used, which is not handled.
+             * perhaps an error?
+             */
+            TRACE_EVENT("mfw_gprs.gprs_sign_exec: unused event");
+            break;
+        }
+  
+        /* 
+         * if callback defined, call it 
+         */
+        if ( gprs_data->handler )
+        {
+          current_mfw_elem = cur_elem;
+
+          if ( (*(gprs_data->handler))( gprs_data->event, 
+                                      (void*)&gprs_data->data ) )
+            return TRUE;
+        }
+      }
+    }
+
+    /* 
+     * look for next element 
+     */
+    cur_elem = cur_elem->next;
+  }
+  return FALSE;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS            |
+| STATE  : code                         ROUTINE: gprs_ok             |
++--------------------------------------------------------------------+
+
+   PURPOSE : success indication from ACI 
+             (This function is called by rAT_OK)
+
+   PARAMETERS : AT command ID
+*/
+void gprs_ok(T_ACI_AT_CMD cmdId)
+{
+  TRACE_FUNCTION("mfw_gprs.gprs_ok");
+
+  gprs_signal(E_MFW_GPRS_OK, &cmdId);
+  
+  return;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS            |
+| STATE  : code                         ROUTINE: gprs_error          |
++--------------------------------------------------------------------+
+
+   PURPOSE : failure indication from ACI 
+             (This function is called by rAT_PlusCME)
+
+   PARAMETERS : AT command ID
+*/
+void gprs_error(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR err)
+{
+  TRACE_FUNCTION("mfw_gprs.gprs_error");
+ 
+  gprs_signal(E_MFW_GPRS_ERROR, &cmdId);
+  
+  return;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS            |
+| STATE  : code                         ROUTINE: gprs_connect        |
++--------------------------------------------------------------------+
+
+   PURPOSE : success indication from ACI for connection
+             (This function is called by rAT_CONNECT)
+*/
+void gprs_connect(SHORT cId)
+{
+  TRACE_FUNCTION("mfw_gprs.gprs_connect");
+
+  gprs_signal(E_MFW_GPRS_CONNECT, &cId);
+  return;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS            |
+| STATE  : code                         ROUTINE: gprs_err_connect    |
++--------------------------------------------------------------------+
+
+   PURPOSE : error indication from ACI for connection
+             (This function is called by rAT_BUSY, rAT_NO_CARRIER,
+              rAT_NO_ANSWERE)
+
+*/
+void gprs_err_connect(SHORT cId)
+{
+  TRACE_FUNCTION("mfw_gprs.gprs_err_connect");
+
+  gprs_signal(E_MFW_GPRS_ERR_CONNECT, &cId);
+
+  return;
+}
+
+
+
+/*--------------------------------------------------------------------
+  MMI-MFW Interface Functions
+--------------------------------------------------------------------*/
+
+/*
++---------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS             |
+| STATE  : code                         ROUTINE: gprs_definePDPContext|
++---------------------------------------------------------------------+
+
+
+   PURPOSE : Define PDP context. If the contexts for cid does not 
+             exist in the contexts list, the new context will be 
+             inserted in the contexts list.
+
+   PARAMETERS :
+             cid    : context ID
+            *context: context data
+*/
+#ifdef FF_2TO1_PS
+T_MFW_RES gprs_definePDPContext(SHORT cid, T_PDP_CONTEXT *inputCtxt)
+{
+  T_MFW_GPRS_CONTEXT *context; 
+
+  TRACE_FUNCTION ("gprs_definePDPContext()");
+
+  /*
+   * ACI call
+   */
+  if (sAT_PlusCGDCONT(CMD_SRC_LCL, (U8)cid, inputCtxt) == AT_FAIL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGDCONT failed");
+    return MFW_RES_ERR;
+  }
+
+  /*
+   * insert context into MFW GPRS data
+   */
+  context = (T_MFW_GPRS_CONTEXT *) mfwAlloc(sizeof(T_MFW_GPRS_CONTEXT));
+
+  context->id       = (U8)cid;
+  memcpy (&(context->data.attributes), inputCtxt, sizeof (T_GPRS_CONT_REC));
+  context->activated = CGACT_STATE_DEACTIVATED; /* not yet activated */
+
+  gprs_signal(E_MFW_GPRS_S_CNTXT, context);
+
+  mfwFree((void *) context, sizeof(T_MFW_GPRS_CONTEXT));
+
+  return MFW_RES_OK;
+}
+#else
+T_MFW_RES gprs_definePDPContext(SHORT cid, T_GPRS_CONT_REC *inputCtxt)
+{
+  T_MFW_GPRS_CONTEXT *context; 
+
+  TRACE_FUNCTION ("gprs_definePDPContext()");
+
+  /*
+   * ACI call
+   */
+  if (sAT_PlusCGDCONT(CMD_SRC_LCL, cid, inputCtxt) == AT_FAIL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGDCONT failed");
+    return MFW_RES_ERR;
+  }
+
+  /*
+   * insert context into MFW GPRS data
+   */
+  context = (T_MFW_GPRS_CONTEXT *) mfwAlloc(sizeof(T_MFW_GPRS_CONTEXT));
+
+  context->id       = cid;
+  memcpy (&(context->data), inputCtxt, sizeof (T_GPRS_CONT_REC));
+  context->activated = CGACT_STATE_DEACTIVATED; /* not yet activated */
+
+  gprs_signal(E_MFW_GPRS_S_CNTXT, context);
+
+  mfwFree((void *) context, sizeof(T_MFW_GPRS_CONTEXT));
+
+  return MFW_RES_OK;
+}
+#endif
+
+
+
+/*
++---------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS             |
+| STATE  : code                         ROUTINE: gprs_setQOS          |
++---------------------------------------------------------------------+
+
+
+   PURPOSE : Set the Quality of Service Profile for the context 
+             specified by cid. The Quality of Service Profile is given 
+             in the pointer parameter qos.
+
+   PARAMETERS :
+             cid      : context ID
+            *inputQos : quality of service data
+*/
+#ifdef FF_2TO1_PS
+T_MFW_RES gprs_setQOS(SHORT cid ,T_PS_qos *inputQos)
+{
+  T_MFW_GPRS_CONTEXT *cntxt; 
+
+  TRACE_FUNCTION ("gprs_setQOS()");
+
+  /*
+   * ACI call
+   */
+  if(sAT_PlusCGQREQ(CMD_SRC_LCL, (U8)cid, inputQos) == AT_FAIL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGQREQ failed");
+    return MFW_RES_ERR;
+  }
+
+  /*
+   * change qos data in MFW GPRS data
+   */
+  cntxt = (T_MFW_GPRS_CONTEXT *) mfwAlloc(sizeof(T_MFW_GPRS_CONTEXT));
+
+  cntxt->id = (U8)cid;
+  memcpy (&(cntxt->data.qos), inputQos, sizeof (T_PS_qos));
+
+  gprs_signal(E_MFW_GPRS_S_QOS, cntxt);
+
+  return MFW_RES_OK;
+}
+#else
+T_MFW_RES gprs_setQOS(SHORT cid ,T_QOS *inputQos)
+{
+  T_MFW_GPRS_CONTEXT *cntxt; 
+
+  TRACE_FUNCTION ("gprs_setQOS()");
+
+  /*
+   * ACI call
+   */
+  if(sAT_PlusCGQREQ(CMD_SRC_LCL, cid, inputQos) == AT_FAIL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGQREQ failed");
+    return MFW_RES_ERR;
+  }
+
+  /*
+   * change qos data in MFW GPRS data
+   */
+  cntxt = (T_MFW_GPRS_CONTEXT *) mfwAlloc(sizeof(T_MFW_GPRS_CONTEXT));
+
+  cntxt->id = cid;
+  memcpy (&(cntxt->data.qos), inputQos, sizeof (T_QOS));
+
+  gprs_signal(E_MFW_GPRS_S_QOS, cntxt);
+
+  return MFW_RES_OK;
+}
+#endif
+
+
+/*
++---------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS             |
+| STATE  : code                         ROUTINE: gprs_setQOSMin       |
++---------------------------------------------------------------------+
+
+
+   PURPOSE : Set the minimum acceptable Quality of Service Profile for 
+             the context specified by cid.
+
+   PARAMETERS :
+             cid      : context ID
+            *inputQos : quality of service data
+*/
+#ifdef FF_2TO1_PS
+T_MFW_RES gprs_setQOSMin(SHORT cid ,T_PS_qos *inputQos)
+{
+  T_MFW_GPRS_CONTEXT *cntxt; 
+
+  TRACE_FUNCTION ("gprs_setQOSMin()");
+
+  /*
+   * ACI call
+   */
+  if (sAT_PlusCGQMIN(CMD_SRC_LCL, (U8)cid, (T_PS_min_qos*)inputQos) == AT_FAIL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGQMIN failed");
+    return MFW_RES_ERR;
+  }
+
+  /*
+   * change mininum acceptable qos data in MFW GPRS data
+   */
+  cntxt = (T_MFW_GPRS_CONTEXT *) mfwAlloc(sizeof(T_MFW_GPRS_CONTEXT));
+
+  cntxt->id = (U8)cid;
+  memcpy (&(cntxt->data.min_qos), inputQos, sizeof (T_PS_qos));
+
+  gprs_signal(E_MFW_GPRS_S_QOS_MIN, cntxt);
+
+  return MFW_RES_OK;
+}
+#else
+T_MFW_RES gprs_setQOSMin(SHORT cid ,T_QOS *inputQos)
+{
+  T_MFW_GPRS_CONTEXT *cntxt; 
+
+  TRACE_FUNCTION ("gprs_setQOSMin()");
+
+  /*
+   * ACI call
+   */
+  if (sAT_PlusCGQMIN(CMD_SRC_LCL, cid, inputQos) == AT_FAIL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGQMIN failed");
+    return MFW_RES_ERR;
+  }
+
+  /*
+   * change mininum acceptable qos data in MFW GPRS data
+   */
+  cntxt = (T_MFW_GPRS_CONTEXT *) mfwAlloc(sizeof(T_MFW_GPRS_CONTEXT));
+
+  cntxt->id = cid;
+  memcpy (&(cntxt->data.min_qos), inputQos, sizeof (T_QOS));
+
+  gprs_signal(E_MFW_GPRS_S_QOS_MIN, cntxt);
+
+  return MFW_RES_OK;
+}
+#endif
+
+
+/*
++---------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS             |
+| STATE  : code                         ROUTINE: gprs_attach          |
++---------------------------------------------------------------------+
+
+
+   PURPOSE : Attach to or detach from the GPRS Service. The parameter 
+             state indicates the state of GPRS attchement 
+
+   PARAMETERS :
+             state    : attachement state ( 0 - detached, 1 - attached)
+
+*/
+T_MFW_RES gprs_attach(T_CGATT_STATE state)
+{
+  T_ACI_RETURN result;
+  
+  TRACE_FUNCTION ("gprs_attach()");
+
+  /*
+   * ACI call
+   * SPR#1574 - SH - Don't return fail for AT_CMPL result
+   */
+  result = sAT_PlusCGATT(CMD_SRC_LCL, state);
+  if ( result!= AT_EXCT && result!=AT_CMPL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGATT failed");
+    return MFW_RES_ERR;
+  	}
+  
+  /*
+   * change attachement state in MFW GPRS data
+   */
+  gprs_signal(E_MFW_GPRS_S_ATT, &state);
+
+
+  return MFW_RES_OK;
+}
+
+
+/*
++---------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS            |
+| STATE  : code                         ROUTINE: gprs_attach_abort       |
++---------------------------------------------------------------------+
+
+
+   PURPOSE : Cancel attachment to or detachment from GPRS service
+   SPR#1983 - SH - Added.
+              
+   PARAMETERS : None.
+   
+*/
+T_MFW_RES gprs_attach_abort(void)
+{
+	T_ACI_RETURN result;
+
+	TRACE_EVENT("gprs_attach_abort()");
+	
+	result = sAT_Abort(CMD_SRC_LCL, AT_CMD_CGATT);
+
+	if (result==AT_FAIL)
+		return MFW_RES_ERR;
+
+	return MFW_RES_OK;
+}
+
+
+/*
++----------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS              |
+| STATE  : code                         ROUTINE: gprs_contextActivation|
++----------------------------------------------------------------------+
+
+
+   PURPOSE : Activate or Deactivate PDP contexts. The parameter state 
+             indicates the state of GPRS activation.
+             The parameter cids points to a list of contexts definitions. 
+             If the list is empty all contexts will be attached or 
+             detached. If the mobile is not attached before, a GPRS 
+             attach is first performed. 
+
+   PARAMETERS :
+             state    : activation state ( 0 - deactivated, 1 - activated)
+             cids     : list of contexts
+*/
+T_MFW_RES gprs_contextActivation(T_CGACT_STATE state, SHORT *cids)
+{
+  T_MFW_GPRS_CNTXT_ACT *cntxtAct; 
+
+  TRACE_FUNCTION ("gprs_contextActivation()");
+
+  /*
+   * ACI call
+   */
+#ifdef FF_2TO1_PS
+  if (sAT_PlusCGACT(CMD_SRC_LCL, state, (U8 *)cids) == AT_FAIL)
+#else
+  if (sAT_PlusCGACT(CMD_SRC_LCL, state, cids) == AT_FAIL)
+#endif      
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGCACT failed");
+    return MFW_RES_ERR;
+  }
+
+
+  /*
+   * change context activation data in MFW GPRS data
+   */
+  cntxtAct = (T_MFW_GPRS_CNTXT_ACT *) mfwAlloc(sizeof(T_MFW_GPRS_CNTXT_ACT));
+
+  memcpy (&(cntxtAct->ids), cids, sizeof (SHORT));
+  cntxtAct->state = state;
+
+  gprs_signal(E_MFW_GPRS_S_ACT, cntxtAct);
+
+  return MFW_RES_OK;
+}
+
+
+/*
++---------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS             |
+| STATE  : code                         ROUTINE: gprs_setData         |
++---------------------------------------------------------------------+
+
+
+   PURPOSE : Enter data state. Whatever actions are necessary to 
+             establish communication between the TE and the network 
+             will be performed (e.g. attach, context activate)
+   PARAMETERS :
+             L2P      : Layer 2 protocoll
+             cids     : list of contexts
+
+*/
+#ifdef FF_2TO1_PS
+T_MFW_RES gprs_setData(char *L2P, SHORT *cids)
+{
+  T_MFW_GPRS_CNTXT_L2P *cntxtL2P; 
+
+  TRACE_FUNCTION ("gprs_setData()");
+
+  /*
+   * ACI call
+   */
+  if (sAT_PlusCGDATA(CMD_SRC_LCL, L2P, (U8 *)cids) == AT_FAIL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGDATA failed");
+    return MFW_RES_ERR;
+  }
+
+
+  /*
+   * change attachement, activation and L2P data in MFW GPRS data
+   */
+  cntxtL2P = (T_MFW_GPRS_CNTXT_L2P *) mfwAlloc(sizeof(T_MFW_GPRS_CNTXT_L2P));
+  cntxtL2P->L2P = (char *)  mfwAlloc((U16)(sizeof(char) * strlen(L2P)));
+  cntxtL2P->ids = (USHORT *) mfwAlloc(sizeof(SHORT) * MAX_CID);
+
+  memcpy (cntxtL2P->L2P, L2P, sizeof (CHAR) * strlen(L2P));
+  memcpy (cntxtL2P->ids, cids, sizeof (SHORT));
+
+  gprs_signal(E_MFW_GPRS_S_DATA, cntxtL2P);
+
+  mfwFree( (U8 *) cntxtL2P->L2P, (U16)(sizeof(char) * strlen(L2P)));
+  mfwFree( (U8 *) cntxtL2P->ids, (U16)(sizeof(SHORT) * MAX_CID));
+
+  return MFW_RES_OK;
+}
+#else
+T_MFW_RES gprs_setData(char *L2P, SHORT *cids)
+{
+  T_MFW_GPRS_CNTXT_L2P *cntxtL2P; 
+
+  TRACE_FUNCTION ("gprs_setData()");
+
+  /*
+   * ACI call
+   */
+  if (sAT_PlusCGDATA(CMD_SRC_LCL, L2P, cids) == AT_FAIL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGDATA failed");
+    return MFW_RES_ERR;
+  }
+
+
+  /*
+   * change attachement, activation and L2P data in MFW GPRS data
+   */
+  cntxtL2P = (T_MFW_GPRS_CNTXT_L2P *) mfwAlloc(sizeof(T_MFW_GPRS_CNTXT_L2P));
+  cntxtL2P->L2P = (char *)  mfwAlloc(sizeof(char) * strlen(L2P));
+  cntxtL2P->ids = (USHORT *) mfwAlloc(sizeof(SHORT) * MAX_CID);
+
+  memcpy (cntxtL2P->L2P, L2P, sizeof (CHAR) * strlen(L2P));
+  memcpy (cntxtL2P->ids, cids, sizeof (SHORT));
+
+  gprs_signal(E_MFW_GPRS_S_DATA, cntxtL2P);
+
+  mfwFree( (void *) cntxtL2P->L2P, sizeof(char) * strlen(L2P));
+  mfwFree( (void *) cntxtL2P->ids, sizeof(SHORT) * MAX_CID);
+
+  return MFW_RES_OK;
+}
+#endif
+
+
+
+/*
++-----------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS               |
+| STATE  : code                         ROUTINE: gprs_showPDPAddress    |
++-----------------------------------------------------------------------+
+
+
+   PURPOSE : Show PDP address. The Function sets the pointer pdp_adress 
+             to a list of PDP addresses for the specified context 
+             identifiers in the parameter cids.
+
+   PARAMETERS :
+             pdp_address: list of contexts
+   
+   RETURNS:
+             MFW_RES_OK:  On success
+       MFW_RES_ERR: On failure
+*/
+#ifdef FF_2TO1_PS
+T_MFW_RES gprs_showPDPAddress(SHORT *cids, T_NAS_ip *pdp_address)
+{
+  int i;
+
+  T_MFW_GPRS_CONTEXT *cntxt; 
+
+  TRACE_FUNCTION ("gprs_showPDPAddress()");
+
+  /*
+   * ACI call, get PDP addresses
+   */
+  if (sAT_PlusCGPADDR(CMD_SRC_LCL, (U8*)cids, pdp_address) == AT_FAIL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGPADDR failed");
+    return MFW_RES_ERR;
+  }
+
+
+  /*
+   * change PDP address data in MFW GPRS data
+   */
+  cntxt = (T_MFW_GPRS_CONTEXT *) mfwAlloc(sizeof(T_MFW_GPRS_CONTEXT));
+
+  for (i=0; i < MAX_CID; i++)
+  {
+    cntxt->id = (U8)cids[i];
+    memcpy (&(cntxt->data.attributes.pdp_addr), &pdp_address[i], sizeof (T_NAS_ip));
+
+    gprs_signal(E_MFW_GPRS_S_PDPADDR, cntxt);
+  }
+
+  return MFW_RES_OK;
+}
+#else
+T_MFW_RES gprs_showPDPAddress(SHORT *cids, T_PDP_ADDRESS *pdp_address)
+{
+  int i;
+
+  T_MFW_GPRS_CONTEXT *cntxt; 
+
+  TRACE_FUNCTION ("gprs_showPDPAddress()");
+
+  /*
+   * ACI call, get PDP addresses
+   */
+  if (sAT_PlusCGPADDR(CMD_SRC_LCL, cids, pdp_address) == AT_FAIL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGPADDR failed");
+    return MFW_RES_ERR;
+  }
+
+
+  /*
+   * change PDP address data in MFW GPRS data
+   */
+  cntxt = (T_MFW_GPRS_CONTEXT *) mfwAlloc(sizeof(T_MFW_GPRS_CONTEXT));
+
+  for (i=0; i < MAX_CID; i++)
+  {
+    cntxt->id = cids[i];
+    memcpy (&(cntxt->data.pdp_addr), pdp_address[i], sizeof (T_PDP_ADDRESS));
+
+    gprs_signal(E_MFW_GPRS_S_PDPADDR, cntxt);
+  }
+
+  return MFW_RES_OK;
+}
+#endif
+
+
+/*
++----------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS              |
+| STATE  : code                         ROUTINE: gprs_setAutoResponse  |
++----------------------------------------------------------------------+
+
+
+   PURPOSE : Enable or Disable an automatic positive response to the 
+             receipt of Context Activation Requests from the network. 
+             The parameter mode indicates if the automatic response will 
+             be enabled or disabled.
+
+   PARAMETERS :
+             mode : mode of auto response
+*/
+T_MFW_RES gprs_setAutoResponse(T_CGAUTO_N mode)
+{
+
+  TRACE_FUNCTION ("gprs_setAutoResponse()");
+
+  /*
+   * ACI call
+   */
+  if (sAT_PlusCGAUTO(CMD_SRC_LCL, mode) == AT_FAIL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGAUTO failed");
+    return MFW_RES_ERR;
+  }
+
+  /*
+   * change auto response mode in MFW GPRS data
+   */
+  gprs_signal(E_MFW_GPRS_S_AUTORESP, &mode);
+
+  return MFW_RES_OK;
+}
+
+
+/*
++----------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS              |
+| STATE  : code                         ROUTINE: gprs_ManualResponse   |
++----------------------------------------------------------------------+
+
+
+   PURPOSE : This Function is for a manual response to network request 
+             for PDP context activation. The parameter response 
+             indicates if the request will be accepted or rejected.
+   PARAMETERS :
+             response : ( 0 - rejected, 1 - accepted)
+*/
+T_MFW_RES gprs_ManualResponse(USHORT response, char *l2p, SHORT cid)
+{
+  TRACE_FUNCTION ("gprs_ManualResponse()");
+
+  /*
+   * send signal to current MFW element
+   */
+  gprs_signal(E_MFW_GPRS_S_ANS, &cid);
+
+  /*
+   * ACI call
+   */
+  if (sAT_PlusCGANS(CMD_SRC_LCL, response, l2p, cid) == AT_FAIL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGANS failed");
+    return MFW_RES_ERR;
+  }
+
+  return MFW_RES_OK;
+}
+
+
+/*
++----------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS              |
+| STATE  : code                         ROUTINE: gprs_setClass         |
++----------------------------------------------------------------------+
+
+
+   PURPOSE : Set the mobile to operate according to a GPRS mobile class. 
+
+   PARAMETERS :
+             m_class : GPRS mobile class
+*/
+T_MFW_RES gprs_setClass(T_CGCLASS_CLASS new_cls)
+{
+  T_CGATT_STATE state;
+
+  TRACE_FUNCTION ("gprs_setClass()");
+
+  /*
+   * ACI call
+   */
+  if (sAT_PlusCGCLASS(CMD_SRC_LCL, new_cls) == AT_FAIL)
+  {
+  TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGCLASS failed");
+    return MFW_RES_ERR;
+  }
+
+
+  /*
+   * change class data in MFW GPRS data
+   */
+  gprs_signal(E_MFW_GPRS_S_CLASS, &new_cls);
+
+
+  /*
+   * check if attachement mode has changed while class change
+   */
+  if (qAT_PlusCGATT(CMD_SRC_LCL, &state) != AT_FAIL )
+    gprs_signal(E_MFW_GPRS_S_ATT, &state);
+  else
+  TRACE_EVENT("MFW_GPRS: Error. qAT_PlusCGATT failed");
+
+  return MFW_RES_OK;
+}
+
+
+/*
++----------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS              |
+| STATE  : code                         ROUTINE: gprs_setEventReporting|
++----------------------------------------------------------------------+
+
+
+   PURPOSE : Enables or Disables  the sending of certain events 
+             occuring in the GPRS ME or the network to the TE. 
+
+   PARAMETERS :
+             mode : mode to specifies if the event reporting will be 
+                    enabled or disabled
+             bfr  : controls the effect on buffered events. 
+*/
+T_MFW_RES gprs_setEventReporting(T_CGEREP_MODE mode, T_CGEREP_BFR bfr)
+{
+  T_MFW_GPRS_EVENTREP *eventRep; 
+
+  TRACE_FUNCTION ("gprs_setEventReporting()");
+
+  /*
+   * ACI call
+   */
+  if (sAT_PlusCGEREP(CMD_SRC_LCL, mode, bfr) == AT_FAIL)
+    return MFW_RES_ERR;
+
+  /*
+   * change event reporting data in MFW GPRS data
+   */
+  eventRep = (T_MFW_GPRS_EVENTREP *) mfwAlloc(sizeof(T_MFW_GPRS_EVENTREP));
+
+  eventRep->mode = mode;
+  eventRep->bfr  = bfr;
+  gprs_signal(E_MFW_GPRS_S_EREP, eventRep);
+
+  return MFW_RES_OK;
+}
+
+
+/*
++----------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS              |
+| STATE  : code                         ROUTINE: gprs_setServiceSMS    |
++----------------------------------------------------------------------+
+
+
+   PURPOSE : The function specifies the service or service preference 
+             to be used for SMS. 
+ 
+
+   PARAMETERS :
+             n : service to use for SMS ( 0 - GPRS, 1 - circuit switch, 
+                 2 - GPRS preferred, 3 circuit switch preferred)
+*/
+
+T_MFW_RES gprs_setServiceSMS(T_CGSMS_SERVICE service)
+{
+  TRACE_FUNCTION ("gprs_setServiceSMS()");
+
+  /*
+   * ACI call
+   */
+  if (sAT_PlusCGSMS(CMD_SRC_LCL, service) == AT_FAIL)
+    return MFW_RES_ERR;
+
+
+  /*
+   * change SMS service data in MFW GPRS data
+   */
+  gprs_signal(E_MFW_GPRS_S_SMSSERV, &service);
+
+  return MFW_RES_OK;
+}
+
+
+/*
++----------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS              |
+| STATE  : code                         ROUTINE: gprs_getServiceSMS    |
++----------------------------------------------------------------------+
+
+
+   PURPOSE : This function returns the service preference to be used for SMS.
+ 
+
+   PARAMETERS :
+             n : service to use for SMS ( 0 - GPRS, 1 - circuit switch, 
+                 2 - GPRS preferred, 3 circuit switch preferred)
+*/
+
+T_CGSMS_SERVICE gprs_getServiceSMS(void)
+{	
+	T_CGSMS_SERVICE service;
+	
+ if (qAT_PlusCGSMS(CMD_SRC_LCL, &service) != AT_FAIL )
+    return service;
+  else
+    TRACE_EVENT("MFW_GPRS: Error. qAT_PlusCGCLASS failed");
+	return CGSMS_SERVICE_INVALID;
+}
+
+
+/*
++----------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS              |
+| STATE  : code                         ROUTINE: gprs_counter    |
++----------------------------------------------------------------------+
+
+
+   PURPOSE : SPR#1450 - SH
+
+   Resets the data counter if reset_counter is TRUE.
+   In either case, response returned in rAT_PercentSNCNT below.
+*/
+
+T_MFW_RES gprs_counter(BOOL reset_counter)
+{
+	T_ACI_RETURN result;
+	TRACE_FUNCTION("gprs_counter");
+
+	result = sAT_PercentSNCNT(CMD_SRC_LCL, reset_counter);
+	
+	if (result!=AT_EXCT && result!=AT_CMPL)
+		return MFW_RES_ERR;
+
+	if (result==AT_CMPL)
+		return MfwResDone;		/* No response expected */
+		
+	return MFW_RES_OK;
+}
+
+
+/*
++---------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS            |
+| STATE  : code                         ROUTINE: gprs_counter_abort      |
++---------------------------------------------------------------------+
+
+
+   PURPOSE : Cancel request for data count
+   SPR#1983 - SH - Added.
+              
+   PARAMETERS : None.
+   
+*/
+
+T_MFW_RES gprs_counter_abort(void)
+{
+	T_ACI_RETURN result;
+	
+	result = sAT_Abort(CMD_SRC_LCL, AT_CMD_SNCNT);
+
+	if (result==AT_FAIL)
+		return MFW_RES_ERR;
+
+	return MFW_RES_OK;
+}
+
+
+/*
++----------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS              |
+| STATE  : code                         ROUTINE: gprs_status    |
++----------------------------------------------------------------------+
+
+
+   PURPOSE : Returns the GPRS status value
+*/
+
+T_CGREG_STAT gprs_status()
+{
+#if(BOARD != 61)
+	T_ACI_RETURN result;  // OMAPS00042166 - RAVI
+#endif	
+	T_CGREG_STAT status = (T_CGREG_STAT)0;
+	USHORT lac, ci;
+	
+	TRACE_FUNCTION("gprs_status");
+
+	if (qAT_PlusCGREG(CMD_SRC_LCL, &status, &lac, &ci) == AT_FAIL )
+ 	{
+    	TRACE_EVENT("MFW_GPRS: Error. qAT_PlusCGREG failed");
+	}
+		
+	return status;
+}
+//x0035544 Feb 23, 2006 DR:OMAPS00068976
+/*
+	PURPOSE : Returns the GPRS status value
+*/
+T_P_CGREG_STAT p_gprs_status()
+{
+#if(BOARD != 61)
+	T_ACI_RETURN result;  // OMAPS00042166 - RAVI
+#endif	
+T_P_CGREG_STAT status = (T_P_CGREG_STAT)0;
+	USHORT lac, ci;
+	
+	TRACE_FUNCTION("p_gprs_status");
+
+	if (qAT_PercentCGREG(CMD_SRC_LCL, &status, &lac, &ci) == AT_FAIL )
+	{
+		TRACE_EVENT("MFW_GPRS: Error. qAT_PercentCGREG failed");
+	}
+			  
+	return status;
+}
+
+
+/*--------------------------------------------------------------------
+  ACI callback functions 
+--------------------------------------------------------------------*/
+
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS            |
+| STATE  : code                         ROUTINE: rAT_PlusCGACT       |
++--------------------------------------------------------------------+
+
+
+   PURPOSE : The function rAt_PlusCGACT informs the application about 
+             the link identifier for the data transfer.
+             ( ACI callback funtion )
+
+   PARAMETERS :
+             link_id: Link identifier                 
+
+*/
+void rAT_PlusCGACT ( SHORT link_id )
+{
+  TRACE_FUNCTION ("rAT_PlusCGACT()");
+
+  /*
+   * send event and link id to the current mfw element
+   */
+  gprs_signal(E_MFW_GPRS_R_ACT, &link_id);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS            |
+| STATE  : code                         ROUTINE: rAT_PlusCGDATA      |
++--------------------------------------------------------------------+
+
+
+   PURPOSE : The function rAt_PlusCGDATA informs the application about 
+             the link identifier for the data transfer after 
+             activation/deactivation (without connect).
+             ( ACI callback funtion )
+
+   PARAMETERS :
+             link_id: Link identifier                 
+*/
+void rAT_PlusCGDATA ( SHORT link_id )
+{
+  TRACE_FUNCTION ("rAT_PlusCGDATA()");
+
+  /*
+   * send event and link id to the current mfw element
+   */
+  gprs_signal(E_MFW_GPRS_R_DATA, &link_id);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS            |
+| STATE  : code                         ROUTINE: rAT_PlusCGANS       |
++--------------------------------------------------------------------+
+
+
+   PURPOSE : The function rAt_PlusCGANS informs the application about 
+             the link identifier for the data transfer. It is a 
+             manual reponse to a network request for PDP context 
+             activation (after request by +CRING or RING).
+             ( ACI callback funtion )
+
+   PARAMETERS :
+             link_id: Link identifier                 
+*/
+void rAT_PlusCGANS ( SHORT link_id )
+{
+  TRACE_FUNCTION ("rAT_PlusCGANS()");
+
+  /*
+   * send event and link id to the current mfw element
+   */
+  gprs_signal(E_MFW_GPRS_R_ANS, &link_id);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS            |
+| STATE  : code                         ROUTINE: rAT_PlusCGEREP     |
++--------------------------------------------------------------------+
+
+
+   PURPOSE : The function rAt_PlusCGEREP informs the application about 
+             GPRS events connect. 
+             ( ACI callback funtion )
+
+   PARAMETERS :
+             event  : GPRS event       
+             param  : event parameter 
+             
+*/
+void rAT_PlusCGEREP ( T_CGEREP_EVENT            event, 
+                      T_CGEREP_EVENT_REP_PARAM *param )
+{
+#if(BOARD!=61)
+  char msg[30];  // OMAPS00041266 - RAVI
+#endif
+  T_CGATT_STATE state;
+
+  TRACE_FUNCTION ("rAT_PlusCGEREP()");
+  TRACE_EVENT_P1("GPRS eventrep: %d", (short)event);
+
+  /*
+   * send event and data to the current mfw element
+   * SPR#2243 - SH - Use appropriate union fields in each gprs_signal.
+   */
+  switch ( event )
+  {
+    case CGEREP_EVENT_REJECT:
+      gprs_signal(E_MFW_GPRS_R_EREP_RJ, &param->reject);
+      break;
+
+    case CGEREP_EVENT_NW_DETACH:
+    case CGEREP_EVENT_ME_DETACH:
+    state = CGATT_STATE_DETACHED;
+      gprs_signal(E_MFW_GPRS_R_EREP_ATT, &state);
+      break;
+
+    case CGEREP_EVENT_NW_REACT:
+      gprs_signal(E_MFW_GPRS_R_EREP_ACT, &param->act);
+      break;
+
+    case CGEREP_EVENT_NW_DEACT:
+    case CGEREP_EVENT_ME_DEACT:
+      gprs_signal(E_MFW_GPRS_R_EREP_DEACT, &param->act);
+      break;
+
+    case CGEREP_EVENT_NW_CLASS:
+    case CGEREP_EVENT_ME_CLASS:
+      gprs_signal(E_MFW_GPRS_R_EREP_CLASS, &param->mobile_class);
+      break;
+  }
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS            |
+| STATE   : code                        ROUTINE : rAT_PercentCGEV     |
++--------------------------------------------------------------------+
+
+  PURPOSE : handles rAT_PercentCGEV call back
+
+*/
+GLOBAL void rAT_PercentCGEV (T_CGEREP_EVENT event, T_CGEREP_EVENT_REP_PARAM *param )
+{
+  T_CGATT_STATE state;
+
+  TRACE_FUNCTION ("rAT_PercentCGEV()");
+  TRACE_EVENT_P1("GPRS eventrep: %d", (short)event);
+
+  /*
+   * send event and data to the current mfw element
+   */
+  switch ( event )
+  {
+    case CGEREP_EVENT_REJECT:
+      /* gprs_signal(E_MFW_GPRS_R_EREP_RJ, &param->reject);   - Use a different event for %CGEV */
+      break;
+
+    case CGEREP_EVENT_NW_DETACH:
+    case CGEREP_EVENT_ME_DETACH:
+    state = CGATT_STATE_DETACHED;
+      /* gprs_signal(E_MFW_GPRS_R_EREP_ATT, &state);   - Use a different event for %CGEV */
+      break;
+
+    case CGEREP_EVENT_NW_REACT:
+      /* gprs_signal(E_MFW_GPRS_R_EREP_ACT, &param->act);   - Use a different event for %CGEV */
+      break;
+
+    case CGEREP_EVENT_NW_DEACT:
+    case CGEREP_EVENT_ME_DEACT:
+      /* gprs_signal(E_MFW_GPRS_R_EREP_DEACT, &param->act);   - Use a different event for %CGEV */
+      break;
+
+    case CGEREP_EVENT_NW_CLASS:
+    case CGEREP_EVENT_ME_CLASS:
+      /* gprs_signal(E_MFW_GPRS_R_EREP_CLASS, &param->mobile_class);   - Use a different event for %CGEV */
+      break;
+
+/* BEGIN ADD: Neptune Alignment*/
+#ifndef NEPTUNE_BOARD
+/* END ADD: Neptune Alignment */
+    case CGEREP_EVENT_NW_ACT:
+    case CGEREP_EVENT_ME_ACT:
+    state = CGATT_STATE_ATTACHED;
+      /* gprs_signal(E_MFW_GPRS_R_EREP_ATT, &state);   - Use a different event for %CGEV */
+      break;
+/* BEGIN ADD: Neptune Alignment*/
+#endif
+/* END ADD: Neptune Alignment */
+
+  }
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS            |
+| STATE  : code                         ROUTINE: rAT_PlusCGREG       |
++--------------------------------------------------------------------+
+
+
+   PURPOSE : The function rAt_PlusCGREG informs the application about 
+             the GPRS registration status and location information.
+             ( ACI callback funtion )
+
+   PARAMETERS :
+             stat   : indicates the current registration
+             lac    : two byte location area code   
+             ci     : two byte cell ID    
+*/
+void rAT_PlusCGREG  ( T_CGREG_STAT stat, 
+                      USHORT       lac, 
+                      USHORT       ci )
+{ 
+  T_MFW_GPRS_CELL_STRUCT cell;
+
+  TRACE_FUNCTION ("rAT_PlusCGREG()");
+#ifndef WIN32
+  TRACE_EVENT_P3("GPRS regState: %d, lac %X, ci %X", (short)stat, lac, ci);
+#endif
+  /*
+   * send signal for changed registry state to current
+   * MFW element
+   */
+
+  cell.stat = stat;
+  cell.lac = lac;
+  cell.ci = ci;
+  gprs_signal(E_MFW_GPRS_R_REG, &cell);
+}
+
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GPRS (8441)                 MODULE  : GACI_RET           |
+| STATE   : code                        ROUTINE : rAT_PercentCGREG      |
++--------------------------------------------------------------------+
+
+  PURPOSE : handles rAT_PercentCGREG call back
+
+*/
+
+GLOBAL void rAT_PercentCGREG ( T_P_CGREG_STAT stat, USHORT lac, USHORT ci, BOOL bActiveContext )
+
+{
+  
+  T_MFW_GPRS_CELL_STRUCT_P cell;
+
+  TRACE_FUNCTION ("rAT_PercentCGREG()");
+#ifndef WIN32
+  TRACE_EVENT_P3("GPRS regState: %d, lac %X, ci %X", (short)stat, lac, ci);
+#endif
+  /*
+   * send signal for changed registry state to current
+   * MFW element
+   */
+TRACE_EVENT_P3("State received in RAT-GPRS State: %d, lac %X, ci %X", (short)stat, lac, ci);
+  cell.stat = stat;
+  cell.lac = lac;
+  cell.ci = ci;
+  gprs_signal(E_MFW_GPRS_R_REG, &cell);
+
+}
+
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         MODULE:  MFW_GPRS            |
+| STATE  : code                         ROUTINE: rAT_changedQOS      |
++--------------------------------------------------------------------+
+
+
+   PURPOSE : The function rAt_changedQOS informs the application about 
+             changes for the Quality of Service Profiles.
+             ( ACI callback funtion )
+
+   PARAMETERS :
+             cid    : 
+            *qos    : 
+*/
+// ADDED BY RAVI - 1-11-2005
+#ifdef FF_2TO1_PS
+void rAT_changedQOS ( U8  cid, 
+                      T_PS_qos *qos )
+{
+  T_MFW_GPRS_CONTEXT *cntxt; 
+
+  TRACE_FUNCTION ("rAT_changedQOS()");
+
+  /*
+   * send signal for changed quality of service profile to current
+   * MFW element
+   */
+  cntxt = (T_MFW_GPRS_CONTEXT *) mfwAlloc(sizeof(T_MFW_GPRS_CONTEXT));
+
+  cntxt->id = cid;
+   memcpy (&(cntxt->data.qos), qos, sizeof (T_PS_qos));
+
+  gprs_signal(E_MFW_GPRS_R_QOS, cntxt);
+}
+
+#else
+void rAT_changedQOS ( SHORT cid, 
+                      T_QOS *qos )
+{
+  T_MFW_GPRS_CONTEXT *cntxt; 
+
+  TRACE_FUNCTION ("rAT_changedQOS()");
+
+  /*
+   * send signal for changed quality of service profile to current
+   * MFW element
+   */
+  cntxt = (T_MFW_GPRS_CONTEXT *) mfwAlloc(sizeof(T_MFW_GPRS_CONTEXT));
+
+  cntxt->id = (U8)cid;
+  memcpy (&(cntxt->data.qos), qos, sizeof (T_QOS));
+
+  gprs_signal(E_MFW_GPRS_R_QOS, cntxt);
+}
+
+#endif
+// END RAVI - 1-11-2005
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GPRS (8441)                 MODULE  : MFW_GPRS          |
+| STATE   : code                        ROUTINE : rAT_PercentSNCNT   |
++--------------------------------------------------------------------+
+
+  PURPOSE : handles rAT_PercentSNCNT call back
+
+*/
+
+GLOBAL void rAT_PercentSNCNT ( UBYTE c_id,
+                               ULONG octets_uplink,
+                               ULONG octets_downlink,
+                               ULONG packets_uplink,
+                               ULONG packets_downlink )
+{
+	T_MFW_GPRS_COUNTER	counter;
+
+	TRACE_FUNCTION("rAT_PercentSNCNT()");
+		
+	counter.octets_uplink = octets_uplink;
+	counter.octets_downlink = octets_downlink;
+	counter.packets_uplink = packets_uplink;
+	counter.packets_downlink = packets_downlink;
+
+	gprs_signal(E_MFW_GPRS_COUNTER, &counter);
+	
+	return;
+}