📄 mminetwork.c
字号:
T_MFW_NETWORK_STRUCT * plmn_ident;
MMI_TRACE_EVENT(("<<<talcon,network--event:%d",event ));
switch( event )
{
case NETWORK_NO_SERVICE:
case NETWORK_LIMITED_SERVICE:
TRACE_EVENT ("NETWORK NO/LIMITED SERVICE");
/*
* Set Status
*/
/*
glowing: modify the following statement for processing
the NETWORK_LIMITED_SERVICE
*/
data->status = event;
//data->status = NETWORK_NO_SERVICE;
/*
* Check if network log is enabled
*/
if( network_log_enabled () )
{
SEND_EVENT (idle_get_window(), NETWORK_NO_PLMN_XXX_AVAIL, 0, 0);
}
else
{
/*
glowing: modify the following statement for processing
the NETWORK_LIMITED_SERVICE
*/
//SEND_EVENT (idle_get_window(), NETWORK_NO_SERVICE, 0, 0);
SEND_EVENT (idle_get_window(), event, 0, 0);
if( data->network_list NEQ NULL )
{
switch( data->network_list_status )
{
case NETWORK_LIST_REGISTRATION:
/*
* Present list of available PLMNs again
*
* NOTE: if NETWORK_LIMITED_SERVICE has indicated
* that THE manually selected network is now forbidden
* the menu list must be updated (but don't ask me how).
*/
network_stop_animation ();
data->network_list_status = NETWORK_LIST_DISPLAY_FIRST;
if( network_data.aborted != TRUE ) //xsf add if sentence 11.11
{
//listDisplayListMenu (win, data->network_list, (ListCbFunc)network_list_cb,0);
network_forbidden_plmn();
//begin of xsf add 2003.02.25
if( data->network_list NEQ NULL )
{
FREE_MEMORY ((UBYTE *)data->network_list->List, data->network_list->ListLength * sizeof (T_MFW_MNU_ITEM));
FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData));
data->network_list = NULL;
}
//end of xsf add 2003.02.25
}
else
network_data.aborted = FALSE;
break;
case NETWORK_LIST_SELECTED:
/*
* After registration start, MFW returns the current status
*/
data->network_list_status= NETWORK_LIST_REGISTRATION;
data->keep_plmn_list = TRUE;
break;
}
}
}
#ifdef MMI_HOMEZONE_ENABLED
/* sh - tell homezone there is no network */
homezoneUpdate(0,0);
#endif
break;
case NETWORK_SEARCH_NETWORK:
TRACE_EVENT ("NETWORK SEARCH NETWORK");
SEND_EVENT (idle_get_window(), NETWORK_SEARCH_NETWORK, 0, 0);
break;
case NETWORK_FULL_SERVICE:
TRACE_EVENT ("NETWORK FULL SERVICE");
#ifdef MMS_WAP_ENABLED
{
static BYTE first = TRUE;
if(first)
{
extern void mms_pushfile_init();
first = FALSE;
mms_pushfile_init();
}
}
#endif
/*
* Set Status
*/
data->status = NETWORK_FULL_SERVICE;
/*
* Copy Network Name in textual and numerical format
*
* NOTE: Service Provider Name is not used
* Operator Name from SIM needs CPHS support by MFW
*/
plmn_ident = (T_MFW_NETWORK_STRUCT *)parameter;
#ifdef NO_ASCIIZ
memcpy (data->plmn_name, &plmn_ident->network_long.data, 20);
#else
memcpy (data->plmn_name, plmn_ident->network_long, 20);
#endif
memcpy (data->network_name, plmn_ident->network_numeric, 6);
/*
* If network name is not known use numeric representation as default.
*/
#ifdef NO_ASCIIZ
if( plmn_ident->network_long.len EQ 0 )
#else
if( strlen ((char *)(plmn_ident->network_long)) EQ 0 )
#endif
strcpy ((char *)data->plmn_name, (char *)data->network_name);
/*
* Store Roaming Indicator
*/
data->roaming_indicator = plmn_ident->roaming_indicator;
/*begin of zy add 03y/01m/13d*/
if( data->roaming_indicator==1 )
iconsSetState(iconRoam);
else if( data->roaming_indicator==0 )
iconsDeleteState(iconRoam);
/*end of zy add 03y/01m/13d*/
network_stop_animation ();
/*
* Inform Idle screen
*/
SEND_EVENT (idle_get_window(), NETWORK_FULL_SERVICE, 0, 0);
/*
* If network list is available
*/
if( data->network_list NEQ NULL )
{
switch( data->network_list_status )
{
case NETWORK_LIST_REGISTRATION:
data->keep_plmn_list = FALSE;
break;
case NETWORK_LIST_SELECTED:
/*
* After registration start, MFW returns the current status
*/
data->network_list_status= NETWORK_LIST_REGISTRATION;
if( network_data.aborted != TRUE )
network_selected();
else
network_data.aborted = FALSE;
//xsf remarked it 2003.02.27 if(data->keep_plmn_list EQ FALSE)
if( data->network_list NEQ NULL )
{
TRACE_EVENT("NETWORK_LIST_REGISTRATION No 1");
FREE_MEMORY ((UBYTE *)data->network_list->List, data->network_list->ListLength * sizeof (T_MFW_MNU_ITEM));
FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData));
//listsDestroy(data->network_list->win); //xsf add 2003.03.12
data->network_list = NULL;
}
break;
}
// API - Moved from previous position //condat 1119
// network_selected();
}
break;
case NETWORK_NO_NETWORK:
TRACE_EVENT ("NETWORK NO NETWORK");
//SetSignalPicNumberZero(); //xzy add for no network update signal pic number
/*
* No PLMN found after search for available PLMNs
*/
network_stop_animation ();
if( network_log_enabled () )
{
data->status = NETWORK_NO_SERVICE;
SEND_EVENT (idle_get_window(), NETWORK_NO_PLMN_XXX_AVAIL, 0, 0);
}
else
{
/*
* No Networks found.
*/
data->status = NETWORK_NO_SERVICE;
SEND_EVENT (idle_get_window(), NETWORK_NO_SERVICE, 0, 0);
}
#ifdef MMI_HOMEZONE_ENABLED
/* sh - tell homezone there is no network */
homezoneUpdate(0,0);
#endif
break;
case NETWORK_PLMN_LIST:
TRACE_EVENT ("NETWORK PLMN LIST");
TRACE_EVENT (">>NETWORK PLMN LIST");
/*
* PLMN list found
*/
if( network_data.aborted != TRUE )
{
if( network_log_enabled () )
{
data->status = NETWORK_NO_SERVICE;
SEND_EVENT (idle_get_window(), NETWORK_NO_PLMN_XXX_AVAIL, 0, 0);
}
else
{
T_MFW_PLMN_LIST * plmn_list;
/*...................... Networks founds................*/
data->status = NETWORK_NO_SERVICE;
/*...... If network list is available, destroy...... */
if( data->network_list NEQ NULL )
{
FREE_MEMORY ((UBYTE *)data->network_list->List, data->network_list->ListLength * sizeof (T_MFW_MNU_ITEM)); //xsf replace MAX_PLMN_ID with , data->network_list->ListLength
FREE_MEMORY ((UBYTE *)data->network_list, sizeof (ListMenuData));
data->network_list = NULL;
}
/*
* If list is empty, show info screen
*/
plmn_list = (T_MFW_PLMN_LIST *)parameter;
if( plmn_list->count EQ 0 )
{
network_stop_animation ();
network_no_plmns ();
}
else
{
/*
* Create and present list of available PLMNs
*
*/
data->network_list = network_create_list (data, parameter);
data->network_list_status = NETWORK_LIST_DISPLAY_FIRST;
network_stop_animation ();
listDisplayListMenu (win, data->network_list, (ListCbFunc)network_list_cb,0);
//xsf remarked 2002.10.31 SEND_EVENT (idle_get_window(), NETWORK_NO_SERVICE, 0, 0);
}
}
}
else
{
network_data.aborted = FALSE;
}
#ifdef MMI_HOMEZONE_ENABLED
/* sh - tell homezone there is no network */
homezoneUpdate(0,0);
#endif
break;
case NETWORK_LIST_SELECT_PLMN:
TRACE_EVENT ("NETWORK LIST_SELECT");
//TRACE_EVENT (">> NETWORK LIST_SELECT");
/*
* A network has been selected from the PLMN available list
* Start manual registration and start Search animation.
*/
network_start_animation_plmn_selection (value);
data->network_list_status = NETWORK_LIST_SELECTED;
nm_select_plmn ((U8 *)network_data.network_search_name[value]);
break;
case NETWORK_PPLMN_MEM_LIST:
{
T_MFW_PPLMN_MEM *pplmn_mem;
UBYTE i;
TRACE_EVENT ("NETWORK PPLMN MEM LIST");
TRACE_EVENT (">> NETWORK PPLMN MEM LIST");
/* Save the number of PLMN records:
* maxRcd = maximum preferred PLMN records on the SIM card
* usedRcd = used preferred PLMN records on the SIM card
*/
pplmn_mem = (T_MFW_PPLMN_MEM *)parameter;
network_data.pplmn_mem.maxRcd = pplmn_mem->maxRcd;
network_data.pplmn_mem.usedRcd = pplmn_mem->usedRcd;
/*
* Request preferred PLMN list from the SIM
*/
network_data.pplmn = (T_MFW_NETWORK_STRUCT *)ALLOC_MEMORY ((pplmn_mem->maxRcd) * sizeof (T_MFW_NETWORK_STRUCT));
if( network_data.pplmn EQ 0 )
{
return;
}
if( pplmn_mem->usedRcd > 0 )
{
// request MFW to fill up the pref. PLMN list
nm_pref_plmn_list(network_data.pplmn, pplmn_mem->maxRcd, 1);
}
else
{
// doesnt make sense to request the MFW to fill up the list
// when the "pplmn_mem->usedRcd" is 0
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);
}
data->network_list = network_create_pref_list (data);
listDisplayListMenu (win, data->network_list,(ListCbFunc)network_pref_list_cb,0);
}
}
break;
case NETWORK_PREFERRED_LIST:
{
UBYTE i;
// TRACE_EVENT ("NETWORK PREFERRED LIST");
TRACE_EVENT (">>NETWORK PREFERRED LIST");
/*
* Create and present the preferred list of PLMNs
*
*/
//nm network_stop_animation ();
data->network_list = network_create_pref_list (data);
listDisplayListMenu (win, data->network_list,(ListCbFunc)network_pref_list_cb,0);
}
break;
case NETWORK_CELL_SELECT:
{
/* If Homezone is active, inform it of the new cell data */
T_MFW_CELL_STRUCT *cell_data;
TRACE_EVENT(">>NETWORK CELL SELECT");
cell_data = (T_MFW_CELL_STRUCT *)parameter;
#ifdef MMI_HOMEZONE_ENABLED
/* SPR759 - SH - send cell reselection info to homezone */
homezoneUpdate(cell_data->lid, cell_data->ci);
#endif
}
}
}
/*
/*******************************************************************************
$Function: network_win_cb
$Description: network top window
$Returns:
$Arguments:
*******************************************************************************/
static int network_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
/*
* Top Window has no output
*/
return 1;
}
/*******************************************************************************
$Function: network_nm_cb
$Description: network handler (mfw callback handler)
$Returns:
$Arguments:
*******************************************************************************/
static int network_nm_cb (T_MFW_EVENT event, T_MFW_HND para)
{
TRACE_FUNCTION("network_nm_cb");
switch( event )
{
case E_NM_FULL_SERVICE:
g_nmService = NM_FULL_SERVICE;
SEND_EVENT (network_data.network_win, NETWORK_FULL_SERVICE, 0, para);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -