📄 mfw_nm.c
字号:
}
cur_elem = cur_elem->next;
}
return FALSE;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_NM |
| STATE : code ROUTINE : nm_signal |
+--------------------------------------------------------------------+
PURPOSE : Send a signal
*/
static void nm_signal (MfwEvt event, void *para)
{
UBYTE temp;
TRACE_FUNCTION("nm_signal()");
// temp = dspl_Enable(0);
if (mfwSignallingMethod EQ 0)
{
if (mfwFocus)
if (nm_sign_exec(mfwFocus,event,para))
{
// dspl_Enable(temp);
return;
}
if (mfwRoot)
nm_sign_exec(mfwRoot,event,para);
}
else
{
MfwHdr * h = 0;
/*
* Focus set, then start here
*/
if (mfwFocus)
h = mfwFocus;
/*
* Focus not set, then start root
*/
if (!h)
h = mfwRoot;
/*
* No elements available, return
*/
while (h)
{
/*
* Signal consumed, then return
*/
if (nm_sign_exec (h, event, para))
{
// dspl_Enable(temp);
return;
}
/*
* All windows tried inclusive root
*/
if (h == mfwRoot)
{
// dspl_Enable(temp);
return;
}
/*
* get parent window
*/
h = mfwParent(mfwParent(h));
if(h)
h = ((MfwWin * )(h->data))->elems;
}
nm_sign_exec (mfwRoot, event, para);
}
// dspl_Enable(temp);
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_NM |
| STATE : code ROUTINE : nm_set_mode |
+--------------------------------------------------------------------+
PURPOSE : Change registration mode
*/
void nm_set_mode (U8 mode)
{
TRACE_FUNCTION("nm_set_mode()");
if (mode != NM_AUTOMATIC && mode != NM_MANUAL)
return;
if (mode != last_selected_mode)
{
last_selected_mode = mode;
{
FFS_flashData.PLMN_selection_mode = mode;
flash_write();
}
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_NM |
| STATE : code ROUTINE : nm_get_mode |
+--------------------------------------------------------------------+
PURPOSE : Get registration mode
*/
T_MFW nm_get_mode ()
{
return last_selected_mode;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_NM |
| STATE : code ROUTINE : nm_activate |
+--------------------------------------------------------------------+
PURPOSE : Notify about SIM card activation
*/
void nm_activate (U8 result)
{
//TRACE_FUNCTION("nm_activate()");
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_NM |
| STATE : code ROUTINE : nm_reg_flag_req |
+--------------------------------------------------------------------+
PURPOSE : Notify about SIM card activation
*/
T_MFW nm_reg_flag_req()
{
return reg_flag;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_NM |
| STATE : code ROUTINE : nm_mmi_parameters |
+--------------------------------------------------------------------+
PURPOSE : Notify about relevant parameters
*/
void nm_mmi_parameters (T_imsi_field *imsi, T_pref_plmn *plmn)
{
void simDecodeIMSI (U8 *ci, U8 li, U8 *di);
TRACE_FUNCTION("nm_mmi_parameters()");
simDecodeIMSI(imsi->field,imsi->c_field,mfw_IMSI);
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_NM |
| STATE : code ROUTINE : nm_pref_plmn_list |
+--------------------------------------------------------------------+
PURPOSE : Request preferred PLMN list
*/
void nm_pref_plmn_list(T_MFW_NETWORK_STRUCT *pplmn, UBYTE count, SHORT start)
{
SHORT lastIdx;
T_ACI_CPOL_OPDESC operLst[MAX_OPER];
T_ACI_RETURN res;
UBYTE i, j;
TRACE_FUNCTION("nm_pref_plmn_list()");
pplmn_list.count = 0;
pplmn_list.plmn = pplmn;
pplmnCnt = count;
j = 0;
while (1)
{
res = qAT_PlusCPOL(CMD_SRC_LCL,
start,
&lastIdx,
operLst,
CPOL_MOD_CompactList);
if (res == AT_EXCT)
return;
if (res == AT_CMPL)
{
for (i=0; i<MAX_OPER; i++)
{
if (operLst[i].index == -1 OR pplmn_list.count >= pplmnCnt)
break;
pplmn_list.plmn[j].index = operLst[i].index;
#ifdef NO_ASCIIZ
sAT_PlusCOPSE((UBYTE *)operLst[i].oper,
(UBYTE)operLst[i].format,
&pplmn_list.plmn[j].network_long,
&pplmn_list.plmn[j].network_short,
pplmn_list.plmn[j].network_numeric);
#else
sAT_PlusCOPSE((UBYTE *)operLst[i].oper,
(UBYTE)operLst[i].format,
pplmn_list.plmn[j].network_long,
pplmn_list.plmn[j].network_short,
pplmn_list.plmn[j].network_numeric);
#endif
pplmn_list.count++;
j++;
}
if (i < MAX_OPER OR (j EQ pplmnCnt))
{
nm_signal(E_NM_PREF_PLMN_LIST, &pplmn_list);
return;
}
start = lastIdx + 1;
}
else
{
nm_signal(E_NM_PREF_PLMN_LIST, &pplmn_list);
return;
}
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_NM |
| STATE : code ROUTINE : rAT_PlusCPOL |
+--------------------------------------------------------------------+
PURPOSE : callback of preferred PLMN list
*/
void rAT_PlusCPOL(SHORT startIdx, SHORT lastIdx,
T_ACI_CPOL_OPDESC *operLst,
SHORT usdNtry)
{
UBYTE i, j;
SHORT endIdx;
T_MFW_PPLMN_MEM pplmn_mem;
TRACE_FUNCTION("nm_pref_plmn_list()");
if (mfwPplmnReq)
{
mfwPplmnReq = 0;
pplmn_mem.maxRcd = (UBYTE)lastIdx;
pplmn_mem.usedRcd = (UBYTE)usdNtry;
nm_signal(E_NM_PPLMN_MEM, &pplmn_mem);
return;
}
endIdx = lastIdx;
j = 0;
while (1)
{
for (i=0; i<MAX_OPER; i++)
{
if (operLst[i].index == -1 OR pplmn_list.count >= pplmnCnt)
break;
pplmn_list.plmn[j].index = operLst[i].index;
#ifdef NO_ASCIIZ
sAT_PlusCOPSE((UBYTE *)operLst[i].oper,
(UBYTE)operLst[i].format,
&pplmn_list.plmn[j].network_long,
&pplmn_list.plmn[j].network_short,
pplmn_list.plmn[j].network_numeric);
#else
sAT_PlusCOPSE((UBYTE *)operLst[i].oper,
(UBYTE)operLst[i].format,
pplmn_list.plmn[j].network_long,
pplmn_list.plmn[j].network_short,
pplmn_list.plmn[j].network_numeric);
#endif
pplmn_list.count++;
j++;
}
if ((i<MAX_OPER) OR (j EQ pplmnCnt))
{
nm_signal(E_NM_PREF_PLMN_LIST, &pplmn_list);
return;
}
startIdx = endIdx + 1;
if (qAT_PlusCPOL(CMD_SRC_LCL, startIdx, &endIdx,
operLst, CPOL_MOD_CompactList) != AT_CMPL)
{
nm_signal(E_NM_PREF_PLMN_LIST, &pplmn_list);
return;
}
}
}
/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_NM |
| STATE : code ROUTINE : nm_change_pref_plmn |
+----------------------------------------------------------------------+
PURPOSE : Save/Change/Delete a preferred PLMN
*/
T_MFW_NM_RETURN nm_change_pref_plmn(T_MFW_PPLMN_MODE mode,
SHORT index, SHORT index2,
UBYTE *network_numeric)
{
SHORT idx;
T_ACI_CPOL_FRMT format;
CHAR * oper;
SHORT idx2;
T_ACI_CPOL_MOD md;
TRACE_FUNCTION("nm_change_pref_plmn()");
switch (mode)
{
case NEW_PREF_PLMN:
idx = -1;
idx2 = -1;
format = CPOL_FRMT_Numeric;
oper = (CHAR *)network_numeric;
md = CPOL_MOD_CompactList;
break;
case REPLACE_PREF_PLMN:
idx = index;
idx2 = -1;
format = CPOL_FRMT_Numeric;
oper = (CHAR *)network_numeric;
md = CPOL_MOD_CompactList;
break;
case DELETE_PREF_PLMN:
idx = index;
idx2 = -1;
format = CPOL_FRMT_NotPresent;
oper = NULL;
md = CPOL_MOD_CompactList;
break;
case INSERT_PREF_PLMN:
idx = index;
idx2 = -1;
format = CPOL_FRMT_Numeric;
oper = (CHAR *)network_numeric;
md = CPOL_MOD_Insert;
break;
case CHANGE_PREF_PLMN:
idx = index;
idx2 = index2;
format = CPOL_FRMT_Numeric;
oper = (CHAR *)network_numeric;
md = CPOL_MOD_CompactList;
break;
default:
return NM_ERR;
}
if (sAT_PlusCPOL(CMD_SRC_LCL, idx, format,
oper, idx2, md) != AT_EXCT)
return NM_ERR;
pplmnCmd = CHANGE_PREF_PLMN;
return NM_OK;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_NM |
| STATE : code ROUTINE : nm_ok_pref_plmn |
+--------------------------------------------------------------------+
PURPOSE : The change of preferred PLMN is successful.
*/
void nm_ok_pref_plmn(void)
{
TRACE_FUNCTION("nm_ok_pref_plmn()");
if (pplmnCmd == CHANGE_PREF_PLMN)
{
pplmnCmd = CMD_NOT_PRESENT;
nm_signal(E_NM_CHANGE_PPLMN_OK, 0);
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_NM |
| STATE : code ROUTINE : nm_error_pref_plmn |
+--------------------------------------------------------------------+
PURPOSE : The change of preferred PLMN is failed.
*/
void nm_error_pref_plmn(void)
{
TRACE_FUNCTION("nm_error_pref_plmn()");
if (pplmnCmd == CHANGE_PREF_PLMN)
{
pplmnCmd = CMD_NOT_PRESENT;
nm_signal(E_NM_CHANGE_PPLMN_ERR, 0);
return;
}
if (mfwPplmnReq)
mfwPplmnReq = 0;
pplmn_list.count = 0;
nm_signal(E_NM_PREF_PLMN_LIST, &pplmn_list);
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_NM |
| STATE : code ROUTINE : nm_copy_plmn_list |
+--------------------------------------------------------------------+
PURPOSE : Write the PLMN information in PLMN list
*/
void nm_copy_plmn_list (T_MFW_NETWORK_STRUCT *plmn, T_ACI_COPS_OPDESC *operLst)
{
U8 *forbidden_id;
U8 *fieldstrength;
TRACE_FUNCTION("nm_copy_plmn_list()");
#ifdef NO_ASCIIZ
plmn->network_long.len = 0;
plmn->network_short.len = 0;
memset(plmn->network_numeric, 0, NUMERIC_LENGTH);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -