📄 mfw_sim.c
字号:
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_signal |
+--------------------------------------------------------------------+
PURPOSE : Send a signal
*/
void sim_signal (MfwEvt event, void *para)
{
//UBYTE temp = dspl_Enable(0);
TRACE_FUNCTION ("sim_signal()");
if (mfwSignallingMethod EQ 0)
{
if (mfwFocus)
if (sim_sign_exec(mfwFocus,event,para))
{
// dspl_Enable(temp);
return;
}
if (mfwRoot)
sim_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 (sim_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;
}
sim_sign_exec (mfwRoot, event, para);
}
// dspl_Enable(temp);
return;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_sign_exec |
+--------------------------------------------------------------------+
PURPOSE : Send a signal if SIM management handler
*/
int sim_sign_exec (MfwHdr *cur_elem, MfwEvt event, T_MFW_SIM_PARA *para)
{
TRACE_FUNCTION("sim_sign_exec()");
while (cur_elem)
{
if (cur_elem->type == MfwTypSim)
{
T_MFW_SIM *sim_data;
sim_data = (T_MFW_SIM *) cur_elem->data;
if (sim_data->emask & event)
{
sim_data->event = event;
switch (event)
{
case E_SIM_STATUS:
memcpy(&sim_data->para.status,
para,sizeof(T_MFW_SIM_STATUS));
break;
/*MC CONQ5862, 13/06/02*, added new event*/
case E_SIM_READ_CALLBACK:
memcpy(&sim_data->para.callback,
para,sizeof(T_MFW_READ_CALLBACK));
break;
}
if (sim_data->handler)
{
// PATCH LE 06.06.00
// store current mfw elem
current_mfw_elem = cur_elem;
// END PATCH LE 06.06.00
if ((*(sim_data->handler))(sim_data->event,
(void *) &sim_data->para))
return TRUE;
}
}
}
cur_elem = cur_elem->next;
}
return FALSE;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_activate |
+--------------------------------------------------------------------+
PURPOSE : Start SIM card activation
*/
void sim_activate (void)
{
TRACE_FUNCTION("sim_activate()");
/*
* Full functionality is used don磘 reset the ME
*/
if (sAT_PlusCFUN(CMD_SRC_LCL,CFUN_FUN_Full,CFUN_RST_NotPresent)
NEQ AT_EXCT)
{
TRACE_ERROR("sAT_PlusCFUN error");
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_spn_req |
+--------------------------------------------------------------------+
PURPOSE : Request service provider name
*/
void sim_spn_req (void)
{
T_EF_SPN spn;
TRACE_FUNCTION("sim_spn_req()");
memset(&spn,0,sizeof(T_EF_SPN));
if (sim_check_service(17,sim_service_table)
EQ ALLOCATED_AND_ACTIVATED)
sim_read_sim(SIM_SPN,17,17);
else
nm_spn_cnf(SIM_CAUSE_ACCESS_PROHIBIT, &spn);
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_ok_cfun |
+--------------------------------------------------------------------+
PURPOSE : Notify successful end of SIM card activation
*/
void sim_ok_cfun (void)
{
T_ACI_CFUN_FUN fun;
TRACE_FUNCTION ("sim_ok_cfun()");
qAT_PlusCFUN( CMD_SRC_LCL, &fun );
if( fun EQ CFUN_FUN_Full )
{
sim_stat = SIM_ACTIVE;
sim_status.sim_status = MFW_SIM_NO_PIN;
sim_status.sim_operation_mode = sim_config.oper_mode;
sim_status.sim_pin_retries = 0;
sim_status.sim_procedure = MFW_SIM_ACTIVATION;
sim_status.sim_status_type = pin_ident;
pin_ident = MFW_SIM_UNKNOWN;
sim_signal(E_SIM_STATUS,&sim_status);
nm_activate(MFW_SIM_NO_PIN);
pin1_set = MFW_SIM_DISABLE;
}
else if( fun EQ CFUN_FUN_Minimum )
{
nm_ok_deregistration();
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_error_cfun |
+--------------------------------------------------------------------+
PURPOSE : Notify error status of SIM card
*/
void sim_error_cfun (U8 result)
{
TRACE_FUNCTION("sim_error_cfun()");
sim_status.sim_procedure = MFW_SIM_ACTIVATION;
sim_status.sim_operation_mode = sim_config.oper_mode;
switch (result)
{
case CME_ERR_SimPinReq: /* PIN 1 must be entered */
sim_status.sim_status = MFW_SIM_PIN_REQ;
sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN1);
sim_status.sim_status_type = MFW_SIM_PIN1;
sim_stat = SIM_ACTIVE;
break;
case CME_ERR_SimPin2Req: /* PIN 2 must be entered */
sim_status.sim_status = MFW_SIM_PIN2_REQ;
sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN2);
sim_status.sim_status_type = MFW_SIM_PIN2;
sim_stat = SIM_ACTIVE;
break;
case CME_ERR_SimPukReq: /* PUK 1 must be entered */
sim_status.sim_status = MFW_SIM_PUK_REQ;
sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PUK1);
sim_status.sim_status_type = MFW_SIM_PUK1;
sim_stat = SIM_ACTIVE;
break;
case CME_ERR_SimPuk2Req: /* PUK 2 must be entered */
sim_status.sim_status = MFW_SIM_PUK2_REQ;
sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PUK2);
sim_status.sim_status_type = MFW_SIM_PUK2;
sim_stat = SIM_ACTIVE;
break;
case CME_ERR_NotPresent: /* JVJ -#1580. Unexpected error should be treated as INVALID CARD for FTA*/
case CME_ERR_SimFail: /* SIM card is invalid */
case CME_ERR_SimWrong:
sim_status.sim_status = MFW_SIM_INVALID_CARD;
sim_status.sim_pin_retries = 0;
sim_status.sim_status_type = MFW_SIM_UNKNOWN;
sim_stat = SIM_NOT_ACTIVE;
break;
case CME_ERR_SimNotIns: /* no SIM card inserted */
sim_status.sim_status = MFW_SIM_NO_SIM_CARD;
sim_status.sim_pin_retries = 0;
sim_status.sim_status_type = MFW_SIM_UNKNOWN;
sim_stat = SIM_NOT_ACTIVE;
break;
default:
TRACE_ERROR("sim_error_cfun(): result");
return;
}
sim_signal(E_SIM_STATUS,&sim_status);
if ((result == CME_ERR_SimPinReq)
OR (result == CME_ERR_SimPukReq))
pin1_set = MFW_SIM_ENABLE;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_error_cpin |
+--------------------------------------------------------------------+
PURPOSE : Inform about error of PIN entering or PUK entering
*/
void sim_error_cpin (T_ACI_CME_ERR reason)
{
T_ACI_CPIN_RSLT code;
TRACE_FUNCTION("sim_error_cpin()");
sim_status.sim_procedure = pin_flag;
sim_status.sim_operation_mode = sim_config.oper_mode;
sim_status.sim_status = MFW_SIM_FAILURE;
sim_status.sim_status_type = pin_ident;
pin_flag = -1;
pin_ident = MFW_SIM_UNKNOWN;
switch (reason)
{
case CME_ERR_WrongPasswd:
if (qAT_PlusCPIN(CMD_SRC_LCL,&code) != AT_CMPL)
{
TRACE_ERROR("sim_error_cpin():CPIN? failed");
sim_signal(E_SIM_STATUS,&sim_status);
return;
}
break;
case CME_ERR_SimWrong:
sim_status.sim_status = MFW_SIM_INVALID_CARD;
sim_signal(E_SIM_STATUS,&sim_status);
return;
default:
TRACE_ERROR("sim_error_cpin():Ill reason");
sim_signal(E_SIM_STATUS,&sim_status);
return;
}
switch (code)
{
case CPIN_RSLT_SimPinReq:
sim_status.sim_status = MFW_SIM_PIN_REQ;
sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN1);
break;
case CPIN_RSLT_SimPukReq:
sim_status.sim_status = MFW_SIM_PUK_REQ;
sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PUK1);
break;
case CPIN_RSLT_SimPin2Req:
sim_status.sim_status = MFW_SIM_PIN2_REQ;
sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PIN2);
break;
case CPIN_RSLT_SimPuk2Req:
sim_status.sim_status = MFW_SIM_PUK2_REQ;
sim_status.sim_pin_retries = sim_pin_count(MFW_SIM_PUK2);
break;
case CPIN_RSLT_NotPresent:
case CPIN_RSLT_SimReady:
default:
TRACE_ERROR("sim_error_cpin():Ill code");
break;
}
sim_signal(E_SIM_STATUS,&sim_status);
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_ok_cpin |
+--------------------------------------------------------------------+
PURPOSE : Successful end of PIN entering or PUK entering
*/
void sim_ok_cpin (void)
{
TRACE_FUNCTION("sim_ok_cpin()");
switch (pin_flag)
{
case MFW_SIM_VERIFY:
sim_status.sim_procedure = MFW_SIM_VERIFY;
sim_status.sim_status = MFW_SIM_NO_PIN;
sim_status.sim_status_type = pin_ident;
break;
case MFW_SIM_UNBLOCK:
sim_status.sim_procedure = MFW_SIM_UNBLOCK;
sim_status.sim_status = MFW_SIM_SUCCESS;
sim_status.sim_status_type = pin_ident;
break;
default:
break;
}
pin_flag = -1;
pin_ident = MFW_SIM_UNKNOWN;
sim_status.sim_operation_mode = sim_config.oper_mode;
sim_status.sim_pin_retries = 0;
sim_signal (E_SIM_STATUS, &sim_status);
if (nm_reg_flag_req())
nm_activate(MFW_SIM_NO_PIN);
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_ss_unblock |
+--------------------------------------------------------------------+
PURPOSE : SIM unblock via SS string
*/
void sim_ss_unblock(UBYTE result, T_ACI_CME_ERR reason)
{
TRACE_FUNCTION("sim_ss_unblock()");
pin_flag = MFW_SIM_UNBLOCK;
if (result == SIM_UBLK_ERROR)
sim_error_cpin (reason);
if (result == SIM_UBLK_OK)
sim_ok_cpin ();
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_verify_pin |
+--------------------------------------------------------------------+
PURPOSE : Verify PIN
*/
void sim_verify_pin (U8 pin_id, char *pin)
{
TRACE_FUNCTION("sim_verify_pin()");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -