FreeCalypso > hg > fc-tourmaline
view src/ui/bmi/mmiSmsMenu.c @ 261:841a848ba762
SPI SWE: clear any pending boot-time interrupts in spi_init()
Charger plug/unplug hw logic in the Iota ABB has no built-in debouncing,
thus electrical contact bounce on the charging power connection interface
produces a lot of charger plug/unplug interrupts. When we boot in
charging mode (charging power present at boot time and is presumably
the cause of Switch-ON), some bounce may occur between the initial
Iota Switch-ON action and Calypso firmware booting. By clearing any
accumulated ITSTATREG interrupts on boot, we prevent these pre-boot
interrupts from generating charger plug/unplug events to FCHG, which
would upset smooth from-boot charging.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 14 May 2021 02:49:05 +0000 |
parents | 44d6af34c75a |
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: MmiSmsMenu.c $Revision: 1.0 $Author: Condat(UK) $Date: 25/10/00 ******************************************************************************** Description: Implementation SMS dynamic menu handling ******************************************************************************** $History: MmiSmsMenu.c Feb 28, 2007 OMAPS00109953 a0393213(R.Prabakar) Description : Need to be able to store SMS in SIM/ME Solution : Earlier, index alone was sufficient to identify messages. Now memory should also be taken care of. May 27, 2005 MMI-FIX-29869 x0018858 Description: There is a limitation on the number of messages that can be downloaded from server even though there is space on the sim. Solution: The limitation has been removed and the number of messages that can be dowloaded has been modified to the masimum number that can be stored. March 31, 2005 REF: CRR MMI-SPR-24511 x0012852 Bug:The phone crashes when the user selects the 'Delete All' option almost the same time as there's an incoming message. Fix:Check added for part message before deleting all messages. Feb 24, 2005 REF: CRR MMI-SPR-29102 xnkulkar Description: The phone resets when user presses the ''End All' key while the SMSs are being deleted. Solution: As the user has already confirmed that all SMS messages are to be deleted, ''End All' key press is ignored till the delete operation is over. 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 back into the Editor . Mar 29, 2004 REF: CRR 12722 Deepa M.D Mar 24, 2004 REF: CRR 15746 Deepa M.D 25/10/00 Original Condat(UK) BMI version. $End *******************************************************************************/ #define MMI_SMSMENU_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" /* 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_smsi.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 "dspl.h" #include "MmiMain.h" #include "MmiDummy.h" #include "MmiMmi.h" #include "MmiDialogs.h" #include "MmiLists.h" #include "MmiMenu.h" #include "MmiSoftKeys.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 "MmiBookShared.h" #include "mmiSmsMenu.h" #include "mmiSmsRead.h" #include "mmismssend.h" #include "mmiSmsIdle.h" #include "mmiSmsBroadcast.h" /* reqd for info_screen function prototype */ #include "cus_aci.h" #include "mfw_ffs.h" //#include "pcm.h" #include "mmiColours.h" //May 27, 2005 MMI-FIX-29869 x0018858 #ifdef FF_MMI_SMS_DYNAMIC int g_max_messages = 0; #endif /* =================================================== */ /* BEGIN ADD: Sumit: Locosto: eZiText */ T_MFW_HND eZiTextWin; /* END ADD: Sumit: Locosto: eZiText */ /* =================================================== */ extern T_MFW_HND SmsRead_R_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr); // Start functions of the windows T_MFW_HND M_SND_SAV_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr); T_MFW_HND M_DEL_ALL_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr); T_MFW_HND M_DEL_ALL_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr); T_MFW_HND V_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr); // Standard callback function for temporary dialog window int SmsMenu_StandardDialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason); static void SmsMenu_StandardEditor_cb (T_MFW_HND win, USHORT Identifier, SHORT reason); /* x0039928 - Lint warning fix */ int SmsMenu_sms_delete_all(T_MFW_HND win); /* This structure is used by 'Delete All' function that is common for SMS and SMS-CB */ typedef enum SmsType { SMS_TYPE, /* interfered with macro -> renamed SMS to SMS_TYPE */ SMSCB_TYPE } MySmsType; /* ID of the different windows (used in SEND_EVENT function to provide the callee the ID of the caller) */ typedef enum { /* Logical frames */ M_DEL_ALL_ID, M_SND_SAV_ID, V_ID_SET, V_ID_CALL, V_NUM_ID, /* Dialog windows */ SMSMENU_ID_NOTREADY, SMSMENU_ID_DELETEALL, SMSMENU_ID_DELOK, SMSMENU_ID_DELERR, SMSMENU_ID_NOMESSAGES, SMSMENU_ID_WAIT } sms_menu_id; typedef enum /* numbering plan identifier */ { MFW_MB_LINE1 = 1, MFW_MB_LINE2 = 2, MFW_MB_FAX = 3, MFW_MB_DATA = 4 } T_MFW_MAILBOX_ID; typedef enum { SMS_DELETING, SMS_DISPLAY, SMS_READY } T_SmsMenu_state; typedef struct { /* administrative data */ T_MMI_CONTROL mmi_control; T_MFW_HND win; SHORT id; T_MFW_HND parent; /* associated handlers */ T_MFW_HND kbd; T_MFW_HND kbd_long; T_MFW_HND menu; /* internal data */ T_SmsUserData * user_data; // text and phone number of the message } T_M_SND_SAV; typedef struct { /* administrative data */ T_MMI_CONTROL mmi_control; T_MFW_HND win; SHORT id; T_MFW_HND parent; T_MFW_HND waiting_win; /* associated handlers */ T_MFW_HND sms_hnd; /* MFW sms handler */ /* internal data */ MySmsType type; // The type of the SMS to delete (SMS or SMS-CB) //May 27, 2005 MMI-FIX-29869 x0018858 #ifdef FF_MMI_SMS_DYNAMIC T_MFW_SMS_MSG *g_SmsMenu_messages; #else T_MFW_SMS_MSG g_SmsMenu_messages[MAX_MESSAGES]; #endif T_MFW_HND child_dialog; } T_M_DEL_ALL; typedef struct { /* administrative data */ T_MMI_CONTROL mmi_control; T_MFW_HND win; SHORT id; T_MFW_HND parent; /* associated handlers */ T_MFW_HND kbd; T_MFW_HND kbd_long; T_MFW_HND menu; } T_V; typedef struct { /* administrative data */ T_MMI_CONTROL mmi_control; T_MFW_HND win; SHORT id; T_MFW_HND parent; /* associated handlers */ /* internal data */ UBYTE voice_number_buffer[NUMBER_LENGTH]; } T_V_NUM; static T_MFW_HND M_SND_SAV_create (T_MFW_HND parent); static void M_SND_SAV_destroy (T_MFW_HND window); static void M_SND_SAV_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); static int M_SND_SAV_win_cb (MfwEvt e, MfwWin *w); static int M_SND_SAV_kbd_cb (MfwEvt e, MfwKbd *k); static int M_SND_SAV_mnu_cb (MfwEvt e, MfwMnu *m); static int ExeSms_sendM_SND_SAV(MfwMnu *, MfwMnuItem *); static T_MFW_HND M_DEL_ALL_create (T_MFW_HND parent); static void M_DEL_ALL_destroy (T_MFW_HND window); static void M_DEL_ALL_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); static int M_DEL_ALL_mfw_cb (MfwEvt event, void *parameter); static int M_DEL_ALL_win_cb (MfwEvt e, MfwWin *w); static T_MFW_HND V_create (T_MFW_HND parent); static void V_destroy (T_MFW_HND window); static void V_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter); static int V_win_cb (MfwEvt e, MfwWin *w); static int V_kbd_cb (MfwEvt e, MfwKbd *k); static int V_mnu_cb (MfwEvt e, MfwMnu *m); /* SPR#1428 - SH - New Editor: not required */ #ifndef NEW_EDITOR void SmsMenu_loadEditDefault(T_EDITOR_DATA *editor_data); #endif // State of the SMS menu management T_SmsMenu_state g_SmsMenu_state = SMS_DISPLAY; MfwHnd g_ChildWindow2; UBYTE g_CenterNumber[NUMBER_LENGTH]; //Jul 13, 2004 REF: CRR 21615 Deepa M.D UBYTE TempTextBuffer[MAX_MSG_LEN_ARRAY]; //Temporary buffer to store the SMS content /******************************************************************************* $Function: M_exeSendNew $Description: This function is called when the user press Send in the main SMS menu. $Returns: Execution status $Arguments: m - menu handler i - Menu item selected *******************************************************************************/ int M_exeSendNew(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = eZiTextWin;// SUMIT: mfwParent(mfw_header()); T_SmsUserData SmsData; /* Copy the number and name information to the SMS buffer */ /*MC SPR 1257, clear whole buffer in case of Unicode entry*/ /*SPR 2587, check that SMS has been initialised*/ if (!smsidle_get_ready_state() || phb_get_mode() == PHB_LOADING) { mmi_dialog_information_screen(0, TxtPleaseWait, NULL, NULL, NULL); return 0; } // Jul 13, 2004 REF: CRR 21615 Deepa M.D // Copy the content from the temporary buffer into the editor,so that the // previously typed content is retained. #ifdef TI_PS_FF_CONC_SMS if(FFS_flashData.ConcatenateStatus == TRUE) { memset(SmsData.TextBuffer, '\0', MAX_MSG_LEN); memcpy(SmsData.TextBuffer, TempTextBuffer,MAX_MSG_LEN); } else #endif /*TI_PS_FF_CONC_SMS*/ { memset(SmsData.TextBuffer, '\0', MAX_MSG_LEN_SGL); //Copy only 160 characters ofthe message. memcpy(SmsData.TextBuffer, TempTextBuffer,MAX_MSG_LEN_SGL-1); } SmsData.NumberBuffer[0]='\0'; //set the number to null. SmsData.called_from_reply_item = FALSE; SmsSend_SEND_start(win, (void *) &SmsData); return 1; } /******************************************************************************* $Function: M_exeRead $Description: This function is called when the user press Read in the main SMS menu $Returns: Execution status $Arguments: m - menu handler i - Menu item selected *******************************************************************************/ int M_exeRead(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_SMS_STAT sms_list_type = MFW_SMS_ALL; /* Call the function that manages SMS reading */ SmsRead_R_start(win, (MfwMnuAttr*)&sms_list_type); return 1; } /******************************************************************************* $Function: M_exeDelAll $Description: This function is called when the user press Delete all in the main SMS menu $Returns: Execution status $Arguments: m - menu handler i - Menu item selected *******************************************************************************/ int M_exeDelAll(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); MySmsType sms_type; sms_type = SMS_TYPE; // Here we have to pass the type of sms to delete (SMS or SMS-CB) M_DEL_ALL_start(win, (void *)&sms_type); return 1; } /******************************************************************************* $Function: M_exeSendSaved $Description: This function is called when the user press Saved messages in the main SMS menu $Returns: Execution status $Arguments: m - menu handler i - Menu item selected *******************************************************************************/ int M_exeSendSaved(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); M_SND_SAV_start(win, 0); return 1; } /******************************************************************************* $Function: voice_mail_init $Description: initialization the voice mail buffer $Returns: $Arguments: *******************************************************************************/ int voice_mail_init (void) { //nm, later have to read the voice mail number from FFS after switching-on the mobile //to clear the buffer is only temporary until we are able to save on Flash //memset(voice_mail, '\0', sizeof(voice_mail)); return 1; } /******************************************************************************* $Function: M_exeVoice $Description: This function is called when the user press Voice Mail in the main SMS menu $Returns: Execution status $Arguments: m - menu handler i - Menu item selected *******************************************************************************/ int M_exeVoice(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win; T_MFW_HND parent_window = mfwParent(mfw_header()); TRACE_FUNCTION ("M_exeVoice()"); win = V_create (parent_window); if (win NEQ NULL) { SEND_EVENT (win, E_INIT, V_ID_SET, 0); } return 1; } /******************************************************************************* $Function: M_callVoice $Description: This function is called when the user press set Voice Mail in the main SMS menu $Returns: Execution status $Arguments: m - menu handler i - Menu item selected *******************************************************************************/ int M_callVoice(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win; T_MFW_HND parent_win = mfwParent(mfw_header()); TRACE_FUNCTION ("M_callVoice()"); win = V_create (parent_win); if (win NEQ NULL) { SEND_EVENT (win, E_INIT, V_ID_CALL, 0); } return 1; } /******************************************************************************* $Function: M_SND_SAV_start $Description: Start the creation of the saved SMS menu window $Returns: Execution status $Arguments: parent_window - parent window menuAttr - Menu attributes. *******************************************************************************/ T_MFW_HND M_SND_SAV_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) { T_MFW_HND win; TRACE_FUNCTION ("M_SND_SAV_start()"); win = M_SND_SAV_create (parent_window); if (win NEQ NULL) { SEND_EVENT (win, E_INIT, M_SND_SAV_ID, (void *)menuAttr); } return win; } /******************************************************************************* $Function: M_SND_SAV_create $Description: Create the saved SMS menu window $Returns: Execution status $Arguments: parent_window - parent window *******************************************************************************/ static T_MFW_HND M_SND_SAV_create(MfwHnd parent_window) { T_M_SND_SAV * data = (T_M_SND_SAV *)ALLOC_MEMORY (sizeof (T_M_SND_SAV)); T_MFW_WIN * win; TRACE_FUNCTION ("M_SND_SAV_create()"); /* * Create window handler */ data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)M_SND_SAV_win_cb); if (data->win EQ NULL) { return NULL; } /* * connect the dialog data to the MFW-window */ data->mmi_control.dialog = (T_DIALOG_FUNC)M_SND_SAV_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: M_SND_SAV_destroy $Description: Destroy the saved SMS menu window $Returns: none $Arguments: own_window - current window *******************************************************************************/ static void M_SND_SAV_destroy(MfwHnd own_window) { T_MFW_WIN * win_data; T_M_SND_SAV * data; TRACE_FUNCTION ("M_SND_SAV_destroy()"); if (own_window) { win_data = ((T_MFW_HDR *)own_window)->data; data = (T_M_SND_SAV *)win_data->user; if (data) { /* * Delete WIN handler */ win_delete (data->win); /* * Free Memory */ FREE_MEMORY ((void *)data->user_data, sizeof (T_SmsUserData)); FREE_MEMORY ((void *)data, sizeof (T_M_SND_SAV)); } else { TRACE_EVENT ("M_SND_SAV_destroy() called twice"); } } } /******************************************************************************* $Function: M_SND_SAV_exec_cb $Description: Exec callback for the saved SMS menu window $Returns: none $Arguments: win - current window event - window event id value - Unique Id parameter - optional data. *******************************************************************************/ void M_SND_SAV_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_M_SND_SAV * data = (T_M_SND_SAV *)win_data->user; T_MFW_HND * l_parent; SHORT l_id; TRACE_FUNCTION ("M_SND_SAV_exec_cb()"); switch (event) { case E_INIT: /* initialization of administrative data */ data->id = value; data->user_data = (T_SmsUserData *)ALLOC_MEMORY (sizeof (T_SmsUserData)); /*MC SPR 1257, clear whole buffer in case of Unicode entry*/ #ifdef TI_PS_FF_CONC_SMS if(FFS_flashData.ConcatenateStatus == TRUE) memset( data->user_data->TextBuffer, '\0', MAX_MSG_LEN_SGL); else #endif /*TI_PS_FF_CONC_SMS*/ memset( data->user_data->TextBuffer, '\0', MAX_MSG_LEN); data->user_data->NumberBuffer[0] = '\0'; /* initialization of the dialog data */ /* create the dialog handler */ data->kbd = kbdCreate(data->win,KEY_ALL, (MfwCb)M_SND_SAV_kbd_cb); data->kbd_long = kbdCreate(data->win,KEY_ALL|KEY_LONG,(MfwCb)M_SND_SAV_kbd_cb); /* put the (new) dialog window on top of the window stack */ mnuUnhide(data->menu); winShow(win); break; case E_ABORT: case E_EXIT: l_parent = data->parent; l_id = data->id; M_SND_SAV_destroy(data->win); SEND_EVENT (l_parent, event, l_id, NULL); /* forward event to parent */ break; case E_RETURN: default: return; } } /******************************************************************************* $Function: M_SND_SAV_win_cb $Description: Window callback for the saved SMS menu window $Returns: Execution status $Arguments: e - event id m - window handle *******************************************************************************/ static int M_SND_SAV_win_cb (MfwEvt e, MfwWin *w) /* M_SND_SAV window event handler */ { TRACE_FUNCTION ("M_SND_SAV_win_cb()"); switch (e) { case MfwWinVisible: /* window is visible */ 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: M_SND_SAV_kbd_cb $Description: Keyboard callback for the saved SMS menu window $Returns: Execution status $Arguments: e - event id k - keyboard info *******************************************************************************/ static int M_SND_SAV_kbd_cb (MfwEvt e, MfwKbd *k) /* M_SND_SAV keyboard event handler */ { T_MFW_HND win = mfwParent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_M_SND_SAV * data = (T_M_SND_SAV *)win_data->user; TRACE_FUNCTION ("M_SND_SAV_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); winShow(win); break; case KCD_MNUDOWN: /* highlight next entry */ mnuDown(data->menu); winShow(win); break; 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: M_DEL_ALL_start $Description: Start the delete all window dialog. $Returns: window handler $Arguments: parent_window - parent window menuAttr - Menu attributes. *******************************************************************************/ T_MFW_HND M_DEL_ALL_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) { T_MFW_HND win; TRACE_FUNCTION ("M_DEL_ALL_start()"); win = M_DEL_ALL_create (parent_window); if (win NEQ NULL) { SEND_EVENT (win, E_INIT, M_DEL_ALL_ID, (void *)menuAttr); } return win; } /******************************************************************************* $Function: M_DEL_ALL_create $Description: Create the delete all window $Returns: window handler $Arguments: parent_window - parent window *******************************************************************************/ static T_MFW_HND M_DEL_ALL_create(MfwHnd parent_window) { T_M_DEL_ALL * data = (T_M_DEL_ALL *)ALLOC_MEMORY (sizeof (T_M_DEL_ALL)); T_MFW_WIN * win; TRACE_FUNCTION ("M_DEL_ALL_create()"); /* * Create window handler */ data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)M_DEL_ALL_win_cb); if (data->win EQ NULL) { return NULL; } /* * connect the dialog data to the MFW-window */ data->mmi_control.dialog = (T_DIALOG_FUNC)M_DEL_ALL_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: M_DEL_ALL_destroy $Description: Destroy the delete all window $Returns: none $Arguments: own_window - current window *******************************************************************************/ static void M_DEL_ALL_destroy(MfwHnd own_window) { T_MFW_WIN * win_data; T_M_DEL_ALL * data; TRACE_FUNCTION ("M_DEL_ALL_destroy()"); if (own_window) { win_data = ((T_MFW_HDR *)own_window)->data; data = (T_M_DEL_ALL *)win_data->user; if (data) { /* * Delete WIN handler */ if (data->waiting_win) { SEND_EVENT(data->waiting_win,DIALOG_DESTROY,0,0 ); data->waiting_win = 0; } win_delete (data->win); /* * Free Memory */ FREE_MEMORY ((void *)data, sizeof (T_M_DEL_ALL)); } else { TRACE_EVENT ("M_DEL_ALL_destroy() called twice"); } } } /******************************************************************************* $Function: M_DEL_ALL_exec_cb $Description: Exec callback function for the Delete All window $Returns: none $Arguments: win - current window event - event id value - Unique id parameter - optional data. *******************************************************************************/ void M_DEL_ALL_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_M_DEL_ALL * data = (T_M_DEL_ALL *)win_data->user; T_MFW_EVENT MfwEvents; T_DISPLAY_DATA DisplayInfo; TRACE_FUNCTION ("M_DEL_ALL_exec_cb()"); switch (event) { case E_INIT: /* initialization of administrative data */ data->id = value; /* initialization of the dialog data */ data->type = (MySmsType)(int)parameter; /* x0039928 - Lint warning fix */ /*SPR2139, initialise sms handle to NULL*/ data->sms_hnd = NULL; /* create the dialog handler */ // Display the dialog window to delete all the SMS SmsMenu_loadDialogDefault(&DisplayInfo); //NM 29.8 Check before deleting, is SIM ready ?! */ if (!smsidle_get_ready_state()) { DisplayInfo.TextId = TxtWaiting; DisplayInfo.Identifier = SMSMENU_ID_NOTREADY; } else { /*SPR 2139, if there are no SMSs on the SIM*/ if ( sms_message_count(MFW_SMS_ALL) == 0) { /*tell user*/ DisplayInfo.TextId = TxtEmptyList; DisplayInfo.Identifier = SMSMENU_ID_NOMESSAGES; } else { /*SPR 2139, only create an SMS event handler if sms initialised and sms list is not empty*/ MfwEvents = E_SMS_MO_AVAIL | E_SMS_ERR | E_SMS_OK; data->sms_hnd = sms_create(data->win,MfwEvents,(MfwCb)M_DEL_ALL_mfw_cb); DisplayInfo.TextId = TxtOkToDelete; DisplayInfo.Time = FIVE_SECS; DisplayInfo.KeyEvents = KEY_RIGHT|KEY_LEFT|KEY_CLEAR; DisplayInfo.Identifier = SMSMENU_ID_DELETEALL; DisplayInfo.LeftSoftKey = TxtSoftOK; DisplayInfo.RightSoftKey = TxtSoftBack; } } // Generic function for info messages (void) info_dialog(win, &DisplayInfo); winShow(win); break; case E_ABORT: case E_EXIT: M_DEL_ALL_destroy (data->win); break; case E_RETURN: default: return; } } /******************************************************************************* $Function: M_DEL_ALL_win_cb $Description: Window callback function for the delete all window $Returns: none $Arguments: e - current window w - event id *******************************************************************************/ static int M_DEL_ALL_win_cb (MfwEvt e, MfwWin *w) /* V window event handler */ { TRACE_FUNCTION ("M_DEL_ALL_win_cb()"); switch (e) { case MfwWinVisible: /* window is visible */ 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: M_DEL_ALL_mfw_cb $Description: Exec callback function for the DEL_ALL window $Returns: none $Arguments: event - event id parameter - optional data. *******************************************************************************/ int M_DEL_ALL_mfw_cb (MfwEvt event, void *parameter) { T_MFW_HND win = mfwParent((MfwHdr *)mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data; T_M_DEL_ALL * data = (T_M_DEL_ALL *)win_data->user; // T_MFW_EVENT MfwEvents; // RAVI T_DISPLAY_DATA DisplayInfo; TRACE_FUNCTION ("M_DEL_ALL_ACK_mfw_cb()"); switch (event) { case E_SMS_ERR: g_SmsMenu_state = SMS_READY; SmsMenu_loadDialogDefault(&DisplayInfo); DisplayInfo.Identifier = SMSMENU_ID_DELERR; DisplayInfo.TextId = TxtFailed; info_dialog(win,&DisplayInfo); break; case E_SMS_OK: TRACE_EVENT("Event: E_SMS_OK"); // March 31, 2005 REF: CRR MMI-SPR-24511 x0012852 // Check added for part message before deleting all messages. if((g_ListLength2 > 0) && (!((data->g_SmsMenu_messages[g_ListLength2-1].concat_status == MFW_SMS_CONC_PART) && (data->g_SmsMenu_messages[g_ListLength2-1].index == data->g_SmsMenu_messages[g_ListLength2-1].first_index) && (data->g_SmsMenu_messages[g_ListLength2-1].mem== data->g_SmsMenu_messages[g_ListLength2-1].first_mem) /*a0393213 OMAPS00109953*/ ))) { g_ListLength2--; /*a0393213 OMAPS00109953 - memory passed as parameter*/ sms_msg_delete(data->g_SmsMenu_messages[g_ListLength2].index,data->g_SmsMenu_messages[g_ListLength2].mem); } else { /* there is now anymore sms to delete !! */ g_SmsMenu_state = SMS_READY; /* cq16875 Destroy the previous info dialog if there is one before displaying the new dialog. When a concatenated message is deleted using the "Delete All" menu option the E_SMS_OK event is received for each Concat message part that is deleted. 12-02-04 MZ. */ if(data->child_dialog != NULL) { SEND_EVENT (data->child_dialog, DIALOG_DESTROY, 0,NULL); data->child_dialog = NULL; } SmsMenu_loadDialogDefault(&DisplayInfo); DisplayInfo.Identifier = SMSMENU_ID_DELOK; DisplayInfo.TextId = TxtDeleted; /*SPR2139, removed sms_delete() from here, this is now donw in dialog callback*/ /*cq16875 Store the info dialog handler 12-02-04 MZ. */ data->child_dialog = info_dialog(win,&DisplayInfo); } break; default: return MFW_EVENT_REJECTED; } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: V_start $Description: Start the voice mailbox dialog window. $Returns: window handle $Arguments: parent_window - parent window handle menuAttr - Menu attributes *******************************************************************************/ T_MFW_HND V_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr) { T_MFW_HND win; TRACE_FUNCTION ("V_start()"); win = V_create (parent_window); if (win NEQ NULL) { SEND_EVENT (win, E_INIT, V_ID_SET, (void *)menuAttr); } return win; } /******************************************************************************* $Function: V_create $Description: create the voice mailbox window $Returns: window handle $Arguments: parent_window - parent window handle *******************************************************************************/ static T_MFW_HND V_create(MfwHnd parent_window) { T_V * data = (T_V *)ALLOC_MEMORY (sizeof (T_V)); T_MFW_WIN * win; TRACE_FUNCTION ("V_create()"); /* * Create window handler */ data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)V_win_cb); if (data->win EQ NULL) { return NULL; } /* * connect the dialog data to the MFW-window */ data->mmi_control.dialog = (T_DIALOG_FUNC)V_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: V_destroy $Description: Destroy the voice mailbox window $Returns: none $Arguments: own_window - current window *******************************************************************************/ static void V_destroy(MfwHnd own_window) { T_MFW_WIN * win_data; T_V * data; TRACE_FUNCTION ("V_destroy()"); if (own_window) { win_data = ((T_MFW_HDR *)own_window)->data; data = (T_V *)win_data->user; if (data) { /* * Delete WIN handler */ win_delete (data->win); /* * Free Memory */ FREE_MEMORY ((void *)data, sizeof (T_V)); } else { TRACE_FUNCTION ("V_destroy() called twice"); } } } /******************************************************************************* $Function: V_exec_cb $Description: Exec callback function for the voice mailbox window $Returns: none $Arguments: win - current window event - event id value - Unique id parameter - optional data. *******************************************************************************/ void V_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_V * data = (T_V *)win_data->user; // char mail_alpha[10+1] = ""; // size hard coded in pcm.h // RAVI #ifdef NEW_EDITOR T_AUI_EDITOR_DATA editor_data; /* SPR#1428 - SH - New Editor data */ #else T_EDITOR_DATA editor_data; #endif TRACE_FUNCTION ("V_exec_cb()"); switch (event) { // On exit from the editor, we try again to call the number case E_INIT: if ( (FFS_flashData.voice_mail[0] EQ '\0') || (value EQ V_ID_SET) ) { /* initialization of administrative data */ data->id = value; /* SPR#1428 - SH - New Editor changes */ #ifdef NEW_EDITOR AUI_edit_SetDefault(&editor_data); AUI_edit_SetDisplay(&editor_data, ZONE_FULL_SK_TITLE, COLOUR_EDITOR_XX, EDITOR_FONT); AUI_edit_SetEvents(&editor_data, value, TRUE, FOREVER, (T_AUI_EDIT_CB)SmsMenu_StandardEditor_cb); AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtVoiceMail, NULL); /* SPR#2141 - DS - Changed RSK to "Delete". */ // Change by Sasken ( Deepa M.d) on March 29th 2004 // Issue Number : MMI-SPR-12722 // Subject: Right softkey should be "Back" when the editor is empty // Bug : Right softkey should be "Back" when the editor is empty // Solution : Added alternative string for the right softkey tobe displayed when the editor is empty AUI_edit_SetAltTextStr(&editor_data, 0, NULL, TRUE, TxtSoftBack); AUI_edit_SetMode(&editor_data, 0, ED_CURSOR_UNDERLINE); AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, (UBYTE *)FFS_flashData.voice_mail, PHB_MAX_LEN); /* SPR#2141 - DS - Set RSK to "Back" when the editor is empty. */ AUI_edit_SetAltTextStr(&editor_data, 1, NULL, TRUE, TxtSoftBack); AUI_edit_Start(win, &editor_data); #else /* NEW_EDITOR */ SmsMenu_loadEditDefault(&editor_data); editor_data.editor_attr.text = (char *)FFS_flashData.voice_mail; editor_data.editor_attr.size = PHB_MAX_LEN; editor_data.TextId = TxtVoiceMail; editor_data.LeftSoftKey = TxtSoftOK; // Change by Sasken ( Deepa M.d) on March 29th 2004 // Issue Number : MMI-SPR-12722 // Subject: Right softkey should be "Back" when the editor is empty // Bug : Right softkey should be "Back" when the editor is empty // Solution : Added alternative string for the right softkey tobe displayed when the editor is empty editor_data.RightSoftKey = TxtSoftBack; editor_data.Identifier = value; editor_start(win,&editor_data); /* start the editor */ #endif /* NEW_EDITOR */ winShow(win); } else { if (value EQ V_ID_CALL) { callNumber(FFS_flashData.voice_mail); V_destroy(win); } } break; case E_ABORT: V_destroy(win); break; case E_RETURN: case E_EXIT: default: return; } } /******************************************************************************* $Function: V_win_cb $Description: Window callback function for the voice mailbox window $Returns: Execution status $Arguments: e - event id w - mfw window handle *******************************************************************************/ static int V_win_cb (MfwEvt e, MfwWin *w) /* V window event handler */ { TRACE_FUNCTION ("V_win_cb()"); switch (e) { case MfwWinVisible: /* window is visible */ 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: SmsMenu_standard_dialog_cb $Description: Handler function for standard dialogs in smsmenu module $Returns: Execution status $Arguments: win - current window Identifier - unique id Reason- event id *******************************************************************************/ int SmsMenu_standard_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_M_DEL_ALL * data = (T_M_DEL_ALL *)win_data->user; TRACE_FUNCTION ("SmsMenu_standard_dialog_cb()"); switch (Identifier) { case SMSMENU_ID_DELETEALL: switch (Reason) { // User want to delete the SMS case INFO_KCD_LEFT: // Trigger the deletion SmsMenu_sms_delete_all(win); break; case INFO_KCD_RIGHT: case INFO_KCD_HUP: case INFO_TIMEOUT: // API - 17-01-03 - 1571 - Add this call to sms_delete() to free memory sms_delete(data->sms_hnd); data->sms_hnd = NULL; /* Destroy the owner of the dialog box */ M_DEL_ALL_destroy(win); /* Send E_RETURN event to parent of M_DEL_ALL */ /*SPR2139 removed the sending of a destroy event to parent window*/ break; default: return MFW_EVENT_REJECTED; } break; /*SPR 2139, if no messages or sms not initialised, just destroy the delete all window*/ case SMSMENU_ID_NOMESSAGES: case SMSMENU_ID_NOTREADY: M_DEL_ALL_destroy(win); break; case SMSMENU_ID_DELOK: case SMSMENU_ID_DELERR: /*SPR2139 Add this call to sms_delete() to free memory*/ sms_delete(data->sms_hnd); data->sms_hnd = NULL; /* Destroy the owner of the dialog box */ M_DEL_ALL_destroy(win); break; case SMSMENU_ID_WAIT: // No reaction to any event (wait to be destroyed when MFW event received) break; default: return MFW_EVENT_REJECTED; } return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: SmsMenu_loadDialogDefault $Description: Loads standard default data for SMS information dialogs. $Returns: Execution status $Arguments: DisplayInfo - display settings *******************************************************************************/ void SmsMenu_loadDialogDefault(T_DISPLAY_DATA * DisplayInfo) { dlg_initDisplayData_TextId( DisplayInfo, TxtNull, TxtNull, TxtNull, TxtNull, COLOUR_STATUS); dlg_initDisplayData_events( DisplayInfo, (T_VOID_FUNC)SmsMenu_standard_dialog_cb, THREE_SECS, KEY_CLEAR); DisplayInfo->Identifier = DIALOGS_REASON_NULL; } /******************************************************************************* $Function: SmsMenu_call_voice $Description: dummy function. $Returns: none $Arguments: none *******************************************************************************/ void SmsMenu_call_voice(void) { TRACE_FUNCTION ("call_voice"); } /******************************************************************************* $Function: SmsMenu_startcall $Description: dummy function. $Returns: Execution status $Arguments: DisplayInfo - display settings *******************************************************************************/ void SmsMenu_startcall(UBYTE * VoiceNumber) { TRACE_FUNCTION ("startcall"); } /******************************************************************************* $Function: SmsMenu_sms_delete_all $Description: Delete all SMS messages. $Returns: Execution status $Arguments: win - current window. *******************************************************************************/ int SmsMenu_sms_delete_all(T_MFW_HND win) { //T_MFW_HND win = mfw_parent (mfw_header()); // T_DISPLAY_DATA DisplayInfo; T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_M_DEL_ALL * data = (T_M_DEL_ALL *)win_data->user; TRACE_FUNCTION("SmsMenu_sms_delete_all()"); //May 27, 2005 MMI-FIX-29869 x0018858 #ifdef FF_MMI_SMS_DYNAMIC data->g_SmsMenu_messages = (T_MFW_SMS_MSG*)ALLOC_MEMORY (g_max_messages * sizeof(T_MFW_SMS_MSG) ); g_ListLength2 = sms_message_list(MFW_SMS_ALL, data->g_SmsMenu_messages, g_max_messages); #else g_ListLength2 = sms_message_list(MFW_SMS_ALL, data->g_SmsMenu_messages, MAX_MESSAGES); #endif //NM 22.8 msgsLoadInfoDefaults2(&DisplayInfo); if (g_ListLength2 > 0) { /* Display "Please wait" on the screen*/ /* it is start now to delete sms*/ /* SPR 2139, Removed call to dialog handler, as not needed*/ // Feb 24, 2005 REF: CRR MMI-SPR-29102 xnkulkar // As the user has already confirmed that all SMS messages are to be deleted, ''End All' key // press is to be ignored. Call function mmi_dialog_information_screen_delete_all() instead of // mmi_dialog_information_screen_forever(). // data->waiting_win = mmi_dialog_information_screen_forever(win,TxtPleaseWait, NULL, COLOUR_STATUS_WAIT); data->waiting_win = mmi_dialog_information_screen_delete_all(win,TxtPleaseWait, NULL, COLOUR_STATUS_WAIT); /* delete now the first sms and than wait */ /* for the MFW EVENT "E_SMS_OK" */ g_ListLength2 --; /*a0393213 OMAPS00109953 - memory passed as parameter*/ sms_msg_delete(data->g_SmsMenu_messages[g_ListLength2].index,data->g_SmsMenu_messages[g_ListLength2].mem); } //May 27, 2005 MMI-FIX-29869 x0018858 #ifdef FF_MMI_SMS_DYNAMIC if (g_ListLength2 == 0) FREE_MEMORY((U8*)data->g_SmsMenu_messages, g_max_messages * sizeof(T_MFW_SMS_MSG)); #endif /*SPR 2139, don't need "else" as empty list case handled earlier*/ return 1; } /******************************************************************************* $Function: SmsRead_convertMailbox $Description: $Returns: $Arguments: *******************************************************************************/ UBYTE SmsRead_convertMailbox(T_MFW_MAILBOX_ID i, char *mail_number, char *mail_alpha) { // USHORT max_rcd; // RAVI USHORT nlen; char *international = mail_number; // Used to add '+' to the number if international TRACE_FUNCTION ("SmsRead_convertMailbox()"); // If international number, add the '+' symbol if (FFS_flashData.mbn_numTp & 0x10) { international[0] = '+'; international[1] = '\0'; international ++; } // Convert BCD number into string cmhPHB_getAdrStr(international, PHB_MAX_LEN - 1, FFS_flashData.mbn_Num, FFS_flashData.mbn_len); // If the same number then we get the alpha identifier cmhPHB_getMfwTagNt((UBYTE*)FFS_flashData.mbn_AlphId, 10, (UBYTE*)mail_alpha, &nlen); mail_alpha[nlen] = '\0'; return TRUE; } static void SmsMenu_StandardEditor_cb (T_MFW_HND win, USHORT Identifier, SHORT reason) { // T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; // RAVI // T_V * voice_data = (T_V *)win_data->user; // RAVI TRACE_FUNCTION ("SmsMenu_StandardEditor_cb()"); //Marcus: Issue 1490: 13/12/2002 switch (reason) { case INFO_KCD_LEFT: if (Identifier EQ V_ID_CALL ) { callNumber(FFS_flashData.voice_mail); flash_write(); /*SPR#1929 - DS - Store voicemail number in flash. Port of 1888 */ } /* Marcus: Issue 1490: 13/12/2002: Start */ else if (Identifier EQ V_ID_SET) { /* ** There is no need to copy the value entered into FFS_flashData.voicemail as the editor ** has already put the value there. */ flash_write(); } /* Marcus: Issue 1490: 13/12/2002: End */ V_destroy(win); break; case INFO_KCD_RIGHT: case INFO_KCD_CLEAR: case INFO_KCD_HUP: V_destroy(win); default: break; } } #ifdef TI_PS_FF_CONC_SMS /******************************************************************************* $Function: Concatenate_Status $Description: Displays the Concatenation Satus $Returns: MFW_EVENT_CONSUMED. $Arguments: None. *******************************************************************************/ int Concatenate_Status(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); USHORT TextId2; // change by Sasken on March 24th 2004 // Issue Number : SPR#15746 // TextId2 string changed to TxtActivated from TxtActivate if (FFS_flashData.ConcatenateStatus == TRUE ) TextId2 = TxtActivated; else TextId2 = TxtDeActivated; /* ** Display a standard dialog, with no keys processed, for 3 secs */ info_screen(win, TxtConcat, TextId2, (T_VOID_FUNC) NULL); return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: ConcatenateDeActivate $Description: Deactivates the Concatenation Switch $Returns: MFW_EVENT_CONSUMED. $Arguments: None. *******************************************************************************/ int Concatenate_DeActivate(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); // T_DISPLAY_DATA display_info; // RAVI FFS_flashData.ConcatenateStatus = FALSE; flash_write(); /* ** Display a standard dialog, with no keys processed, for 3 secs */ info_screen(win, TxtConcat, TxtDeActivated, (T_VOID_FUNC) NULL); return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: ConcatenateActivate $Description: Deactivates the Concatenation Switch $Returns: MFW_EVENT_CONSUMED. $Arguments: None. *******************************************************************************/ int Concatenate_Activate(MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfwParent(mfw_header()); // T_DISPLAY_DATA display_info; // RAVI FFS_flashData.ConcatenateStatus = TRUE; flash_write(); /* ** Display a standard dialog, with no keys processed, for 3 secs */ info_screen(win, TxtConcat, TxtActivated, (T_VOID_FUNC) NULL); return MFW_EVENT_CONSUMED; } #endif /*TI_PS_FF_CONC_SMS*/ /******************************************************************************* $Function: ConcatenateDisplay $Description: Returns the status whether to display the menu item or not $Returns: . $Arguments: None. *******************************************************************************/ USHORT ConcatenateDisplay( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi ) { #ifdef TI_PS_FF_CONC_SMS return 0; #else /*TI_PS_FF_CONC_SMS*/ return 1; #endif /*TI_PS_FF_CONC_SMS*/ } #undef MMI_SMSMENU_C