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

📄 smi_ss.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 3 页
字号:

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_SS                   |
| STATE   : code                  ROUTINE : ss_changeClir            |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_RETURN ss_changeClir (T_KSD_CLIR* Clir)
{
  T_ACI_RETURN    ret    = AT_FAIL;
  T_ACI_CLIR_MOD  mode;
  T_ACI_CLIR_STAT state;

  TRACE_FUNCTION ("ss_changeClir ()");

  /*
   *-----------------------------------------------------------------
   * call to ACI function when no answer on a further ACI function
   * call is expected
   *-----------------------------------------------------------------
   */
  if (currSsCmd EQ AT_CMD_NONE)
  {
    ret = qAT_PlusCLIR  (CMD_SRC_LCL, &mode, &state);
  
    switch (ret)
    {
      case (AT_CMPL):
        CLIRreqmode = Clir->mode;
        CLIRqryrsn  = RSN_CHANGE;
        currSsCmd   = AT_CMD_CLIR;
        rAT_PlusCLIR (Clir->mode, state);
        break;

      case (AT_EXCT):
        CLIRreqmode = Clir->mode;
        CLIRqryrsn  = RSN_CHANGE;
        currSsCmd   = AT_CMD_CLIR;
        break;

      default:
        ss_sigClir (SS_RSLT_FAIL);
        break;
    }
  }
  else
  {
    /*
     *---------------------------------------------------------------
     * error handling while waiting for answer on further ACI
     * function call
     *---------------------------------------------------------------
     */
    ss_sigClir (SS_RSLT_FAIL);

    ret = AT_CMPL;
  }

  return ret;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_SS                   |
| STATE   : code                  ROUTINE : ss_intrgtClir            |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_RETURN ss_intrgtClir (void)
{
  T_ACI_RETURN    ret    = AT_FAIL;
  T_ACI_CLIR_MOD  mode;
  T_ACI_CLIR_STAT state;
  
  /*
   *-----------------------------------------------------------------
   * call to ACI function when no answer on a further ACI function
   * call is expected
   *-----------------------------------------------------------------
   */
  if (currSsCmd EQ AT_CMD_NONE)
  {
    TRACE_FUNCTION ("ss_intrgtClir ()");

    ret = qAT_PlusCLIR  (CMD_SRC_LCL, &mode, &state);

    switch (ret)
    {
      case (AT_CMPL):
        CLIRqryrsn = RSN_INTRGT;
        currSsCmd  = AT_CMD_CLIR;
        rAT_PlusCLIR (mode, state);
        break;

      case (AT_EXCT):
        CLIRqryrsn = RSN_INTRGT;
        currSsCmd  = AT_CMD_CLIR;
        break;

      default:
        ss_sigClir (SS_RSLT_FAIL);
        break;
    }
  }
  else
  {
    /*
     *---------------------------------------------------------------
     * error handling while waiting for answer on further ACI
     * function call
     *---------------------------------------------------------------
     */
    ss_sigClir (SS_RSLT_FAIL);

    ret = AT_CMPL;
  }

  return ret;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_SS                   |
| STATE   : code                  ROUTINE : rAT_PlusCLIR             |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL void rAT_PlusCLIR  (T_ACI_CLIR_MOD mode, T_ACI_CLIR_STAT state)
{
  TRACE_FUNCTION ("rAT_PlusCLIR ()");

  switch (CLIRqryrsn)
  {
    case (RSN_INTRGT):
      ss_sigClir (ss_calcClirRslt (mode, state));
      break;

    case (RSN_CHANGE):
      ss_changeClirRslt (CLIRreqmode, state);
      break;

    default:
      break;
  }

  if (currSsCmd EQ AT_CMD_CLIR)
    currSsCmd = AT_CMD_NONE;

  CLIRqryrsn  = RSN_NONE;
  CLIRreqmode = CLIR_MOD_NotPresent;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_SS                   |
| STATE   : code                  ROUTINE : ss_sigColp               |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
LOCAL void ss_sigColp (T_SS_ACA_RSLT rslt)
{
  TRACE_FUNCTION ("ss_sigColp ()");

  ui_signal (UI_SIG_SS, rslt);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_SS                   |
| STATE   : code                  ROUTINE : ss_changeColpMod         |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_RETURN ss_changeColp (T_KSD_COLP* Colp)
{
  T_ACI_RETURN ret = AT_FAIL;

  TRACE_FUNCTION ("ss_changeColp ()");

  switch (Colp->mode)
  {
    case (COLP_MOD_NotPresent):
      ss_sigColp (SS_RSLT_FAIL);
      break;

    case (COLP_MOD_Disable):
      COLPmode = Colp->mode;
      ss_sigColp (SS_RSLT_SUPP);
      break;

    case (COLP_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_COLP_STAT colpStat;

          ret = qAT_PlusCOLP (CMD_SRC_LCL, &colpStat);
        
          switch (ret)
          {
            case (AT_CMPL):
              COLPreqmode = Colp->mode;
              COLPqryrsn  = RSN_CHANGE;
              currSsCmd   = AT_CMD_COLP;
              rAT_PlusCOLP (colpStat, NULL, NULL, NULL, NULL, NULL);
              break;

            case (AT_EXCT):
              COLPreqmode = Colp->mode;
              COLPqryrsn  = RSN_CHANGE;
              currSsCmd   = AT_CMD_COLP;
              break;
      
            default:
              ss_sigColp (SS_RSLT_FAIL);
              break;
          }
        }
        else
        {
          /*
           *---------------------------------------------------------
           * error handling while waiting for answer on further ACI
           * function call
           *---------------------------------------------------------
           */
          ss_sigColp (SS_RSLT_FAIL);

          ret = AT_CMPL;
        }
      }
      break;
  }

  return ret;  
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_SS                   |
| STATE   : code                  ROUTINE : ss_intrgtColp            |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_RETURN ss_intrgtColp (void)
{
  TRACE_FUNCTION ("ss_intrgtColp ()");

  switch (COLPmode)
  {
    case (COLP_MOD_NotPresent):
      ss_sigColp (SS_RSLT_NET);
      break;

    case (COLP_MOD_Disable):
      ss_sigColp (SS_RSLT_SUPP);
      break;

    case (COLP_MOD_Enable):
      ss_sigColp (SS_RSLT_INVOC);
      break;

    default:
      ss_sigColp (SS_RSLT_FAIL);
      break;
  }

  return AT_CMPL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_SS                   |
| STATE   : code                  ROUTINE : rAT_PlusCOLP             |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
#ifdef NO_ASCIIZ
GLOBAL void rAT_PlusCOLP (T_ACI_COLP_STAT stat,
                          CHAR*           number,
                          T_ACI_TOA*      type,
                          CHAR*           subaddr,
                          T_ACI_TOS*      satype,
                          T_ACI_PB_TEXT*  pbText)
#else  /* #ifdef NO_ASCIIZ */
GLOBAL void rAT_PlusCOLP (T_ACI_COLP_STAT stat,
                          CHAR*           number,
                          T_ACI_TOA*      type,
                          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_PlusCOLP ()");

  if (stat EQ COLP_STAT_NotPresent)
  {
    if (COLPmode EQ COLP_MOD_Enable OR
        COLPmode EQ COLP_MOD_NotPresent)
    {
      if (alpha NEQ NULL)
        ui_signal (UI_SIG_COLP, alpha, "");
      else if (number NEQ NULL)
      {
        if (subaddr NEQ NULL)
          ui_signal (UI_SIG_COLP, number, subaddr);
        else
          ui_signal (UI_SIG_COLP, number , "");
      }
      else
        ui_signal (UI_SIG_COLP, "", "");
    }
  }
  else
  {
    switch (COLPqryrsn)
    {
      case (RSN_CHANGE):
        switch (stat)
        {
          case (COLP_STAT_NotProv):
          case (COLP_STAT_Unknown):
            switch (COLPreqmode)
            {
              case (COLP_MOD_Disable):
                COLPmode = COLPreqmode; 
                ss_sigColp (SS_RSLT_SUPP);
                break;

              case (COLP_MOD_NotPresent):
              case (COLP_MOD_Enable):
                ss_sigColp (SS_RSLT_FAIL);
                break;
            }
            break;

          case (COLP_STAT_Prov):
            switch (COLPreqmode)
            {
              case (COLP_MOD_Disable):
                COLPmode = COLPreqmode; 
                ss_sigColp (SS_RSLT_SUPP);
                break;

              case (COLP_MOD_Enable):
                COLPmode = COLPreqmode; 
                ss_sigColp (SS_RSLT_INVOC);
                break;

              case (COLP_MOD_NotPresent):
                ss_sigColp (SS_RSLT_FAIL);
                break;
            }
            break;
        }
        break;
        
      default:
        break;
    }

    if (currSsCmd EQ AT_CMD_COLP)
      currSsCmd = AT_CMD_NONE;

    COLPqryrsn  = RSN_NONE;
    COLPreqmode = COLP_MOD_NotPresent;
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_SS                   |
| STATE   : code                  ROUTINE : ss_sigCcfc               |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
LOCAL void ss_sigCcfc (T_SS_ACA_RSLT rslt)
{
  TRACE_FUNCTION ("ss_sigCcfc ()");

  ui_signal (UI_SIG_SS, rslt);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_SS                   |
| STATE   : code                  ROUTINE : ss_changeCf              |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL T_ACI_RETURN ss_changeCf (CHAR* seq, T_ACI_KSD_CF_PRM* prm)
{
  T_ACI_RETURN ret;

  TRACE_FUNCTION ("ss_changeCf ()");

  /*
   *-----------------------------------------------------------------
   * call to ACI function when no answer on a further ACI function
   * call is expected
   *-----------------------------------------------------------------
   */
  if (currSsCmd EQ AT_CMD_NONE)
  {  
    ret = sAT_Dn (CMD_SRC_LCL,
                  seq,
                  D_CLIR_OVRD_Default,
                  D_CUG_CTRL_NotPresent,
                  D_TOC_Voice);

    CCFCmode   = prm->opCd;
    CCFCqryrsn = RSN_CHANGE;
    currSsCmd  = KSD_CMD_CF;

    switch (ret)
    {
      case (AT_CMPL):
        rAT_OK (currSsCmd);
        break;

      case (AT_EXCT):
        break;

      default:
        rAT_PlusCME (currSsCmd, 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);

    ret = AT_CMPL;
  }

  return ret;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_SS                   |
| STATE   : code                  ROUTINE : ss_CcfcRej               |
+--------------------------------------------------------------------+

  PURPOSE : 
*/
GLOBAL void ss_CcfcRej (T_ACI_AT_CMD  cmdId, 
                        T_ACI_CME_ERR err)
{
  TRACE_FUNCTION ("ss_CcfcRej ()");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -