📄 mminetwork.c
字号:
$Arguments:
*******************************************************************************/
void network_animation_cb(T_MFW_HND win, UBYTE identifier, UBYTE reason)
{
TRACE_FUNCTION ("network_animation_cb()");
network_data.network_search_win = 0;
network_data.aborted = TRUE;
}
/*******************************************************************************
$Function: network_MNU_start
$Description: called when the user press the Edit Softkey to enter the
Option Menu "Select from the list" & "Enter the Network Code" &
"Delete"
$Returns:
$Arguments:
*******************************************************************************/
T_MFW_HND network_MNU_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr)
{
T_MFW_HND win;
TRACE_FUNCTION ("network_MNU_start()");
win = network_MNU_create (parent_window);
if (win NEQ NULL)
{
SEND_EVENT (win, E_INIT, NULL, (void *)menuAttr);
}
return win;
}
/*******************************************************************************
$Function: network_MNU_create
$Description: Create the Option window
$Returns: mfw window handle
$Arguments: parent_window -parent window handle
*******************************************************************************/
static T_MFW_HND network_MNU_create(MfwHnd parent_window)
{
T_network_OPT * data = (T_network_OPT *)ALLOC_MEMORY (sizeof (T_network_OPT));
T_MFW_WIN * win;
TRACE_FUNCTION ("network_MNU_create()");
/*
* Create window handler
*/
data->win =
win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)network_MNU_win_cb);
if (data->win EQ NULL)
{
return NULL;
}
/*
* connect the dialog data to the MFW-window
*/
data->mmi_control.dialog = (T_DIALOG_FUNC)network_MNU_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: network_MNU_destroy
$Description: Destroy the Option window
$Returns: mfw window handle
$Arguments: own_window - current window
*******************************************************************************/
static void network_MNU_destroy(MfwHnd own_window)
{
T_MFW_WIN * win_data;
T_network_OPT * data;
TRACE_FUNCTION ("network_MNU_destroy()");
if (own_window)
{
win_data = ((T_MFW_HDR *)own_window)->data;
data = (T_network_OPT *)win_data->user;
if (data)
{
kbd_delete(data->kbd);
kbd_delete(data->kbd_long);
mnuDelete (data->menu);
/*
* Delete WIN handler
*/
win_delete (data->win);
if(data->network_list != NULL)
{
FREE_MEMORY ((UBYTE *)data->network_list->List, MAX_SHOW_OF_PLMN * sizeof (T_MFW_MNU_ITEM));
FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData));
FREE_MEMORY ((UBYTE *)data->pplmn,MAX_SHOW_OF_PLMN * sizeof (T_MFW_NETWORK_STRUCT));
}
/*
* Free Memory
*/
FREE_MEMORY ((void *)data, sizeof (T_network_OPT));
}
else
{
TRACE_EVENT ("network_MNU_destroy() called twice");
}
}
}
/*******************************************************************************
$Function: network_MNU_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 network_MNU_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
T_network_OPT * data = (T_network_OPT *)win_data->user;
T_MFW_HND * l_parent;
SHORT l_id;
T_MFW_HDR * parent = data->parent;
T_MFW_EVENT MfwEvents;
TRACE_FUNCTION ("network_MNU_exec_cb()");
switch (event)
{
case E_INIT:
data->kbd = kbdCreate(data->win,KEY_ALL, (MfwCb)network_MNU_kbd_cb);
data->kbd_long = kbdCreate(data->win,KEY_ALL|KEY_LONG,(MfwCb)network_MNU_kbd_cb);
data->menu = mnuCreate(data->win,&network_OPTAttrib, E_MNU_ESCAPE, (MfwCb)network_MNU_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: network_MNU_mnu_cb
$Description: Menu callback function for the Option window
$Returns: none
$Arguments: e - event id
m - menu handle
*******************************************************************************/
static int network_MNU_mnu_cb (MfwEvt e, MfwMnu *m)
{
T_MFW_HND win = mfwParent(mfw_header());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_network_OPT * data = (T_network_OPT *)win_data->user;
T_MFW_HND * l_parent;
SHORT l_id;
TRACE_FUNCTION ("network_MNU_mnu_cb()");
switch (e)
{
case E_MNU_ESCAPE: /* back to previous menu "pref. network list"*/
network_MNU_destroy(data->win);
// request MFW to fill up the pref. PLMN list
nm_pref_plmn_list(network_data.pplmn, network_data.pplmn_mem.maxRcd, 1);
break;
default: /* in mnuCreate() only E_MNU_ESCAPE has been enabled! */
return MFW_EVENT_REJECTED;
}
return MFW_EVENT_CONSUMED;
}
/*******************************************************************************
$Function: network_MNU_win_cb
$Description: Window callback function for the Option window
$Returns: execution status
$Arguments: e - event id
w - window handle
*******************************************************************************/
static int network_MNU_win_cb (MfwEvt e, MfwWin *w)
{
TRACE_FUNCTION ("network_MNU_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: network_MNU_kbd_cb
$Description: Exec callback function for the Option window
$Returns: execution status
$Arguments: e - event id
k - keyboard info
*******************************************************************************/
static int network_MNU_kbd_cb (MfwEvt e, MfwKbd *k)
{
T_MFW_HND win = mfwParent(mfw_header());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_network_OPT * data = (T_network_OPT *)win_data->user;
TRACE_FUNCTION ("network_MNU_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_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: network_request_plnm_list
$Description: Request existing network list in Mobile
$Returns:
$Arguments:
*******************************************************************************/
static int network_request_plnm_list(MfwMnu* m, MfwMnuItem* i)
{
T_MFW_HND win = mfwParent(mfw_header());
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_network_OPT * data = (T_network_OPT *)win_data->user;
TRACE_FUNCTION("network_request_plnm_list");
data->pplmn = (T_MFW_NETWORK_STRUCT *)ALLOC_MEMORY ((MAX_SHOW_OF_PLMN) * sizeof (T_MFW_NETWORK_STRUCT));
if (data->pplmn NEQ 0)
{
//now fill up the "data->pplmn" with the PLMN list from ACI
nm_plnm_list(data->pplmn, 1, MAX_SHOW_OF_PLMN);
}
else
{
TRACE_EVENT("create the list failed");
return 0;
}
//show the list on the screen now
data->network_list = network_create_mobile_list (data);
listDisplayListMenu (data->win, data->network_list,(ListCbFunc)network_mobile_list_cb,0);
return 1;
}
/*******************************************************************************
$Function: network_delete
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static int network_delete(MfwMnu* m, MfwMnuItem* i)
{
T_MFW_HND win = mfwParent(mfw_header());
TRACE_FUNCTION ("network_delete()");
#ifdef NO_ASCIIZ
if (network_data.pplmn[network_data.Listposition].network_short.len NEQ 0 )
#else
if (strlen((char *)network_data.pplmn[network_data.Listposition].network_short) NEQ 0 )
#endif
{
// if the user selected a pref. PLMN
network_info_screen (win, TxtDeleted);
}
else
{
// if the user selected a empty item
network_info_screen (win, TxtEmptyList);
}
// destroy the Menu
network_MNU_destroy(win);
}
/*******************************************************************************
$Function: network_delete_pref_plnm
$Description: Delete the selected pref. PLMN l
$Returns:
$Arguments:
*******************************************************************************/
void network_delete_pref_plnm (T_MFW_HND win , USHORT identifier, UBYTE reason)
{
T_MFW_PPLMN_MODE mode;
UBYTE i;
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_network_OPT * data = (T_network_OPT *)win_data->user;
TRACE_FUNCTION ("network_delete_pref_plnm()");
mode = DELETE_PREF_PLMN; /* Delete an entry from the list */
//update now the pref. PLMN list
//(network_data.Listposition) "+1" because the zero is counted as well
nm_change_pref_plmn(mode, (network_data.Listposition) +1 , 0, 0);
// clear all the PLMN and fill up with updated list
for (i=0; i < network_data.pplmn_mem.maxRcd; i++)
{
#ifdef NO_ASCIIZ
network_data.pplmn[i].network_long.len = 0;
network_data.pplmn[i].network_short.len = 0;
#else
memset(network_data.pplmn[i].network_long, '\0', LONG_NAME);
memset(network_data.pplmn[i].network_short, '\0', SHORT_NAME);
#endif
memset(network_data.pplmn[i].network_numeric, '\0', NUMERIC_LENGTH);
}
// request the updated pref. PLMN list
nm_pref_plmn_list(network_data.pplmn, network_data.pplmn_mem.maxRcd, 1);
}
/*******************************************************************************
$Function: network_info_screen
$Description: confirm the deleted PLMN
$Returns:
$Arguments:
*******************************************************************************/
void network_info_screen (T_MFW_HND win, USHORT MessageId )
{
T_DISPLAY_DATA display_info;
TRACE_FUNCTION ("network_info_screen()");
dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, MessageId, TxtNull, COLOUR_STATUS_NETWORKS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_delete_pref_plnm, THREE_SECS, 0 );
info_dialog (win, &display_info);
}
/*******************************************************************************
$Function: network_OPT_EDT_start
$Description:
$Returns
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -