⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smi_ss.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/* 
+----------------------------------------------------------------------------- 
|  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 + -