FreeCalypso > hg > tcs211-l1-reconst
view g23m/condat/ms/src/bmi/MmiSimToolkit.c @ 349:ed3e588600c1 default tip
README update for the successful completion of the L1 reconstruction project
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 30 Oct 2017 18:03:24 +0000 |
parents | 509db1a7b7b8 |
children |
line wrap: on
line source
/******************************************************************************* 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); }