📄 mminetwork.c
字号:
TRACE_EVENT ("network_long == 0");
}
list_menu_data->List[i].flagFunc = item_flag_none;
}
/*
* Fill common parameter for list handling
*/
list_menu_data->ListLength = network_data.pplmn_mem.maxRcd;
list_menu_data->ListPosition = 1;
list_menu_data->CursorPosition = 1;
list_menu_data->SnapshotSize = network_data.pplmn_mem.maxRcd;
list_menu_data->Font = 0;
list_menu_data->LeftSoftKey = TxtSoftSelect;
list_menu_data->RightSoftKey = TxtSoftBack;
list_menu_data->KeyEvents = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN;
list_menu_data->Reason = 0;
list_menu_data->Strings = TRUE;
list_menu_data->Attr = &network_menuAttrib;
list_menu_data->autoDestroy = TRUE;
list_menu_data->listCol = COLOUR_LIST_XX;
return list_menu_data;
}
/*******************************************************************************
$Function: network_create_mobile_list
$Description:
$Returns:
$Arguments:
*******************************************************************************/
static ListMenuData * network_create_mobile_list (T_network_OPT * data)
{
UBYTE i;
ListMenuData *list_menu_data = (ListMenuData *)ALLOC_MEMORY (sizeof(ListMenuData));
if (list_menu_data EQ 0)
{
return NULL;
TRACE_EVENT ("failed to create the list");
}
list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY (MAX_SHOW_OF_PLMN * sizeof (T_MFW_MNU_ITEM));
if (list_menu_data->List EQ 0)
{
return NULL;
TRACE_EVENT ("failed to create the list");
}
TRACE_EVENT ("network_create_mobile_list ()");
/*
* Fill Menu List
*/
for (i=0; i < MAX_SHOW_OF_PLMN; i++)
{
mnuInitDataItem(&list_menu_data->List[i]);
/*
* set network name
*/
#ifdef NO_ASCIIZ
if (data->pplmn[i].network_long.len NEQ 0 )
{
list_menu_data->List[i].str = (char *)data->pplmn[i].network_long.data;
}
#else
if (strlen((char *)data->pplmn[i].network_long) NEQ 0 )
{
list_menu_data->List[i].str = (char *)data->pplmn[i].network_long;
}
#endif
else
{
list_menu_data->List[i].str = GET_TEXT(TxtEmpty);
}
list_menu_data->List[i].flagFunc = item_flag_none;
}
/*
* Fill common parameter for list handling
*/
list_menu_data->ListLength = MAX_SHOW_OF_PLMN;
list_menu_data->ListPosition = 1;
list_menu_data->CursorPosition = 1;
list_menu_data->SnapshotSize = MAX_SHOW_OF_PLMN;
list_menu_data->Font = 0;
list_menu_data->LeftSoftKey = TxtSoftSelect;
list_menu_data->RightSoftKey = TxtSoftBack;
list_menu_data->KeyEvents = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN;
list_menu_data->Reason = 0;
list_menu_data->Strings = TRUE;
list_menu_data->Attr = &network_menuAttrib;
list_menu_data->autoDestroy = TRUE; /*destroy the menulist after press any sofkey*/
list_menu_data->listCol = COLOUR_LIST_XX;
return list_menu_data;
}
/*******************************************************************************
$Function: network_submenu
$Description: Creates a submenu for the preferred list.
$Returns:
$Arguments:
*******************************************************************************/
static ListMenuData * network_submenu (T_network * data, T_MFW_NETWORK_STRUCT * plmn_list)
{
UBYTE i;
ListMenuData *list_menu_data = (ListMenuData *)ALLOC_MEMORY (sizeof (ListMenuData));
if (list_menu_data EQ 0)
return NULL;
list_menu_data->List = (T_MFW_MNU_ITEM *) ALLOC_MEMORY ((NETWORK_MENU_ITEM) * sizeof (T_MFW_MNU_ITEM));
if (list_menu_data->List EQ 0)
return NULL;
/*
* Fill Menu List
*/
for (i=0;i<(NETWORK_MENU_ITEM);i++)
{
mnuInitDataItem(&list_menu_data->List[i]);
/*
* set network name
*/
#ifdef NO_ASCIIZ
if (plmn_list->network_long.len NEQ 0)
list_menu_data->List[i].str = (char *)plmn_list->network_long.data;
#else
if (strlen((char *)plmn_list->network_long) NEQ 0)
list_menu_data->List[i].str = (char *)plmn_list->network_long;
#endif
else
;
//strncpy ((char *)list_menu_data->List[i].str,(char *)empty, 6);
plmn_list ++;
}
/*
* Fill common parameter for list handling
*/
list_menu_data->ListLength = data->pplmn_mem.maxRcd;
list_menu_data->ListPosition = 1;
list_menu_data->CursorPosition = 1;
list_menu_data->SnapshotSize = data->pplmn_mem.maxRcd;
list_menu_data->Font = 0;
list_menu_data->LeftSoftKey = TxtSoftSelect;
list_menu_data->RightSoftKey = TxtSoftBack;
list_menu_data->KeyEvents = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN;
list_menu_data->Reason = NETWORK_PREF_LIST_SELECTED;
list_menu_data->Strings = TRUE;
list_menu_data->Attr = &network_menuAttrib;
list_menu_data->listCol = COLOUR_LIST_XX;
return list_menu_data;
}
/*******************************************************************************
$Function: network_list_cb
$Description: Callback function list dialog.
$Returns:
$Arguments:
*******************************************************************************/
static void network_list_cb(T_MFW_HND win, ListMenuData * ListData)
{
TRACE_FUNCTION ("network_list_cb()");
if (ListData->Reason != LISTS_REASON_BACK)
{
SEND_EVENT (win, NETWORK_LIST_SELECT_PLMN, ListData->CursorPosition, NULL);
}
}
/*******************************************************************************
$Function: network_pref_list_cb
$Description: Callback function pref. list dialog.
$Returns:
$Arguments:
*******************************************************************************/
static void network_pref_list_cb(T_MFW_HND win, ListMenuData * ListData)
{
TRACE_FUNCTION ("network_pref_list_cb()");
if (ListData->Reason EQ LISTS_REASON_SELECT)
{
// call here the MenuOptions with the items "Select from the list"
//
FREE_MEMORY ((UBYTE *)network_data.network_list->List, (network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_MNU_ITEM));
FREE_MEMORY ((UBYTE *)network_data.network_list, sizeof (ListMenuData));
//keep the position of the selected PLMN, need it later to update the list
network_data.Listposition = ListData->ListPosition;
network_MNU_start(win,&network_OPTAttrib);
}
else
{
//user pressed Exit to go back to the network submenu
FREE_MEMORY ((UBYTE *)network_data.network_list->List, (network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_MNU_ITEM));
FREE_MEMORY ((UBYTE *)network_data.network_list, sizeof (ListMenuData));
FREE_MEMORY ((UBYTE *)network_data.pplmn,(network_data.pplmn_mem.maxRcd) * sizeof (T_MFW_NETWORK_STRUCT));
}
}
/*******************************************************************************
$Function: network_mobile_list_cb
$Description: Callback function international list dialog.
$Returns:
$Arguments:
*******************************************************************************/
static void network_mobile_list_cb(T_MFW_HND win, ListMenuData * ListData)
{
UBYTE i;
T_MFW_PPLMN_MODE mode;
T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
T_network_OPT * data = (T_network_OPT *)win_data->user;
TRACE_EVENT ("network_mobile_list_cb()");
switch (ListData->Reason)
{
case LISTS_REASON_SELECT: /* */
mode = REPLACE_PREF_PLMN; /* Overwrite an existing entry at a given index */
//update now the pref. PLMN list
//Overwrite an existing entry
//(network_data.Listposition) "+1" because the zero is counted as well
nm_change_pref_plmn(mode,(network_data.Listposition) +1 , 0, data->pplmn[ListData->ListPosition].network_numeric);
// destroy the Menu
network_MNU_destroy(data->win);
// request the pref. PLMN list
nm_pref_plmn_list(network_data.pplmn, network_data.pplmn_mem.maxRcd, 1);
break;
case LISTS_REASON_BACK: /* back to previous menu */
TRACE_EVENT ("pressed Back-key");
network_MNU_destroy(data->win);
break;
default:
return;
}
}
/*******************************************************************************
$Function: network_start_animation
$Description: Starts the network animation.
$Returns:
$Arguments:
*******************************************************************************/
static void network_start_animation(void)
{
T_DISPLAY_DATA display_info;
TRACE_FUNCTION ("network_start_animation()");
dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "Searching for", "Networks", COLOUR_STATUS_NETWORKS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, FOREVER, KEY_CLEAR| KEY_RIGHT );
/*
* Call Info Screen
*/
network_data.network_search_win = info_dialog (network_data.network_win, &display_info);
}
/*******************************************************************************
$Function: network_start_animation_plmn_selection
$Description: Starts the plmn selection animation.
$Returns:
$Arguments:
*******************************************************************************/
static void network_start_animation_plmn_selection(int plmn_value)
{
T_DISPLAY_DATA display_info;
T_MFW_PLMN_LIST * plmn_list;
TRACE_FUNCTION ("network_start_animation()");
dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "Requesting....", NULL, COLOUR_STATUS_NETWORKS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, FOREVER, KEY_CLEAR| KEY_RIGHT );
/*
* Call Info Screen
*/
network_data.network_search_win = info_dialog (network_data.network_win, &display_info);
}
/*******************************************************************************
$Function: network_forbidden_plmn
$Description: Starts the forbidden plmn data screen.
$Returns:
$Arguments:
*******************************************************************************/
static void network_forbidden_plmn(void)
{
T_DISPLAY_DATA display_info;
TRACE_FUNCTION ("network_start_animation()");
dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtNetwork, TxtForbidden, COLOUR_STATUS_NETWORKS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, 3500, KEY_CLEAR| KEY_RIGHT );
/*
* Call Info Screen
*/
network_data.network_search_win = info_dialog (network_data.network_win, &display_info);
}
/*******************************************************************************
$Function: network_selected
$Description: displays info screen on network selected
$Returns:
$Arguments:
*******************************************************************************/
static void network_selected(void)
{
T_DISPLAY_DATA display_info;
TRACE_FUNCTION ("network_start_animation()");
dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtNetwork, TxtSelected, COLOUR_STATUS_NETWORKS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, 3500, KEY_CLEAR| KEY_RIGHT );
/*
* Call Info Screen
*/
network_data.network_search_win = info_dialog (network_data.network_win, &display_info);
}
/*******************************************************************************
$Function: network_no_plmns
$Description: Indicate Info Screen that the network list is empty.
$Returns:
$Arguments:
*******************************************************************************/
static void network_no_plmns(void)
{
T_DISPLAY_DATA display_info;
TRACE_FUNCTION ("network_no_plmns()");
dlg_initDisplayData_TextStr( &display_info, TxtNull, TxtNull, "No networks", "available", COLOUR_STATUS_NETWORKS);
dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)network_animation_cb, THREE_SECS, KEY_CLEAR| KEY_RIGHT );
/*
* Call Info Screen
*/
info_dialog (0, &display_info);
}
/*******************************************************************************
$Function: network_stop_animation
$Description: Stops the network animation.
$Returns:
$Arguments:
*******************************************************************************/
static void network_stop_animation(void)
{
TRACE_FUNCTION ("network_stop_animation()");
if (network_data.network_search_win)
{
SEND_EVENT(network_data.network_search_win,DIALOG_DESTROY,0,0);
network_data.network_search_win = 0;
}
}
/*******************************************************************************
$Function: network_animation_cb
$Description: Callback for information dialog (not used)n
$Returns:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -