📄 smi_ss.c
字号:
/*
+-----------------------------------------------------------------------------
| Project : GSM-F&D (8411)
| Modul : SMI_SS
+-----------------------------------------------------------------------------
| Copyright 2002 Texas Instruments Berlin, AG
| All rights reserved.
|
| This file is confidential and a trade secret of Texas
| Instruments Berlin, AG
| The receipt of or possession of this file does not convey
| any rights to reproduce or disclose its contents or to
| manufacture, use, or sell anything it may describe, in
| whole, or in part, without the specific written consent of
| Texas Instruments Berlin, AG.
+-----------------------------------------------------------------------------
| Purpose : This Modul defines the supplementary service functions
| for the Man Machine Interface.
+-----------------------------------------------------------------------------
*/
#ifndef SMI_SS_C
#define SMI_SS_C
#endif
#define ENTITY_SMI
/*==== INCLUDES ===================================================*/
#include "typedefs.h"
#include <string.h>
#include "vsi.h"
#include "custom.h"
#include "gsm.h"
#include "prim.h"
#include "tok.h"
#include "message.h"
#include "aci_cmh.h"
#include "ksd.h"
#include "aca.h"
#include "smi.h"
/*==== CONSTANTS ==================================================*/
/*==== TYPES ======================================================*/
/*==== EXPORT =====================================================*/
/*==== VARIABLES ==================================================*/
LOCAL T_ACI_AT_CMD currSsCmd = AT_CMD_NONE;
LOCAL T_ACA_CLIP_MOD CLIPmode; /* holds clip mode */
LOCAL T_ACA_CLIP_MOD CLIPreqmode; /* holds requested clip mode */
LOCAL T_ACA_RSN CLIPqryrsn; /* reason for query clip parameter*/
LOCAL T_ACI_CLIR_MOD CLIRreqmode; /* holds requested clir support */
LOCAL T_ACA_RSN CLIRqryrsn; /* reason for query clir parameter*/
LOCAL T_ACA_COLP_MOD COLPmode; /* holds colp mode */
LOCAL T_ACA_COLP_MOD COLPreqmode; /* holds requested colp mode */
LOCAL T_ACA_RSN COLPqryrsn; /* reason for query colp parameter*/
LOCAL T_ACI_KSD_OP CCFCmode; /* holds ccfc mode */
LOCAL T_ACA_RSN CCFCqryrsn; /* reason for query ccfc parameter*/
LOCAL T_ACI_KSD_OP CLCKmode; /* holds clck mode */
LOCAL T_ACA_RSN CLCKqryrsn; /* reason for query clck parameter*/
LOCAL T_ACI_KSD_OP CCWAmode; /* holds ccwa mode */
LOCAL T_ACA_RSN CCWAqryrsn; /* reason for query ccwa parameter*/
/*==== FUNCTIONS ==================================================*/
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_SS |
| STATE : code ROUTINE : ss_initialize |
+--------------------------------------------------------------------+
PURPOSE : This function is used to initialize this modul.
*/
GLOBAL void ss_initialize (BOOL isStartup)
{
currSsCmd = AT_CMD_NONE;
/*
*-----------------------------------------------------------------
* initialize CLIP parameter
*-----------------------------------------------------------------
*/
CLIPmode = CLIP_MOD_NotPresent;
CLIPreqmode = CLIP_MOD_NotPresent;
CLIPqryrsn = RSN_NONE;
/*
*-----------------------------------------------------------------
* initialize CLIR parameter
*-----------------------------------------------------------------
*/
CLIRreqmode = CLIR_MOD_NotPresent;
CLIRqryrsn = RSN_NONE;
/*
*-----------------------------------------------------------------
* initialize COLP parameter
*-----------------------------------------------------------------
*/
COLPmode = COLP_MOD_NotPresent;
COLPreqmode = COLP_MOD_NotPresent;
COLPqryrsn = RSN_NONE;
/*
*-----------------------------------------------------------------
* initialize CCFC parameter
*-----------------------------------------------------------------
*/
CCFCmode = KSD_OP_NONE;
CCFCqryrsn = RSN_NONE;
/*
*-----------------------------------------------------------------
* initialize CLCK parameter
*-----------------------------------------------------------------
*/
CLCKmode = KSD_OP_NONE;
CLCKqryrsn = RSN_NONE;
/*
*-----------------------------------------------------------------
* initialize CCWA parameter
*-----------------------------------------------------------------
*/
CCWAmode = KSD_OP_NONE;
CCWAqryrsn = RSN_NONE;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_SS |
| STATE : code ROUTINE : ss_sigClip |
+--------------------------------------------------------------------+
PURPOSE :
*/
LOCAL void ss_sigClip (T_SS_ACA_RSLT rslt)
{
TRACE_FUNCTION ("ss_sigClip ()");
ui_signal (UI_SIG_SS, rslt);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_SS |
| STATE : code ROUTINE : ss_changeClip |
+--------------------------------------------------------------------+
PURPOSE :
*/
GLOBAL T_ACI_RETURN ss_changeClip (T_KSD_CLIP* Clip)
{
T_ACI_RETURN ret = AT_FAIL;
TRACE_FUNCTION ("ss_changeClip ()");
switch (Clip->mode)
{
case (CLIP_MOD_NotPresent):
ss_sigClip (SS_RSLT_FAIL);
break;
case (CLIP_MOD_Disable):
CLIPmode = Clip->mode;
ss_sigClip (SS_RSLT_SUPP);
break;
case (CLIP_MOD_Enable):
{
/*
*-----------------------------------------------------------
* call to ACI function when no answer on a further ACI
* function call is expected
*-----------------------------------------------------------
*/
if (currSsCmd EQ AT_CMD_NONE)
{
T_ACI_CLIP_STAT clipStat;
ret = qAT_PlusCLIP (CMD_SRC_LCL, &clipStat);
switch (ret)
{
case (AT_CMPL):
CLIPreqmode = Clip->mode;
CLIPqryrsn = RSN_CHANGE;
currSsCmd = AT_CMD_CLIP;
rAT_PlusCLIP (clipStat, NULL, NULL, PRES_NOT_PRES, NULL, NULL, NULL);
break;
case (AT_EXCT):
CLIPreqmode = Clip->mode;
CLIPqryrsn = RSN_CHANGE;
currSsCmd = AT_CMD_CLIP;
break;
default:
ss_sigClip (SS_RSLT_FAIL);
break;
}
}
else
{
/*
*---------------------------------------------------------
* error handling while waiting for answer on further ACI
* function call
*---------------------------------------------------------
*/
ss_sigClip (SS_RSLT_FAIL);
ret = AT_CMPL;
}
}
break;
}
return ret;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_SS |
| STATE : code ROUTINE : ss_intrgtClip |
+--------------------------------------------------------------------+
PURPOSE :
*/
GLOBAL T_ACI_RETURN ss_intrgtClip (void)
{
TRACE_FUNCTION ("ss_intrgtClip ()");
switch (CLIPmode)
{
case (CLIP_MOD_NotPresent):
ss_sigClip (SS_RSLT_NET);
break;
case (CLIP_MOD_Disable):
ss_sigClip (SS_RSLT_SUPP);
break;
case (CLIP_MOD_Enable):
ss_sigClip (SS_RSLT_INVOC);
break;
default:
ss_sigClip (SS_RSLT_FAIL);
break;
}
return AT_CMPL;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_SS |
| STATE : code ROUTINE : rAT_PlusCLIP |
+--------------------------------------------------------------------+
PURPOSE :
*/
#ifdef NO_ASCIIZ
GLOBAL void rAT_PlusCLIP (T_ACI_CLIP_STAT stat,
CHAR* number,
T_ACI_TOA* type,
U8 validity,
CHAR* subaddr,
T_ACI_TOS* satype,
T_ACI_PB_TEXT* pbText)
#else /* #ifdef NO_ASCIIZ */
GLOBAL void rAT_PlusCLIP (T_ACI_CLIP_STAT stat,
CHAR* number,
T_ACI_TOA* type,
U8 validity,
CHAR* subaddr,
T_ACI_TOS* satype,
CHAR* alpha)
#endif /* #ifdef NO_ASCIIZ */
{
#ifdef NO_ASCIIZ
char alphaBuf[MAX_ALPHA_LEN], *alpha;
if ( ( pbText NEQ NULL ) AND ( pbText->len NEQ 0 ) )
{
memcpy ( alphaBuf, pbText->data, pbText->len );
alphaBuf[pbText->len] = '\0';
alpha = alphaBuf;
}
else
{
alpha = NULL;
}
#endif /* #ifdef NO_ASCIIZ */
TRACE_FUNCTION ("rAT_PlusCLIP ()");
if (stat EQ CLIP_STAT_NotPresent)
{
if (CLIPmode EQ CLIP_MOD_Enable OR
CLIPmode EQ CLIP_MOD_NotPresent)
{
if (alpha NEQ NULL)
ui_signal (UI_SIG_CLIP, alpha, "");
else if (number NEQ NULL)
{
if (subaddr NEQ NULL)
ui_signal (UI_SIG_CLIP, number, subaddr);
else
ui_signal (UI_SIG_CLIP, number , "");
}
else
ui_signal (UI_SIG_CLIP, "", "");
}
}
else
{
switch (CLIPqryrsn)
{
case (RSN_CHANGE):
switch (stat)
{
case (CLIP_STAT_NotProv):
case (CLIP_STAT_Unknown):
switch (CLIPreqmode)
{
case (CLIP_MOD_Disable):
CLIPmode = CLIPreqmode;
ss_sigClip (SS_RSLT_SUPP);
break;
case (CLIP_MOD_NotPresent):
case (CLIP_MOD_Enable):
ss_sigClip (SS_RSLT_FAIL);
break;
}
break;
case (CLIP_STAT_Prov):
switch (CLIPreqmode)
{
case (CLIP_MOD_Disable):
CLIPmode = CLIPreqmode;
ss_sigClip (SS_RSLT_SUPP);
break;
case (CLIP_MOD_Enable):
CLIPmode = CLIPreqmode;
ss_sigClip (SS_RSLT_INVOC);
break;
case (CLIP_MOD_NotPresent):
ss_sigClip (SS_RSLT_FAIL);
break;
}
break;
}
break;
default:
break;
}
if (currSsCmd EQ AT_CMD_CLIP)
currSsCmd = AT_CMD_NONE;
CLIPqryrsn = RSN_NONE;
CLIPreqmode = CLIP_MOD_NotPresent;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_SS |
| STATE : code ROUTINE : ss_sigClir |
+--------------------------------------------------------------------+
PURPOSE :
*/
LOCAL void ss_sigClir (T_SS_ACA_RSLT rslt)
{
TRACE_FUNCTION ("ss_sigClir ()");
ui_signal (UI_SIG_SS, rslt);
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_SS |
| STATE : code ROUTINE : ss_calcClirRslt |
+--------------------------------------------------------------------+
PURPOSE :
*/
LOCAL T_SS_ACA_RSLT ss_calcClirRslt (T_ACI_CLIR_MOD mode,
T_ACI_CLIR_STAT state)
{
/* used to calculate a final result code */
/* out of the mode and state value */
static const struct T_SS_ACA_CLIR_RSLT_TAB
{
const T_ACI_CLIR_MOD mode;
const T_ACI_CLIR_STAT state;
const T_SS_ACA_RSLT rslt;
}
clirRslt[] =
{
CLIR_MOD_Subscript, CLIR_STAT_NotProv, SS_RSLT_SUPP,
CLIR_MOD_Subscript, CLIR_STAT_Permanent, SS_RSLT_INVOC,
CLIR_MOD_Subscript, CLIR_STAT_Unknown, SS_RSLT_FAIL,
CLIR_MOD_Subscript, CLIR_STAT_RestrictTemp, SS_RSLT_INVOC,
CLIR_MOD_Subscript, CLIR_STAT_AllowTemp, SS_RSLT_SUPP,
CLIR_MOD_Invoc, CLIR_STAT_NotProv, SS_RSLT_FAIL,
CLIR_MOD_Invoc, CLIR_STAT_Permanent, SS_RSLT_INVOC,
CLIR_MOD_Invoc, CLIR_STAT_Unknown, SS_RSLT_FAIL,
CLIR_MOD_Invoc, CLIR_STAT_RestrictTemp, SS_RSLT_INVOC,
CLIR_MOD_Invoc, CLIR_STAT_AllowTemp, SS_RSLT_INVOC,
CLIR_MOD_Supp, CLIR_STAT_NotProv, SS_RSLT_SUPP,
CLIR_MOD_Supp, CLIR_STAT_Permanent, SS_RSLT_INVOC,
CLIR_MOD_Supp, CLIR_STAT_Unknown, SS_RSLT_FAIL,
CLIR_MOD_Supp, CLIR_STAT_RestrictTemp, SS_RSLT_SUPP,
CLIR_MOD_Supp, CLIR_STAT_AllowTemp, SS_RSLT_SUPP,
CLIR_MOD_NotPresent, CLIR_STAT_NotPresent, SS_RSLT_FAIL
};
USHORT i = 0;
/*
*-----------------------------------------------------------------
* searching for the final result code
*-----------------------------------------------------------------
*/
while ( clirRslt[i].mode NEQ CLIR_MOD_NotPresent AND
!(clirRslt[i].mode EQ mode AND
clirRslt[i].state EQ state))
i++;
return clirRslt[i].rslt;
}
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147) MODULE : SMI_SS |
| STATE : code ROUTINE : ss_changeClirRslt |
+--------------------------------------------------------------------+
PURPOSE :
*/
LOCAL void ss_changeClirRslt (T_ACI_CLIR_MOD mode,
T_ACI_CLIR_STAT state)
{
T_SS_ACA_RSLT rslt = ss_calcClirRslt (mode, state);
switch (rslt)
{
case (SS_RSLT_SUPP):
if (sAT_PlusCLIR (CMD_SRC_LCL, mode) EQ AT_CMPL)
ss_sigClir (SS_RSLT_SUPP);
break;
case (SS_RSLT_INVOC):
if (sAT_PlusCLIR (CMD_SRC_LCL, mode) EQ AT_CMPL)
ss_sigClir (SS_RSLT_INVOC);
break;
default:
ss_sigClir (SS_RSLT_FAIL);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -