📄 mfw_sim.c
字号:
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : rAT_PercentSIMREM |
+--------------------------------------------------------------------+
PURPOSE : call back for SIM removed
*/
void rAT_PercentSIMREM( T_ACI_SIMREM_TYPE srType )
{
TRACE_FUNCTION("rAT_PercentSIMREM()");
if ( srType EQ SIMREM_FAILURE )
{
sim_status.sim_procedure = MFW_SIM_REMOVED;
sim_status.sim_status = MFW_SIM_NO_SIM_CARD;
sim_status.sim_operation_mode = sim_config.oper_mode;
sim_status.sim_pin_retries = 0;
sim_status.sim_status_type = MFW_SIM_UNKNOWN;
sim_stat = SIM_NOT_ACTIVE;
sim_signal(E_SIM_STATUS,&sim_status);
}
else if ( srType EQ SIMREM_RESET )
{
#ifdef SIM_TOOLKIT
sim_signal(E_SIM_RESET, 0);
#endif
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : rAT_percentSIMINS |
+--------------------------------------------------------------------+
PURPOSE : call back for SIM inserted
*/
void rAT_PercentSIMINS( T_ACI_CME_ERR err )
{
TRACE_FUNCTION("rAT_percentSIMINS()");
sim_signal(E_SIM_INSERTED, 0);
switch ( err )
{
case CME_ERR_SimPinReq:
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;
sim_signal(E_SIM_STATUS, &sim_status);
break;
case CME_ERR_SimPukReq:
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;
sim_signal(E_SIM_STATUS, &sim_status);
break;
default:
break;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_configuration |
+--------------------------------------------------------------------+
PURPOSE : Request the configuration of SIM card
*/
UBYTE sim_cvt_access_status(UBYTE acs)
{
TRACE_FUNCTION("sim_cvt_access_status()");
switch(acs)
{
case ACCESS_ALWAYS: return MFW_SIM_NO_PIN;
case ACCESS_PIN_1: return MFW_SIM_PIN1;
case ACCESS_PIN_2: return MFW_SIM_PIN2;
default: return MFW_SIM_UNKNOWN;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_configuration |
+--------------------------------------------------------------------+
PURPOSE : Request the configuration of SIM card
*/
MfwRes sim_configuration (U8 *phase, U8 *serv, U8 *slen,
U8 *lang, U8 *llen,
T_MFW_AOC_ACCESS *access)
{
U8 l;
TRACE_FUNCTION("sim_configuration()");
//PATCH2 TB 1310: Add test of NULL parameter to avoid to declare parameter of unwanted data
if (sim_stat != SIM_ACTIVE)
return MFW_SIM_FAILURE;
if (phase != NULL)
*phase = sim_config.phase;
if ((serv != NULL) && (slen != NULL))
{
l = sizeof(sim_service_table);
if (l < *slen)
*slen = l;
memcpy(serv,sim_service_table,*slen);
}
//PATCH1 TB 1310: replace slen by llen
if ((lang != NULL) && (llen != NULL))
{
l = sizeof(sim_config.pref_lang);
if (l < *llen)
*llen = l;
memcpy(lang, sim_config.pref_lang, *llen);
}
//END PATCH1 TB
if (access != NULL)
{
access->access_acm = sim_cvt_access_status(sim_config.access_acm);
access->access_acmmax = sim_cvt_access_status(sim_config.access_acmmax);
access->access_puct = sim_cvt_access_status(sim_config.access_puct);
}
//END PATCH2 TB
return MFW_SIM_SUCCESS;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_status_check |
+--------------------------------------------------------------------+
PURPOSE : check activation of SIM card
*/
int sim_status_check (void)
{
TRACE_FUNCTION("sim_status_check()");
return sim_stat;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_pin_count |
+--------------------------------------------------------------------+
PURPOSE : Request PIN/PUK count
*/
int sim_pin_count(U8 pin_id)
{
SHORT pn1Cnt;
SHORT pn2Cnt;
SHORT pk1Cnt;
SHORT pk2Cnt;
T_ACI_PVRF_STAT ps1;
T_ACI_PVRF_STAT ps2;
TRACE_FUNCTION("sim_pin_count()");
if (qAT_PercentPVRF(CMD_SRC_LCL, &pn1Cnt,
&pn2Cnt, &pk1Cnt, &pk2Cnt, &ps1, &ps2) != AT_CMPL)
return -1;
switch (pin_id)
{
case MFW_SIM_PIN1: return pn1Cnt;
case MFW_SIM_PIN2: return pn2Cnt;
case MFW_SIM_PUK1: return pk1Cnt;
case MFW_SIM_PUK2: return pk2Cnt;
default: return -1;
}
}
int SimHasPin(U8 pin_id)
{
SHORT pn1Cnt;
SHORT pn2Cnt;
SHORT pk1Cnt;
SHORT pk2Cnt;
T_ACI_PVRF_STAT ps1;
T_ACI_PVRF_STAT ps2;
char debug[30];
TRACE_FUNCTION("sim_pin_count()");
if (qAT_PercentPVRF(CMD_SRC_LCL, &pn1Cnt,
&pn2Cnt, &pk1Cnt, &pk2Cnt, &ps1, &ps2) != AT_CMPL)
return -1;
sprintf(debug, "PIN2 STATUS: %d", ps2);
TRACE_EVENT(debug);
switch (pin_id)
{
case MFW_SIM_PIN1:
{ if (ps1 ==PVRF_STAT_NotPresent)
return 0;
else
return 1;
} break;
case MFW_SIM_PIN2:
{ if (ps2 ==PVRF_STAT_NotPresent)
return 0;
else
return 1;
} break;
default: return -1;
}
}
/*SPR 1351, added new function*/
/*
+---------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_convert_simlock_status|
+---------------------------------------------------------------------+
PURPOSE : Conversion of ACI simlock status to MFW simlock status codes for
compatibility with existing MMI layer.
*/
UBYTE sim_convert_simlock_status(T_SIMLOCK_STATUS aci_status)
{
switch(aci_status)
{
case(SIMLOCK_DISABLED): return MFW_SIM_DISABLE;break;
case(SIMLOCK_ENABLED): return MFW_SIM_ENABLE;break;
case(SIMLOCK_BLOCKED): return MFW_SIM_BLOCKED; break;
case(SIMLOCK_LOCKED): return MFW_SIM_LOCKED;break;
case (SIMLOCK_FAIL): return MFW_SIM_FAILURE; break;
default: return MFW_SIM_FAILURE;
}
}
/*
+---------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_unlock_sim_lock |
+---------------------------------------------------------------------+
PURPOSE : de-personalisation(unlocking) for SIM lock.
Returns code for lock type if successful, or return MFW_SIM_UNLOCK_ERR if not.
*/
/*MC SPR1351, replaced previous implemnetation with wrapper for aci implementation*/
T_MFW sim_unlock_sim_lock(UBYTE type, UBYTE *passwd)
{
T_SIMLOCK_STATUS simlock_status;/*status from ACI*/
UBYTE mfw_simlock_status;/*status converted to MFW encoding*/
TRACE_EVENT_P1("sim_unlock_sim_lock(): %d", type);
switch (type)
{
/*
* N-Lock
*/
case MFW_SIM_NLOCK:
simlock_status= aci_slock_unlock(SIMLOCK_NETWORK, (char*)passwd);
mfw_simlock_status = sim_convert_simlock_status(simlock_status);
switch(mfw_simlock_status)
{
case (MFW_SIM_DISABLE): return MFW_SIM_NLOCK;
case(MFW_SIM_LOCKED): return MFW_SIM_UNLOCK_ERR;
default: return MFW_SIM_UNLOCK_ERR;
}
break;
/*
* SP-Lock
*/
case MFW_SIM_SPLOCK:
simlock_status = aci_slock_unlock(SIMLOCK_SERVICE_PROVIDER, (char*)passwd);
mfw_simlock_status = sim_convert_simlock_status(simlock_status);
switch(mfw_simlock_status)
{
case (MFW_SIM_DISABLE): return MFW_SIM_SPLOCK;
case(MFW_SIM_LOCKED): return MFW_SIM_UNLOCK_ERR;
default: return MFW_SIM_UNLOCK_ERR;
}
break;
/*
* NS-Lock
*/
case MFW_SIM_NSLOCK:
simlock_status = aci_slock_unlock(SIMLOCK_NETWORK_SUBSET, (char*)passwd);
mfw_simlock_status = sim_convert_simlock_status(simlock_status);
switch(mfw_simlock_status)
{
case (MFW_SIM_DISABLE): return MFW_SIM_NSLOCK;
case(MFW_SIM_LOCKED): return MFW_SIM_UNLOCK_ERR;
default: return MFW_SIM_UNLOCK_ERR;
}
break;
/*
* C-Lock
*/
case MFW_SIM_CLOCK:
simlock_status = aci_slock_unlock(SIMLOCK_CORPORATE, (char*)passwd);
mfw_simlock_status = sim_convert_simlock_status(simlock_status);
switch(mfw_simlock_status)
{
case (MFW_SIM_DISABLE): return MFW_SIM_CLOCK;
case(MFW_SIM_LOCKED): return MFW_SIM_UNLOCK_ERR;
default: return MFW_SIM_UNLOCK_ERR;
}
break;
/*
* P-Lock
*/
case MFW_SIM_PLOCK:
simlock_status = aci_slock_unlock( SIMLOCK_SIM, (char*)passwd);
mfw_simlock_status = sim_convert_simlock_status(simlock_status);
switch(mfw_simlock_status)
{
case (MFW_SIM_DISABLE): return MFW_SIM_PLOCK;
case(MFW_SIM_LOCKED): return MFW_SIM_UNLOCK_ERR;
default:return MFW_SIM_UNLOCK_ERR;
}
break;
}
return MFW_SIM_UNLOCK_ERR;
}
/*
+---------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_check_sim_Plock |
+---------------------------------------------------------------------+
PURPOSE : check SIM lock
*/
/*MC SPR1351, replaced previous implemnetation with wrapper for aci implementation*/
int sim_check_sim_Plock (void)
{ T_SIMLOCK_STATUS simlock_status;
TRACE_EVENT ("sim_check_sim_Plock");
simlock_status =aci_slock_checklock(SIMLOCK_SIM);
TRACE_EVENT_P1("PLock: %d", simlock_status);
/*convert status from ACI to MFW encoding*/
return sim_convert_simlock_status(simlock_status);
}
/*
+---------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_check_sim_Nlock |
+---------------------------------------------------------------------+
PURPOSE : Check network lock
*/
/*MC SPR1351, replaced previous implemnetation with wrapper for aci implementation*/
int sim_check_sim_Nlock (void)
{ T_SIMLOCK_STATUS simlock_status;
TRACE_EVENT ("sim_check_sim_Nlock()");
simlock_status =aci_slock_checklock(SIMLOCK_NETWORK);
TRACE_EVENT_P1("NLock: %d", simlock_status);
/*convert status from ACI to MFW encoding*/
return sim_convert_simlock_status(simlock_status);
}
/*
+---------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_check_sim_SPlock|
+---------------------------------------------------------------------+
PURPOSE : Check SIM service provider lock. It only works with SIMs
which support GID1 file.
*/
/*MC SPR1351, replaced previous implemnetation with wrapper for aci implementation*/
int sim_check_sim_SPlock (void)
{ T_SIMLOCK_STATUS simlock_status;
TRACE_EVENT ("sim_check_sim_SPlock()");
simlock_status =aci_slock_checklock(SIMLOCK_SERVICE_PROVIDER);
TRACE_EVENT_P1("NLock: %d", simlock_status);
/*convert status from ACI to MFW encoding*/
return sim_convert_simlock_status(simlock_status);
}
/*
+---------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SIM |
| STATE : code ROUTINE : sim_check_sim_NSlock|
+---------------------------------------------------------------------+
PURPOSE : Check network subset lock
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -