📄 mminetwork.c
字号:
/*******************************************************************************
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 (6349)
$Module: Network
$File: MmiNetwork.c
$Revision: 1.0
$Author: Condat(UK)
$Date: 22/02/01
********************************************************************************
Description:
********************************************************************************
$History:
25/10/00 Original Condat(UK) BMI version.
$End
*******************************************************************************/
/*******************************************************************************
Include Files
*******************************************************************************/
#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 "mfw_sys.h"
#include "p_sim.h"
#include "mfw_mfw.h"
#include "mfw_win.h"
#include "mfw_kbd.h"
/* SPR#1428 - SH - New Editor changes */
#ifndef NEW_EDITOR
#include "mfw_edt.h"
#endif
#include "mfw_lng.h"
#include "mfw_icn.h"
#include "mfw_mnu.h"
#include "mfw_tim.h"
#include "mfw_sim.h"
#include "mfw_nm.h"
#include "mfw_cm.h"
#include "mfw_sat.h"
#include "mfw_phb.h"
#include "mfw_sms.h"
#include "dspl.h"
#include "ksd.h"
#include "psa.h"
#include "MmiDummy.h"
#include "MmiMmi.h"
#include "MmiMain.h"
#include "MmiStart.h"
#include "MmiPins.h"
#include "MmiDialogs.h"
#include "MmiLists.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 "MmiMenu.h"
#include "MmiIdle.h"
#include "MmiCall.h"
#include "MmiBookController.h"
#include "MmiNetwork.h"
#include "MmiSoftKeys.h"
#include "MmiSounds.h"
#include "MmiPcm.h"
#include "mfw_ffs.h"
#include "MmiCPHS.h"
#ifdef MMI_HOMEZONE_ENABLED
#include "MmiHomezone.h"
#endif
#include "MmiNetwork.h"
#include "cus_aci.h"
#include "p_sim.h"
#include "pcm.h"
#include "mmiColours.h"
/*
* Data for top window
*/
typedef struct
{
T_MMI_CONTROL mmi_control;
T_MFW_HND network_win; /* MFW win handler */
T_MFW_HND nm_handle; /* MFW network handler */
UBYTE aborted;
UBYTE keep_plmn_list;
T_MFW_NETWORK_STRUCT *pplmn; /* pref. PLMN list */
T_MFW_PPLMN_MEM pplmn_mem;
UBYTE plmn_name[SIZE_PLMN_NAME]; /* textual network name */
UBYTE network_name[SIZE_NETWORK_NAME]; /* numeric network name */
USHORT status; /* current status */
UBYTE roaming_indicator; /* Roaming Indicator */
ListMenuData * network_list; /* PLMN available List */
UBYTE network_list_status;/* Network List Status */
UBYTE network_search_name[MAX_PLMN][6]; /* numeric network name */
T_MFW_HND network_search_win;
UBYTE Listposition;
} T_network;
T_network network_data;
typedef struct
{
T_MMI_CONTROL mmi_control;
T_MFW_HND win;
SHORT id;
T_MFW_HND parent;
T_MFW_HND kbd;
T_MFW_HND kbd_long;
T_MFW_HND menu;
T_MFW_HND dialog_win;
ListMenuData *network_list;
T_MFW_NETWORK_STRUCT *pplmn; /* available List in the MOBILE */
CHAR buffer[6];
#ifdef NEW_EDITOR
T_AUI_EDITOR_DATA editor_info; /* SPR#1428 - SH - New Editor data */
#else
T_EDITOR_DATA editor_info; /* storage for editor attributes */
#endif
} T_network_OPT;
typedef enum
{
E_INIT,
E_BACK,
E_RETURN,
E_ABORT,
E_EXIT
} e_lists_events;
/*
* Local prototypes
*/
static int network_win_cb (T_MFW_EVENT event, T_MFW_WIN * win);
static int network_nm_cb (T_MFW_EVENT event, T_MFW_HND para);
static void network_remove_network_log (void);
static UBYTE network_log_enabled (void);
static void network_list_cb (T_MFW_HND win, ListMenuData * ListData);
static void network_pref_list_cb (T_MFW_HND win, ListMenuData * ListData);
static ListMenuData * network_create_list (T_network * data, T_MFW_PLMN_LIST * plmn_list);
static ListMenuData * network_create_pref_list (T_network * data);
static ListMenuData * network_create_mobile_list (T_network_OPT * data);
static void network_start_animation_plmn_selection (int plmn_value);
static void network_start_animation (void);
static void network_stop_animation (void);
static void network_selected (void);
static void network_forbidden_plmn (void);
static void network_no_plmns (void);
void network_animation_cb (T_MFW_HND win, UBYTE identifier, UBYTE reason);
T_MFW_HND network_MNU_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr);
static T_MFW_HND network_MNU_create(MfwHnd parent_window);
static void network_MNU_destroy(MfwHnd own_window);
void network_MNU_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static int network_MNU_mnu_cb (MfwEvt e, MfwMnu *m);
static int network_MNU_win_cb (MfwEvt e, MfwWin *w);
static int network_MNU_kbd_cb (MfwEvt e, MfwKbd *k);
static int network_request_plnm_list (MfwMnu* m, MfwMnuItem* i);
void network_delete_pref_plnm (T_MFW_HND win , USHORT identifier, UBYTE reason);
void network_info_screen (T_MFW_HND win, USHORT MessageId);
static int network_delete(MfwMnu* m, MfwMnuItem* i);
T_MFW_HND network_EDT_start (MfwMnu* m, MfwMnuItem* i);
static T_MFW_HND network_EDT_create (T_MFW_HND parent);
static void network_EDT_destroy (T_MFW_HND window);
static void network_EDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static void network_EDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event);
/*
* Local Definitions
*/
#define NETWORK_LIMITED_SERVICE 420
#define NETWORK_NO_NETWORK 421
#define NETWORK_PLMN_LIST 422
#define NETWORK_PREFERRED_LIST 423
#define NETWORK_PPLMN_MEM_LIST 424
/* SPR759 - SH - Cell reselection */
#define NETWORK_CELL_SELECT 425
#define NETWORK_LIST_DISPLAY 430
#define NETWORK_LIST_SELECT_PLMN 432
/*
* Local Network List Status
*/
#define NETWORK_LIST_DISPLAY_FIRST 1
#define NETWORK_LIST_SELECTED 2
#define NETWORK_LIST_REGISTRATION 3
#define NETWORK_PREF_LIST_SELECTED 4
#define NETWORK_MENU_ITEM 2
//nm 5.3.01 this number will be change
#define MAX_SHOW_OF_PLMN 99
static MfwMnuItem network_OPTItems [] =
{
{0,0,0,(char *)TxtSelectFromList, 0, (MenuFunc)network_request_plnm_list, item_flag_none},
{0,0,0,(char *)TxtEnterNetworkCode, 0, (MenuFunc)network_EDT_start, item_flag_none},
{0,0,0,(char *)TxtDelete, 0, (MenuFunc)network_delete, item_flag_none}
};
static MfwMnuAttr network_OPTAttrib =
{
&network_menuArea,
MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */
-1, /* use default font */
network_OPTItems, /* with these items */
sizeof(network_OPTItems)/sizeof(MfwMnuItem), /* number of items */
COLOUR_LIST_NETWORK, TxtNull, NULL, MNUATTRSPARE
};
static MfwMnuAttr network_menuAttrib =
{
&network_menuArea,
MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */
-1, /* use default font */
NULL, /* with these items */
0, /* number of items */
COLOUR_LIST_NETWORK, TxtNull, NULL, MNUATTRSPARE
};
/*******************************************************************************
$Function: networkInit
$Description:
$Returns:
$Arguments:
*******************************************************************************/
T_MFW_HND networkInit (T_MFW_HND parent_window)
{
return (network_create (parent_window));
}
/*******************************************************************************
$Function: networkExit
$Description: exit network handling (Backward Compatibility interface)
$Returns:
$Arguments:
*********************************************************************/
void networkExit (void)
{
network_destroy (network_data.network_win);
}
/*********************************************************************
*
* Network Dialog
*
* Window - Structure
*
* network --> network_list
* --> network_search_animation
*
*********************************************************************/
/*******************************************************************************
$Function: network_create
$Description: create network top window
$Returns:
$Arguments:
*******************************************************************************/
T_MFW_HND network_create (T_MFW_HND parent_window)
{
T_network * data = &network_data;
T_MFW_WIN * win;
TRACE_FUNCTION ("network_create()");
data->network_win = win_create (parent_window, 0, 0, (T_MFW_CB)network_win_cb);
if (data->network_win EQ 0)
return 0;
/*
* Create window handler
*/
data->mmi_control.dialog = (T_DIALOG_FUNC)network;
data->mmi_control.data = data;
win = ((T_MFW_HDR *)data->network_win)->data;
win->user = (void *) data;
/*
* Initialise MFW
*/
nm_init ();
/*
* Create any other handler
*/
data->nm_handle = nm_create (data->network_win, E_NM_ALL_SERVICES, (T_MFW_CB)network_nm_cb);
memset (data->plmn_name, 0, SIZE_PLMN_NAME);
memset (data->network_name, 0, SIZE_NETWORK_NAME);
data->aborted = FALSE;
data->keep_plmn_list = FALSE;
data->status = NETWORK_NO_SERVICE;
data->network_list = NULL;
data->network_search_win = 0;
data->Listposition = 0;
winShow(data->network_win);
/*
* return window handle
*/
return data->network_win;
}
/*******************************************************************************
$Function: network_destroy
$Description: destroy network top window
$Returns:
$Arguments:
*******************************************************************************/
void network_destroy (T_MFW_HND own_window)
{
T_MFW_WIN * win;
T_network * data;
TRACE_FUNCTION ("network_destroy()");
if (own_window)
{
win = ((T_MFW_HDR *)own_window)->data;
data = (T_network *)win->user;
if (data)
{
/*
* Exit NM and delete NM handler
*/
nm_exit ();
nm_delete (data->nm_handle);
/*
* Delete WIN handler
*/
win_delete (data->network_win);
}
}
}
/*******************************************************************************
$Function: network
$Description: network top window dialog function
$Returns:
$Arguments:
*******************************************************************************/
void network (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
T_network * data = (T_network *)win_data->user;
T_MFW_NETWORK_STRUCT * plmn_ident;
TRACE_FUNCTION(">>> network()");
switch (event)
{
case NETWORK_NO_SERVICE:
case NETWORK_LIMITED_SERVICE:
TRACE_EVENT ("NETWORK NO/LIMITED SERVICE");
/*
* Set Status
*/
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
{
SEND_EVENT (idle_get_window(), NETWORK_NO_SERVICE, 0, 0);
if (data->network_list NEQ NULL)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -