📄 smi_reg.c
字号:
break;
case (CME_ERR_SimPukReq):
ui_signal (UI_SIG_ENTER_PUK);
pinNeed = TRUE;
mmi_data->state = MMI_WAIT_FOR_PUK;
break;
case (CME_ERR_SimFail):
case (CME_ERR_SimWrong):
ui_signal (UI_SIG_SIM_WRONG);
mmi_data->state = MMI_ON;
break;
case (CME_ERR_SimNotIns):
ui_signal (UI_SIG_SIM_NOT_INSERT);
mmi_data->state = MMI_ON;
break;
default:
ui_signal (UI_SIG_UNHND_CME_ERR, err);
mmi_data->state = MMI_ON;
break;
}
reg_startReg ();
}
else
ui_signal (UI_SIG_UNHND_CME_ERR, err);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_REG |
| STATE : code ROUTINE : reg_startManReg |
+--------------------------------------------------------------------+
PURPOSE : This function is used to start a manual registration.
returns: status information concerning the registration
progress
*/
LOCAL T_ACI_RETURN reg_startManReg (void)
{
T_ACI_RETURN ret = AT_FAIL; /* holds the status information */
/*
*-----------------------------------------------------------------
* call to ACI function when no answer on a further ACI function
* call is expected
*-----------------------------------------------------------------
*/
if (currRegCmd EQ AT_CMD_NONE)
{
TRACE_FUNCTION ("reg_startManReg ()");
if (COPSmode EQ COPS_MOD_Man AND
COPSoper NEQ NULL )
{
/*
*-------------------------------------------------------------
* start registration with predefined registration mode
*-------------------------------------------------------------
*/
ret = sAT_PlusCOPS (CMD_SRC_LCL,
COPSmode,
COPSfrmt,
COPSoper);
if (ui_isScrnWidthMin ())
COPSfrmt = COPS_FRMT_Short;
else
COPSfrmt = COPS_FRMT_Long;
COPSoper = NULL;
currRegCmd = AT_CMD_COPS;
mmi_data->state = MMI_WAIT_FOR_REG;
/*
*---------------------------------------------------------
* process result code of ACI function call
*---------------------------------------------------------
*/
switch (ret)
{
case (AT_CMPL):
ui_signal (UI_SIG_REGISTERING);
rAT_OK (currRegCmd);
break;
case (AT_EXCT):
ui_signal (UI_SIG_REGISTERING);
break;
default:
rAT_PlusCME (currRegCmd, CME_ERR_Unknown);
break;
}
}
else
{
switch (CREGstat)
{
case (CREG_STAT_NoSearch):
case (CREG_STAT_Denied):
case (CREG_STAT_Unknown):
/*
*---------------------------------------------------------
* operator list is requested
*---------------------------------------------------------
*/
ret = tAT_PlusCOPS (CMD_SRC_LCL,
COPSstartidx,
&COPSlastidx,
&COPSlst[0]);
/*
*---------------------------------------------------------
* process result code of ACI function call
*---------------------------------------------------------
*/
switch (ret)
{
case (AT_CMPL):
currRegCmd = AT_CMD_COPS;
rAT_PlusCOPS (COPSlastidx, &COPSlst[0]);
break;
case (AT_EXCT):
currRegCmd = AT_CMD_COPS;
break;
default:
ui_signal (UI_SIG_UNHND_CME_ERR, CME_ERR_Unknown);
break;
}
default:
/*
*---------------------------------------------------------
* mobile equipment must be deregistered before trying to
* register again
*---------------------------------------------------------
*/
ui_signal (UI_SIG_UNHND_CME_ERR, CME_ERR_Unknown);
break;
}
}
}
else
{
/*
*---------------------------------------------------------------
* error handling while waiting for answer on further ACI
* function call
*---------------------------------------------------------------
*/
ui_signal (UI_SIG_UNHND_CME_ERR, CME_ERR_Unknown);
}
return ret;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_REG |
| STATE : code ROUTINE : reg_CopsCnf |
+--------------------------------------------------------------------+
PURPOSE : This function is called to indicate that a former call to
function sAT_PlusCOPS results in a success.
*/
GLOBAL void reg_CopsCnf (T_ACI_AT_CMD cmdId)
{
CHAR oper[MAX_ALPHA_OPER_LEN]; /* operator name */
T_ACI_COPS_MOD mode; /* COPS mode */
T_ACI_COPS_FRMT frmt; /* COPS format */
T_ACI_NRG_RGMD regMode;
T_ACI_NRG_SVMD srvMode;
T_ACI_NRG_FRMT oprFrmt;
T_ACI_NRG_SVMD srvStat;
TRACE_FUNCTION ("reg_CopsCnf ()");
if (cmdId EQ currRegCmd)
currRegCmd = AT_CMD_NONE;
else
return;
if (currAbrtCmd EQ AT_CMD_ABRT)
{
currAbrtCmd = AT_CMD_NONE;
reg_powerOff();
return;
}
if (mmi_data->state EQ MMI_WAIT_FOR_REG)
{
qAT_PercentNRG( CMD_SRC_LCL,
®Mode,
&srvMode,
&oprFrmt,
&srvStat,
oper);
COPSqryrsn = RSN_NONE;
if (srvStat EQ NRG_SVMD_Limited)
{
mmi_data->serviceType = SRV_LIMITED;
ui_signal (UI_SIG_LIMITED_SERVICE);
ui_signal (UI_SIG_REGISTERED);
if (pinNeed AND pinCnf)
{
pinNeed = FALSE;
reg_startReg ();
}
}
else if (srvStat EQ NRG_SVMD_NoSrv)
{
mmi_data->serviceType = SRV_NONE;
ui_signal (UI_SIG_NO_CELL);
ui_signal (UI_SIG_REGISTERED);
if (pinNeed AND pinCnf)
{
pinNeed = FALSE;
reg_startReg ();
}
}
else
{
/*
*---------------------------------------------------------------
* a registration request was successfull
*---------------------------------------------------------------
*/
sAT_PlusCOPS (CMD_SRC_LCL,
COPS_MOD_SetOnly,
COPSfrmt,
NULL);
/*
*---------------------------------------------------------------
* get the operator name and inform the user interface
*---------------------------------------------------------------
*/
if (qAT_PlusCOPS (CMD_SRC_LCL, &mode, &frmt, oper) NEQ AT_CMPL)
oper[0] = NULL_TERM;
/*
*---------------------------------------------------------------
* if operator unknown show MCC MNC
*---------------------------------------------------------------
*/
if (strlen(oper) EQ 0)
{
sAT_PlusCOPS (CMD_SRC_LCL,
COPS_MOD_SetOnly,
COPS_FRMT_Numeric,
NULL);
if (qAT_PlusCOPS (CMD_SRC_LCL, &mode, &frmt, oper) NEQ AT_CMPL)
oper[0] = NULL_TERM;
}
mmi_data->serviceType = SRV_NORMAL;
ui_signal (UI_SIG_PLMN, &oper[0]);
ui_signal (UI_SIG_REGISTERED);
mmi_data->state = MMI_ON;
}
}
else if (mmi_data->state EQ MMI_WAIT_FOR_DEREG)
{
/*
*---------------------------------------------------------------
* a deregistration request was successfull
*---------------------------------------------------------------
*/
qAT_PercentNRG( CMD_SRC_LCL,
®Mode,
&srvMode,
&oprFrmt,
&srvStat,
oper);
if (srvStat EQ NRG_SVMD_Limited)
{
mmi_data->serviceType = SRV_LIMITED;
ui_signal (UI_SIG_LIMITED_SERVICE);
ui_signal (UI_SIG_REGISTERED);
}
else if (srvStat EQ NRG_SVMD_NoSrv)
{
mmi_data->serviceType = SRV_NONE;
ui_signal (UI_SIG_NO_CELL);
ui_signal (UI_SIG_REGISTERED);
}
else
{
if (COPSqryrsn EQ RSN_CHANGE AND
COPSmode EQ COPS_MOD_Auto)
{
/*
*-----------------------------------------------------------
* start an automatic registration
*-----------------------------------------------------------
*/
COPSqryrsn = RSN_NONE;
mmi_data->state = MMI_ON;
reg_startReg ();
}
else if (COPSqryrsn EQ RSN_CHANGE AND
(COPSmode EQ COPS_MOD_Man OR
COPSmode EQ COPS_MOD_Both))
{
/*
*-----------------------------------------------------------
* start a manual registration
*-----------------------------------------------------------
*/
COPSqryrsn = RSN_NONE;
mmi_data->state = MMI_ON;
reg_startManReg ();
}
else
{
/*
*-----------------------------------------------------------
* start no registration once again
*-----------------------------------------------------------
*/
COPSqryrsn = RSN_NONE;
mmi_data->state = MMI_ON;
}
}
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_REG |
| STATE : code ROUTINE : reg_CopsRej |
+--------------------------------------------------------------------+
PURPOSE : This function is called when an registration or
deregistration attempt failed.
<err>: error code
*/
GLOBAL void reg_CopsRej (T_ACI_AT_CMD cmdId, T_ACI_CME_ERR err)
{
CHAR oper[MAX_ALPHA_OPER_LEN]; /* operator name */
T_ACI_NRG_RGMD regMode;
T_ACI_NRG_SVMD srvMode;
T_ACI_NRG_FRMT oprFrmt;
T_ACI_NRG_SVMD srvStat;
TRACE_FUNCTION ("reg_CopsRej ()");
if (cmdId EQ currRegCmd)
currRegCmd = AT_CMD_NONE;
if (currAbrtCmd EQ AT_CMD_ABRT)
{
currAbrtCmd = AT_CMD_NONE;
ui_signal (UI_SIG_UNHND_CME_ERR, CME_ERR_FailedToAbort);
return;
}
if (mmi_data->state EQ MMI_WAIT_FOR_REG)
{
/*
*---------------------------------------------------------------
* a registration request was unsuccessfull
*---------------------------------------------------------------
*/
qAT_PercentNRG( CMD_SRC_LCL,
®Mode,
&srvMode,
&oprFrmt,
&srvStat,
oper);
if (srvStat EQ NRG_SVMD_Limited)
{
mmi_data->serviceType = SRV_LIMITED;
ui_signal (UI_SIG_LIMITED_SERVICE);
ui_signal (UI_SIG_REGISTERED);
if (pinNeed AND pinCnf)
{
pinNeed = FALSE;
reg_startReg ();
}
}
else if (srvStat EQ NRG_SVMD_NoSrv)
{
mmi_data->serviceType = SRV_NONE;
ui_signal (UI_SIG_NO_CELL);
ui_signal (UI_SIG_REGISTERED);
if (pinNeed AND pinCnf)
{
pinNeed = FALSE;
reg_startReg ();
}
}
}
else if (mmi_data->state EQ MMI_WAIT_FOR_DEREG)
{
/*
*---------------------------------------------------------------
* a deregistration request was unsuccessfull
*---------------------------------------------------------------
*/
ui_signal (UI_SIG_UNHND_CME_ERR, err);
mmi_data->state = MMI_ON;
}
COPSqryrsn = RSN_NONE;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_REG |
| STATE : code ROUTINE : reg_changeReg |
+--------------------------------------------------------------------+
PURPOSE : This function is called when a deregistration followed by
a registration once again should be performed.
returns: status information concerning the deregistration
progress
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -