FreeCalypso > hg > fc-magnetite
view src/aci2/bmi/mmiSmsSend.c @ 454:8473cabf491d
aci3: AT@SPKR command enabled for D-Sample target like in aci2
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Mar 2018 00:02:36 +0000 |
parents | 3c2acfa1a72f |
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 $Module: SMS $File: MmiSmsSend.c $Revision: 1.0 $Author: Condat(UK) $Date: 25/10/00 ******************************************************************************** Description: Implementation template for MMI yyy dynamic menu handling ******************************************************************************** $History: MmiSmsSend.c Jan 18, 2006 REF: OMAPS00049169 x0pleela Description: MS sends SMS with RP wrong destination address. Anite TC 34.2.8 was failing. Solution: Removed the code where global variable reply_path_bit was reset to 0 in function SmsSend_SEND_mfw_cb(), switch case E_SMS_MO_AVAIL March 2, 2005 REF: CRR 11536 x0018858 Description: Reply path not supported while sending a reply. Solution: Added menu option for the reply path. Feb 02, 2005 REF: CRR 28479 xnkulkar Bug: While saving a SMS, if the user presses LSK while the 'Saved' dialog is displayed, the 'Saved' dialog doesn't get dismissed. Solution: Only RSK and Hangup keys dismiss the 'Saved' info screen and all other key presses are ignored. 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 Aug 16, 2004 REF: CRR 24281 Deepa M.D Bug:Go-lite Optimization Remove the unsed variable temp_conv_buffer Fix:Removed the unused variable static UBYTE temp_conv_buffer[MAX_MSG_LEN_ARRAY]. Sep 01, 2004 REF: CRR 21380 Deepa M.D Bug:Not getting proper display, When Messages Memory is Full. Fix:A new Dialog displaying "Full Not Saved" will be displayed, when memory is full and saving a message fails. Jul 13, 2004 REF: CRR 21615 Deepa M.D Bug:Message once entered into message editor not storing in memory. Fix:When a SMS is typed in the Editor, it is stored in a temporary buffer. When the user accesses the editor,the temporary buffer is copied into the Editor back. 25/10/00 Original Condat(UK) BMI version. $End *******************************************************************************/ #define MMI_SMSSEND_C #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 "prim.h" #include "mfw_mfw.h" #include "mfw_win.h" #include "mfw_kbd.h" /* SPR#1428 - SH - New Editor changes */ #ifndef NEW_EDITOR #include "mfw_edt.h" #endif #include "mfw_tim.h" #include "mfw_phb.h" #include "ksd.h" #include "psa.h" #include "mfw_sms.h" #include "mfw_icn.h" #include "mfw_mnu.h" #include "mfw_lng.h" #include "mfw_sat.h" #include "mfw_kbd.h" #include "mfw_nm.h" #include "mfw_str.h" #include "dspl.h" #include "MmiMain.h" #include "MmiDummy.h" #include "MmiMmi.h" #include "MmiDialogs.h" #include "MmiLists.h" #include "MmiMenu.h" #include "MmiSoftKeys.h" #include "phb.h" /* FDN */ #include "MmiBookUtils.h" #include "MmiBookShared.h" #include "mmiSmsMenu.h" #include "mmismssend.h" #include "mmiSmsIdle.h" #include "mmiSat_i.h" #include "mfw_ffs.h" #ifdef EASY_TEXT_ENABLED #include "MmiChineseInput.h" #endif /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR #include "ATBCommon.h" #include "ATBDisplay.h" #include "ATBEditor.h" #include "AUIEditor.h" #else /* NEW_EDITOR */ #ifdef EASY_TEXT_ENABLED #include "MmiLatinPredText.h" #endif /* EASY_TEXT_ENABLED */ #include "MmiEditor.h" #endif /* NEW_EDITOR */ #include "cus_aci.h" #include "prim.h" #ifndef PCM_2_FFS #include "pcm.h" #endif #include "mmiColours.h" /********************************************************************* ********************************************************************** DYNAMIC MENU WINDOW. DECLARATION ********************************************************************* **********************************************************************/ /* MZ 10202, 10758 */ static UBYTE* msgBuffer = NULL; /* General functions */ static void SmsSend_NBEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason); static int SmsSend_standard_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason); /* SPR#1428 - SH - New Editor: no longer required */ #ifndef NEW_EDITOR void SmsSend_loadEditDefault(T_EDITOR_DATA * edit_info); static void SmsSend_loadUCS2EditDefault(T_EDITOR_DATA *editor_data); #endif /* prototyps */ static T_MFW_HND SmsSend_SEND_create (T_MFW_HND parent); static void SmsSend_SEND_destroy (T_MFW_HND window); // Main callback function of the frame window static void SmsSend_main_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); // Sub-callback functions of the frame window associated to the different emitters static void SmsSend_SEND_exec_cb (T_MFW_HND win, USHORT event, void * parameter); static void SmsSend_PHBK_exec_cb (T_MFW_HND win, USHORT event, void * parameter); static void SmsSend_TEXTEDIT_exec_cb (T_MFW_HND win, USHORT event, void * parameter); static void SmsSend_NBEDIT_exec_cb (T_MFW_HND win, USHORT event, void * parameter); static void SmsSend_CENTREEDIT_exec_cb (T_MFW_HND win, USHORT event, void * parameter); // Callback functions of the various editors static void SmsSend_TEXTEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason); static void SmsSend_NBEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason); static void SmsSend_CENTREEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason); // Callback function for the MFW events static int SmsSend_SEND_mfw_cb (MfwEvt event, void *data); // This function initiate the sending of the SMS static int SmsSend_send_to_mfw (T_MFW_HND win); static T_MFW_HND parentWindow4SMS; UBYTE SmsSend_set_SrvCntr_number (T_MFW_SMS_INFO *config_data); UBYTE SmsSend_set_dcs_number (T_MFW_SMS_INFO *config_data); //Jul 13, 2004 REF: CRR 21615 Deepa M.D extern UBYTE TempTextBuffer[MAX_MSG_LEN_ARRAY]; extern UBYTE reply_path_bit ; /*************************************************** **** **** **** MANAGEMENT OF SMS OPTIONS **** **** **** ***************************************************/ typedef struct { /* administrative data */ T_MMI_CONTROL mmi_control; T_MFW_HND win; SHORT id; T_MFW_HND parent; /* associated handlers */ /* !!! **************************************** modify here **************************************** !!!*/ T_MFW_HND kbd; T_MFW_HND kbd_long; T_MFW_HND menu; /* !!! **************************************** end modify here **************************************** !!! */ /* internal data */ /* !!! **************************************** modify here **************************************** !!!*/ BOOL answer; /* TRUE == YES, FALSE == NO */ T_MFW_HND sms; T_MFW_HND dialog_win; T_SEND *parent_data; /* !!! **************************************** end modify here **************************************** !!! */ } T_SMSSEND_R_OPT; typedef struct { /* administrative data */ T_MMI_CONTROL mmi_control; T_MFW_HND win; T_MFW_HND parent; T_MFW_HND child_dialog;/* to keep the window of dialog */ T_MFW_HND sms_handler; SHORT id; /*SPR1991, removed edt_data: not needed*/ /* will call from idle or phonebook */ } T_SAVE; static T_MFW_HND SmsSend_SAVE_create (T_MFW_HND parent); static void SmsSend_SAVE_destroy (T_MFW_HND window); static void SmsSend_SAVE_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); static int SmsSend_SAVE_mfw_cb (MfwEvt event, void *info); static T_MFW_HND SmsSend_R_OPT_create (T_MFW_HND parent); static void SmsSend_R_OPT_destroy (T_MFW_HND window); static void SmsSend_R_OPT_StandardDialog(T_MFW_HND win, char *text, ULONG duration); static void SmsSend_R_OPT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); static int SmsSend_R_OPT_win_cb (MfwEvt e, MfwWin *w); static int SmsSend_R_OPT_mfw_cb (MfwEvt event, void *parameter); T_MFW_HND SmsSend_OPT_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr); static int SmsSend_R_OPT_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason); static void SmsSend_SCNBEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason); /* !!! **************************************** modify here **************************************** !!!*/ static int SmsSend_R_OPT_kbd_cb (MfwEvt e, MfwKbd *k); static int SmsSend_R_OPT_mnu_cb (MfwEvt e, MfwMnu *m); //Sep 01, 2004 REF: CRR 21380 Deepa M.D static UBYTE memfull=FALSE; //Variable used check whether E_SMS_MEM_FULL event has been received. /* !!! **************************************** end modify here **************************************** !!! */ /********************************************************************* ********************************************************************** DYNAMIC MENU WINDOW. CONTENTS DECLARATION ********************************************************************* **********************************************************************/ /* !!! **************************************** modify here **************************************** !!!*/ static int SmsSend_R_OPTExeSave(MfwMnu* m, MfwMnuItem* i); static int SmsSend_R_OPTExeSend(MfwMnu* m, MfwMnuItem* i); static int SmsSend_R_OPTExeDiscard(MfwMnu* m, MfwMnuItem* i); static const MfwMnuItem SmsSend_R_OPTItems [] = { {0,0,0,(char *)TxtSave,0,(MenuFunc)SmsSend_R_OPTExeSave,item_flag_none}, {0,0,0,(char *)TxtSend,0,(MenuFunc)SmsSend_R_OPTExeSend,item_flag_none}, {0,0,0,(char *)TxtDiscard,0,(MenuFunc)SmsSend_R_OPTExeDiscard,item_flag_none} }; static const MfwMnuAttr SmsSend_R_OPTAttrib = { &SmsSend_R_OPTArea, MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ -1, /* use default font */ (MfwMnuItem*)SmsSend_R_OPTItems, /* with these items */ sizeof(SmsSend_R_OPTItems)/sizeof(MfwMnuItem), /* number of items */ COLOUR_LIST_SMS, TxtNull, NULL, MNUATTRSPARE }; /*JVJ SPR1298 added a new output parameter to avoid stack overload */ void convertToUnicodeForOutput( UBYTE * ipText,UBYTE* outText, USHORT* outLen) { int i; UBYTE* temp_conv_buffer = outText; if (ipText[0] == 0x80) { //skip first 2 chars *outLen = 0; for (i=0;i<MAX_MSG_LEN/2;i++) { /*SPR 2175, bytes should not be swapped*/ temp_conv_buffer[i*2+1] = ipText[i*2+2+1]; temp_conv_buffer[i*2] =ipText[i*2+2]; if ((*outLen ==0) && (temp_conv_buffer[i*2] == 0x00) && (temp_conv_buffer[i*2+1] == 0x00)) *outLen = i*2+2; } if (*outLen == 0) {//Reached end of message without finding 0x0000 - set last word to 0x0000 *outLen = MAX_MSG_LEN; temp_conv_buffer[MAX_MSG_LEN-2] = 0x00; temp_conv_buffer[MAX_MSG_LEN-1] = 0x00; } return; } else { *outLen = strlen((char*)ipText); /*MC SPR1319, use string's actual length to convert to GSM alphabet*/ /*SPR2175, use new function for conversion*/ ATB_convert_String((char*)ipText, MFW_ASCII, *outLen, (char*)temp_conv_buffer, MFW_DCS_8bits,MAX_MSG_LEN , FALSE); return; } } /******************************************************************************* $Function: SmsSend_R_OPTExeSend $Description: Start the creation of the main window for SMS Send. $Returns: none $Arguments: m - Menu handle i - Menu item selected. *******************************************************************************/ static int SmsSend_R_OPTExeSend(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)win_data->user; /* access to data from parent */ T_SEND * parent_data = (T_SEND *)data->parent_data; #ifdef NEW_EDITOR T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */ #else T_EDITOR_DATA editor_data; #endif TRACE_EVENT("SmsSend_R_OPTExeSend"); /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_edit_SetDefault(&editor_data); AUI_edit_SetDisplay(&editor_data, PHNO_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT); AUI_edit_SetEvents(&editor_data, SMSSEND_ID_NBEDIT, FALSE, FOREVER, (T_AUI_EDIT_CB)SmsSend_NBEDIT_edit_cb); AUI_edit_SetTextStr(&editor_data, TxtSend, TxtDelete, TxtSmsEnterNumber, NULL); AUI_edit_SetAltTextStr(&editor_data, 1, TxtNames, TRUE, TxtSoftBack); AUI_edit_SetMode(&editor_data, 0, ED_CURSOR_UNDERLINE); AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, parent_data->edt_data.NumberBuffer, PHB_MAX_LEN); parent_data->number_editor = AUI_edit_Start(parent_data->win, &editor_data); #else /* NEW_EDITOR */ SmsSend_loadEditDefault(&editor_data); bookSetEditAttributes( PHNO_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0, (char *) parent_data->edt_data.NumberBuffer, /*MAX_SEARCH_CHAR*/NUMBER_LENGTH, &editor_data.editor_attr); editor_data.editor_attr.text = (char *)parent_data->edt_data.NumberBuffer; editor_data.editor_attr.size = PHB_MAX_LEN; editor_data.TextId = TxtSmsEnterNumber; editor_data.LeftSoftKey = TxtSend; editor_data.AlternateLeftSoftKey = TxtNames; editor_data.RightSoftKey = TxtDelete; editor_data.Identifier = SMSSEND_ID_NBEDIT ; editor_data.mode = E_EDIT_DIGITS_MODE; editor_data.Callback = (T_EDIT_CB)SmsSend_NBEDIT_edit_cb; editor_data.destroyEditor = FALSE; parent_data->number_editor = editor_start(parent_data->win, &editor_data); /* start the editor */ #endif /* NEW_EDITOR */ return 1; // ADDED BY RAVI - 28-11-2005 } /******************************************************************************* $Function: SmsSend_R_OPTExeDiscard $Description: $Returns: execution status $Arguments: m - Menu handle i - Menu item selected. *******************************************************************************/ static int SmsSend_R_OPTExeDiscard(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)win_data->user; /* access to data from parent */ T_SEND * parent_data = (T_SEND *)data->parent_data; TRACE_EVENT("SmsSend_R_OPTExeDiscard"); SmsSend_R_OPT_destroy(parent_data->options_win); #if defined(CHINESE_MMI) && defined(EASY_TEXT_ENABLED) if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) chinese_input_destroy(parent_data->text_editor); else #endif /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_edit_Destroy(parent_data->text_editor); #else /* NEW_EDITOR */ editor_destroy(parent_data->text_editor); #endif /* NEW_EDITOR */ /*SPR2453 check memory allocated before deallocating it */ if (msgBuffer !=NULL) { FREE_MEMORY((void*)msgBuffer,MAX_MSG_LEN_ARRAY); msgBuffer = NULL; } parent_data->text_editor = 0; SmsSend_SEND_destroy(parent_data->win); return 1; } /******************************************************************************* $Function: SmsSend_R_OPTExeSave $Description: called when the user press Call sender in the Option menu $Returns: execution status $Arguments: m - Menu handle i - Menu item selected. *******************************************************************************/ static int SmsSend_R_OPTExeSave(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)win_data->user; TRACE_EVENT("SmsRead_R_OPTExeCallSender"); if (!smsidle_get_ready_state()) { // SMS init processing not ready to access SIM to store the SMS mmi_dialog_information_screen(win, 0,"Not Ready", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_SAVE_NOT_READY); // Recreate the editor on dialog callback } else //END TB // Start a save window and provide it a T_SmsUserData structure (in the future, will allow to save easily text but also number...) { SmsSend_SAVE_start(data->parent_data->win, &(data->parent_data->edt_data)); SmsSend_R_OPT_destroy(win); } return 1; } /******************************************************************************* $Function: SmsSend_OPT_start $Description: called when the user press Call sender in the Option menu $Returns: execution status $Arguments: parent_window -parent window handle menuAttr - Menu attributes. *******************************************************************************/ T_MFW_HND SmsSend_OPT_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) { T_MFW_HND win; TRACE_FUNCTION ("SmsSend_OPT_start()"); win = SmsSend_R_OPT_create (parent_window); if (win NEQ NULL) { SEND_EVENT (win, E_INIT, NULL, (void *)menuAttr); } return win; } /******************************************************************************* $Function: SmsSend_R_OPT_create $Description: Create the Option window $Returns: mfw window handle $Arguments: parent_window -parent window handle *******************************************************************************/ static T_MFW_HND SmsSend_R_OPT_create(MfwHnd parent_window) { T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)ALLOC_MEMORY (sizeof (T_SMSSEND_R_OPT)); T_MFW_WIN * win; TRACE_FUNCTION ("SmsSend_R_OPT_create()"); /* * Create window handler */ data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)SmsSend_R_OPT_win_cb); if (data->win EQ NULL) { return NULL; } /* * connect the dialog data to the MFW-window */ data->mmi_control.dialog = (T_DIALOG_FUNC)SmsSend_R_OPT_exec_cb; data->mmi_control.data = data; win = ((T_MFW_HDR *)data->win)->data; win->user = (void *)data; data->parent = parent_window; /* * return window handle */ return data->win; } /******************************************************************************* $Function: SmsSend_R_OPT_destroy $Description: Destroy the Option window $Returns: mfw window handle $Arguments: own_window - current window *******************************************************************************/ static void SmsSend_R_OPT_destroy(MfwHnd own_window) { T_MFW_WIN * win_data; T_SMSSEND_R_OPT * data; TRACE_FUNCTION ("SmsSend_R_OPT_destroy()"); if (own_window) { win_data = ((T_MFW_HDR *)own_window)->data; data = (T_SMSSEND_R_OPT *)win_data->user; if (data) { /* * Delete WIN handler */ data->parent_data->options_win = 0; win_delete (data->win); /* * Free Memory */ FREE_MEMORY ((void *)data, sizeof (T_SMSSEND_R_OPT)); } else { TRACE_EVENT ("SmsSend_R_OPT_destroy() called twice"); } } } /******************************************************************************* $Function: SmsSend_R_OPT_exec_cb $Description: Exec callback function for the Option window $Returns: none $Arguments: win - current window event - event id value - unique id parameter - optional data. *******************************************************************************/ void SmsSend_R_OPT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) /* callback handler for events sent to to trigger execution */ { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)win_data->user; // T_MFW_HND * l_parent; // RAVI // SHORT l_id; // RAVI T_MFW_HDR * parent = data->parent; T_MFW_WIN * win_data2 = ((T_MFW_HDR *)parent)->data; T_SEND * parent_data = (T_SEND *)win_data2->user; // T_MFW_EVENT MfwEvents; // RAVI TRACE_FUNCTION ("SmsSend_R_OPT_exec_cb()"); switch (event) { case E_INIT: TRACE_EVENT("SmsSend_R_OPT_exec_cb() Event:5.E_INIT"); /* initialization of administrative data */ data->parent_data = parent_data; data->id = value; data->kbd = kbdCreate(data->win,KEY_ALL, (MfwCb)SmsSend_R_OPT_kbd_cb); data->kbd_long = kbdCreate(data->win,KEY_ALL|KEY_LONG,(MfwCb)SmsSend_R_OPT_kbd_cb); data->menu = mnuCreate(data->win,(MfwMnuAttr*)&SmsSend_R_OPTAttrib, E_MNU_ESCAPE, (MfwCb)SmsSend_R_OPT_mnu_cb); mnuLang(data->menu,mainMmiLng); /* put the (new) dialog window on top of the window stack */ mnuUnhide(data->menu); winShow(win); break; default: return; } } /******************************************************************************* $Function: SmsSend_R_OPT_mnu_cb $Description: Menu callback function for the Option window $Returns: none $Arguments: e - event id m - menu handle *******************************************************************************/ static int SmsSend_R_OPT_mnu_cb (MfwEvt e, MfwMnu *m) { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)win_data->user; // T_MFW_HND * l_parent; // RAVI // SHORT l_id; // RAVI TRACE_FUNCTION ("SmsRead_R_OPT_mnu_cb()"); switch (e) { case E_MNU_ESCAPE: /* back to previous menu */ SmsSend_R_OPT_destroy(data->win); break; default: /* in mnuCreate() only E_MNU_ESCAPE has been enabled! */ return MFW_EVENT_REJECTED; } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: SmsSend_R_OPT_win_cb $Description: Window callback function for the Option window $Returns: execution status $Arguments: e - event id w - window handle *******************************************************************************/ static int SmsSend_R_OPT_win_cb (MfwEvt e, MfwWin *w) { TRACE_FUNCTION ("SmsSend_R_OPT_win_cb()"); switch (e) { case MfwWinVisible: /* window is visible */ dspl_ClearAll(); displaySoftKeys(TxtSoftSelect,TxtSoftBack); break; case MfwWinFocussed: /* input focus / selected */ case MfwWinDelete: /* window will be deleted */ default: return MFW_EVENT_REJECTED; } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: SmsSend_R_OPT_kbd_cb $Description: Exec callback function for the Option window $Returns: execution status $Arguments: e - event id k - keyboard info *******************************************************************************/ static int SmsSend_R_OPT_kbd_cb (MfwEvt e, MfwKbd *k) /* SmsRead_R_OPT keyboard event handler */ { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_SMSSEND_R_OPT * data = (T_SMSSEND_R_OPT *)win_data->user; TRACE_FUNCTION ("SmsSend_R_OPT_kbd_cb()"); if (e & KEY_LONG) { switch (k->code) { case KCD_HUP: /* back to previous menu */ mnuEscape(data->menu); break; case KCD_RIGHT: /* Power Down */ return MFW_EVENT_REJECTED; /* handled by idle */ default: /* no response to all other keys */ return MFW_EVENT_CONSUMED; } } else { switch (k->code) { case KCD_MNUUP: /* highlight previous entry */ mnuUp(data->menu); break; case KCD_MNUDOWN: /* highlight next entry */ mnuDown(data->menu); break; case KCD_MNUSELECT: case KCD_LEFT: /* activate this entry */ mnuSelect(data->menu); break; case KCD_HUP: /* back to previous menu */ case KCD_RIGHT: /* back to previous menu */ mnuEscape(data->menu); break; default: /* no response to all other keys */ return MFW_EVENT_CONSUMED; } } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: SmsSend_SEND_start $Description: Create SMS send window $Returns: execution status $Arguments: parent_window - parent window. UserData - SMS data *******************************************************************************/ T_MFW_HND SmsSend_SEND_start(T_MFW_HND parent_window, T_SmsUserData *UserData) { T_MFW_HND win; TRACE_FUNCTION ("SmsSend_SEND_start()"); parentWindow4SMS = parent_window; win = SmsSend_SEND_create (parent_window); if (win NEQ NULL) { SEND_EVENT (win, E_INIT, SEND_ID, (void *)UserData); } return win; } /******************************************************************************* $Function: SmsSend_SEND_create $Description: Create a window for entering the text $Returns: window handle $Arguments: parent_window - parent window. *******************************************************************************/ static T_MFW_HND SmsSend_SEND_create(MfwHnd parent_window) { T_SEND * data = (T_SEND *)ALLOC_MEMORY (sizeof (T_SEND)); T_MFW_WIN * win; TRACE_FUNCTION ("SmsSend_SEND_create()"); // Create window handler data->win = win_create (parent_window, 0, E_WIN_VISIBLE, NULL); if (data->win EQ NULL) { return NULL; } // connect the dialog data to the MFW-window data->mmi_control.dialog = (T_DIALOG_FUNC)SmsSend_main_exec_cb; data->mmi_control.data = data; win = ((T_MFW_HDR *)data->win)->data; win->user = (MfwUserDataPtr)data; data->parent = parent_window; data->id = SEND_ID; winShow(data->win); return data->win; } /******************************************************************************* $Function: SmsSend_SEND_destroy $Description: Destroy the windows for entering the text $Returns: none $Arguments: own_window - window. *******************************************************************************/ static void SmsSend_SEND_destroy(MfwHnd own_window) { T_MFW_WIN * win_data; T_SEND * data = NULL; TRACE_FUNCTION ("SmsSend_SEND_destroy()"); if (own_window) { win_data = ((T_MFW_HDR *)own_window)->data; if (win_data != NULL) data = (T_SEND *)win_data->user; if (data) { // Delete sms handle if (data->sms_handler != NULL) sms_delete(data->sms_handler); if (data->child_dialog != NULL) { TRACE_EVENT("child_dialog not deleted?"); } if (data->text_editor != NULL) { TRACE_EVENT("current_editor not deleted?"); } // Delete WIN handler win_delete (data->win); // Free Memory FREE_MEMORY ((void *)data, sizeof (T_SEND)); //win_data->user = NULL; } else { TRACE_EVENT ("SmsSend_SEND_destroy() called twice"); } } } /******************************************************************************* $Function: SmsSend_main_exec_cb $Description: Main callback handler for events sent to to trigger execution $Returns: none $Arguments: win - current window event - event id identifier - unique id parameter - optional data. *******************************************************************************/ static void SmsSend_main_exec_cb (T_MFW_HND win, USHORT event, SHORT identifier, void * parameter) { TRACE_FUNCTION ("SmsSend_main_exec_cb()"); /* In this field we get the identifier of the window sending the event */ switch (identifier) { case SEND_ID: case SAVE_ID: // events from the SAVE window are also managed in the SEND callback case SMSSEND_ID_SAVE_NOT_READY: SmsSend_SEND_exec_cb(win, event, parameter); break; case PHBK_ID: SmsSend_PHBK_exec_cb(win, event, parameter); break; case SMSSEND_ID_TEXTEDIT: SmsSend_TEXTEDIT_exec_cb(win, event, parameter); break; case SMSSEND_ID_SC_NOT_READY: /* MZ cq11074 delete the info dialog window. */ SmsSend_SEND_destroy(win); break; case SMSSEND_ID_NBEDIT: SmsSend_NBEDIT_exec_cb(win, event, parameter); break; case SMSSEND_ID_CENTREEDIT: SmsSend_CENTREEDIT_exec_cb(win, event, parameter); break; default: TRACE_EVENT("Err: Default"); break; } } /******************************************************************************* $Function: SmsSend_SEND_exec_cb $Description: Callback handler for events sent by the window itself $Returns: none $Arguments: win - current window event - event id parameter - optional data. *******************************************************************************/ static void SmsSend_SEND_exec_cb(T_MFW_HND win, USHORT event, void *parameter) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_SEND * data = (T_SEND *)win_data->user; T_MFW_SMS_INFO sms_parameter; T_MFW_EVENT MfwEvents; // T_DISPLAY_DATA display_info; // RAVI /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR T_AUI_EDITOR_DATA editor_data; USHORT size; #else /* NEW_EDITOR */ T_EDITOR_DATA editor_data; #endif /* NEW_EDITOR */ TRACE_FUNCTION ("SmsSend_SEND_exec_cb()"); switch (event) { case E_INIT: /* Create a sms handler to receive events */ MfwEvents = E_SMS_ERR | E_SMS_MO_AVAIL; data->sms_handler = sms_create(data->win,MfwEvents,(MfwCb)SmsSend_SEND_mfw_cb); data->child_dialog = NULL; /* store NUMBER and TEXT */ memcpy(&(data->edt_data), (T_SmsUserData *)parameter, sizeof(T_SmsUserData)); /* in case of reply the sms we have to use the service center number from the caller */ TRACE_EVENT_P1("data->edt_data.called_from_reply_item is %d",data->edt_data.called_from_reply_item); if (data->edt_data.called_from_reply_item EQ FALSE) { TRACE_EVENT("RP false"); // The SMS center is initialized to '\0' data->edt_data.CentreBuffer[0] = '\0'; } else { TRACE_EVENT("RP true"); } /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR #if defined(CHINESE_MMI) && defined(EASY_TEXT_ENABLED) /* If chinese is selected and we're opening up a new message * or a unicode message, use the chinese editor */ if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE && (data->edt_data.TextBuffer[0]==0x00 || data->edt_data.TextBuffer[0] ==0x80)) { T_CHINESE_DATA chinese_data; chinese_data.TextString = (char*) data->edt_data.TextBuffer; chinese_data.TextString[0] = 0x80; chinese_data.TextString[1] = MAX_MSG_LEN; chinese_data.Callback = (T_AUI_EDIT_CB)SmsSend_TEXTEDIT_edit_cb; chinese_data.Identifier = SMSSEND_ID_TEXTEDIT ; chinese_data.LeftSoftKey = TxtSoftOptions; chinese_data.DestroyEditor = FALSE; if(FFS_flashData.ConcatenateStatus == TRUE) chinese_data.EditorSize = (USHORT)((MAX_MSG_LEN_CHI)/2 - 1); else chinese_data.EditorSize = (USHORT)((MAX_MSG_LEN_SGL_CHI)/2 - 1); data->text_editor = chinese_input(win, &chinese_data); } else #endif /* CHINESE_MMI && EASY_TEXT_ENABLED */ /* We're opening up an ascii or unicode latin editor */ { AUI_edit_SetDefault(&editor_data); /* Set the appropriate mode if easy text is enabled */ #ifdef EASY_TEXT_ENABLED AUI_edit_SetMode(&editor_data, ED_MODE_ALPHA | ED_MODE_PREDTEXT, ED_CURSOR_BAR); #else /* EASY_TEXT_ENABLED */ AUI_edit_SetMode(&editor_data, ED_MODE_ALPHA, ED_CURSOR_BAR); #endif /* EASY_TEXT_ENABLED */ /* Check if concatenated SMS is enabled */ if(FFS_flashData.ConcatenateStatus == TRUE) size = MAX_MSG_LEN; else size = MAX_MSG_LEN_SGL; /* Set the DCS type of the message */ if (data->edt_data.TextBuffer[0]==0x80) { TRACE_EVENT("Unicode SMS message starting 0x80"); AUI_edit_SetBuffer(&editor_data, ATB_DCS_UNICODE, &data->edt_data.TextBuffer[2], size/2); } else { TRACE_EVENT("Normal SMS message"); AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, data->edt_data.TextBuffer, size); } AUI_edit_SetDisplay(&editor_data, ZONE_FULL_SK_TITLE_SCROLL, COLOUR_EDITOR, EDITOR_FONT); AUI_edit_SetEvents(&editor_data, SMSSEND_ID_TEXTEDIT, FALSE, FOREVER, (T_AUI_EDIT_CB)SmsSend_TEXTEDIT_edit_cb); AUI_edit_SetTextStr(&editor_data, TxtSoftOptions, TxtDelete, NULL, NULL); AUI_edit_SetAltTextStr(&editor_data, 0, NULL, TRUE, TxtSoftBack); data->text_editor = AUI_edit_Start(win,&editor_data); /* start the editor */ } #else /* NEW_EDITOR */ /* END OF NEW EDITOR CODE */ /*SPR 1434*/ #if defined(CHINESE_MMI) && defined(EASY_TEXT_ENABLED) /*MC SPR1242, merged section in from b-sample build*/ if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) { T_CHINESE_DATA chinese_data; chinese_data.TextString = (char*) data->edt_data.TextBuffer; /*if empty or unicode string, add unicode tag*/ if(chinese_data.TextString[0] ==0x00 || chinese_data.TextString[0] ==0x80) { chinese_data.TextString[0] = 0x80; chinese_data.TextString[1] = MAX_MSG_LEN; chinese_data.Callback = (T_EDIT_CB)SmsSend_TEXTEDIT_edit_cb; chinese_data.Identifier = SMSSEND_ID_TEXTEDIT ; chinese_data.LeftSoftKey = TxtSoftOptions; chinese_data.DestroyEditor = FALSE; if(FFS_flashData.ConcatenateStatus == TRUE) chinese_data.EditorSize = (USHORT)((MAX_MSG_LEN_CHI)/2 - 1); else chinese_data.EditorSize = (USHORT)((MAX_MSG_LEN_SGL_CHI)/2 - 1); data->text_editor = chinese_input(win, &chinese_data); } else/*if ascii string use ASCII editor rather than converting to unicode, MC, SPR 1292*/ { SmsSend_loadEditDefault(&editor_data); editor_data.editor_attr.text = (char *)data->edt_data.TextBuffer; //1227 - API - 05/10/02 - Size of Editor dependent on whether Conc_Switch is TRUE or FALSE if(FFS_flashData.ConcatenateStatus == TRUE) editor_data.editor_attr.size = MAX_MSG_LEN; else editor_data.editor_attr.size = MAX_MSG_LEN_SGL; editor_data.min_enter = 0; editor_data.LeftSoftKey = TxtSoftOptions; editor_data.AlternateLeftSoftKey = TxtSoftOptions; editor_data.RightSoftKey = TxtDelete; editor_data.Identifier = SMSSEND_ID_TEXTEDIT ; editor_data.Callback = (T_EDIT_CB)SmsSend_TEXTEDIT_edit_cb; editor_data.destroyEditor = FALSE; data->text_editor = editor_start(win,&editor_data); /* start the editor */ } } else #endif /* CHINESE_MMI && EASY_TEXT_ENABLED */ { #ifdef EASY_TEXT_ENABLED editor_data.hide = FALSE; editor_data.TextId = '\0'; editor_data.Identifier = 0; editor_data.TextString = NULL; editor_data.timeout = FOREVER; // Avoid to return empty strings editor_data.mode = ALPHA_MODE; editor_attr_init_pred(&editor_data.editor_attr, ZONE_FULL_SK_TITLE, edtCurBar1, NULL, (char *)data->edt_data.TextBuffer, MAX_MSG_LEN, COLOUR_EDITOR); #else /* EASY_TEXT_ENABLED */ SmsSend_loadEditDefault(&editor_data); editor_attr_init(&editor_data.editor_attr, ZONE_FULL_SK_TITLE, edtCurBar1, NULL, (char *)data->edt_data.TextBuffer, MAX_MSG_LEN, COLOUR_EDITOR); #endif /* EASY_TEXT_ENABLED */ editor_data.editor_attr.text = (char *)data->edt_data.TextBuffer; //1227 - API - 05/10/02 - Size of Editor dependent on whether Conc_Switch is TRUE or FALSE if(FFS_flashData.ConcatenateStatus == TRUE) editor_data.editor_attr.size = MAX_MSG_LEN; else editor_data.editor_attr.size = MAX_MSG_LEN_SGL; editor_data.min_enter = 0; editor_data.LeftSoftKey = TxtSoftOptions; editor_data.AlternateLeftSoftKey = TxtSoftOptions; editor_data.RightSoftKey = TxtDelete; editor_data.Identifier = SMSSEND_ID_TEXTEDIT ; editor_data.Callback = (T_EDIT_CB)SmsSend_TEXTEDIT_edit_cb; editor_data.destroyEditor = FALSE; data->text_editor = editor_start(win,&editor_data); /* start the editor */ } #endif /* NEW_EDITOR */ /* Marcus: Issue 1170: 07/10/2002: Start */ /* * Set whether status requests are to be indicated according to the * value of the srr field of the T_MFW_SMS_INFO structure. */ SmsSend_get_config_data(&sms_parameter); switch (sms_parameter.srr) { case SMS_NOT_REQUESTED_SRR: sms_set_mt_ind(MT_IND_SRR_OFF); break; case SMS_REQUESTED_SRR: sms_set_mt_ind(MT_IND_SRR_ON); break; default: TRACE_EVENT_P1("default: sms_parameter.srr = %d", sms_parameter.srr); break; } /* Marcus: Issue 1170: 07/10/2002: Start */ break; case E_RETURN: break; case E_EXIT: if(data->sc_number_editor != NULL) { //GW Read config data - then set dcs parameter SmsSend_get_config_data(&sms_parameter); if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) { //We have a chinese text message - set dcs parameter to sms_parameter.dcs = MFW_DCS_UCS2; } else { sms_parameter.dcs = MFW_DCS_7bits; } // copy the SC number into the sms_parameter variable. strcpy((char*)sms_parameter.sc_addr,(char*)data->edt_data.CentreBuffer); // store the Service center number into the SIM. SmsSend_set_SrvCntr_number (&sms_parameter); SmsSend_set_dcs_number (&sms_parameter); /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_edit_Destroy(data->sc_number_editor); #else /* NEW_EDITOR */ editor_destroy(data->sc_number_editor); #endif /* NEW_EDITOR */ data->sc_number_editor = NULL; } break; default: TRACE_EVENT("Err: Default"); break; } } /******************************************************************************* $Function: SmsSend_PHBK_exec_cb $Description: Callback handler for events sent by the phonebook window $Returns: none $Arguments: win - current window event - event id parameter - optional data. *******************************************************************************/ static void SmsSend_PHBK_exec_cb(T_MFW_HND win, USHORT event, void *parameter) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_SEND * data = (T_SEND *)win_data->user; /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR T_ATB_TEXT text; /* Used to insert phone numbers into editors */ #endif TRACE_FUNCTION ("SmsSend_PHBK_exec_cb()"); switch (event) { /* SPR#1428 - SH - New Editor changes. Insert phone number into editor */ #ifdef NEW_EDITOR case SMS_PHBK_NUMBER: /* Normal phone number */ case SMSSC_PHBK_NUMBER: /* Service centre number */ text.dcs = ATB_DCS_ASCII; text.len = strlen((char *)parameter); text.data = (UBYTE *)parameter; SEND_EVENT(data->number_editor, E_ED_INSERT, 0, (void *)&text); break; #else /* NEW_EDITOR */ case SMS_PHBK_NUMBER: memcpy(data->edt_data.NumberBuffer, (char *)parameter, MINIMUM(sizeof(data->edt_data.NumberBuffer) - 1, strlen((char *)parameter)+1)); break; /* SPR#1428 - SH - Insert service centre number into editor */ case SMSSC_PHBK_NUMBER: memcpy(data->edt_data.CentreBuffer, (char *)parameter, MINIMUM(sizeof(data->edt_data.CentreBuffer) - 1, strlen((char *)parameter)+1)); break; #endif /* NEW_EDITOR */ default: TRACE_EVENT("Err: Default"); break; } } /******************************************************************************* $Function: SmsSend_TEXTEDIT_exec_cb $Description: Callback handler for events sent by the TEXTEDIT editor $Returns: none $Arguments: win - current window event - event id parameter - optional data. *******************************************************************************/ static void SmsSend_TEXTEDIT_exec_cb(T_MFW_HND win, USHORT event, void *parameter) { TRACE_FUNCTION ("SmsSend_TEXTEDIT_exec_cb()"); switch (event) { case E_RETURN: // Destroy itself SmsSend_SEND_destroy(win); break; default: TRACE_EVENT("Err: Default"); break; } } /******************************************************************************* $Function: SmsSend_NBEDIT_exec_cb $Description: Callback handler for events sent by the NBEDIT editor $Returns: none $Arguments: win - current window event - event id parameter - optional data. *******************************************************************************/ static void SmsSend_NBEDIT_exec_cb(T_MFW_HND win, USHORT event, void *parameter) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_SEND * data = (T_SEND *)win_data->user; T_MFW_SMS_INFO sms_parameter; #ifdef NEW_EDITOR T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */ #else T_EDITOR_DATA editor_data; #endif TRACE_FUNCTION ("SmsSend_NBEDIT_exec_cb()"); switch (event) { case E_INIT: if ((phb_get_mode() EQ PHB_RESTRICTED) && (phb_check_number(data->edt_data.NumberBuffer) EQ MFW_PHB_FAIL)) { mmi_dialog_information_screen(win,TxtNotImplemented, "NOT ALLOWED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_ALLOWED); } else { if (!smsidle_get_ready_state()) { // SMS init processing not ready to access SIM to store the SMS /* MZ cq11074 do not invoke the editor until SMS Service Centre number has been read, display info dialog. */ mmi_dialog_information_screen(win,TxtPleaseWait, "NOT READY", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_SC_NOT_READY ); return; // Recreate the editor on dialog callback } else { //END TB // First check if the SMS center is specified SmsSend_get_config_data(&sms_parameter); if(sms_parameter.sc_addr[0] EQ '\0') { memset(data->edt_data.CentreBuffer,0,NUMBER_LENGTH); } else { strncpy((char *)data->edt_data.CentreBuffer, (char *)sms_parameter.sc_addr, NUMBER_LENGTH); } } } /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_edit_SetDefault(&editor_data); AUI_edit_SetDisplay(&editor_data, CENTRE_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT); AUI_edit_SetEvents(&editor_data, 0, FALSE, FOREVER, (T_AUI_EDIT_CB)SmsSend_SCNBEDIT_edit_cb); AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtServiceCentre, NULL); AUI_edit_SetAltTextStr(&editor_data, 1, TxtNames, TRUE, TxtSoftBack); AUI_edit_SetMode(&editor_data, 0, ED_CURSOR_UNDERLINE); AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, data->edt_data.CentreBuffer, NUMBER_LENGTH); data->number_editor = AUI_edit_Start(data->win, &editor_data); #else /* NEW_EDITOR */ SmsSend_loadEditDefault(&editor_data); bookSetEditAttributes( CENTRE_EDITOR, COLOUR_EDITOR_XX,0,edtCurBar1, 0, (char *) data->edt_data.CentreBuffer, NUMBER_LENGTH, &editor_data.editor_attr); editor_data.TextId = TxtServiceCentre; editor_data.editor_attr.text = (char *)data->edt_data.CentreBuffer; editor_data.editor_attr.size = NUMBER_LENGTH; editor_data.LeftSoftKey = TxtSoftOK; editor_data.AlternateLeftSoftKey = TxtNames; editor_data.RightSoftKey = TxtDelete; editor_data.Identifier = NULL; editor_data.Callback = (T_EDIT_CB)SmsSend_SCNBEDIT_edit_cb; editor_data.mode = E_EDIT_DIGITS_MODE; editor_data.destroyEditor = FALSE; data->number_editor = editor_start(data->win,&editor_data); #endif /* NEW_EDITOR */ /* start the editor */ break; default: TRACE_EVENT("Err: Default"); break; } } /******************************************************************************* $Function: SmsSend_CENTREEDIT_exec_cb $Description: Callback handler for events sent by the CENTREEDIT editor $Returns: none $Arguments: win - current window event - event id parameter - optional data. *******************************************************************************/ static void SmsSend_CENTREEDIT_exec_cb(T_MFW_HND win, USHORT event, void *parameter) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_SEND * data = (T_SEND *)win_data->user; #ifdef NEW_EDITOR T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */ #else T_EDITOR_DATA editor_data; #endif TRACE_FUNCTION ("SmsSend_CENTREEDIT_exec_cb()"); switch (event) { case E_INIT: /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_edit_SetDefault(&editor_data); AUI_edit_SetDisplay(&editor_data, CENTRE_EDITOR, COLOUR_EDITOR_XX, EDITOR_FONT); AUI_edit_SetEvents(&editor_data, *(USHORT*)parameter, TRUE, FOREVER, (T_AUI_EDIT_CB)SmsSend_CENTREEDIT_edit_cb); AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtServiceCentre, NULL); AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack); AUI_edit_SetMode(&editor_data, 0, ED_CURSOR_UNDERLINE); AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, data->edt_data.CentreBuffer, PHB_MAX_LEN); data->sc_number_editor = AUI_edit_Start(data->win, &editor_data); #else /* NEW_EDITOR */ SmsSend_loadEditDefault(&editor_data); bookSetEditAttributes( CENTRE_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0, (char *) data->edt_data.CentreBuffer, NUMBER_LENGTH, &editor_data.editor_attr); editor_data.TextId = TxtServiceCentre; editor_data.editor_attr.text = (char *)data->edt_data.CentreBuffer; editor_data.editor_attr.size = PHB_MAX_LEN; editor_data.LeftSoftKey = TxtSoftOK; editor_data.RightSoftKey = TxtDelete; editor_data.Identifier = *(USHORT*)parameter; editor_data.Callback = (T_EDIT_CB)SmsSend_CENTREEDIT_edit_cb; editor_data.mode = E_EDIT_DIGITS_MODE; editor_data.destroyEditor = TRUE ; data->sc_number_editor = editor_start(data->win,&editor_data); /* start the Service Centre Number editor */ #endif /* NEW_EDITOR */ break; case E_RETURN: break; default: TRACE_EVENT("Err: Default"); return; } } /******************************************************************************* $Function: SmsSend_TEXTEDIT_edit_cb $Description: Callback function for the text editor $Returns: none $Arguments: win - current window Identifier - unique id reason - event cause *******************************************************************************/ static void SmsSend_TEXTEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_SEND * data = (T_SEND *)win_data->user; TRACE_FUNCTION ("SmsSend_TEXTEDIT_edit_cb()"); // Jul 13, 2004 REF: CRR 21615 Deepa M.D //Copy the sms content from the editor buffer into the temporary buffer. memcpy(TempTextBuffer,data->edt_data.TextBuffer,MAX_MSG_LEN); switch (reason) { case INFO_KCD_ALTERNATELEFT: case INFO_KCD_LEFT: data->options_win = SmsSend_OPT_start(win,(MfwMnuAttr*)&SmsSend_R_OPTAttrib); /* Create number editor: -the editor min length is 1 */ break; case INFO_KCD_RIGHT: case INFO_KCD_HUP: // Commit suicide so come back to previous menu #if defined(CHINESE_MMI) && defined(EASY_TEXT_ENABLED) if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) chinese_input_destroy(data->text_editor); else #endif /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_edit_Destroy(data->text_editor); #else /* NEW_EDITOR */ editor_destroy(data->text_editor); #endif /* NEW_EDITOR */ data->text_editor = 0; SmsSend_SEND_destroy(data->win); break; default: TRACE_EVENT("Err: Default"); break; } } /******************************************************************************* $Function: SmsSend_NBEDIT_edit_cb $Description: Callback function for the number editor $Returns: none $Arguments: win - current window Identifier - unique id reason - event cause *******************************************************************************/ static void SmsSend_NBEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_SEND * data = (T_SEND *)win_data->user; T_MFW_SMS_INFO sms_parameter; USHORT parameter; TRACE_FUNCTION ("SmsSend_NBEDIT_edit_cb()"); switch (reason) { case INFO_KCD_LEFT: // Check if we can go to the next stage if ((phb_get_mode() EQ PHB_RESTRICTED) && (phb_check_number(data->edt_data.NumberBuffer) EQ MFW_PHB_FAIL)) { mmi_dialog_information_screen(win,TxtNotImplemented, "NOT ALLOWED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_ALLOWED); } else { if (!smsidle_get_ready_state()) { // SMS init processing not ready to access SIM to store the SMS mmi_dialog_information_screen(win,TxtPleaseWait, "NOT READY", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_SC_NOT_READY); // Recreate the editor on dialog callback } else { //END TB // First check if the SMS center is specified SmsSend_get_config_data(&sms_parameter); if(sms_parameter.sc_addr[0] EQ '\0') { //setup identifier value. parameter = SMSSEND_ID_CENTREEDIT; SmsSend_CENTREEDIT_exec_cb(win, E_INIT,(void*)¶meter); } else { /*NM FTA 34.2.8*/ if (data->edt_data.called_from_reply_item EQ FALSE) { TRACE_EVENT("take the own serviceCenternum"); strcpy((char *)data->edt_data.CentreBuffer, (char *)sms_parameter.sc_addr); { /***************************Go-lite Optimization changes Start***********************/ // Aug 16, 2004 REF: CRR 24323 Deepa M.D TRACE_EVENT_P1("serviceNr:%s",data->edt_data.CentreBuffer); /***************************Go-lite Optimization changes end***********************/ } } else { TRACE_EVENT("from the caller, reply"); /* in case of reply the sms, we took already the the service center number from the caller !!!*/ { /***************************Go-lite Optimization changes Start***********************/ // Aug 16, 2004 REF: CRR 24323 Deepa M.D TRACE_EVENT_P1("serviceNr:%s",data->edt_data.CentreBuffer); /***************************Go-lite Optimization changes end***********************/ } } /*NM FTA 34.2.8*/ SmsSend_send_to_mfw(win); } } } /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_edit_Destroy(data->number_editor); #else /* NEW_EDITOR */ editor_destroy(data->number_editor); #endif /* NEW_EDITOR */ data->number_editor = 0; SmsSend_R_OPT_destroy(data->options_win); break; case INFO_KCD_ALTERNATELEFT: bookPhonebookStart(win, PhbkFromSms); break; case INFO_KCD_RIGHT: case INFO_KCD_HUP: /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_edit_Destroy(data->number_editor); #else /* NEW_EDITOR */ editor_destroy(data->number_editor); #endif /* NEW_EDITOR */ data->number_editor = 0; break; default: TRACE_EVENT("Err: Default"); break; } } /******************************************************************************* $Function: SmsSend_CENTREEDIT_edit_cb $Description: Callback function for the center number editor $Returns: none $Arguments: win - current window Identifier - unique id reason - event cause *******************************************************************************/ static void SmsSend_CENTREEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason) { // T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; // RAVI // T_SEND * data = (T_SEND *)win_data->user; // RAVI TRACE_FUNCTION ("SmsSend_CENTREEDIT_edit_cb()"); switch (reason) { case INFO_KCD_LEFT: TRACE_EVENT("SmsSend_CENTREEDIT_edit_cb,INFO_KCD_LEFT "); if (Identifier==SMSSEND_ID_CENTREEDIT) { TRACE_EVENT("SmsSend_CENTREEDIT_edit_cb,INFO_KCD_LEFT Send to mfw "); //Submit the SMS message to the service centre. SmsSend_send_to_mfw(win); } break; case INFO_KCD_RIGHT: case INFO_KCD_HUP: /* send an event that will lead to the display of the number edition window */ SEND_EVENT (win, E_RETURN, SMSSEND_ID_CENTREEDIT, NULL); break; default: break; } } /******************************************************************************* $Function: SmsSend_SEND_mfw_cb $Description: Callback functyion for handling SMS events from the MFW. $Returns: execution status $Arguments: event - window event id info - optional info reason - event cause *******************************************************************************/ static int SmsSend_SEND_mfw_cb (MfwEvt event, void *info) { /* get the top window*/ T_MFW_HND win = mfw_parent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_SEND * data = (T_SEND *)win_data->user; TRACE_FUNCTION ("SmsSend_SEND_mfw_cb()"); switch (event) { case E_SMS_MO_AVAIL: TRACE_EVENT ("Sent was successful -> ok"); /* Sent was successful */ /* abort the current Dialog "Please wait" */ if (data->child_dialog != NULL) { SEND_EVENT (data->child_dialog, DIALOG_DESTROY, 0, NULL); data->child_dialog = NULL; } //GW Display sent not send /* FTA 34.2.2 - CQ 101443 - API & MZ pass NULL instead of win to the dialog window*/ //Sep 01, 2004 REF: CRR 21380 Deepa M.D //Second string is same as the TextId .Hence passed NULL. mmi_dialog_information_screen(NULL,TxtSent, NULL, (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_SENT); data->id = SMSSEND_ID_SENT; break; case E_SMS_ERR: // Waiting dialog is destroyed if (data->child_dialog != NULL) { SEND_EVENT (data->child_dialog, DIALOG_DESTROY, 0, NULL); data->child_dialog = NULL; } // and the status dialog is displayed during 3 secs. /* FTA 34.2.2 - CQ 101443 - API & MZ pass NULL instead of win to the dialog window */ //Sep 01, 2004 REF: CRR 21380 Deepa M.D //Second string is same as the TextId .Hence passed NULL. mmi_dialog_information_screen(NULL,TxtNotSent, NULL, (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SENT); data->id = SMSSEND_ID_NOT_SENT; //TB3 break; default: TRACE_EVENT("Err: default"); return 0; } return 1; } /******************************************************************************* $Function: SmsSend_SAVE_start $Description: Create the Save SMS text window. $Returns: mfw window handle $Arguments: parent_window - parent window UserData - SMS info *******************************************************************************/ T_MFW_HND SmsSend_SAVE_start(T_MFW_HND parent_window, T_SmsUserData *UserData) { T_MFW_HND win; TRACE_FUNCTION ("SmsSend_SAVE_start()"); win = SmsSend_SAVE_create (parent_window); if (win NEQ NULL) { SEND_EVENT (win, E_INIT, 0, (void *)UserData); } return win; } /******************************************************************************* $Function: SmsSend_SAVE_create $Description: Create a window for info dialog $Returns: mfw window handle $Arguments: parent_window - parent window *******************************************************************************/ static T_MFW_HND SmsSend_SAVE_create(MfwHnd parent_window) { T_SAVE * data = (T_SAVE *)ALLOC_MEMORY (sizeof (T_SAVE)); T_MFW_WIN * win; TRACE_FUNCTION ("SmsSend_SAVE_create()"); /* * Create window handler */ data->win = win_create (parent_window, 0, E_WIN_VISIBLE, NULL); if (data->win EQ NULL) { return NULL; } /* * connect the dialog data to the MFW-window */ data->mmi_control.dialog = (T_DIALOG_FUNC)SmsSend_SAVE_exec_cb; data->mmi_control.data = data; win = ((T_MFW_HDR *)data->win)->data; win->user = (MfwUserDataPtr)data; data->parent = parent_window; data->id = SAVE_ID; winShow(data->win); return data->win; } /******************************************************************************* $Function: SmsSend_SAVE_destroy $Description: Destroy the windows for info dialog $Returns: none $Arguments: own_window - current window *******************************************************************************/ static void SmsSend_SAVE_destroy(MfwHnd own_window) { T_MFW_WIN * win_data; T_SAVE * data = NULL; TRACE_FUNCTION ("SmsSend_SAVE_destroy()"); if (own_window) { win_data = ((T_MFW_HDR *)own_window)->data; if (win_data) data = (T_SAVE *)win_data->user; if (data) { // Delete sms handle if (data->sms_handler != NULL) sms_delete(data->sms_handler); if (data->child_dialog != NULL) { TRACE_EVENT("child_dialog not deleted?"); } // Delete WIN handler win_delete (data->win); // Free Memory FREE_MEMORY ((void *)data, sizeof (T_SAVE)); } else { TRACE_EVENT ("SmsSend_SAVE_destroy() called twice"); } } } /******************************************************************************* $Function: SmsSend_SAVE_exec_cb $Description: Callback handler for events sent to to trigger execution $Returns: none $Arguments: own_window - current window *******************************************************************************/ void SmsSend_SAVE_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_SAVE * data = (T_SAVE *)win_data->user; T_MFW_SMS_INFO sms_parameter; USHORT outLen; T_MFW store_status; T_SmsUserData* message_parameter;/*SPR1991, pointer to message text, dest number*/ /*JVJ SPR1298 made dynamic to avoid stack overload in the function convertToUnicodeForOutput*/ /* MZ 10202 Removed memory declaration and allocation*/ TRACE_FUNCTION ("SmsSend_SAVE_exec_cb()"); switch (event) { case E_INIT: /*MZ issue 10202 only alloc memory when you need it */ if (msgBuffer ==NULL) msgBuffer = (UBYTE*)ALLOC_MEMORY(MAX_MSG_LEN_ARRAY); data->child_dialog = NULL; /* Create a sms handler to receive events */ data->sms_handler = sms_create(data->win, E_SMS_SAVE_AVAIL | E_SMS_ERR | E_SMS_MEM_FULL ,(MfwCb)SmsSend_SAVE_mfw_cb); // /*SPR1991, set local pointer to passed parameter, rather than copying data and using up more dynamic memory*/ message_parameter = parameter; if (message_parameter->TextBuffer[0] == 0x80) { //String is unicode - sms_parameter.dcs = MFW_DCS_UCS2; } else { sms_parameter.dcs = MFW_DCS_7bits; } SmsSend_set_dcs_number (&sms_parameter); #ifdef NO_ASCIIZ { // have to add this , later convertToUnicodeForOutput(message_parameter->TextBuffer,msgBuffer, &outLen); TRACE_EVENT_P1("Save SMS, length: %d", outLen); store_status = sms_store(MFW_SMS_SUBMIT, (char*)message_parameter->NumberBuffer, msgBuffer, outLen, NULL); } #else { convertToUnicodeForOutput(data->edt_data.TextBuffer,msgBuffer, &outLen); store_status = sms_store(MFW_SMS_SUBMIT, (char*)message_parameter->NumberBuffer, msgBuffer, outLen, NULL); // sbh - added length to the above function call, since '@' characters stored as NULL & will stop // strlen from working properly. } #endif /* display "Please wait" for save sms */ if (store_status EQ MFW_SMS_OK) { TRACE_EVENT ("Save operation -> ok"); /* show now to user "Please wait" for save*/ // Do not start please wait if ever the MFW result event as already been received if (data->child_dialog == NULL) { // Feb 02, 2005 REF: CRR 28479 xnkulkar // Call function "mmi_dialog_information_screen_save_sms" which has only // KEY_RIGHT and KEY_HUP registered instead of KEY_ALL //data->child_dialog = mmi_dialog_information_screen(win,TxtPleaseWait, "SAVING", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_WAIT_SAVE); data->child_dialog = mmi_dialog_information_screen_save_sms(win,TxtPleaseWait, "SAVING", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_WAIT_SAVE); } } else { TRACE_EVENT ("Save operation -> failed"); //Sep 01, 2004 REF: CRR 21380 Deepa M.D //If E_SMS_MEM_FULL event has already been received, then destroy the Messagefull Dialog //and dispaly a new dialog "Full NOT SAVED". if(memfull==TRUE) { // Feb 02, 2005 REF: CRR 28479 xnkulkar // Call function "mmi_dialog_information_screen_save_sms" which has only // KEY_RIGHT and KEY_HUP registered instead of KEY_ALL //mmi_dialog_information_screen(win, TxtFull,"NOT SAVED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SAVED); mmi_dialog_information_screen_save_sms(win, TxtFull,"NOT SAVED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SAVED); memfull=FALSE;//Set the memful flag to False. } // If the saving message failed due to other reason than memory full, display this message else if (data->child_dialog == NULL) { // Feb 02, 2005 REF: CRR 28479 xnkulkar // Call function "mmi_dialog_information_screen_save_sms" which has only // KEY_RIGHT and KEY_HUP registered instead of KEY_ALL //mmi_dialog_information_screen(win, TxtFailed,"NOT SAVED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SAVED); mmi_dialog_information_screen_save_sms(win, TxtFailed,"NOT SAVED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SAVED); } } /*SPr 1991, check memory allocated before deallocatting it*/ /* MZ 10202 Remove the memory deallocation until later.*/ break; default: TRACE_EVENT("Err: default"); break; } return; } /******************************************************************************* $Function: SmsSend_SAVE_mfw_cb $Description: Handles SMS events from the MFW. $Returns: none $Arguments: event - event id info - optional info *******************************************************************************/ static int SmsSend_SAVE_mfw_cb (MfwEvt event, void *info) { /* get the top window*/ T_MFW_HND win = mfw_parent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_SAVE * data = (T_SAVE *)win_data->user; // T_DISPLAY_DATA display_info; TRACE_FUNCTION ("SmsSend_SAVE_mfw_cb"); switch (event) { /* Save is successful */ case E_SMS_SAVE_AVAIL: // Waiting dialog is destroyed if (data->child_dialog != NULL) { SEND_EVENT (data->child_dialog, DIALOG_DESTROY, 0, NULL); data->child_dialog = NULL; } //Sep 01, 2004 REF: CRR 21380 Deepa M.D //Second string is same as the TextId .Hence passed NULL. // Feb 02, 2005 REF: CRR 28479 xnkulkar // Call function "mmi_dialog_information_screen_save_sms" which has only // KEY_RIGHT and KEY_HUP registered instead of KEY_ALL // mmi_dialog_information_screen(win, TxtSaved,NULL, (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_SAVED); mmi_dialog_information_screen_save_sms(win, TxtSaved,NULL, (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_SAVED); break; case E_SMS_MEM_FULL: //Sep 01, 2004 REF: CRR 21380 Deepa M.D //Flag to check E_SMS_MEM_FULL event has already been received. memfull=TRUE; TRACE_EVENT ("Memory for sms save is full"); if (data->child_dialog != NULL) { // Waiting dialog is destroyed SEND_EVENT (data->child_dialog, DIALOG_DESTROY, 0, NULL); data->child_dialog = NULL; } // and the status dialog is displayed during 3 secs. // set data->child_dialog as message received before sms_store is ended //Sep 01, 2004 REF: CRR 21380 Deepa M.D //Second string is same as the TextId .Hence passed NULL. mmi_dialog_information_screen(win,TxtFull, NULL, (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_LIST_FULL); return MFW_EVENT_PASSED; /*SPR 2640, pass event along to idle screen*/ // break; // RAVI case E_SMS_ERR: TRACE_EVENT ("Save sms failed -> nok"); if (data->child_dialog != NULL) { // Waiting dialog is destroyed SEND_EVENT (data->child_dialog, DIALOG_DESTROY, 0, NULL); data->child_dialog = NULL; } // and the status dialog is displayed during 3 secs. // set data->child_dialog if message received before sms_store is ended mmi_dialog_information_screen(win,TxtFailed, "NOT SAVED", (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SAVED); break; default: TRACE_EVENT("Err: default"); return 0; } return 1; } /******************************************************************************* $Function: SmsSend_send_to_mfw $Description: This function sends a SMS message. $Returns: execution status $Arguments: event - current window $History GW 09/10/01 - Added code to convert unicode strings from 8 bits to 7 bits. *******************************************************************************/ static int SmsSend_send_to_mfw (T_MFW_HND win) { T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_SEND * data = (T_SEND *)win_data->user; T_MFW submit_status; /* Result of SMS send operation. */ T_MFW_SMS_INFO sms_parameter; USHORT outLen; /*SPR2453 only alloc memory when you need it */ if (msgBuffer ==NULL) msgBuffer = (UBYTE*)ALLOC_MEMORY(MAX_MSG_LEN_ARRAY); TRACE_FUNCTION ("SmsSend_send_to_mfw()"); if (data->edt_data.TextBuffer[0] == 0x80) { //String is unicode - sms_parameter.dcs = MFW_DCS_UCS2; } else { sms_parameter.dcs = MFW_DCS_7bits; } SmsSend_set_dcs_number (&sms_parameter); /* Send the SMS */ #ifdef NO_ASCIIZ { convertToUnicodeForOutput(data->edt_data.TextBuffer,msgBuffer, &outLen); TRACE_EVENT_P1("Send SMS, length: %d", outLen); submit_status = sms_submit( MFW_SMS_SUBMIT, /* type of the message*/ (char *)data->edt_data.NumberBuffer, /* dest. address */ msgBuffer, /* sms message */ outLen, /* lenght of message */ (char *)data->edt_data.CentreBuffer);/* sevice center num. */ } #else { convertToUnicodeForOutput(data->edt_data.TextBuffer,msgBuffer,&outLen); #if defined (FF_WAP) && defined (FF_GPF_TCPIP) submit_status = sms_submit( MFW_SMS_SUBMIT, /* type of the message*/ (char *)data->edt_data.NumberBuffer, /* dest. address */ NULL, /* don't specify toa for now */ msgBuffer, /* sms message */ outLen, /* SH - added this, see function definition */ (char *)data->edt_data.CentreBuffer, /* sevice center num. */ NULL); /* don't specify tosca for now */ #else submit_status = sms_submit( MFW_SMS_SUBMIT, /* type of the message*/ (char *)data->edt_data.NumberBuffer, /* dest. address */ msgBuffer, /* sms message */ outLen, // sbh - added this, see function definition (char *)data->edt_data.CentreBuffer);/* sevice center num. */ #endif } #endif /* display "Please wait" for sent sms */ if (submit_status EQ MFW_SMS_OK) { T_DISPLAY_DATA display_info; TRACE_EVENT ("to give SMS to MFW -> ok"); /* show the use "Please wait" for send sms */ dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtSending, TxtMessage , COLOUR_STATUS); dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)SmsSend_standard_dialog_cb, FOREVER, KEY_LEFT ); display_info.Identifier = SMSSEND_ID_WAIT_SEND; data->child_dialog = info_dialog(win, &display_info); data->id = SMSSEND_ID_SENT; } else { TRACE_EVENT ("to give SMS to MFW -> failed"); /* the result operation of sent was NOT OK*/ //Sep 01, 2004 REF: CRR 21380 Deepa M.D //Second string is same as the TextId .Hence passed NULL. mmi_dialog_information_screen(win,TxtNotSent, NULL, (T_VOID_FUNC)SmsSend_standard_dialog_cb, SMSSEND_ID_NOT_SENT); // No forever dialog to be destroyed data->child_dialog = NULL; data->id = SMSSEND_ID_NOT_SENT; } /*SPR 2453, don't deallocate memory till sending complete*/ return 1; } /******************************************************************************* $Function: SmsSend_get_config_data $Description: Called by external processes to read SMS PP config data. $Returns: execution status $Arguments: config_data - SMS info *******************************************************************************/ UBYTE SmsSend_get_config_data (T_MFW_SMS_INFO *config_data) { T_MFW Submit_Status; /* store theh result of SMS send operation. */ TRACE_FUNCTION ("SmsSend_get_config_data()"); // get the current config data from SIM Submit_Status = sms_parameter(config_data, TRUE); if (Submit_Status == MFW_SMS_FAIL) { TRACE_EVENT ("ret MFW_SMS_FAIL"); return FALSE; } else { TRACE_EVENT ("ret OK"); return TRUE; } } /******************************************************************************* $Function: SmsSend_set_SrvCntr_number $Description: Called by external processes to write/Set SMS PP config data. $Returns: execution status $Arguments: config_data - SMS info *******************************************************************************/ UBYTE SmsSend_set_SrvCntr_number (T_MFW_SMS_INFO *config_data) { T_MFW Submit_Status; /* store theh result of SMS send operation. */ TRACE_FUNCTION ("SmsSend_set_SrvCntr_number()"); // get the current config data from SIM Submit_Status = sms_set_SrvCntr_number(config_data); if (Submit_Status == MFW_SMS_FAIL) { TRACE_EVENT ("ret MFW_SMS_FAIL"); return FALSE; } else { TRACE_EVENT ("ret OK"); return TRUE; } } UBYTE SmsSend_set_dcs_number (T_MFW_SMS_INFO *config_data) { T_MFW Submit_Status; /* store theh result of SMS send operation. */ TRACE_EVENT ("SmsSend_set_dcs_number()"); // get the current config data from SIM Submit_Status = sms_set_dcs_number(config_data); if (Submit_Status == MFW_SMS_FAIL) { TRACE_EVENT ("ret MFW_SMS_FAIL"); return FALSE; } else { TRACE_EVENT ("ret OK"); return TRUE; } } /* SPR#1428 - SH - New Editor: no longer required */ #ifndef NEW_EDITOR /******************************************************************************* $Function: SmsSend_loadEditDefault $Description: Configure T_EDITOR_DATA structure with default editor settings. $Returns: none $Arguments: editor_data - editor data. *******************************************************************************/ void SmsSend_loadEditDefault(T_EDITOR_DATA *editor_data) { TRACE_FUNCTION ("SmsSend_loadEditDefault()"); editor_attr_init(&editor_data->editor_attr, NULL, edtCurBar1, 0, 0, 0, COLOUR_EDITOR); editor_data_init(editor_data, NULL, TxtSoftSelect, TxtSoftBack, 0, 1, ALPHA_MODE, FOREVER); editor_data->hide = FALSE; editor_data->AlternateLeftSoftKey = TxtNull; editor_data->Identifier = 0; editor_data->TextString = NULL; editor_data->destroyEditor = TRUE ; } /******************************************************************************* $Function: SmsSend_loadUCS2EditDefault $Description: Configure T_EDITOR2_DATA structure with default editor settings. $Returns: none $Arguments: editor_data - editor data. *******************************************************************************/ static void SmsSend_loadUCS2EditDefault(T_EDITOR_DATA *editor_data) { TRACE_FUNCTION ("SmsSend_loadUCS2EditDefault()"); memset(editor_data, 0, sizeof(T_EDITOR_DATA)); editor_data->hide = FALSE; editor_data->LeftSoftKey = TxtSend; editor_data->AlternateLeftSoftKey = TxtSend; editor_data->RightSoftKey = TxtSave; editor_data->Identifier = SMSSEND_ID_TEXTEDIT; editor_data->mode = ALPHA_MODE; editor_data->min_enter = 0; editor_data->timeout = FOREVER; editor_data->Callback = (T_EDIT_CB)SmsSend_TEXTEDIT_edit_cb; } #endif /* NEW_EDITOR */ /******************************************************************************* $Function: SmsSend_standard_dialog_cb $Description: Callback function for standard dialogs in smssend module $Returns: none $Arguments: win - current window Identifier - unique id Reason - event id *******************************************************************************/ static int SmsSend_standard_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_SAVE * save_data = NULL; T_SEND * send_data = NULL; T_MFW_HND * l_parent = NULL; TRACE_FUNCTION ("SmsSend_standard_dialog_cb()"); switch (Identifier) { case SMSSEND_ID_SAVE_NOT_READY: case SMSSEND_ID_SC_NOT_READY: // SEND an event to recreate the text editor // or to recreate the destination address number editor SEND_EVENT (win, E_RETURN, Identifier, NULL); break; case SMSSEND_ID_WAIT_SEND: if (win_data != NULL) { send_data = (T_SEND *)win_data->user; // Forever child dialog has been destroyed if (send_data != NULL) send_data->child_dialog = NULL; } break; case SMSSEND_ID_WAIT_SAVE: // There is no way to stop SMS send if (win_data != NULL) { save_data = (T_SAVE *)win_data->user; // Forever child dialog has been destroyed if (save_data != NULL) save_data->child_dialog = NULL; } break; // Destroy the window then send the EXIT event to the SEND window->display of the text editor case SMSSEND_ID_SENT: case SMSSEND_ID_NOT_SENT: if ((Reason EQ INFO_KCD_RIGHT) || (Reason EQ INFO_KCD_HUP) || (Reason EQ INFO_TIMEOUT)) SEND_EVENT(win, E_EXIT, SEND_ID, NULL); // Do not reset child dialog handle, as 3s sending dialogs handle are not saved break; // Destroy the SAVE window and send an E_EXIT event to the parent window (useful if some actions are needed on return like in SEND) case SMSSEND_ID_SAVED: case SMSSEND_ID_NOT_SAVED: case SMSSEND_ID_LIST_FULL: if ((Reason EQ INFO_KCD_RIGHT) || (Reason EQ INFO_KCD_HUP) || (Reason EQ INFO_TIMEOUT)) { if (win_data != NULL) { save_data = (T_SAVE *)win_data->user; if (save_data != NULL) { l_parent = save_data->parent; } } // Destroy the window SmsSend_SAVE_destroy(win); // This will make SEND frame to recreate the text editor if (l_parent != NULL) SEND_EVENT(l_parent, E_EXIT, SAVE_ID, NULL); } break; default: TRACE_EVENT("MFW_EVENT_REJECTED"); return MFW_EVENT_REJECTED; } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: SmsSend_convert_to_inter $Description: Transform a phone number in T_MFW_SMS_ADDR format to a string with a '+' character if international number $Returns: none $Arguments: source_number - calling number dest_number - called number *******************************************************************************/ void SmsSend_convert_to_inter(T_MFW_SMS_ADDR *source_number, // The number to convert char *dest_number) // The dest number with a '+' if needed { USHORT nb_char; USHORT i = 0; char *pt_digit = dest_number; TRACE_FUNCTION ("SmsSend_convert_to_inter()"); nb_char = strlen(source_number->number); if (source_number->ton == TON_International) { *pt_digit = '+'; pt_digit++; } for (i = 0; i <= nb_char; i++) pt_digit[i] = source_number->number[i]; } /******************************************************************************* $Function: SmsSend_R_OPTExeCentreEdit $Description: Create editor for entering the Service center number. $Returns: none $Arguments: m - menu handler i - menu item selected. *******************************************************************************/ int SmsSend_R_OPTExeCentreEdit(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND parent_win = mfw_parent(mfw_header()); T_MFW_HND win = SmsSend_SEND_create(parent_win); SEND_EVENT(win,E_INIT,SMSSEND_ID_NBEDIT,0); return 1; // ADDED BY RAVI-28-11-2005 } /******************************************************************************* $Function: SmsSend_SCNBEDIT_edit_cb $Description: Callback function for the SC number editor. $Returns: none $Arguments: win - current window Identifier - unique id reason - event cause *******************************************************************************/ static void SmsSend_SCNBEDIT_edit_cb (T_MFW_HND win, USHORT Identifier, SHORT reason) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_SEND * data = (T_SEND *)win_data->user; T_MFW_SMS_INFO sms_parameter; TRACE_FUNCTION ("SmsSend_SCNBEDIT_edit_cb()"); switch (reason) { case INFO_KCD_LEFT: TRACE_EVENT("INFO_KCD_LEFT"); //GW Read config data to get value of dcs SmsSend_get_config_data(&sms_parameter); if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) { //We have a chinese text message - set dcs parameter to sms_parameter.dcs = MFW_DCS_UCS2; } else { sms_parameter.dcs = MFW_DCS_7bits; } //copy the sevice center number into the strcpy((char*)sms_parameter.sc_addr,(char*)data->edt_data.CentreBuffer); // store the Service center number into the SIM. SmsSend_set_SrvCntr_number (&sms_parameter); SmsSend_set_dcs_number (&sms_parameter); /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_edit_Destroy(data->number_editor); #else /* NEW_EDITOR */ editor_destroy(data->number_editor); #endif /* NEW_EDITOR */ SmsSend_SEND_destroy(win); data->number_editor = 0; break; case INFO_KCD_ALTERNATELEFT: TRACE_EVENT("INFO_KCD_ALTERNATELEFT"); bookPhonebookStart(win, PhbkFromSmsSC); /* SH - changed from PhbFromSms */ break; case INFO_KCD_RIGHT: case INFO_KCD_HUP: TRACE_EVENT("INFO_KCD_RIGHT/HUP"); /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_edit_Destroy(data->number_editor); #else /* NEW_EDITOR */ editor_destroy(data->number_editor); #endif /* NEW_EDITOR */ SmsSend_SEND_destroy(win); data->number_editor = 0; break; default: TRACE_EVENT("Err: Default"); break; } } // Feb 02, 2005 REF: CRR 28479 xnkulkar // Bug: While saving a SMS, if the user presses LSK while the 'Saved' dialog is displayed, the 'Saved' // dialog doesn't get dismissed. // Solution: New function "mmi_dialog_information_screen_save_sms" which has only // KEY_RIGHT and KEY_HUP registered instead of KEY_ALL /******************************************************************************* $Function: mmi_dialog_information_screen_save_sms $Description: Function to display SMS "Saved" info screen $Returns: info_dialog $Arguments: *******************************************************************************/ T_MFW_HND mmi_dialog_information_screen_save_sms(T_MFW_HND parent_win, int TxtId, char* text, T_VOID_FUNC call_back, USHORT identifier) { T_DISPLAY_DATA display_info; dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtId, TxtNull, COLOUR_STATUS); dlg_initDisplayData_events( &display_info, call_back, THREE_SECS, KEY_RIGHT | KEY_HUP ); display_info.TextString2 = text; display_info.Identifier = identifier; return info_dialog(parent_win,&display_info); //information screen } #undef MMI_SMSSEND_C