📄 mmisimtoolkit.c
字号:
MfwSatCall| /* setup a call */
MfwSatSetEvents| /* setup event lists */
MfwSatCcRes| /* call control result */
MfwSatCcAlert /* call control alerting */
#if defined(WAP)
|MfwSatLaunchBrowser
#else
#endif
|MfwSatOpenChannel|
MfwSatCloseChannel|
MfwSatSendData|
MfwSatReceiveData
|MfwSatOpenChannel|
MfwSatCloseChannel|
MfwSatSendData|
MfwSatReceiveData
,
(T_MFW_CB)sim_toolkit_sat_cb, // event callback
data->sat_command); // control block for MFW
/*
* initialize global variables
*/
data->sat_setup_menu_command = NULL;
data->sat_command = NULL;
data->info_win = NULL;
data->call_setup_parameter = NULL;
data->active_sat_session = SAT_SESSION_END;
data->sat_available_on_SIM = FALSE;
data->satCallWithRedial = 0; /* SPR#1784 - DS - Initialise 'with redial' flag */
sat_mainmenu_label = NULL;
/*
* Initialise MFW
*/
sat_init ((UBYTE *)sat_terminal_profile, (UBYTE)sizeof (sat_terminal_profile));
/*
* return window handle
*/
win_show(data->win);
return data->win;
}
/*******************************************************************************
$Function: sim_toolkit_destroy
$Description: Destroy the sim toolkit dialog.
$Returns: none.
$Arguments:
*******************************************************************************/
static void sim_toolkit_destroy (T_MFW_HND own_window)
{
T_MFW_WIN * win;
T_sim_toolkit * data;
if (own_window)
{
win = ((T_MFW_HDR *)own_window)->data;
data = (T_sim_toolkit *)win->user;
if (data)
{
/*
* Exit SAT and Delete SAT Handler
*/
sat_exit ();
sat_delete (data->sat_handle);
/*
* Delete WIN Handler
*/
win_delete (data->win);
/*
* Free Memory
*/
if (data->sat_setup_menu_command NEQ NULL)
{
FREE_MEMORY ((U8 *)data->sat_setup_menu_command, sizeof (T_SAT_CMD));
data->sat_setup_menu_command = NULL;
}
if (data->sat_command != NULL)
{
FREE_MEMORY ((U8 *)data->sat_command, sizeof (T_SAT_CMD)); // c022 rsa
data->sat_command = NULL;
}
FREE_MEMORY ((U8 *)data, sizeof (T_sim_toolkit));
}
}
}
/*******************************************************************************
$Function: sim_toolkit_exec
$Description: Dialog function for sim toolkit top window.
Handle the SAT commands delivered by MFW<-ACI<-SIM
$Returns: none.
$Arguments:
*******************************************************************************/
static void sim_toolkit_exec (T_MFW_HND win, USHORT event, SHORT value, T_SAT_CMD * sat_command)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
T_sim_toolkit * data = (T_sim_toolkit *)win_data->user;
T_MFW_HND sat_win;
T_SAT_RES sat_res;
TRACE_FUNCTION ("sim_toolkit_exec()");
if (event NEQ SAT_SESSION_END)
data->active_sat_session = event;
switch (event)
{
case SAT_DISPLAY_TEXT:
TRACE_EVENT("SAT_DISPLAY_TEXT");
/*
* Text with normal priority will be displayed
* only in idle screen and in SAT Menu Item
*/
if ((sat_command->qual & SAT_M_TEXT_HIGH_PRIO) EQ 0)
{
TRACE_EVENT("NOT SAT_M_TEXT_HIGH_PRIO");
/* Check if Idle AND Sat Session are inactiv */
if ((!g_SATsession_is_active)&&(!idleIsFocussed()))
{
TRACE_EVENT("BUSY SCREEN");
/* idle is not in focus and not currently in a SAT session: we are busy elsewhere */
sat_res[SAT_ERR_INDEX] = SAT_RES_BUSY_ME;
sat_res[SAT_AI_INDEX] = SatResAiBusyScreen;
sat_done (sat_command, sat_res, sizeof(T_SAT_RES));
return;
}
}
sat_win = sat_display_text_create (data->win);
if (sat_win)
{
data->sat_command = sat_command;
SEND_EVENT (sat_win, event, 0, data->sat_command);
}
else
{
sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (sat_command, sat_res, sizeof(T_SAT_RES));
}
break;
case SAT_PLAY_TONE:
TRACE_EVENT("SAT_PLAY_TONE");
/*
* Create and initiate Play Tone Window
*/
sat_win = sat_play_tone_create (data->win);
if (sat_win)
{
data->sat_command = sat_command;
SEND_EVENT (sat_win, event, 0, data->sat_command);
}
else
{
sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (sat_command, sat_res, sizeof(T_SAT_RES));
}
break;
case SAT_GET_KEY:
TRACE_EVENT("SAT_GET_KEY");
/*
* Create and initiate Get Key Window
*/
sat_win = sat_get_key_create (data->win);
if (sat_win)
{
data->sat_command = sat_command;
SEND_EVENT (sat_win, event, 0, data->sat_command);
}
else
{
sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (sat_command, sat_res, sizeof(T_SAT_RES));
}
break;
case SAT_GET_STRING:
TRACE_EVENT("SAT_GET_STRING");
/*
* Create and initiate Get String Window
*/
sat_win = sat_get_string_create (data->win);
if (sat_win)
{
data->sat_command = sat_command;
SEND_EVENT (sat_win, event, 0, data->sat_command);
}
else
{
sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (sat_command, sat_res, sizeof(T_SAT_RES));
}
break;
// c016 rsa
case SAT_SETUP_MENU:
TRACE_EVENT("SAT_SETUP_MENU");
//SAT is on the SIM available
data->sat_available_on_SIM = TRUE;
/*
* initiate Setup Menu
*/
sat_setup_menu_proc(sat_command);
sat_res[SAT_ERR_INDEX] = SatResSuccess;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (sat_command, sat_res, sizeof(T_SAT_RES));
break;
case SAT_SELECT_ITEM:
TRACE_EVENT("SAT_SELECT_ITEM");
/*
* Create and initiate select item Window
*/
sat_win = sat_select_item_create (data->win);
if (sat_win)
{
data->sat_command = sat_command;
SEND_EVENT (sat_win, event, 0, data->sat_command);
}
else
{
sat_res[SAT_ERR_INDEX] = SAT_RES_IMPOSSIBLE;
sat_res[SAT_AI_INDEX] = SatResAiNoCause;
sat_done (sat_command, sat_res, sizeof(T_SAT_RES));
}
break;
// end c016 rsa
// c001 xas
case SAT_SEND_SMS:
TRACE_EVENT("SAT_SEND_SMS");
/*
* --> display alpha identifier if available
*/
if ((sat_command->c.sms.info.len NEQ 0) &&
(sat_command->c.sms.info.len NEQ (U8)-1))
{
char *TextString = (char *)sat_create_TEXT_ASCIIZ (&sat_command->c.sms.info);
/*
* Setup an editor to display a string
*/
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
AUI_edit_SetDefault(&data->editor_data);
AUI_edit_SetTextStr(&data->editor_data, TxtNull, TxtNull, TxtNull, (UBYTE *)TextString);
AUI_edit_SetMode(&data->editor_data, ED_MODE_READONLY, ED_CURSOR_NONE);
AUI_edit_SetEvents(&data->editor_data, event, TRUE, FOREVER, (T_AUI_EDIT_CB)sat_info_cb);
data->info_win = AUI_edit_Start(win, &data->editor_data);
#else /* NEW_EDITOR */
data->editor_data.LeftSoftKey = TxtNull;
data->editor_data.AlternateLeftSoftKey = TxtNull;
data->editor_data.RightSoftKey = TxtNull;
data->editor_data.hide = FALSE;
data->editor_data.mode = E_EDIT_READ_ONLY_MODE;
data->editor_data.timeout = FOREVER;
data->editor_data.Identifier = event;
data->editor_data.destroyEditor = TRUE;
data->editor_data.Callback = (T_EDIT_CB)sat_info_cb;
data->editor_data.TextString = (char *)TextString;
data->editor_data.min_enter = 0;
data->info_win = editor_start(win, &data->editor_data);
#endif /* NEW_EDITOR */
}
break;
case SAT_SEND_SS:
TRACE_EVENT("SAT_SEND_SS");
/*
* --> display alpha identifier if available
*/
if ((sat_command->c.ss.info.len NEQ 0) &&
(sat_command->c.ss.info.len NEQ (U8)-1))
{
char *TextString = (char *)sat_create_TEXT_ASCIIZ (&sat_command->c.ss.info);
/*
* Setup an editor to display a string
*/
/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
AUI_edit_SetDefault(&data->editor_data);
AUI_edit_SetTextStr(&data->editor_data, TxtNull, TxtNull, TxtNull, (UBYTE *)TextString);
AUI_edit_SetMode(&data->editor_data, ED_MODE_READONLY, ED_CURSOR_NONE);
AUI_edit_SetEvents(&data->editor_data, event, TRUE, FOREVER, (T_AUI_EDIT_CB)sat_info_cb);
data->info_win = AUI_edit_Start(win, &data->editor_data);
#else /* NEW_EDITOR */
data->editor_data.LeftSoftKey = TxtNull;
data->editor_data.AlternateLeftSoftKey = TxtNull;
data->editor_data.RightSoftKey = TxtNull;
data->editor_data.hide = FALSE;
data->editor_data.mode = E_EDIT_READ_ONLY_MODE;
data->editor_data.timeout = FOREVER;
data->editor_data.Identifier = event;
data->editor_data.Callback = (T_EDIT_CB)sat_info_cb;
data->editor_data.destroyEditor = TRUE;
data->editor_data.TextString = TextString;
data->editor_data.min_enter = 0;
data->info_win = editor_start(win, &data->editor_data);
#endif /* NEW_EDITOR */
}
break;
// end c001 xas
case SAT_SETUP_CALL:
TRACE_EVENT("SAT_SETUP_CALL");
TRACE_EVENT_P2("Redial durUnit %d durValue %d",
sat_command->c.call.durUnit,sat_command->c.call.durValue);
data->sat_command = sat_command;
/* create parameter space for call, or reuse old */
if (data->call_setup_parameter EQ NULL)
{
data->call_setup_parameter =
(T_SAT_call_setup_parameter *)ALLOC_MEMORY (sizeof(T_SAT_call_setup_parameter));
}
/* SPR#1784 - DS - If command qualifier is set to 'with redial' (01, 03 or 05) set a global redial flag */
if ( (sat_command->qual & 0x01) == TRUE )
{
if (sat_command->qual > 0x05)
{
TRACE_EVENT("Invalid call command qualifier!");
}
else
{
set_sat_redial_flag(1);
}
}
/* gather the name of the called party (if any) */
if ((sat_command->c.call.info.len NEQ 0) &&
(sat_command->c.call.info.len NEQ (U8)-1))
{
TRACE_EVENT("call.info contains data.");
data->call_setup_parameter->TextString = sat_create_TEXT_ASCIIZ(&sat_command->c.call.info);
}
else
{
/* provide an empty string; NULL would crash in info_dialog() */
TRACE_EVENT("call.info contains no data!");
sat_command->c.call.info.len = 0;
/* SPR#1700 - DS - Set string to NULL */
data->call_setup_parameter->TextString = NULL;
/* SPR#1700 - DS - Commented out code below. Checks in call() in mmiCall.c ensure
* a NULL string is not sent to info_dialog
*/
#if 0
data->call_setup_parameter->TextString = sat_create_TEXT_ASCIIZ(&sat_command->c.call.info);
#endif /* 0 */
}
/* SPR#1700 - DS - Save info2 (if available). This should be used for the "calling" dialog.
* If not available, info (above) can be used.
*/
/* gather the name of the called party (if any) */
if ((sat_command->c.call.info2.len NEQ 0) &&
(sat_command->c.call.info2.len NEQ (U8)-1))
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -