diff g23m/condat/ms/src/bmi/MmiSimToolkit.c @ 0:509db1a7b7b8

initial import: leo2moko-r1
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 01 Jun 2015 03:24:05 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/g23m/condat/ms/src/bmi/MmiSimToolkit.c	Mon Jun 01 03:24:05 2015 +0000
@@ -0,0 +1,2881 @@
+/*******************************************************************************
+
+          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: Basic MMI
+ $Project code: BMI (6349)
+ $Module:   MMI
+ $File:       MmiSimToolkit.c
+ $Revision:   1.0
+
+ $Author:   Condat(UK)
+ $Date:       22/02/01
+
+********************************************************************************
+
+ Description:
+
+
+
+********************************************************************************
+
+ $History: MmiSimToolkit.c
+ 
+   xrashmic 16 Feb, 2006 OMAPS00064413
+   When a SIM RESET occurs, while recreating the simtoolkit list view, the list win is also recreated.  
+ 
+
+ 	Mar 11, 2006   REF:DR:OMAPS00061467  x0035544
+	Description:   27.22.4.13.3 SET UP CALL (display of icons) fails.
+	Solution: In the function sim_toolkit_exec() for the event SAT_SETUP_CALL copied the icon data which is 
+	got through the sat command on to the structures data->call_setup_parameter.iconInfo and to the data->call_setup_parameter.iconInfo2
+	appropriately.And  For the event SAT_CALL_END freed the memory allocated for the icon data.
+	on to the 
+	
+  	Feb 02, 2006 DR: OMAPS00061468 - x0035544.
+   	Description: SAT 27.22.4.22.2 SET UP IDLE MODE TEXT (Icon support) fails 
+   	Solution : SAT SET UP IDLE MODE TEXT (Icon) support added.
+
+   Jan 16, 2006 DR: OMAPS00061460 - Shashi Shekar B.S.
+   Description: SAT Icon support
+   Solution : SAT icon support added.
+
+    Dec 23, 2005    REF: OMAPS00062166     x0039928
+    Bug: CT-TIB-GCF[27.22.4.24.1]-sequence 1.2 crashes
+    Fix: Initialize the editor buffer. Initialization is taken care for DTMF and also for SS.
+
+	
+    xreddymn Sep-06-2005 MMI-SPR-33876:
+    Initialize editor buffer when displaying message box
+    in case of SAT_SEND_SMS
+
+	Aug 16, 2004    REF: CRR 24323   Deepa M.D
+	Bug:Clenup of sprintf used for tracing
+	Fix:Replace the char buf[]; sprintf (buf, "...", ...); TRACE_EVENT (buf); statements by TRACE_EVENT_PX
+
+  25/10/00      Original Condat(UK) BMI version.
+21/02/03		removed all calls to function sat_add_unicode_tag_if_needed() and the
+				function itself
+    26-05-04      CRR 19656    Sandip and Deepa M.D
+      	Fix for The Dsample doesn't display lines ( <CR> or <LF> ) in the SETUP IDLE 
+	TEXT command.
+	Fix for The idle screen is empty when a SETUP IDLE TEXT command is sent with 
+	a long text ( 239 characters ).
+    
+    
+ $End
+
+*******************************************************************************/
+
+#define ENTITY_MFW
+
+/* includes */
+#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 "pconst.cdg"
+#include "mconst.cdg"
+#include "message.h"
+#include "ccdapi.h"
+#include "prim.h"
+#include "cus_aci.h"
+#include "cnf_aci.h"
+#include "mon_aci.h"
+
+#include "tok.h"
+
+#include "prim.h"
+#ifndef PCM_2_FFS
+#include "pcm.h"
+#endif
+
+
+#include "mfw_mfw.h"
+#include "mfw_kbd.h"
+#include "mfw_tim.h"
+#include "mfw_lng.h"
+#include "mfw_win.h"
+#include "mfw_icn.h"
+#include "mfw_sim.h"
+#include "mfw_nm.h"
+#include "mfw_sat.h" // x0021334 : To test SAT session end - CQ33597
+/* SPR#1428 - SH - New Editor changes */
+#ifndef NEW_EDITOR
+#include "mfw_edt.h"
+#endif
+#include "mfw_mnu.h"
+#include "mfw_phb.h"
+#include "mfw_sms.h"
+
+#include "dspl.h"
+
+
+#include "p_mmi.h"
+#include "message.h"
+#include "prim.h"
+#include "aci_cmh.h"
+#include "mfw_mme.h"
+
+#include "MmiMmi.h"
+
+#include "Mmiicons.h"
+#include "MmiPins.h"
+#include "MmiMain.h"
+#include "MmiDialogs.h"
+#include "MmiIdle.h"
+#include "MmiStart.h"
+#include "mmiCall.h"
+#include "MmiSimToolkit.h"
+#include "gdi.h"
+#include "audio.h"
+#include "MmiLists.h"
+#include "MmiSounds.h"
+#include "MmiResources.h"
+#include "MmiTimeDate.h"
+#include "mmiSat_i.h"
+/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+#include "ATBCommon.h"
+#include "ATBDisplay.h"
+#include "ATBEditor.h"
+#include "AUIEditor.h"
+#else
+#include "MmiEditor.h"
+#endif
+#include "MmiMenu.h" // SH - 20/11/01 - included to provide symbol SimMenuFunc
+#include "mmiSmsRead.h" /*MC SPR 940/2*/
+
+#include "cus_aci.h"
+#include "prim.h"
+
+#ifndef PCM_2_FFS
+#include "pcm.h"
+#endif
+
+#include "mmiSatClassE.h"
+
+#include "mmiColours.h" /* SPR#2321 - DS */
+#include "MmiDialogs.h" /* SPR#2321 - DS */
+
+
+#ifdef MMI_HOMEZONE_ENABLED
+#include "MmiHomezone.h"
+#endif
+
+#ifdef FF_WAP
+#include "AUIWapext.h"
+#endif
+
+#if defined(FF_WAP)
+#define MMI_TEST_SAT_LAUNCH_BROWSER
+#endif
+
+#ifdef MMI_TEST_SAT_LAUNCH_BROWSER
+void mmiOpenDummyBrowser(T_MFW_HND win,char* information);
+#define INFORMATION_SIZE 100
+char information[INFORMATION_SIZE];
+#endif
+/*
+ * Local definitions
+ */
+typedef struct
+{
+    T_MMI_CONTROL mmi_control;
+    T_MFW_HND     win;
+    T_MFW_HND     sat_handle;
+    T_SAT_CMD   * sat_command; /* mfw storage of actual command */
+    T_SAT_CMD   * sat_setup_menu_command; /* dynamic storage of setup menu */
+    T_MFW_HND     sat_setup_menu_win; /* c030 rsa window associated with the setup menu command */
+    T_MFW_HND     sat_setup_menu_listmnu_win; /* NDH : Window associated with the SAT ListMenu */
+    T_MFW_HND     info_win;           /* window used for simple info screens */
+    T_MFW_HND     sat_call_setup_win; /* window associated with the call setup command */
+    T_SAT_call_setup_parameter * call_setup_parameter; /* parameter psace of call setup to be passed to call() */
+    T_SAT_EVENTS  active_sat_session; /* event which caused the currently active session */
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA editor_data;	/* SPR#1428 - SH - New Editor data */
+#else
+    T_EDITOR_DATA editor_data;
+#endif
+    UBYTE satCallWithRedial; /* SPR#1784 - DS - Flag for SAT call 'with redial' */
+    UBYTE     sat_available_on_SIM;
+} T_sim_toolkit;
+
+static T_sim_toolkit * g_sim_toolkit_data;
+
+/*MC SPR 1257, merged in from b-sample version of this file*/
+char *			sat_mainmenu_label = NULL;
+UBYTE 			header_len;
+/*MC end*/
+
+BOOL sat_call_active = FALSE;   // Marcus: Issue 1812: 13/03/2003
+
+/* PROTOTYPES */
+static T_MFW_HND sim_toolkit_create     (T_MFW_HND parent_window);
+static void      sim_toolkit_destroy    (T_MFW_HND own_window);
+//sandip 16292 . added this new function
+unsigned char DecodeGSM7ToASCII(U8 * encoded, U8 * plain, U8 Length);
+/*
+ * Marcus: Issue 1057: 21/01/2003: Removed "static" from the following two
+ * function prototypes for their use in MmiCall.c
+ */
+T_MFW_HND sat_get_setup_menu_win (void);
+T_MFW_HND sat_get_call_setup_win (void);
+
+static void      sat_setup_menu_proc    (T_SAT_CMD * sat_command);
+static void      sat_info_cb            (T_MFW_HND win, UBYTE identifier, UBYTE reason);
+
+extern UBYTE  call_SATCall; // Marcus: Issue 1057: 21/01/2003
+
+
+
+/*******************************************************************************
+
+ $Function:     sim_toolkit_check
+
+ $Description:   If there is no support for SAT on SIM card
+         the item SIM TOOLKIT will not appear in the menulist
+
+ $Returns:
+
+ $Arguments:
+
+*******************************************************************************/
+USHORT sim_toolkit_check (struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi)
+{
+
+  T_sim_toolkit * data = g_sim_toolkit_data;
+
+  TRACE_FUNCTION("sim_toolkit_check");
+
+  if (data->sat_available_on_SIM EQ TRUE)
+  {
+    //show the SAT item in the menulist
+    return 0;
+  }
+  else
+  {
+    return 1;
+  }
+
+}
+
+
+
+
+/*******************************************************************************
+
+ $Function:  simToolkitInit
+
+ $Description:   This is the start-up time initialisation routine.
+         For compatibility reasons the functions is still there.
+
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+void simToolkitInit (T_MFW_HND parent_window)
+{
+  TRACE_FUNCTION("simToolkitInit");
+
+    g_sim_toolkit_data = (T_sim_toolkit *)ALLOC_MEMORY (sizeof (T_sim_toolkit));
+
+    winAutoFocus (TRUE);
+    sat_set_setup_menu_win(NULL);
+    sat_set_call_setup_win(NULL);
+    sim_toolkit_create (parent_window);
+}
+/*******************************************************************************
+
+ $Function:  simToolkitExit
+
+ $Description:  This is the shutdown time clean-up routine.
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+void simToolkitExit(void)
+{
+  TRACE_FUNCTION("simTookitExit");
+    sim_toolkit_destroy (g_sim_toolkit_data->win);
+//    FREE_MEMORY ((U8 *)g_sim_toolkit_data, sizeof (T_sim_toolkit));
+	if (sat_mainmenu_label != NULL)
+	{
+		sat_destroy_TEXT_ASCIIZ (sat_mainmenu_label);
+		sat_mainmenu_label = NULL;
+	}
+}
+
+
+/********************************************************************
+ *
+ * SIM Toolkit Dialog
+ *
+ * Window - Structure
+ *
+ * sim_toolkit   ---->   sat_play_tone
+ *               ---->   sat_display_text
+ *               ---->   sat_get_key
+ *               ---->   sat_setup_call
+ *               ---->   sat_get_string
+ *               ---->   sat_setup_menu
+ *               ---->   sat_select_item
+ *               ---->   sat_send_sms
+ *               ---->   sat_send_ss
+ *
+ ********************************************************************/
+static const UBYTE sat_terminal_profile [13] =
+{
+#ifdef SAT_TP1_PRF_DNL
+    (SAT_TP1_PRF_DNL | SAT_TP1_MENU_SEL),
+
+    (SAT_TP2_CMD_RES|SAT_TP2_CC|SAT_TP2_ALPHA_ID|
+     SAT_TP2_UCS2_ENTRY|SAT_TP2_UCS2_DSPL),
+
+    (SAT_TP3_DSPL_TXT|SAT_TP3_GET_INKEY|SAT_TP3_GET_INPUT|
+     SAT_TP3_PLAY_TONE),
+
+    (SAT_TP4_SEL_ITEM|SAT_TP4_SEND_SMS|SAT_TP4_SEND_SS|
+     SAT_TP4_SEND_USSD|SAT_TP4_SETUP_CALL|SAT_TP4_SETUP_MENU),
+
+    (SAT_TP5_EVENT_LIST | SAT_TP5_USER_ACT | SAT_TP5_SCR_AVAIL),
+    0x0, 0x0,
+    (SAT_TP8_BIN_GET_INKEY | SAT_TP8_IDLE_TXT | SAT_TP8_AI2_SETUP_CALL),
+
+#if defined(FF_WAP)
+    (SAT_TP9_SUST_DSPL_TXT|SAT_TP9_LAUNCH_BROWSER),
+#else
+    SAT_TP9_SUST_DSPL_TXT,
+#endif
+    0x0, 0x0,
+    (SAT_TP12_OPEN_CHANNEL | SAT_TP12_CLOSE_CHANNEL | SAT_TP12_RECEIVE_DATA |
+    SAT_TP12_SEND_DATA),
+
+    (SAT_TP13_CSD_SUPP_BY_ME | SAT_TP13_GPRS_SUPP_BY_ME)
+#else
+    0x09, 0x73, 0x17, 0x37,0x00 // c032 rsa
+#endif
+};
+
+static void sim_toolkit_destroy (T_MFW_HND own_window);
+static void sim_toolkit_exec    (T_MFW_HND win, USHORT event, SHORT value, T_SAT_CMD * sat_command);
+static int  sim_toolkit_sat_cb  (T_MFW_EVENT event, T_MFW_SAT * sat_bits);
+/*******************************************************************************
+
+ $Function:  sim_toolkit_create
+
+ $Description:   Creation of an instance for the SIM Toolkit dialog.
+             Type of dialog : SINGLE_STATIC
+              Top Window must be available at any time, only one instance.
+
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+static T_MFW_HND sim_toolkit_create (T_MFW_HND parent_window)
+{
+    T_sim_toolkit * data = g_sim_toolkit_data;
+    T_MFW_WIN     * win;
+
+    TRACE_FUNCTION("sim_toolkit_create");
+
+    data->win = win_create (parent_window, 0, 0, NULL); // c013 rsa
+
+    if (data->win EQ NULL)
+        return NULL;
+
+    /*
+     * Create window handler
+     */
+    data->mmi_control.dialog    = (T_DIALOG_FUNC)sim_toolkit_exec;
+    data->mmi_control.data      = data;
+    win                         = ((T_MFW_HDR *)data->win)->data;
+    win->user                   = (MfwUserDataPtr)data;
+
+    data->sat_command = (T_SAT_CMD *)ALLOC_MEMORY (sizeof (T_SAT_CMD)); // c022 rsa
+
+    /*
+     * Create any other handler
+     */
+    data->sat_handle = sat_create (
+        data->win,                    // parent window
+        /* possible SAT events */
+        MfwSatSessionEnd |     /* end of session           */
+        MfwSatRefresh |     /* refresh SIM fields           */
+		MfwSatDataRefreshed | /*data Refreshed */
+		MfwSatTextOut|         /* display string           */
+        MfwSatGetKey|          /* get user keystroke       */
+        MfwSatGetString|       /* get user input           */
+        MfwSatPlayTone|        /* play audio tone          */
+        MfwSatSetupMenu|       /* setup toolkit menu       */
+        MfwSatSelectItem|      /* select menu item         */
+        MfwSatSendSMS|         /* send short message       */
+        MfwSatSendSS|          /* send service command     */
+        MfwSatSendUSSD|          /* send USSD command     */
+        MfwSatSendDTMF|          /* send dtmf command     */
+        MfwSatCall|            /* setup a call             */
+		MfwSatSetEvents|      /* setup event lists 		*/
+		MfwSatIdleText|      /* set idle text 		*/
+		MfwSatCcRes|           /* call control result      */
+        MfwSatCcAlert           /* call control alerting    */
+#if defined(FF_WAP)
+        |MfwSatLaunchBrowser
+#else
+#endif
+        |MfwSatOpenChannel|
+		 MfwSatCloseChannel|
+		 MfwSatSendData|
+		 MfwSatReceiveData|
+		 MfwSatErrBusy /* SAT error handling */
+		 ,
+        (T_MFW_CB)sim_toolkit_sat_cb,  // event callback
+        data->sat_command);            // control block for MFW
+
+    /*
+     * initialize global variables
+     */
+    data->sat_setup_menu_command = NULL;
+    data->sat_command = NULL;
+    data->info_win = NULL;
+    data->call_setup_parameter = NULL;
+    data->active_sat_session = SAT_SESSION_END;
+    data->sat_available_on_SIM = FALSE;
+    data->satCallWithRedial = 0; /* SPR#1784 - DS - Initialise 'with redial' flag */
+    sat_mainmenu_label = NULL;
+
+    /*
+     * Initialise MFW
+     */
+    sat_init ((UBYTE *)sat_terminal_profile, (UBYTE)sizeof (sat_terminal_profile));
+
+    /*
+     * return window handle
+     */
+    win_show(data->win);
+    return data->win;
+}
+/*******************************************************************************
+
+ $Function:  sim_toolkit_destroy
+
+ $Description:  Destroy the sim toolkit dialog.
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+static void sim_toolkit_destroy (T_MFW_HND own_window)
+{
+    T_MFW_WIN     * win;
+    T_sim_toolkit * data;
+
+    if (own_window)
+        {
+            win  = ((T_MFW_HDR *)own_window)->data;
+            data = (T_sim_toolkit *)win->user;
+
+            if (data)
+                {
+                    /*
+                     * Exit SAT and Delete SAT Handler
+                     */
+                    sat_exit ();
+                    sat_delete (data->sat_handle);
+
+                    /*
+                     * Delete WIN Handler
+                     */
+                    win_delete (data->win);
+                    /*
+                     * Free Memory
+                     */
+                    if (data->sat_setup_menu_command NEQ NULL)
+                    {
+                        FREE_MEMORY ((U8 *)data->sat_setup_menu_command, sizeof (T_SAT_CMD));
+                        data->sat_setup_menu_command = NULL;
+                    }
+                    if (data->sat_command != NULL)
+                    {
+                    	FREE_MEMORY ((U8 *)data->sat_command, sizeof (T_SAT_CMD)); // c022 rsa
+                    	data->sat_command = NULL;
+                    }
+                    FREE_MEMORY ((U8 *)data, sizeof (T_sim_toolkit));
+                }
+        }
+}
+
+/*******************************************************************************
+
+ $Function:  sim_toolkit_exec
+
+ $Description:   Dialog function for sim toolkit top window.
+        Handle the SAT commands delivered by MFW<-ACI<-SIM
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+static void sim_toolkit_exec (T_MFW_HND win, USHORT event, SHORT value, T_SAT_CMD * sat_command)
+{
+    T_MFW_WIN       * win_data = ((T_MFW_HDR *) win)->data;
+    T_sim_toolkit    * data     = (T_sim_toolkit *)win_data->user;
+    T_MFW_HND         sat_win;
+    T_SAT_RES sat_res;
+
+// Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
+#ifdef FF_MMI_SAT_ICON
+	USHORT icon_length;
+#endif
+
+    TRACE_FUNCTION ("sim_toolkit_exec()");
+
+    if (event NEQ SAT_SESSION_END)
+        data->active_sat_session = (T_SAT_EVENTS) event;
+
+	if (data->info_win != NULL)
+	{
+		SEND_EVENT (data->info_win, E_ED_DEINIT, 0, NULL);
+		data->info_win = NULL;
+	}
+
+
+    switch (event)
+        {
+        case SAT_DISPLAY_TEXT:
+            TRACE_EVENT("SAT_DISPLAY_TEXT");
+            /*
+             * Text with normal priority will be displayed
+             * only in idle screen and in SAT Menu Item
+             */
+            if ((sat_command->qual & SAT_M_TEXT_HIGH_PRIO) EQ 0)
+            {
+            TRACE_EVENT("NOT SAT_M_TEXT_HIGH_PRIO");
+        /* Check if Idle AND Sat Session are inactiv    */
+          if ((!g_SATsession_is_active)&&(!idleIsFocussed()))
+        {
+                TRACE_EVENT("BUSY SCREEN");
+                    /* idle is not in focus and not currently in a SAT session: we are busy elsewhere */
+            sat_res[SAT_ERR_INDEX] = SAT_RES_BUSY_ME;
+            sat_res[SAT_AI_INDEX]  = SatResAiBusyScreen;
+            sat_done (sat_command, sat_res);
+                    return;
+                }
+            }
+
+            sat_win = sat_display_text_create (data->win);
+            if (sat_win)
+                {
+                    data->sat_command = sat_command;
+                    SEND_EVENT (sat_win, event, 0, data->sat_command);
+                }
+            else
+    {
+        sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
+        sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+        sat_done (sat_command, sat_res);
+    }
+            break;
+
+        case SAT_PLAY_TONE:
+            TRACE_EVENT("SAT_PLAY_TONE");
+            /*
+             * Create and initiate Play Tone Window
+             */
+            sat_win = sat_play_tone_create (data->win);
+            if (sat_win)
+                {
+                    data->sat_command = sat_command;
+                    SEND_EVENT (sat_win, event, 0, data->sat_command);
+                }
+            else
+    {
+        sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
+        sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+        sat_done (sat_command, sat_res);
+    }
+            break;
+
+        case SAT_GET_KEY:
+            TRACE_EVENT("SAT_GET_KEY");
+            /*
+             * Create and initiate Get Key Window
+             */
+            sat_win = sat_get_key_create (data->win);
+            if (sat_win)
+                {
+                    data->sat_command = sat_command;
+                    SEND_EVENT (sat_win, event, 0, data->sat_command);
+                }
+            else
+    {
+        sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
+        sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+        sat_done (sat_command, sat_res);
+    }
+            break;
+        case SAT_GET_STRING:
+            TRACE_EVENT("SAT_GET_STRING");
+            /*
+             * Create and initiate Get String Window
+             */
+            sat_win = sat_get_string_create (data->win);
+            if (sat_win)
+                {
+                    data->sat_command = sat_command;
+                    SEND_EVENT (sat_win, event, 0, data->sat_command);
+                }
+            else
+    {
+        sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
+        sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+        sat_done (sat_command, sat_res);
+    }
+            break;
+
+            // c016 rsa
+        case SAT_SETUP_MENU:
+            TRACE_EVENT("SAT_SETUP_MENU");
+
+            sat_call_active = FALSE;   // Marcus: Issue 1812: 13/03/2003
+      //SAT is on the SIM available
+      data->sat_available_on_SIM = TRUE;
+
+            /*
+             * initiate Setup Menu
+             */
+            sat_setup_menu_proc(sat_command);
+      sat_res[SAT_ERR_INDEX] = SatResSuccess;
+      sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+            sat_done (sat_command, sat_res);
+            break;
+
+        case SAT_SELECT_ITEM:
+            TRACE_EVENT("SAT_SELECT_ITEM");
+            /*
+             * Create and initiate select item Window
+             */
+            sat_win = sat_select_item_create (data->win);
+            if (sat_win)
+                {
+                    data->sat_command = sat_command;
+                    SEND_EVENT (sat_win, event, 0, data->sat_command);
+                }
+            else
+    {
+        sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
+        sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+        sat_done (sat_command, sat_res);
+    }
+            break;
+            // end c016 rsa
+
+            // c001 xas
+        case SAT_SEND_SMS:
+            TRACE_EVENT("SAT_SEND_SMS");
+            /*
+             * --> display alpha identifier if available
+             */
+            if ((sat_command->c.sms.info.len NEQ 0) &&
+                (sat_command->c.sms.info.len NEQ (U8)-1))
+                {
+                	char *TextString = (char *)sat_create_TEXT_ASCIIZ (&sat_command->c.sms.info);
+                   /*
+                    * Setup an editor to display a string
+                    */
+
+
+
+			/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+					AUI_edit_SetDefault(&data->editor_data);
+					AUI_edit_SetTextStr(&data->editor_data, TxtNull, TxtNull, TxtNull, (UBYTE *)TextString);
+					AUI_edit_SetMode(&data->editor_data, ED_MODE_READONLY, ED_CURSOR_NONE);
+					AUI_edit_SetEvents(&data->editor_data, event, TRUE, FOREVER, (T_AUI_EDIT_CB)sat_info_cb);
+					// xreddymn Sep-06-2005 MMI-SPR-33876: Initialize editor buffer
+					AUI_edit_SetBuffer(&data->editor_data, ATB_DCS_ASCII, (UBYTE*)"", 1);
+// Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
+#ifdef FF_MMI_SAT_ICON
+/*Check if the SAT command has icon*/
+		if(sat_command->c.sms.info.icon.qual != 0xFF)
+		{
+			/* Copy the icon data to the editor attributes*/
+			data->editor_data.editor_attr.TitleIcon.width = sat_command->c.sms.info.iconInfo.width;  
+			data->editor_data.editor_attr.TitleIcon.height = sat_command->c.sms.info.iconInfo.height; 
+
+			icon_length = sat_command->c.sms.info.iconInfo.width * sat_command->c.sms.info.iconInfo.height;
+										
+			data->editor_data.editor_attr.TitleIcon.data = (char *)ALLOC_MEMORY (icon_length);
+
+			memcpy(data->editor_data.editor_attr.TitleIcon.data, sat_command->c.sms.info.iconInfo.dst, icon_length);
+			data->editor_data.editor_attr.TitleIcon.isTitle = TRUE;
+		
+			/* Icon is self-explanatory. No need to display text for this case.*/
+			     if(sat_command->c.sms.info.icon.qual == 0x00)
+			     	{
+					/* Icon is self-explanatory. Do not display the text*/
+					data->editor_data.editor_attr.TitleIcon.selfExplanatory = TRUE;
+			     	}
+
+				/* Free the memory of icon data that we got through the SATK command*/
+				 mfwFree((U8 *)sat_command->c.sms.info.iconInfo.dst, icon_length);
+				sat_command->c.sms.info.iconInfo.dst = NULL;
+			 
+		}
+#endif
+					
+                    data->info_win = AUI_edit_Start(win, &data->editor_data);
+#else /* NEW_EDITOR */
+                    data->editor_data.LeftSoftKey          = TxtNull;
+                    data->editor_data.AlternateLeftSoftKey = TxtNull;
+                    data->editor_data.RightSoftKey         = TxtNull;
+                    data->editor_data.hide                 = FALSE;
+                    data->editor_data.mode                 = E_EDIT_READ_ONLY_MODE;
+                    data->editor_data.timeout              = FOREVER;
+                    data->editor_data.Identifier           = event;
+                    data->editor_data.destroyEditor        =  TRUE;
+                    data->editor_data.Callback   = (T_EDIT_CB)sat_info_cb;
+                     data->editor_data.TextString       = (char *)TextString;
+                    data->editor_data.min_enter  = 0;
+                    data->info_win = editor_start(win, &data->editor_data);
+#endif /* NEW_EDITOR */
+                }
+            break;
+
+        case SAT_SEND_SS:
+            TRACE_EVENT("SAT_SEND_SS");
+            /*
+             * --> display alpha identifier if available
+             */
+            if ((sat_command->c.ss.info.len NEQ 0) &&
+                (sat_command->c.ss.info.len NEQ (U8)-1))
+                {
+                	char *TextString = (char *)sat_create_TEXT_ASCIIZ (&sat_command->c.ss.info);
+
+
+                   /*
+                    * Setup an editor to display a string
+                    */
+                    /* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+					AUI_edit_SetDefault(&data->editor_data);
+					AUI_edit_SetTextStr(&data->editor_data, TxtNull, TxtNull, TxtNull, (UBYTE *)TextString);
+					AUI_edit_SetMode(&data->editor_data, ED_MODE_READONLY, ED_CURSOR_NONE);
+					AUI_edit_SetEvents(&data->editor_data, event, TRUE, FOREVER, (T_AUI_EDIT_CB)sat_info_cb);
+					// Dec 23, 2005    REF: OMAPS00062166     x0039928
+					// Fix: Initialize the editor buffer
+					AUI_edit_SetBuffer(&data->editor_data, ATB_DCS_ASCII, (UBYTE*)"", 1);
+				
+// Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
+#ifdef FF_MMI_SAT_ICON
+/*Check if the SAT command has icon*/
+		if(sat_command->c.ss.info.icon.qual != 0xFF)
+		{
+			/* Copy the icon data to the editor attributes*/
+			data->editor_data.editor_attr.TitleIcon.width = sat_command->c.ss.info.iconInfo.width;  
+			data->editor_data.editor_attr.TitleIcon.height = sat_command->c.ss.info.iconInfo.height; 
+
+			icon_length = sat_command->c.ss.info.iconInfo.width * sat_command->c.ss.info.iconInfo.height;
+										
+			data->editor_data.editor_attr.TitleIcon.data = (char *)ALLOC_MEMORY (icon_length);
+
+			memcpy(data->editor_data.editor_attr.TitleIcon.data, sat_command->c.ss.info.iconInfo.dst, icon_length);
+			data->editor_data.editor_attr.TitleIcon.isTitle = TRUE;
+		
+			/* Icon is self-explanatory. No need to display text for this case.*/
+			     if(sat_command->c.ss.info.icon.qual == 0x00)
+			     	{
+					/* Icon is self-explanatory. Do not display the text*/
+					data->editor_data.editor_attr.TitleIcon.selfExplanatory = TRUE;
+			     	}
+
+				/* Free the memory of icon data that we got through the SATK command*/
+				 mfwFree((U8 *)sat_command->c.ss.info.iconInfo.dst, icon_length);
+				sat_command->c.ss.info.iconInfo.dst = NULL;
+			 
+		}
+#endif
+			
+		                    data->info_win = AUI_edit_Start(win, &data->editor_data);
+
+#else /* NEW_EDITOR */
+                    data->editor_data.LeftSoftKey          = TxtNull;
+                    data->editor_data.AlternateLeftSoftKey = TxtNull;
+                    data->editor_data.RightSoftKey         = TxtNull;
+                    data->editor_data.hide                 = FALSE;
+                    data->editor_data.mode                 = E_EDIT_READ_ONLY_MODE;
+                    data->editor_data.timeout              = FOREVER;
+                    data->editor_data.Identifier           = event;
+                    data->editor_data.Callback   = (T_EDIT_CB)sat_info_cb;
+                    data->editor_data.destroyEditor        =  TRUE;
+                    data->editor_data.TextString       	= TextString;
+
+                    data->editor_data.min_enter  = 0;
+                    data->info_win = editor_start(win, &data->editor_data);
+#endif /* NEW_EDITOR */
+                }
+            break;
+            // end c001 xas
+
+
+        case SAT_SEND_DTMF:
+            TRACE_EVENT("SAT_SEND_DTMF");
+            /*
+             * --> display alpha identifier if available
+             */
+            if ((sat_command->c.cmd.info.len NEQ 0) &&
+                (sat_command->c.cmd.info.len NEQ (U8)-1))
+                {
+                	char *TextString = (char *)sat_create_TEXT_ASCIIZ (&sat_command->c.cmd.info);
+
+
+                   /*
+                    * Setup an editor to display a string
+                    */
+                    /* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+					AUI_edit_SetDefault(&data->editor_data);
+					AUI_edit_SetTextStr(&data->editor_data, TxtNull, TxtNull, TxtNull, (UBYTE *)TextString);
+					AUI_edit_SetMode(&data->editor_data, ED_MODE_READONLY, ED_CURSOR_NONE);
+					AUI_edit_SetEvents(&data->editor_data, event, TRUE, THREE_SECS, (T_AUI_EDIT_CB)sat_info_cb);
+					// Dec 23, 2005    REF: OMAPS00062166     x0039928
+					// Fix: Initialize the editor buffer
+					AUI_edit_SetBuffer(&data->editor_data, ATB_DCS_ASCII, (UBYTE*)"", 1);
+				
+// Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
+#ifdef FF_MMI_SAT_ICON
+/*Check if the SAT command has icon*/
+		if(sat_command->c.cmd.info.icon.qual != 0xFF)
+		{
+			/* Copy the icon data to the editor attributes*/
+			data->editor_data.editor_attr.TitleIcon.width = sat_command->c.cmd.info.iconInfo.width;  
+			data->editor_data.editor_attr.TitleIcon.height = sat_command->c.cmd.info.iconInfo.height; 
+
+			icon_length = sat_command->c.cmd.info.iconInfo.width * sat_command->c.cmd.info.iconInfo.height;
+										
+			data->editor_data.editor_attr.TitleIcon.data = (char *)ALLOC_MEMORY (icon_length);
+
+			memcpy(data->editor_data.editor_attr.TitleIcon.data, sat_command->c.cmd.info.iconInfo.dst, icon_length);
+			data->editor_data.editor_attr.TitleIcon.isTitle = TRUE;
+		
+			/* Icon is self-explanatory. No need to display text for this case.*/
+			     if(sat_command->c.cmd.info.icon.qual == 0x00)
+			     	{
+					/* Icon is self-explanatory. Do not display the text*/
+					data->editor_data.editor_attr.TitleIcon.selfExplanatory = TRUE;
+			     	}
+
+				/* Free the memory of icon data that we got through the SATK command*/
+				 mfwFree((U8 *)sat_command->c.cmd.info.iconInfo.dst, icon_length);
+				sat_command->c.cmd.info.iconInfo.dst = NULL;
+			 
+		}
+#endif
+			
+                    			data->info_win = AUI_edit_Start(win, &data->editor_data);
+
+#else /* NEW_EDITOR */
+                    data->editor_data.LeftSoftKey          = TxtNull;
+                    data->editor_data.AlternateLeftSoftKey = TxtNull;
+                    data->editor_data.RightSoftKey         = TxtNull;
+                    data->editor_data.hide                 = FALSE;
+                    data->editor_data.mode                 = E_EDIT_READ_ONLY_MODE;
+                    data->editor_data.timeout              = THREE_SECS;
+                    data->editor_data.Identifier           = event;
+                    data->editor_data.Callback   = (T_EDIT_CB)sat_info_cb;
+                    data->editor_data.destroyEditor        =  TRUE;
+                    data->editor_data.TextString       	= TextString;
+
+                    data->editor_data.min_enter  = 0;
+                    data->info_win = editor_start(win, &data->editor_data);
+#endif /* NEW_EDITOR */
+                }
+            break;
+        case SAT_SETUP_CALL:
+            TRACE_EVENT("SAT_SETUP_CALL");
+
+            TRACE_EVENT_P2("Redial durUnit %d durValue %d",
+				sat_command->c.call.durUnit,sat_command->c.call.durValue);
+            data->sat_command = sat_command;
+
+            /* create parameter space for call, or reuse old */
+            if (data->call_setup_parameter EQ NULL)
+            {
+                data->call_setup_parameter =
+                    (T_SAT_call_setup_parameter *)ALLOC_MEMORY (sizeof(T_SAT_call_setup_parameter));
+            }
+
+            /* SPR#1784 - DS - If command qualifier is set to 'with redial' (01, 03 or 05) set a global redial flag */
+            if ( (sat_command->qual & 0x01) == TRUE )
+            {
+                if (sat_command->qual > 0x05)
+                {
+                    TRACE_EVENT("Invalid call command qualifier!");
+                }
+                else
+                {
+                    set_sat_redial_flag(1);
+                }
+            }
+
+
+            /* gather the name of the called party (if any) */
+            if ((sat_command->c.call.info.len NEQ 0) &&
+                (sat_command->c.call.info.len NEQ (U8)-1))
+            {
+                TRACE_EVENT("call.info contains data.");
+                data->call_setup_parameter->TextString = sat_create_TEXT_ASCIIZ(&sat_command->c.call.info);
+                //x0035544 Feb 07, 2006 DR:OMAPS00061467
+	//copy the icon data for  the first alpha identifier
+	#ifdef FF_MMI_SAT_ICON
+    		if (sat_command->c.call.info.icon.qual != 0xFF)
+         		{		
+			data->call_setup_parameter->IconInfo.width = sat_command->c.call.info.iconInfo.width;
+			data->call_setup_parameter->IconInfo.height= sat_command->c.call.info.iconInfo.height;
+			icon_length = sat_command->c.call.info.iconInfo.width * sat_command->c.call.info.iconInfo.height;	
+			if(sat_command->c.call.info.iconInfo.dst != NULL)
+				{
+			data->call_setup_parameter->IconInfo.dst = (char *)ALLOC_MEMORY (icon_length);
+			memcpy(data->call_setup_parameter->IconInfo.dst, sat_command->c.call.info.iconInfo.dst, icon_length);
+				}
+			     if(sat_command->c.call.info.icon.qual == 0x00)
+			     	{
+					/* Icon is self-explanatory. Do not display the text*/
+					data->call_setup_parameter->IconInfo.selfExplanatory = TRUE;
+										
+			     	}
+			     else
+					data->call_setup_parameter->IconInfo.selfExplanatory = FALSE;
+				 
+		  	/* Free the memory of icon data that we got through the SATK command*/
+			if(sat_command->c.call.info.iconInfo.dst != NULL)
+				{
+				 mfwFree((U8 *)sat_command->c.call.info.iconInfo.dst, icon_length);
+				sat_command->c.call.info.iconInfo.dst = NULL;		 
+				}
+         	}
+	else
+		{
+		data->call_setup_parameter->IconInfo.dst = NULL;
+		data->call_setup_parameter->IconInfo.width = 0;
+		data->call_setup_parameter->IconInfo.height = 0;
+		data->call_setup_parameter->IconInfo.selfExplanatory = FALSE;
+		}
+			
+       #endif		
+            }
+            else
+            {
+                /* provide an empty string; NULL would crash in info_dialog() */
+                TRACE_EVENT("call.info contains no data!");
+                sat_command->c.call.info.len = 0;
+
+                /* SPR#1700 - DS - Set string to NULL */
+                data->call_setup_parameter->TextString = NULL;
+
+                /* SPR#1700 - DS - Commented out code below. Checks in call() in mmiCall.c ensure
+                 * a NULL string is not sent to info_dialog
+                 */
+#if 0
+                data->call_setup_parameter->TextString = sat_create_TEXT_ASCIIZ(&sat_command->c.call.info);
+#endif /* 0 */
+            }
+
+            /* SPR#1700 - DS - Save info2 (if available). This should be used for the "calling" dialog.
+             * If not available, info (above) can be used.
+             */
+
+             /* gather the name of the called party (if any) */
+            if ((sat_command->c.call.info2.len NEQ 0) &&
+                (sat_command->c.call.info2.len NEQ (U8)-1))
+            {
+                TRACE_EVENT("call.info2 contains data.");
+                data->call_setup_parameter->TextString2 = sat_create_TEXT_ASCIIZ(&sat_command->c.call.info2);
+        //x0035544 Feb 07, 2006 DR:OMAPS00061467
+ 	//copy the icon data for  the second alpha identifier 
+    #ifdef FF_MMI_SAT_ICON
+	if (sat_command->c.call.info2.icon.qual != 0xFF)
+         	{         	
+			data->call_setup_parameter->IconInfo2.width= sat_command->c.call.info2.iconInfo.width;
+			data->call_setup_parameter->IconInfo2.height = sat_command->c.call.info2.iconInfo.height;
+			data->call_setup_parameter->IconInfo2.dst = data->call_setup_parameter->IconInfo.dst;
+			if(sat_command->c.call.info2.icon.qual == 0x00)
+			     	{
+					// Icon is self-explanatory. Do not display the text
+					data->call_setup_parameter->IconInfo2.selfExplanatory = TRUE;
+			     	}
+			else
+			data->call_setup_parameter->IconInfo2.selfExplanatory = FALSE;			
+         	}
+	else
+		{
+		data->call_setup_parameter->IconInfo2.dst = NULL;
+		data->call_setup_parameter->IconInfo2.width = 0;
+		data->call_setup_parameter->IconInfo2.height = 0;
+		data->call_setup_parameter->IconInfo2.selfExplanatory = FALSE;
+		}
+
+ #endif	
+#ifdef NO_ASCIIZ/*MC SPR 940/2 Add tag to Unicode strings so info dialogue displays them correctly*/
+			 sat_add_unicode_tag_if_needed(data->call_setup_parameter->TextString2);
+#endif
+            }
+            else
+            {
+                /* provide an empty string; NULL would crash in info_dialog() */
+                TRACE_EVENT("call.info2 contains no data!");
+                sat_command->c.call.info2.len = 0;
+
+                 /* SPR#1700 - DS - Set string to NULL */
+                data->call_setup_parameter->TextString2 = NULL;
+
+                 /* SPR#1700 - DS - Commented out code below. Checks in call() in mmiCall.c ensure
+                  *  a NULL string is not sent to info_dialog
+                  */
+#if 0
+                data->call_setup_parameter->TextString2 = sat_create_TEXT_ASCIIZ(&sat_command->c.call.info2);
+#ifdef NO_ASCIIZ/*MC SPR 940/2 Add tag to Unicode strings so info dialogue displays them correctly*/
+			 sat_add_unicode_tag_if_needed(data->call_setup_parameter->TextString2);
+#endif
+#endif /* 0 */
+            }
+            break;
+
+        case SAT_CALL_RESULT:
+            if (data->call_setup_parameter EQ NULL)
+            {
+        /* we are NOT in a SETUP CALL session;this is a "normal" Call Result */
+        TRACE_EVENT("SAT_CALL_RESULT a");
+        /*
+        * --> display alpha identifier if available
+        */
+
+		TRACE_EVENT_P1("Redial Time %d",sat_command->c.ccres.redialTime);
+
+        if ((sat_command->c.ccres.info.len NEQ 0) &&
+          (sat_command->c.ccres.info.len NEQ (U8)-1))
+        {
+        	char *TextString = (char *)sat_create_TEXT_ASCIIZ (&sat_command->c.ccres.info);
+
+
+        /*
+        * Setup an editor to display a string
+          */
+          /* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+			AUI_edit_SetDefault(&data->editor_data);
+			AUI_edit_SetTextStr(&data->editor_data, TxtNull, TxtNull, TxtNull, (UBYTE *)TextString);
+			AUI_edit_SetMode(&data->editor_data, ED_MODE_READONLY, ED_CURSOR_NONE);
+			AUI_edit_SetEvents(&data->editor_data, event, TRUE, FOREVER, (T_AUI_EDIT_CB)sat_info_cb);
+
+	        data->info_win = AUI_edit_Start(win, &data->editor_data);
+#else /* NEW_EDITOR */
+			SmsSend_loadEditDefault(&data->editor_data);
+			data->editor_data.LeftSoftKey          = TxtNull;
+			data->editor_data.AlternateLeftSoftKey = TxtNull;
+			data->editor_data.RightSoftKey         = TxtNull;
+			data->editor_data.hide                 = FALSE;
+			data->editor_data.mode                 = E_EDIT_READ_ONLY_MODE;
+			data->editor_data.timeout              = FOREVER;
+			data->editor_data.Identifier           = event;
+			data->editor_data.Callback   = (T_EDIT_CB)sat_info_cb;
+			data->editor_data.destroyEditor        =  TRUE;
+			data->editor_data.TextId      		= TxtNull;
+			data->editor_data.TextString       = TextString;
+			data->editor_data.min_enter  = 0;
+			data->info_win = editor_start(win, &data->editor_data);
+#endif /* NEW_EDITOR */
+
+        }
+      }
+      else
+      {
+        /* we are in a SETUP CALL session;this is a SATN return */
+        U8 general_result;
+        U8 additional_info;
+
+        TRACE_EVENT("SAT_CALL_RESULT b");
+
+        /* process result of a call setup */
+        general_result = (U8)(sat_command->c.ccres.result); /*SPR#2042 - DS - Changed from .redialTime */
+        additional_info = (U8)(sat_command->c.ccres.callId);
+
+        if (((general_result & (U8)0xF0) EQ (U8)0x00) ||
+          ((general_result & (U8)0xF0) EQ (U8)0x10))
+        {
+          /* command has been performed */
+          /*
+          * destroying the display of SETUP MENU will focus the idle screen (in order to show the incall info)
+          * furthermore it's necessary to keep track of the used resources
+          */
+#if 0 /* CQ16437 : Do not need to exit menu in order to handle the call correctly */
+          TRACE_EVENT("destroy SETUP menu");
+          SEND_EVENT (sat_get_setup_menu_win(), SAT_EXIT, 0, NULL);
+#endif
+          return;
+        }
+        else if ((general_result & (U8)0xF0) EQ (U8)0x20)
+        {
+          /* command failed: may be worth to retry */
+          switch (general_result)
+          {
+          case 0x20: /* ME currently unable to process command */
+            TRACE_EVENT("SAT: ME unable");
+            break;
+          case 0x21: /* NW currently unable to process command */
+            TRACE_EVENT("SAT: NW unable");
+#ifdef FF_2TO1_PS
+            if ((additional_info EQ (U8)CAUSE_NWCC_USER_BUSY) &&
+#else
+            if ((additional_info EQ (U8)CAUSE_USER_BUSY) &&
+#endif
+              (data->call_setup_parameter NEQ NULL))
+            {
+              SEND_EVENT (sat_get_call_setup_win(), SAT_CALL_REDIAL, 0, data->call_setup_parameter); /* redial */
+              return; /* do NOT release the call setup parameter */
+            }
+            break;
+          case 0x22: /* user rejected call setup */
+            TRACE_EVENT("user rejected call setup");
+          case 0x23: /* user cleared down call */
+            TRACE_EVENT("user cleared down call");
+          default:
+            TRACE_EVENT("default reason");
+            break;
+          }
+        }
+        else if ((general_result & (U8)0xF0) EQ (U8)0x30)
+        {
+          /* command failed: not worth to retry with identical command */
+          TRACE_EVENT("SAT_CALL_RESULT permanent problem");
+          /* await SAT_SESSION_END in order to react */
+        }
+        else
+        {
+          TRACE_EVENT("SAT_CALL_RESULT unexp. result code");
+        }
+        SEND_EVENT (win, SAT_CALL_END, 0, NULL); /* release the call setup parameter */
+      }
+            break;
+
+        case SAT_CALL_ALERT:
+            TRACE_EVENT("SAT_CALL_ALERT");
+            if (data->call_setup_parameter EQ NULL)
+            {
+                /* in case we are called withoud previous CALL_SETUP (which shouldn't happen!) */
+                data->call_setup_parameter =
+                    (T_SAT_call_setup_parameter *)ALLOC_MEMORY (sizeof(T_SAT_call_setup_parameter));
+
+                /* provide an empty string; NULL would crash in info_dialog() */
+                sat_command->c.ccres.info.len = 0;
+                data->call_setup_parameter->TextString = sat_create_TEXT_ASCIIZ(&sat_command->c.ccres.info);
+
+            }
+
+            /* gather callId and redialTime */
+            data->call_setup_parameter->callId = sat_command->c.ccres.callId;
+            data->call_setup_parameter->redialTime = sat_command->c.ccres.redialTime;
+
+            /* start a dialog to accept or reject the call */
+      sat_win = sat_call_setup_create(data->win);
+            if (sat_win)
+      {
+        data->sat_command = sat_command;
+        SEND_EVENT (sat_win, event,0,data->call_setup_parameter);
+      }
+            else
+      {
+        sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
+        sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+        sat_done (sat_command, sat_res);
+      }
+            break;
+
+        case SAT_SESSION_END:
+            ETRACE(sprintf(buf, "SAT_SESSION_END %d", data->active_sat_session));
+      data->active_sat_session = (T_SAT_EVENTS)event;
+
+            if (data->info_win NEQ NULL)
+      {
+        /* destroy any infoscreen */
+        /* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+		SEND_EVENT (data->info_win, E_ED_DEINIT, 0, NULL);
+#else /* NEW_EDITOR */
+        SEND_EVENT (data->info_win, E_EDITOR_DEINIT, 0, NULL);
+#endif /* NEW_EDITOR */
+        data->info_win = NULL;
+      }
+
+
+      /*
+       * Marcus: Issue 1057: 21/01/2003: Made SEND_EVENT conditional on
+       * call_SATCall being FALSE.
+       */
+      if (call_SATCall == FALSE)
+      {
+          /* Marcus: Issue 1812: 13/03/2003: Start */
+          if (sat_call_active)
+          {
+            sat_call_active = FALSE;
+            SEND_EVENT (sat_get_setup_menu_win(), SAT_EXIT, 0, NULL);
+          }
+          else
+          {
+            SEND_EVENT (sat_get_setup_menu_win(), SAT_RETURN, 0, NULL); /* recreate the SETUP MENU */
+          }
+          /* Marcus: Issue 1812: 13/03/2003: End */
+      }
+        break;
+
+        case SAT_CALL_END:
+            TRACE_EVENT("SAT_CALL_END");
+            if (data->call_setup_parameter NEQ NULL)
+            {
+                /* release the call setup parameters */
+                sat_destroy_TEXT_ASCIIZ(data->call_setup_parameter->TextString);
+
+	   //x0035544 Feb 07, 2006 DR:OMAPS00061467  ARUNKS
+          //Release the icon data.
+         #ifdef FF_MMI_SAT_ICON
+	      if (data->call_setup_parameter->IconInfo.dst != NULL)
+		   {
+			FREE_MEMORY((U8 *)data->call_setup_parameter->IconInfo.dst, data->call_setup_parameter->IconInfo.width * 
+								data->call_setup_parameter->IconInfo.height);
+			data->call_setup_parameter->IconInfo.dst = NULL;
+		   }
+	   
+         #endif
+                FREE_MEMORY ((U8 *)data->call_setup_parameter, sizeof (T_SAT_call_setup_parameter));
+                data->call_setup_parameter = NULL;
+
+                SEND_EVENT (sat_get_call_setup_win(), event, 0, NULL); /* destroy the window */
+
+
+            }
+
+             /* SPR#1784 - DS - Destroy any information screen.
+             */
+              if (data->info_win NEQ NULL)
+              {
+                TRACE_EVENT("Destroy the info screen");
+
+                /* destroy any infoscreen */
+#ifdef NEW_EDITOR
+                SEND_EVENT (data->info_win, E_ED_DEINIT, 0, NULL);
+#else /* NEW_EDITOR */
+                SEND_EVENT (data->info_win, E_EDITOR_DEINIT, 0, NULL);
+#endif /* NEW_EDITOR */
+                data->info_win = NULL;
+              }
+
+            break;
+
+        case SAT_UNKNOWN:
+            TRACE_EVENT("SAT_UNKNOWN");
+            /*
+             * unknown SAT commands are rejected
+             */
+      sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
+      sat_res[SAT_AI_INDEX]  = SatResAiNoService;
+            sat_done (sat_command, sat_res);
+            break;
+
+       case SAT_REFRESH:
+            TRACE_EVENT("SAT_REFRESH");
+#ifdef MMI_HOMEZONE_ENABLED
+{
+int i;
+    for (i=0;i<sat_command->c.refFiles.files_nr;i++)
+    {
+      switch(sat_command->c.refFiles.files[i])
+      {
+         case HZ_SIM_PARAMETERS:
+         case HZ_SIM_CELL_CACHE:
+         case HZ_SIM_CELL_CACHE+1:
+         case HZ_SIM_CELL_CACHE+2:
+         case HZ_SIM_CELL_CACHE+3:
+         	/* Read new sim fields into memory.  SPR877 - SH - Parameter specifies that SIM fields
+         	 * should be read in, even if they were already read at startup. */
+         	homezoneReadSim(HZ_READ_SIM_AGAIN);
+         	return;
+         default:
+         break;
+      }
+    }
+}
+#endif
+            break;
+
+	   case SAT_SET_EVENTS:
+			break;
+	   case SAT_IDLE_TEXT:
+	   		{
+		   		SatTxt *inText;
+				char *txtBuf;
+				UBYTE outDCS;
+
+				inText = &sat_command->c.text;
+
+		   		if (inText->len == 0)
+	   			{
+					// 09-Dec-2005, Shashi Shekar B.S., a0876501, START
+#ifdef FF_MMI_SAT_ICON
+				       addSatMessage(NULL, 0, 0, NULL, FALSE, SAT_ICON_IDLEMODE_TEXT);
+					/* Free the memory of icon data that we got through the SATK command*/
+					if(sat_command->c.text.iconInfo.dst != NULL)
+					{
+						 mfwFree((U8 *)sat_command->c.text.iconInfo.dst, sat_command->c.text.iconInfo.width *
+						 	sat_command->c.text.iconInfo.height);
+						sat_command->c.text.iconInfo.dst  = NULL;
+					}
+					
+#else
+					addSatMessage(NULL);
+#endif
+
+
+					sat_res[SAT_ERR_INDEX] = SatResUnknownData; 
+					sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+					sat_done(sat_command, sat_res);
+	   			}
+				else
+				{
+					txtBuf = (char *)ALLOC_MEMORY(MAX_CBMSG_LEN);
+
+					if (!txtBuf)
+					{
+						sat_res[SAT_ERR_INDEX] = SatResImpossible; 
+						sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+						sat_done(sat_command, sat_res);
+					}
+					else
+					{
+						memset(txtBuf, 0x00, MAX_CBMSG_LEN);
+
+						/*
+						** What is the required format for the output text? UCS2 or ASCII?
+						*/
+						if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+							outDCS = MFW_DCS_UCS2;
+						else
+							outDCS = MFW_ASCII;
+
+						TRACE_EVENT_P3("NDH >>> inDcs : %02x, outDCS : %02x, Text Len : %d", inText->code,
+										   outDCS, inText->len);
+						
+						if ((inText->code == 0x00) || ((inText->code & 0x0c) == 0x00)) // GSM 7-Bit
+						{
+							ATB_convert_String((char *)inText + inText->text,
+												MFW_DCS_7bits, inText->len,
+												txtBuf,
+												outDCS, MAX_CBMSG_LEN-1,
+												TRUE);
+						}
+						else if ((inText->code & 0x0c) == 0x04)	// ASCII 8-Bit
+						{
+							if (outDCS == MFW_ASCII)
+							{
+								if (inText->len > MAX_CBMSG_LEN-1)
+								{
+									//CQ - 19656 Sandip Start
+									//For Input DCS 0x00, we are handling long strings , so also for input DCS 0x04 we should handle long strings
+									#if 0
+									/*
+									** Display Text too long ... Send failure TR to SIM
+									*/
+									sat_res[SAT_ERR_INDEX] = SatResImpossible; 
+									sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+									sat_done(sat_command, sat_res);
+
+									FREE_MEMORY((U8 *)txtBuf, MAX_CBMSG_LEN);
+									return;
+                                                               #endif
+                                                               //CQ - 19656 Sandip
+                                                                ATB_convert_String((char *)inText + inText->text,
+												MFW_DCS_8bits, inText->len,
+												txtBuf,
+												outDCS, MAX_CBMSG_LEN-1,
+												TRUE);
+									//CQ - 19656 Sandip End
+								}
+								else
+								{
+									//MMI_FIX-19656   Using 8 bit table for dispay start
+									ATB_convert_String((char *)inText + inText->text,
+													MFW_DCS_8bits, inText->len,
+													txtBuf,
+													outDCS, MAX_CBMSG_LEN-1,
+													TRUE);
+									//MMI_FIX-19656   Using 8 bit table for dispay end
+									//memcpy(txtBuf, (char *)inText + inText->text, inText->len);
+								}
+							}
+							else
+							{
+								ATB_convert_String((char *)inText + inText->text,
+													MFW_DCS_8bits, inText->len,
+													txtBuf,
+													outDCS, MAX_CBMSG_LEN-1,
+													TRUE);
+							}
+						}
+						else // UCS2
+						{
+							if (outDCS == MFW_DCS_UCS2)
+							{
+								if (inText->len > MAX_CBMSG_LEN-1)
+								{
+									/*
+									** Display Text too long ... Send failure TR to SIM
+									*/
+									sat_res[SAT_ERR_INDEX] = SatResImpossible; 
+									sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+									sat_done(sat_command, sat_res);
+
+									FREE_MEMORY((U8 *)txtBuf, MAX_CBMSG_LEN);
+									return;
+								}
+								else
+								{
+									memcpy(txtBuf, (char *)inText + inText->text, inText->len);
+								}
+							}
+							else
+							{
+								ATB_convert_String((char *)inText + inText->text,
+													MFW_DCS_UCS2, inText->len,
+													txtBuf,
+													outDCS, MAX_CBMSG_LEN-1,
+													TRUE);
+							}
+						}
+
+						TRACE_EVENT_P1("NDH >>> txtBuf is : %s", txtBuf);
+						
+						// 09-Dec-2005, Shashi Shekar B.S., a0876501, START
+#ifdef FF_MMI_SAT_ICON
+/*Check if the SAT command has icon*/
+				if(sat_command->c.text.icon.qual != 0xFF)
+				{
+					/* Icon is self-explanatory. No need to display text for this case.*/
+					     if(sat_command->c.text.icon.qual == 0x00)
+					     	{
+							/* Icon is self-explanatory. Do not display the text.
+								Send a TRUE to the Idle window. */
+						       addSatMessage(txtBuf, sat_command->c.text.iconInfo.width, sat_command->c.text.iconInfo.height,
+							(char *)sat_command->c.text.iconInfo.dst, TRUE, SAT_ICON_IDLEMODE_TEXT); 
+					     	}
+					     else
+					     addSatMessage(txtBuf, sat_command->c.text.iconInfo.width, sat_command->c.text.iconInfo.height,
+						(char *)sat_command->c.text.iconInfo.dst, FALSE, SAT_ICON_IDLEMODE_TEXT); 
+				}
+				else
+				{
+					    addSatMessage(txtBuf, 0, 0, NULL, FALSE, SAT_ICON_NONE); 
+				}
+
+#else
+						addSatMessage(txtBuf);
+#endif	
+
+						sat_res[SAT_ERR_INDEX] = SatResSuccess; 
+						sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+						sat_done(sat_command, sat_res);
+						// 09-Dec-2005, Shashi Shekar B.S., a0876501, START
+#ifdef FF_MMI_SAT_ICON
+						/* Free the memory of icon data that we got through the SATK command*/
+						if(sat_command->c.text.iconInfo.dst != NULL)
+						{
+							 mfwFree((U8 *)sat_command->c.text.iconInfo.dst, sat_command->c.text.iconInfo.width *
+							 	sat_command->c.text.iconInfo.height);
+							sat_command->c.text.iconInfo.dst  = NULL;
+						}
+#endif
+
+						FREE_MEMORY((U8 *)txtBuf, MAX_CBMSG_LEN);
+					}
+				}
+	   		}
+			break;
+
+#ifdef FF_WAP
+       case SAT_LAUNCH_BROWSER:
+
+		break;
+#endif
+        case SAT_OPEN_CHANNEL:
+            TRACE_EVENT("SAT_OPEN_CHANNEL");
+
+             /*
+             * Create and initiate Open Channel Window
+             */
+            sat_win = sat_class_e_create (data->win);
+
+            if (sat_win)
+            {
+                data->sat_command = sat_command;
+                SEND_EVENT (sat_win, event, 0, data->sat_command);
+            }
+            else
+            {
+                sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
+                sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+                sat_done (sat_command, sat_res);
+            }
+            break;
+        case SAT_CLOSE_CHANNEL:
+            TRACE_EVENT("SAT_CLOSE_CHANNEL");
+
+             /*
+             * Create and initiate Close Channel window
+             */
+            sat_win = sat_class_e_create (data->win);
+
+            if (sat_win)
+            {
+                data->sat_command = sat_command;
+                SEND_EVENT (sat_win, event, 0, data->sat_command);
+            }
+            else
+            {
+                sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
+                sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+                sat_done (sat_command, sat_res);
+            }
+            break;
+        case SAT_SEND_DATA:
+            TRACE_EVENT("SAT_SEND_DATA");
+
+             /*
+             * Create and initiate Send Data window
+             */
+            sat_win = sat_class_e_create (data->win);
+
+            if (sat_win)
+            {
+                data->sat_command = sat_command;
+                SEND_EVENT (sat_win, event, 0, data->sat_command);
+            }
+            else
+            {
+                sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
+                sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+                sat_done (sat_command, sat_res);
+            }
+            break;
+        case SAT_RECEIVE_DATA:
+
+            TRACE_EVENT("SAT_RECEIVE_DATA");
+
+             /*
+             * Create and initiate Receive Data window
+             */
+            sat_win = sat_class_e_create (data->win);
+
+            if (sat_win)
+            {
+                data->sat_command = sat_command;
+                SEND_EVENT (sat_win, event, 0, data->sat_command);
+            }
+            else
+            {
+                sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
+                sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+                sat_done (sat_command, sat_res);
+            }
+            break;
+        default:
+            TRACE_EVENT("sim_toolkit_exec() unexp. event");
+            break;
+        }
+}
+/*******************************************************************************
+
+ $Function:  sim_toolkit_sat_cb
+
+ $Description:    Callback function for SAT handler of top window
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+static int sim_toolkit_sat_cb ( T_MFW_EVENT event, T_MFW_SAT * sat_bits)
+{
+    USHORT sat_event = 0;   // RAVI
+ 
+    TRACE_EVENT("sim_toolkit_sat_cb");
+    /*
+     * check whether a decoded message is available
+     */
+    if ((sat_bits EQ NULL) || (g_sim_toolkit_data->win EQ NULL))
+    {
+        TRACE_EVENT("sim_toolkit_sat_cb() unexp. event");
+        return MFW_EVENT_CONSUMED;
+    }
+
+    /* convert the flag into an event */
+    if (event == MfwSatSessionEnd)
+    {
+        sat_event = SAT_SESSION_END;
+    }
+    else
+    {
+        switch (event)
+        {
+        case MfwSatTextOut:         /* display string           */
+            sat_event = SAT_DISPLAY_TEXT;
+            break;
+        case MfwSatGetKey:          /* get user keystroke       */
+            sat_event = SAT_GET_KEY;
+            break;
+        case MfwSatGetString:       /* get user input           */
+            sat_event = SAT_GET_STRING;
+            break;
+        case MfwSatPlayTone:        /* play audio tone          */
+            sat_event = SAT_PLAY_TONE;
+            break;
+        case MfwSatSetupMenu:       /* setup toolkit menu       */
+            sat_event = SAT_SETUP_MENU;
+            break;
+        case MfwSatSelectItem:      /* select menu item         */
+            sat_event = SAT_SELECT_ITEM;
+            break;
+        case MfwSatSendSMS:         /* send short message       */
+            sat_event = SAT_SEND_SMS;
+            break;
+        case MfwSatSendUSSD:
+        case MfwSatSendSS:          /* send service command     */
+            sat_event = SAT_SEND_SS;
+            break;
+        case MfwSatSendDTMF:          /* send service command     */
+            sat_event = SAT_SEND_DTMF;
+            break;
+        case MfwSatCall:            /* setup a call             */
+            sat_event = SAT_SETUP_CALL;
+            break;
+        case MfwSatCcRes:           /* call control result      */
+            sat_event = SAT_CALL_RESULT;
+            break;
+        case MfwSatCcAlert:         /* call control alerting    */
+            sat_event = SAT_CALL_ALERT;
+            break;
+        case MfwSatRefresh:         /* refresh SIM fields     */
+            sat_event = SAT_REFRESH;
+            break;
+        case MfwSatSetEvents:         /* Sat Set Events updated   */
+            sat_event = SAT_SET_EVENTS;
+            break;
+        case MfwSatIdleText:         /* Sat Set Events updated   */
+            sat_event = SAT_IDLE_TEXT;
+            break;
+        case MfwSatDataRefreshed:         /* Data refreshed     */
+				TRACE_EVENT("MfwSatDataRefreshed event sent");
+            break;
+        case MfwSatOpenChannel:         /* Open channel     */
+	      sat_event = SAT_OPEN_CHANNEL;
+            break;
+        case MfwSatCloseChannel:         /* Close channel    */
+	      sat_event = SAT_CLOSE_CHANNEL;
+            break;
+        case MfwSatSendData:         /* Send data     */
+	      sat_event = SAT_SEND_DATA;
+            break;
+        case MfwSatReceiveData:         /* Receive data     */
+	      sat_event = SAT_RECEIVE_DATA;
+            break;
+#ifdef FF_WAP /*Disable for testing without WAP*/
+        case MfwSatLaunchBrowser:
+				TRACE_EVENT("SAT_LAUNCH_BROWSER got to MMI");
+#ifdef MMI_TEST_SAT_LAUNCH_BROWSER
+           {
+             #define LENGTH_URL 40
+			 T_SAT_RES sat_res;
+			 SatLaunchBrowser laun_brow;
+			 char prov_url[LENGTH_URL];
+             short pos = 0;
+             int i;
+
+             sat_res[SAT_ERR_INDEX] = SAT_RES_SUCCESS;
+		     sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
+		     sat_done (sat_bits->cmd, sat_res);
+            sat_event = SAT_LAUNCH_BROWSER;
+             laun_brow = sat_bits->cmd->c.browser;
+             memset(information,'\0',INFORMATION_SIZE);
+			 TRACE_EVENT_P1("Browser identity -> %d",laun_brow.identity);
+             memcpy(&prov_url,laun_brow.url,LENGTH_URL);
+             prov_url[LENGTH_URL-1] = '\0';
+			 TRACE_EVENT_P1("Browser url -> %s",prov_url);
+             pos += sprintf(information+pos,
+             	"BROWSER\n-Identity=%d\n-Url=%s\n-Bearers(%d)=",
+             	laun_brow.identity,
+             	prov_url,
+             	laun_brow.n_bearer);
+             for (i=0;i<5;i++)
+                 pos+=sprintf(information+pos," %d",*laun_brow.bearer++);
+             mmiOpenDummyBrowser(g_sim_toolkit_data->win,information);
+		   }
+			break;
+#endif /*FF_WAP*/
+#endif /* MMI_TEST_SAT_LAUNCH_BROWSER */
+	case MfwSatErrBusy:
+		TRACE_EVENT("MfwSatError reached BMI");
+		{
+		T_DISPLAY_DATA display_info;
+
+		/* SPR#2321 - DS - Display "SAT Busy" dialog */
+
+		dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "SAT Busy", "Reset App" , COLOUR_STATUS);
+		dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)NULL, THREE_SECS, KEY_RIGHT | KEY_LEFT );
+		info_dialog (g_sim_toolkit_data->win, &display_info);
+		}
+
+		/* No SEND_EVENT */
+
+		return MFW_EVENT_CONSUMED;
+//		break;   // RAVI
+        default:
+            sat_event = SAT_UNKNOWN;
+            break;
+        }
+    }
+    SEND_EVENT (g_sim_toolkit_data->win, sat_event, 0, sat_bits->cmd);
+    return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:  sat_setup_menu_proc
+
+ $Description:   process SAT_SETUP_MENU event
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+static void sat_setup_menu_proc(T_SAT_CMD * sat_command)
+{
+  TRACE_FUNCTION("sat_setup_menu_proc");
+
+    if (sat_command->c.menu.items[0].len EQ 0)
+    {
+       /*
+        * "Item data object for item 1" is a null data object:
+        * hide the SIM toolkit menu item in the main menu
+        */
+        menuDisableSimMenu();
+    g_sim_toolkit_data->sat_available_on_SIM = FALSE;
+		//release the labe of the mainmenu
+		//GW-SPR#1035 Free memory using sat_destroy_TEXT_ASCIIZ (as it is allocated using corresponding procedure)
+		if (sat_mainmenu_label NEQ NULL)
+		{
+			sat_destroy_TEXT_ASCIIZ (sat_mainmenu_label);
+			sat_mainmenu_label = NULL;
+		}
+
+        if (sat_get_setup_menu_win() NEQ NULL)
+        {
+            /* there's an active SETUP MENU */
+            SEND_EVENT (sat_get_setup_menu_win(), SAT_EXIT, 0, NULL); /* SETUP_MENU shall selfdestroy */
+        }
+        if (g_sim_toolkit_data->sat_setup_menu_command NEQ NULL)
+        {
+            FREE_MEMORY ((U8 *)(g_sim_toolkit_data->sat_setup_menu_command), sizeof (T_SAT_CMD));
+            g_sim_toolkit_data->sat_setup_menu_command = NULL;
+        }
+    }
+    else
+    {
+        /* install new setup menu */
+        if (sat_get_setup_menu_win() NEQ NULL)
+        {
+            /* there's already an active SETUP MENU */
+            SEND_EVENT (sat_get_setup_menu_win(), SAT_EXIT, 0, NULL); /* SETUP_MENU shall selfdestroy */
+            //xrashmic 16 Feb, 2006 OMAPS00064413 
+	     //List win should be set to null, when destroying the setup menu.
+            sat_set_setup_menu_listmnu_win(NULL);
+        }
+
+        /* store command contents for later use in sat_setup_menu_start() */
+        if (g_sim_toolkit_data->sat_setup_menu_command EQ NULL)
+        {
+            /* if not already allocated, get storage for the SETUP MENU command */
+            g_sim_toolkit_data->sat_setup_menu_command =
+                (T_SAT_CMD *)ALLOC_MEMORY (sizeof (T_SAT_CMD));
+        }
+        *(g_sim_toolkit_data->sat_setup_menu_command) = *sat_command; /* copy contents */
+
+/*#ifdef CHINESE_MMI*/
+		/*
+		  The label for the main menu
+
+		*/
+		TRACE_EVENT("SAT: Creating main menu label");
+ 		{
+#ifdef NO_ASCIIZ
+			/*MC,  SPR 940/2if we're in chinese, header may be converted from ASCII to Unicode*/
+			if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+				header_len = g_sim_toolkit_data->sat_setup_menu_command->c.menu.header.len *2;
+			else
+#endif
+				/* taking the label from menu command file and convert to ascii */
+				 header_len = g_sim_toolkit_data->sat_setup_menu_command->c.menu.header.len;
+
+
+			sat_mainmenu_label = sat_create_TEXT_ASCIIZ (&g_sim_toolkit_data->sat_setup_menu_command->c.menu.header);
+                  if(sat_mainmenu_label)
+		  {
+		    sat_mainmenu_label[header_len] = '\0';
+                    /*JVJ #1576 The SimToolkit Title string is set here */
+                    res_set_SIMToolkit_title_string(sat_mainmenu_label);
+                  }                  
+		}
+        /* unhide the SIM toolkit menu item in the main menu */
+        menuEnableSimMenu
+            (
+            "",  /* label */
+            (SimMenuFunc)sat_setup_menu_start, /* callback when menu entered */
+            g_sim_toolkit_data->sat_setup_menu_command /* parameter to callback */
+            );
+    }
+    sat_set_setup_menu_win(NULL); // avoid notifications to a non-existent window
+}
+
+
+/*******************************************************************************
+
+ $Function:  sat_win_cb
+
+ $Description:   Default sat window event handler. Avoid intermediate visibility of lower menus
+
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+int sat_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
+{
+  TRACE_FUNCTION("sat_win_cb");
+
+    if (win EQ NULL)
+  return MFW_EVENT_CONSUMED;
+
+    switch (event)
+        {
+        case E_WIN_VISIBLE: /* window changed visibility */
+            if (win->flags & E_WIN_VISIBLE)
+                {
+                    /* window becomes visible */
+                    dspl_ClearAll(); /* overwrite redraw of lower menus with cleared screen */
+                    dspl_TextOut(0,12,/*DSPL_TXTATTR_NORMAL*/DSPL_TXTATTR_CURRENT_MODE/*MC*/,GET_TEXT(TxtPleaseWait)); /* sbh - so we don't get blank screen */
+                }
+            break;
+        default:
+            return MFW_EVENT_REJECTED;
+        }
+    return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:  sat_kbd_cb
+
+ $Description:   Default sat window keyboard handler
+
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+int sat_kbd_cb (T_MFW_EVENT event, T_MFW_KBD * key)
+{
+  T_MFW_HND   win     = mfwParent( mfw_header() );
+
+  TRACE_FUNCTION("sat_kbd_cb");
+
+  /* make sure we handle null keyboards
+  */
+  if ( key == NULL )
+    return MFW_EVENT_CONSUMED;
+
+  /* deal with the incoming key code
+  */
+    switch( key->code )
+    {
+
+      /* Destroy the window on either right softkey or hangup keypresses */
+    case KCD_HUP:
+    case KCD_RIGHT:
+    {
+      SEND_EVENT(win, SAT_DESTROY_WINDOW, 0, 0);
+      break;
+    }
+    }
+
+    return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:  sat_info_cb
+
+ $Description:  Callback function information dialog.
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+static void sat_info_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason)
+{
+    /* INFO DISPLAY */
+    T_MFW_WIN       * info_win_data   = ((T_MFW_HDR *)win)->data;
+    T_sim_toolkit   * info_data       = (T_sim_toolkit *)info_win_data->user;
+
+    TRACE_FUNCTION("sat_info_cb");
+
+    if (win EQ NULL)
+        return;
+
+        /*
+        * Who has initiated the information screen
+    */
+    switch (identifier)
+    {
+      //x0035544 added fix done by x0021334 for CQ-33597 21-11-2005
+        case SAT_SEND_DTMF: // x0021334 : To test SAT session end - CQ33597
+    {
+// Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
+#ifdef FF_MMI_SAT_ICON
+		if (info_data->editor_data.editor_attr.TitleIcon.data != NULL)
+		{
+			FREE_MEMORY((U8 *)info_data->editor_data.editor_attr.TitleIcon.data, info_data->editor_data.editor_attr.TitleIcon.width * 
+								info_data->editor_data.editor_attr.TitleIcon.height);
+			info_data->editor_data.editor_attr.TitleIcon.data = NULL;
+		}
+#endif	
+
+    	switch(reason)
+    	{
+       	case INFO_KCD_RIGHT:
+		case INFO_KCD_HUP:
+              	// Call mfw function to end the session
+              	Mfw_SAT_DTMF_EndSession();
+	       	#ifdef NEW_EDITOR
+			AUI_edit_Destroy(info_data->info_win);
+              	#else /* NEW_EDITOR */
+			editor_destroy(info_data->info_win);
+               	#endif /* NEW_EDITOR */
+        	 	info_data->info_win = NULL;
+      	        break;
+             	 default:
+             	 	TRACE_EVENT("sat_info_cb(): unexp. event");
+             	  break;
+    	   	}
+    	}
+        break;
+
+    case SAT_SEND_SMS:
+    case SAT_SEND_SS:
+    //case SAT_SEND_DTMF: x0035544 CQ-33597 21-11-2005
+    case SAT_CALL_RESULT:
+        if ((info_win_data EQ NULL) || (info_data EQ NULL))
+            return;
+
+// Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
+#ifdef FF_MMI_SAT_ICON
+		if (info_data->editor_data.editor_attr.TitleIcon.data != NULL)
+		{
+			FREE_MEMORY((U8 *)info_data->editor_data.editor_attr.TitleIcon.data, info_data->editor_data.editor_attr.TitleIcon.width * 
+								info_data->editor_data.editor_attr.TitleIcon.height);
+			info_data->editor_data.editor_attr.TitleIcon.data = NULL;
+		}
+#endif		
+        /* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+		sat_destroy_TEXT_ASCIIZ((char*)info_data->editor_data.TitleString); /* displayed text */
+#else /* NEW_EDITOR */
+        sat_destroy_TEXT_ASCIIZ((char*)info_data->editor_data.TextString); /* displayed text */
+#endif /* NEW_EDITOR */
+        break;
+    default:
+        TRACE_EVENT("sat_info_cb(): unexp. event");
+        break;
+    }
+}
+
+
+/*******************************************************************************
+
+ $Function:  sat_set_setup_menu_win
+
+ $Description:   set the window associated with the setup menu command
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+void sat_set_setup_menu_win(T_MFW_HND win)
+{
+  TRACE_FUNCTION("sat_set_setup_menu_win");
+
+    g_sim_toolkit_data->sat_setup_menu_win = win;
+}
+
+
+/*******************************************************************************
+
+ $Function:  sat_get_setup_menu_win
+
+ $Description:   get the window associated with the setup menu command
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+T_MFW_HND sat_get_setup_menu_win(void)
+{
+  TRACE_EVENT("sat_get_setup_menu_win");
+    return g_sim_toolkit_data->sat_setup_menu_win;
+}
+
+
+/*******************************************************************************
+
+ $Function:  sat_set_setup_menu_listmnu_win
+
+ $Description:   set the window associated with the sat list menu
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+void sat_set_setup_menu_listmnu_win(T_MFW_HND win)
+{
+  TRACE_FUNCTION("sat_set_setup_menu_listmnu_win");
+
+    g_sim_toolkit_data->sat_setup_menu_listmnu_win= win;
+}
+
+
+/*******************************************************************************
+
+ $Function:  sat_get_setup_menu_listmnu_win
+
+ $Description:   get the window associated with the setup list menu
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+T_MFW_HND sat_get_setup_menu_listmnu_win(void)
+{
+  TRACE_EVENT("sat_get_setup_menu_listmnu_win");
+    return g_sim_toolkit_data->sat_setup_menu_listmnu_win;
+}
+
+
+/*******************************************************************************
+
+ $Function:  sat_set_call_setup_win
+
+ $Description:   set the window associated with the call setup command
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+void sat_set_call_setup_win(T_MFW_HND win)
+{
+  TRACE_FUNCTION("sat_set_call_setup_win");
+    g_sim_toolkit_data->sat_call_setup_win = win;
+}
+
+
+/*******************************************************************************
+
+ $Function:  sat_get_call_setup_win
+
+ $Description:    get the window associated with the call setup command
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+/* Marcus: Issue 1057: 21/01/2003: Made public */
+T_MFW_HND sat_get_call_setup_win(void)
+{
+  TRACE_FUNCTION("sat_get_call_setup_win");
+    return g_sim_toolkit_data->sat_call_setup_win;
+}
+
+/*******************************************************************************
+
+ $Function:  g_ascii_gsm_table
+
+ $Description:  convert a string coded in ASCIIZ into GSM alphabet
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+    static const char g_ascii_gsm_table[256] = {
+       0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //000-007
+       0x20,0x20,  10,0x20,0x20,  13,0x20,0x20, //008-015
+       0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //016-023
+       0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //024-031
+         32,  33,  34,  35,   2,  37,  38,  39, //032-039
+         40,  41,  42,  43,  44,  45,  46,  47, //040-047
+         48,  49,  50,  51,  52,  53,  54,  55, //048-055
+         56,  57,  58,  59,  60,  61,  62,  63, //056-063
+          0,  65,  66,  67,  68,  69,  70,  71, //064-071
+         72,  73,  74,  75,  76,  77,  78,  79, //072-079
+         80,  81,  82,  83,  84,  85,  86,  87, //080-087
+         88,  89,  90,0x20,0x20,0x20,0x20,0x20, //088-095
+       0x20,  97,  98,  99, 100, 101, 102, 103, //096-103
+        104, 105, 106, 107, 108, 109, 110, 111, //104-111
+        112, 113, 114, 115, 116, 117, 118, 119, //112-119
+        120, 121, 122,0x20,0x20,0x20,0x20,0x20, //120-127
+          9, 126,   5,0x20, 123, 127,  15,0x20, //128-135
+       0x20,0x20,   4,0x20,0x20,   7,  91,  14, //136-143
+         31,  29,  28,0x20, 124,   8,0x20,   6, //144-151
+       0x20,  92,  94,0x20,   1,   3,0x20,0x20, //152-159
+       0x20,0x20,0x20,0x20, 125,  93,0x20,0x20, //160-167
+         96,  17,0x20,0x20,0x20,  64,0x20,0x20, //168-175
+       0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //176-183
+       0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //184-191
+       0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //192-199
+       0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //200-207
+       0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //208-215
+       0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //216-223
+       0x20,  30,  19,  22,  24,0x20,0x20,0x20, //224-231
+         18,  25,  21,0x20,0x20,0x20,0x20,  20, //232-239
+         26,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //240-247
+       0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, //248-255
+    };
+
+void sat_ascii_to_gsm (char * gsm_string, char * ascii_string, U16 length)
+{
+    U16 i;
+  TRACE_FUNCTION("sat_ascii_to_gsm");
+
+    for (i = 0; i < length; i++)
+        gsm_string[i] = g_ascii_gsm_table[ascii_string[i]];
+}
+
+/*******************************************************************************
+
+ $Function:  sat_ascii_to_ucode
+
+ $Description:  convert a string coded in ASCIIZ into UCS2 alphabet
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+void sat_ascii_to_ucode (wchar_t * UCS2_chars, char * ascii_string, U16 length)
+{
+    U16 i;
+  TRACE_FUNCTION("sat_ascii_to_ucode");
+    for (i = 0; i < length; i++)
+        UCS2_chars[i] = (wchar_t)ascii_string[i];
+}
+
+/*******************************************************************************
+
+ $Function:  sat_ucode_to_ascii
+
+ $Description:   convert a string coded in UCS2 into ASCII alphabet
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+void sat_ucode_to_ascii (char * ascii_string, wchar_t * UCS2_chars, U16 length)
+{
+    U16 i;
+  TRACE_FUNCTION("sat_ucode_to_asci");
+
+    for (i = 0; i < length; i++)
+        ascii_string[i] = (char)UCS2_chars[i];
+    ascii_string[i] = '\0';
+}
+/*******************************************************************************
+
+ $Function:  g_gsm_ascii_table
+
+ $Description:    convert a string coded in GSM alphabet into an ASCIIZ string
+
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+
+    static const char g_gsm_ascii_table[128] = {
+         64, 156,  36, 157, 138, 130, 151, 141,
+        149, 128,  10,0x20 , 32,  13, 143, 134,
+       0x20, 169, 232, 226, 239, 234, 227,0x20,
+        228, 233, 240,0x20, 146, 145, 225, 144,
+         32,  33,  34,  35,0x20,  37,  38,  39,
+         40,  41,  42,  43,  44,  45,  46,  47,
+         48,  49,  50,  51,  52,  53,  54,  55,
+         56,  57,  58,  59,  60,  61,  62,  63,
+        173,  65,  66,  67,  68,  69,  70,  71,
+         72,  73,  74,  75,  76,  77,  78,  79,
+         80,  81,  82,  83,  84,  85,  86,  87,
+         88,  89,  90, 142, 153, 165, 154,0x20,
+        168,  97,  98,  99, 100, 101, 102, 103,
+        104, 105, 106, 107, 108, 109, 110, 111,
+        112, 113, 114, 115, 116, 117, 118, 119,
+        120, 121, 122, 132, 148, 164, 129, 133
+    };
+
+void sat_gsm_to_ascii (char * ascii_string, char * gsm_string, U16 length)
+{
+    U16 i;
+  TRACE_FUNCTION("sat_gsm_to_ascii");
+  //  Jun 02, 2004 REF: CRR 15747  xpradipg-SASKEN 
+  //  Fix: The string is terminated if the length is reached or if it encounters '0xFF'
+  //  gsm_string[i]!=0xFF is introduced to check if the string is terminated prior to the specified length
+   for (i = 0; i < length && gsm_string[i]!=0xFF; i++)
+        ascii_string[i] = g_gsm_ascii_table[(gsm_string[i] & (U8)0x7F)];
+    ascii_string[i] = '\0';
+}
+
+
+/*******************************************************************************
+
+ $Function:  sat_TEXT_to_ASCIIZ
+
+ $Description:   This routine converts a MFW SAT text descriptor into a
+         conventional ASCIIZ string
+ $Returns:    none.
+
+ $Arguments:
+
+*******************************************************************************/
+void sat_TEXT_to_ASCIIZ (char * destination, T_SAT_TXT * txt)
+{
+    UBYTE * temp_buffer;
+    UBYTE len;
+    char* txt_start;
+
+    TRACE_FUNCTION("sat_TEXT_to_ASCIIZ");
+
+    TRACE_EVENT_P1("T_SAT_TXT txt->code=%x", txt->code);
+
+    switch (txt->code)
+    {
+    case MFW_DCS_7bits:
+  temp_buffer = (UBYTE *)ALLOC_MEMORY(((txt->len*8)/7)+1);
+  len = utl_cvt7To8 ((UBYTE *)txt + txt->text, txt->len, temp_buffer);
+    //Sandip CQ 16292 . commented 
+  /*sat_gsm_to_ascii (destination, (char *)temp_buffer, len);*/
+    /*Sandip CQ 16292 . added this new function . Problem with current TI GSM 7-bit default function*/
+ DecodeGSM7ToASCII((unsigned char*)txt+txt->text, (unsigned char*) destination, txt->len);
+  FREE_MEMORY ((U8 *)temp_buffer, ((txt->len*8)/7)+1);
+  break;
+    case MFW_DCS_8bits:
+     /* SPR#1700 - DS - Modified to handle 0x80 style unicode */
+    txt_start = (char*)txt + txt->text;
+    if ((*txt_start == 0x80) && (txt->len & 1))
+    {
+    	TRACE_EVENT("0x80 style unicode");
+        memset(destination,0,txt->len+2);
+        memcpy(destination,txt_start+1,txt->len-1);
+        txt->code = MFW_DCS_UCS2;
+    }
+    else
+    {
+        sat_gsm_to_ascii (destination, (char *)txt + txt->text, (UBYTE)txt->len);
+    }
+  break;
+    case MFW_DCS_UCS2:
+        sat_ucode_to_ascii (destination, (wchar_t *)((char *)txt + txt->text), txt->len);
+  break;
+    default:
+      sat_gsm_to_ascii (destination, (char *)txt + txt->text, (UBYTE)txt->len); /* SH - got txt->code=244, so need generic response to this*/
+    TRACE_EVENT("sat_TEXT_to_ASCIIZ() unexp. DCS");
+    }
+}
+
+//sandip 16292
+// Converts a given 8-bit encoded string into original 7-bit GSM data string according to TS 31.102
+/*******************************************************************************
+
+ $Function:  DecodeGSM7ToASCII
+
+ $Description:   This function decodes a GSM 7-bit string into ASCII equivalent
+
+ $Returns:    length of decoded string
+
+ $Arguments: encoded - GSM string pointer
+ 		       plain      - Buffer to hold the decoded ASCII string
+ 		       Length   -  Length of the encoded GSM string 
+
+				
+ *******************************************************************************/
+unsigned char DecodeGSM7ToASCII(U8 * encoded, U8 * plain, U8 Length)
+{
+	U8 bits, i, j;
+	U8 c;
+
+	/* Extract the ascii characters from the bytes,
+	*/
+
+	for (i = j = bits = 0; j < Length; i++, j++)
+	{
+		if (bits > 0)
+			c = encoded[i-1] >> (8-bits);
+		else
+			c=0;
+
+		if (bits < 7)
+			c |= encoded[i] << bits;
+
+		*plain++ = c & 0x7f;
+		bits = (++bits)%8;
+		if (bits == 0)
+		{
+			i -= 1;
+			Length++;
+		}
+	}
+
+	*plain = '\0';
+	return (Length);
+}
+/*******************************************************************************
+
+ $Function:  sat_create_TEXT_ASCIIZ
+
+ $Description:   This routine creates out of an MFW SAT text descriptor an
+        dynamically allocated ASCIIZ string pointer
+
+ $Returns:    none.
+
+ $Arguments:
+
+				MC, Note: text returned by this function has no Unicode tag at beginning
+ $Returns:		none.
+
+ $Arguments:
+
+*******************************************************************************/
+/*MC, SPR 940/2 uncommented function back in, and then rewrote it :)*/
+void sat_TEXT_to_UCODE (char*  destination, int size, T_SAT_TXT * txt)
+{
+
+    UBYTE * temp_buffer;
+    UBYTE len;
+    char debug[50];
+
+
+	TRACE_EVENT("sat_TEXT_to_UCODE()");
+
+    switch (txt->code) /*DCS of Text*/
+    {
+    case MFW_DCS_7bits:
+	temp_buffer = (UBYTE *)ALLOC_MEMORY(((txt->len*8)/7)+1);
+			/*convert from 7 to 8 bit*/
+	len = utl_cvt7To8 ((UBYTE *)txt + txt->text, txt->len, temp_buffer, 0);
+
+        /*MC, convert from 8 bit to UCS2*/
+    /*SPR2175, use new function for conversion*/
+    ATB_convert_String((char*)temp_buffer, MFW_DCS_8bits, (((txt->len*8)/7)+1), (char*)destination, MFW_DCS_UCS2, /*txt->len*2*/size, FALSE);
+	FREE_MEMORY ((U8 *)temp_buffer, ((txt->len*8)/7)+1);
+	break;
+    case MFW_DCS_8bits:/*DCS tends to come out as 8 bit whatever it is*/
+    if (*((UBYTE*)txt+txt->text) !=0x80)/*MC, if ASCII, convert to Unicode*/
+    {
+#ifdef SAT_TEXT_TRACING
+    	//string_GSM_to_UCS2((UBYTE)txt->len, (UBYTE *)txt + txt->text, (USHORT)(txt->len), destination);
+    	sprintf(debug, "Length of MENU HEADER:%d", txt->len);
+    	TRACE_EVENT(debug);
+#endif
+		/*MC, convert from 8 bit to UCS2*/
+		/*SPR2175, use new function for conversion*/
+        ATB_convert_String((char *)txt +txt->text, MFW_DCS_8bits, txt->len, (char*)destination, MFW_DCS_UCS2, /*txt->len*2*/size, FALSE);
+    }
+    else
+    {
+		/*MC, unicode string, convert to our display format*/
+    	destination[0] =0x80;/*SPR 1728, add unicode tag*/
+    	destination[1] = 0x7f;
+
+    	memcpy(&destination[2], (UBYTE*)txt+txt->text+1, txt->len-1);
+
+    }
+	break;
+    case MFW_DCS_UCS2:/*MC, unicode string, convert to our display format*/
+	{	destination[0] =0x80;/*SPR 1728, add unicode tag*/
+    	destination[1] = 0x7f;
+
+    	//memcpy(&destination[2], (UBYTE*)txt+txt->text+1, txt->len-1);
+    	memcpy(&destination[2], (UBYTE*)txt+txt->text, txt->len); /* SPR#2340 - DS - Corrected len */
+
+    }
+
+	break;
+    default:
+	TRACE_EVENT("sat_TEXT_to_UCODE() unexp. DCS");
+    }
+    /*MC, SPR 1086 Commented out traces here, as long buffers cause a crash*/
+    {int i;
+
+    	for (i=0; i <size && i<20; i++)
+    	{	if (destination[i] == 0)
+    			debug[i] ='0';
+    		else
+    			debug[i] = destination[i];
+    	}
+	debug[i+1] = 0x00; /* SPR#2321 - DS - Terminate debug buffer after UCS2 string */
+    	TRACE_EVENT(debug);
+    }
+}
+/*JVJE*/
+
+/*******************************************************************************
+
+ $Function:  sat_create_TEXT_ASCIIZ
+
+ $Description:	 This routine creates out of an MFW SAT text descriptor an
+				dynamically allocated ASCIIZ string pointer
+
+ $Returns:		none.
+
+ $Arguments:
+
+*******************************************************************************/
+#define SAT_LEN_SIZE (U16)sizeof(U16)         /* used to hold the allocation size */
+#define SAT_TERMINATOR_SIZE (U16)sizeof(U16)  /* used to hold terminating '\0' in U8 and U16 */
+
+char * sat_create_TEXT_ASCIIZ (T_SAT_TXT * txt)
+{
+
+    char * res;
+    U16 size;
+	UBYTE first_char= *((UBYTE*)txt+txt->text);/*SPR 1728*/
+    TRACE_EVENT("sat_create_TEXT_ASCIIZ ()");
+#ifdef  NO_ASCIIZ
+	TRACE_EVENT_P3("DCS:%d  first_char:%d len: %d", txt->code, first_char, txt->len);
+	/*SPR 1728, if unicode string format it for display*/
+      if ( first_char==0x80 ||txt->code==MFW_DCS_UCS2)
+    {	return (char*)sat_create_TEXT_UCODE (txt);}
+#endif
+
+    /* SPR#2321 - DS - Format not Unicode therefore return NULL if string length is zero */
+    if (txt->len == 0)
+	return NULL;
+
+    /* SPR#2321 - DS - SAT has sent a NULL string. Set first char to ASCII code for <space> */
+    if (txt->len == 1 && first_char == 0x00)
+    {
+	*((UBYTE*)txt+txt->text) = 0x20;
+    }
+
+    /* SPR#2321 - DS - Check if SAT has supplied a NULL string (first_char 0x00, dcs not UCS2) */
+    if (first_char == 0x00 && txt->code != MFW_DCS_UCS2)
+    	return NULL;
+
+    /* allocate sufficient space for the converted string */
+    if (txt->code == MFW_DCS_7bits)
+	size = SAT_LEN_SIZE + ((txt->len*8)/7)*sizeof(char) + SAT_TERMINATOR_SIZE;
+    else
+	size = SAT_LEN_SIZE + txt->len*sizeof(char) + SAT_TERMINATOR_SIZE;
+    res = (char *)ALLOC_MEMORY (size);
+    *(U16 *) res = size; /* store allocated size in first 2 bytes (for deallocation purposes) */
+    res += SAT_LEN_SIZE,  /* set the pointer to the string, not to the alloc size */
+
+    /* convert the string */
+    sat_TEXT_to_ASCIIZ (res, txt);
+
+
+    return res;
+}
+
+/*******************************************************************************
+
+ $Function:  sat_create_TEXT_UCODE
+
+ $Description:	 This routine creates out of an MFW SAT text descriptor an
+				 dynamically allocated UCS2 string pointer
+
+ $Returns:		none.
+
+ $Arguments:
+
+*******************************************************************************/
+/*JVJE*/
+/*MC, SPR 940/2 uncommneted and then re-written function, pointers to wide chars now are pointers to chars*/
+char* sat_create_TEXT_UCODE (T_SAT_TXT * txt)
+{
+    char * res;
+    U16 size;
+
+    TRACE_EVENT("sat_create_TEXT_UCODE()");
+
+    if (txt->code == MFW_DCS_7bits)					/*MC SPR 1086, add 2 extra chars in case UCS2 tag is to be added later*/
+        size = SAT_LEN_SIZE + sizeof(char) + ((txt->len*8)/7) * /*sizeof(wchar_t)*/2+SAT_TERMINATOR_SIZE*2;
+    else											/*MC SPR 1086, add 2 extra chars in case UCS2 tag is to be added later*/
+        //size = SAT_LEN_SIZE + sizeof(char) + txt->len * /*sizeof(wchar_t)*/2+SAT_TERMINATOR_SIZE*2;
+        size = SAT_LEN_SIZE + (sizeof(U16) * txt->len) + SAT_TERMINATOR_SIZE*2; /* SPR#2321 - DS - Improve clarity of mem alloc */
+    res = (char *)ALLOC_MEMORY (size);
+    *(U16 *)res = size;
+    res = ((char *)res + SAT_LEN_SIZE);
+
+    TRACE_EVENT_P1("size: %d", size);
+
+    sat_TEXT_to_UCODE (res,size,  txt);
+
+    return res;
+}
+
+
+/*******************************************************************************
+
+ $Function:  sat_create_ITEM_ASCIIZ
+
+ $Description:	 This routine converts a MFW SAT Item descriptor into a
+				conventional String pointer
+				MC, note: this function will add a Unicode tag to the beginning of Unicode
+				strings returned
+
+ $Returns:		none.
+
+ $Arguments:
+
+*******************************************************************************/
+/*MC, SPR 940/2 changed this func to output Unicode string when appropriate*/
+extern char * sat_create_ITEM_ASCIIZ (SatItem * item)
+{
+    char * res;
+    U16 size;
+    UBYTE first_char= *((UBYTE*)item+item->text);
+
+    TRACE_FUNCTION("sat_create_ITEM_ASCIIZ()");
+
+    TRACE_EVENT_P2("first_char:%d len: %d", first_char, item->len);
+
+    /* SPR#2321 - DS - Return NULL if string length is zero */
+    if (item->len == 0)
+    {
+	//return NULL;//sandip-CQ 16306
+	*((UBYTE*)item+item->text) = 0x20;
+    }
+
+    /* SPR#2321 - DS - SAT has sent a NULL string. Set first char to ASCII code for <space> */
+    if ((item->len == 1) && (first_char == 0x00))
+    {
+        *((UBYTE*)item+item->text) = 0x20;
+    }
+
+    /* allocate sufficient space for the converted string */
+    size = SAT_LEN_SIZE + item->len/**sizeof(wchar_t)*/*2 + 3*SAT_TERMINATOR_SIZE;
+    res = (char *)ALLOC_MEMORY (size);
+    *(U16 *) res = size; /* store allocated size in first 2 bytes (for deallocation purposes) */
+    res += SAT_LEN_SIZE; /* set the pointer to the string, not to the alloc size */
+
+    /*
+     * item->text is offset of string from start of item
+     */
+#ifdef NO_ASCIIZ /*MC SPR 940/2 check if we're in Chinese or string is unicode and deal with it*/
+
+     if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)/*if chinese*/
+     	{
+#ifdef SAT_TEXT_TRACING
+		 /***************************Go-lite Optimization changes Start***********************/
+		 //Aug 16, 2004    REF: CRR 24323   Deepa M.D
+		 TRACE_EVENT_P1("Length of menu item:%d", item->len);
+		 /***************************Go-lite Optimization changes end***********************/
+#endif
+     		if (*((char*)item+item->text) != 0x80)/*MC, if item ASCII*/
+     		{ //	int i;  // RAVI
+				/*convert to unicode*/
+     			TRACE_EVENT("Adding menu item in ASCII->UCS2");
+     	//		SmsRead_convertSMSmsg((char *)item + item->text, MFW_DCS_8bits, item->len, &res[2], MFW_DCS_UCS2, size-4, FALSE);
+		//		res[0] = 0x80;/*add tag to beginning of string*/
+		//		res[1] =0x7F;
+			/*MC, SPR 1086 8 bit to UCS2 conversion causes menu update problems*/
+     		/*Thought it might be due to memory leaks/overwrites, but can't find any*/
+     		/*Easy solution is to convert to ASCII rather than UCS2*/
+			sat_gsm_to_ascii (res, (char *)item + item->text, item->len);
+     		}
+     		else /*if Unicode tag*/
+     		{	TRACE_EVENT("Adding menu item in UCS2");
+     			/*Shift string up one byte*/
+    			memcpy(res+2, (char *)item + item->text+1, item->len-1);
+     			res[0] = 0x80;/*add tag at beginning of string*/
+     			res[1] = 0x7f;
+     		}
+     	}
+     else /*if not chinese BUT unicode tag, convert to display Unicode format*/
+     {	 if (*((char*)item+item->text) == 0x80)
+     		{	memcpy(res+2, (char *)item + item->text+1, item->len-1);
+     			res[0] = 0x80;
+     			res[1] = 0x7f;
+     		}
+
+     	else /*if not chinese and ascii string, convert from GSM to ASCII*/
+#endif
+    		sat_gsm_to_ascii (res, (char *)item + item->text, item->len);
+#ifdef NO_ASCIIZ
+     }
+#endif
+
+
+    return res;
+}
+
+/*******************************************************************************
+
+ $Function:  sat_destroy_TEXT_ASCIIZ
+
+ $Description:	 destroy an ASCIIZ string previously created with
+				 sat_create_TEXT_ASCIIZ() or sat_create_ITEM_ASCIIZ()
+
+ $Returns:		none.
+
+ $Arguments:
+
+*******************************************************************************/
+void sat_destroy_TEXT_ASCIIZ (char * str)
+{
+/*MC, SPR 940/2 if we're in chinese, use Unicode string destuctor*/
+	if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
+	{	sat_destroy_TEXT_UCODE(str);
+		return;
+	}
+
+  TRACE_FUNCTION("sat_destroy_TEXT_ASCIIZ");
+
+    if (str NEQ NULL)
+        {
+            /* the two bytes before the string are holding the alloc size info */
+            FREE_MEMORY ((U8 *)(str-SAT_LEN_SIZE), *(U16 *) (str-SAT_LEN_SIZE));
+            str = NULL;
+        }
+}
+
+#ifdef MMI_TEST_SAT_LAUNCH_BROWSER
+void mmiOpenDummyBrowser(T_MFW_HND win,char* information)
+{
+#ifdef NEW_EDITOR
+	T_AUI_EDITOR_DATA editor_data;	/* SPR#1428 - SH - New Editor data */
+#else
+	T_EDITOR_DATA	editor_data;
+#endif
+
+	TRACE_FUNCTION("mmiOpenDummyBrowser");
+
+	/* SPR#1428 - SH - New Editor changes */
+
+#ifdef NEW_EDITOR
+	AUI_edit_SetDefault(&editor_data);
+	AUI_edit_SetTextStr(&editor_data, TxtNull, TxtNull, TxtNull, NULL);
+	AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)information, INFORMATION_SIZE);
+	AUI_edit_SetMode(&editor_data, ED_MODE_READONLY, ED_CURSOR_NONE);
+
+	AUI_edit_Start(win, &editor_data);
+#else /* NEW_EDITOR */
+
+#ifdef DBG1
+	editor_data_init();
+#endif
+	editor_data.TextString			= "WAP";
+	editor_data.LeftSoftKey			= TxtSoftOK;
+	editor_data.RightSoftKey		= NULL;
+	editor_data.AlternateLeftSoftKey	= NULL;
+	editor_data.Callback			= NULL;
+	editor_data.Identifier			= 0;
+	editor_data.hide				= FALSE;
+	editor_data.mode				= READ_ONLY_MODE;
+	editor_data.timeout           	= FOREVER;
+	editor_data.min_enter			= 0;
+	editor_data.destroyEditor		= TRUE;
+	editor_data.editor_attr.win.px	= 0;
+	editor_data.editor_attr.win.py	= 8;
+	editor_data.editor_attr.win.sx	= 84;
+	editor_data.editor_attr.win.sy	= 24;
+	editor_data.editor_attr.font	= 0;
+	editor_data.editor_attr.mode	= edtCurNone;
+	editor_data.editor_attr.controls	= 0;
+    editor_data.editor_attr.size	= INFORMATION_SIZE;
+
+	editor_data.editor_attr.text = information;
+
+	/* create the dialog handler */
+	editor_start(win, &editor_data);  /* start the editor */
+#endif
+
+	return;
+}
+
+#endif
+//GW SPR#1035 - Added SAT changes
+/*******************************************************************************
+
+ $Function:  sat_release_the_editor
+
+ $Description: The SAT-application initiate a setup call and
+             the MMI opens for this call status a new editor.
+             Normally the event "SAT_SESSION_END" release the editor
+             but for some reason this event doesnt come up !
+             This function allows from the MMICall.c in the case of "disconnect"
+             to release the editor as well.
+
+ $Returns:		none.
+
+ $Arguments:
+
+*******************************************************************************/
+void sat_release_the_editor (void)
+{
+      TRACE_FUNCTION("sat_release_the_editor()");
+
+	if (g_sim_toolkit_data->info_win NEQ NULL)
+	{
+		/* destroy any infoscreen if exist */
+		/* SPR#1428 - SH - New Editor changes */
+#ifdef NEW_EDITOR
+		SEND_EVENT (g_sim_toolkit_data->info_win, E_ED_DEINIT, 0, NULL);
+#else /* NEW_EDITOR */
+		SEND_EVENT (g_sim_toolkit_data->info_win, E_EDITOR_DEINIT, 0, NULL);
+#endif /* NEW_EDITOR */
+		g_sim_toolkit_data->info_win = NULL;
+	}
+}
+
+/*MC, SPR 940/2 uncommented function and changed param to char*  */
+void sat_destroy_TEXT_UCODE (/*cp_wstring_t*/char* str)
+{
+    if (str NEQ NULL)
+        {
+            FREE_MEMORY ((U8 *)((char *)str-SAT_LEN_SIZE), *(U16 *) ((char *)str-SAT_LEN_SIZE));
+            str = NULL;
+        }
+}
+/*******************************************************************************
+
+ $Function:  sat_add_unicode_tag_if_needed
+
+ $Description: Checks if string ought to be pre-pended with a unicode tag and if it ought to,
+ 				adds the tag (note, the string has to already have 2 "extra" chars allocated
+ 				to it; this normally happens in the create_TEXT_UCODE function)
+
+ $Returns:		none.
+
+ $Arguments:	string
+
+*******************************************************************************/
+/*SPR1257, new function*/
+void sat_add_unicode_tag_if_needed(char* string)
+{/*Add tag to Unicode strings so info dialogue displays them correctly*/
+			if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE&& string[0]!=0x80 )
+			{
+				char TempString[MAX_MSG_LEN_SGL];/*MC, SPR 1292, more sensible length*/
+#ifdef NEW_EDITOR /* SPR#1428 - SH - New Editor changes - new function to calculate length of unicode string */
+				memcpy(&TempString[2], GET_TEXT(TxtSoftCall), ATB_string_UCLength((USHORT*)string)*sizeof(USHORT));
+#else /* NEW_EDITOR */
+				memcpy(&TempString[2],  string, strlenUnicode((U16*) string));
+#endif /* NEW_EDITOR */
+
+				TempString[0] = 0x80;
+				TempString[1] = 0x7f;
+#ifdef NEW_EDITOR /* SPR#1428 - SH - New Editor changes - new function to calculate length of unicode string */
+				memcpy(string, TempString, (ATB_string_UCLength((USHORT*)TempString)+1)*sizeof(USHORT));
+#else /* NEW_EDITOR */
+				memcpy( string, TempString, strlenUnicode((U16*)TempString));
+#endif /* NEW_EDITOR */
+
+			}
+}
+
+/*******************************************************************************
+
+ $Function:  set_sat_redial_flag
+
+ $Description: Sets the SAT call 'with redial' flag.
+
+ $Returns:    none.
+
+ $Arguments:    Value to set flag to.
+
+ $History: SPR#1784 - DS - Created function.
+
+*******************************************************************************/
+void set_sat_redial_flag(UBYTE flag)
+{
+    TRACE_FUNCTION("set_sat_redial_flag()");
+
+    TRACE_EVENT_P1("flag %d", flag);
+
+    g_sim_toolkit_data->satCallWithRedial = flag;
+}
+
+/*******************************************************************************
+
+ $Function:  get_sat_redial_flag
+
+ $Description: Gets the value of the SAT call 'with redial' flag.
+
+ $Returns:    current value of redial flag.
+
+ $Arguments:    none.
+
+ $History: SPR#1784 - DS - Created function.
+
+*******************************************************************************/
+UBYTE get_sat_redial_flag(void)
+{
+    TRACE_FUNCTION("get_sat_redial_flag");
+
+    return (g_sim_toolkit_data->satCallWithRedial);
+}
+