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

📄 smi_aca.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 3 页
字号:
         *---------------------------------------------------------
         */
        case (SEQGRP_INTRGT_SIM_LOCK):
          break;

        /*
         *---------------------------------------------------------
         * handling of sequence group SEQGRP_SND_CHLD
         *---------------------------------------------------------
         */
        case (SEQGRP_CHLD):
          hnd->atReturn = cal_changeCall (&hnd->param.chld);
          break;

        /*
         *---------------------------------------------------------
         * handling of sequence group SEQGRP_SND_CTFR
         *---------------------------------------------------------
         */
        case (SEQGRP_CTFR):
          hnd->atReturn = cal_invokeCTFR(&hnd->param.ctfr);
          break;

        /*
         *---------------------------------------------------------
         * handling of sequence group SEQGRP_SND_CBST
         *---------------------------------------------------------
         */
        case (SEQGRP_SND_CBST):
          hnd->atReturn = cal_setCbst (&hnd->param.cbst);
          break;

        /*
         *---------------------------------------------------------
         * handling of sequence group SEQGRP_SND_CRLP
         *---------------------------------------------------------
         */
        case (SEQGRP_SND_CRLP):
          hnd->atReturn = cal_setCrlp (&hnd->param.crlp);
          break;

        /*
         *---------------------------------------------------------
         * handling of sequence group SEQGRP_SND_DS
         *---------------------------------------------------------
         */
        case (SEQGRP_SND_DS):
          hnd->atReturn = cal_setDs (&hnd->param.ds);
          break;

        /*
         *---------------------------------------------------------
         * handling of sequence group SEQGRP_SPEECH_DATA
         *---------------------------------------------------------
         */
        case (SEQGRP_SPEECH_DATA):
          break;

        /*
         *---------------------------------------------------------
         * handling of sequence group SEQGRP_DATA_SPEECH
         *---------------------------------------------------------
         */
        case (SEQGRP_DATA_SPEECH):
          break;

        /*
         *---------------------------------------------------------
         * handling of sequence group SEQGRP_EM_MODE
         *---------------------------------------------------------
         */
#if defined (EM_MODE)
        case (SEQGRP_EM_MODE):
          if (!strcmp (hnd->restSeq, "*0"))
          {
            // enable recording
            em_Enable_Post_Mortem ();
          }
          if (!strcmp (hnd->restSeq, "*1"))
          {
            // disable recording
            em_Disable_Post_Mortem ();
          }
          if (!strcmp (hnd->restSeq, "*2"))
          {
            UBYTE dump = TRUE;
            em_data_type em_data;
            UBYTE i, max_i;
            char buf[60];

            while (dump)
            {
              switch (em_Read_Post_Mortem (&em_data))
              {
                case DRV_OK:
                  sprintf (buf, ">PM %x %x %x %x",
                           em_data.em_class,
                           em_data.em_subclass,
                           em_data.em_type,
                           em_data.em_length);
                  if (em_data.em_length > 10)
                    max_i = 10;
                  else
                    max_i = i;
                  for (i=0;i<max_i;i++)
                    sprintf (buf+strlen (buf)," %x", em_data.em_parameter[i]);
                  TRACE_EVENT (buf);
                  break;
                case EM_NO_MORE_DATA:
                case EM_INVALID_ACCESS:
                  dump = FALSE;
                  break;
              }
            }
          }
          break;
#endif
        /*
         *---------------------------------------------------------
         * handling of sequence group SEQGRP_UNKNOWN
         *---------------------------------------------------------
         */
        case (SEQGRP_UNKNOWN):
          TRACE_EVENT ("smi_aca.c: aca_keySeqInd: sequence group unknown");
          ui_signal (UI_SIG_UNHND_CME_ERR, CME_ERR_Unknown);
          aca_keySeqHndInit (hnd);
          break;


}

      if (hnd->atReturn EQ AT_FAIL)
      {
        aca_keySeqHndInit (hnd);
        return;
      }
      else
      {
        hnd->nextSeq = hnd->restSeq;
      }
    }
    else
    {
      TRACE_EVENT ("smi_aca.c: aca_keySeqInd: ksd_decode failed");
      ui_signal (UI_SIG_UNHND_CME_ERR, CME_ERR_Unknown);
      aca_keySeqHndInit (hnd);
      return;
    }
  }
  while (hnd->atReturn EQ AT_CMPL AND strlen (hnd->nextSeq) NEQ 0);
}

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

  PURPOSE : This function will be called by the ACI when an error
            inside the ME occured.

            <cmdId>: command identity
            <err>:   error code
*/
GLOBAL void rAT_PlusCME (T_ACI_AT_CMD cmdId, T_ACI_CME_ERR err)
{
  CHAR buf[30];

  sprintf (buf, "rAT_PlusCME (%d, %d)", cmdId, err);
  TRACE_FUNCTION (buf);

  switch (cmdId)
  {
    case (AT_CMD_ABRT): rAT_PlusCME    (currAbrtCmd, err);
                        currAbrtCmd = AT_CMD_NONE;         break;
    case (AT_CMD_CFUN): reg_CfunRej          (cmdId, err); break;
    case (AT_CMD_CPIN): sec_CpinRej          (cmdId, err); break;
    case (AT_CMD_COPS): reg_CopsRej          (cmdId, err); break;
    case (KSD_CMD_CF) : ss_CcfcRej           (cmdId, err); break;
    case (KSD_CMD_CB) : ss_ClckRej           (cmdId, err); break;
    case (KSD_CMD_CW) : ss_CcwaRej           (cmdId, err); break;
    case (KSD_CMD_PWD): sec_CpwdRej          (cmdId, err); break;
    case (AT_CMD_D)   : cal_DRejWhilePlusCME (cmdId, err); break;
    case (AT_CMD_H)   : cal_HRejWhilePlusCME (cmdId, err); break;
    case (AT_CMD_Z)   : cal_HRejWhilePlusCME (cmdId, err); break;
    case (AT_CMD_A)   : cal_ARejWhilePlusCME (cmdId, err); break;
    case (AT_CMD_CHLD): cal_ChldCtfrRej      (cmdId, err); break;
    case (AT_CMD_VTS) : cal_VtsRej           (cmdId, err); break;
    case (KSD_CMD_CL)  :                                   break;
    case (KSD_CMD_UBLK):                                   break;
    case (KSD_CMD_USSD):                                   break;

    default:
      ui_signal (UI_SIG_UNHND_CME_ERR, err);
      break;
  }
}

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

  PURPOSE : This function will be called by the ACI to signal the
            correct processing of a previous stimulated ACI
            transaction.

            <cmdId>: command identity
*/
#ifdef AT_INTERPRETER
EXTERN T_ACI_AT_CMD currExtCmd;
EXTERN void ext_OK ( T_ACI_AT_CMD cmdId );
#endif

GLOBAL void rAT_OK (T_ACI_AT_CMD cmdId)
{
  CHAR buf[20];

  sprintf (buf, "rAT_OK (%d)", cmdId);
  TRACE_FUNCTION (buf);

#ifdef AT_INTERPRETER
  if (currExtCmd NEQ AT_CMD_NONE)
  {
    ext_OK (cmdId);
  }
  else
#endif
  {
    switch (cmdId)
    {
      case (AT_CMD_ABRT) : rAT_OK (currAbrtCmd);
                           currAbrtCmd = AT_CMD_NONE; break;
      case (AT_CMD_CFUN) : reg_CfunCnf  (cmdId);      break;
      case (AT_CMD_CPIN) : sec_CpinCnf  (cmdId);      break;
      case (AT_CMD_COPS) : reg_CopsCnf  (cmdId);      break;
      case (AT_CMD_D)    : cal_DCnf     (cmdId);      break;
      case (AT_CMD_A)    : cal_ACnf     (cmdId);      break;
      case (AT_CMD_H)    : cal_HCnf     (cmdId);      break;
      case (AT_CMD_Z)    : cal_HCnf     (cmdId);      break;
      case (KSD_CMD_CF)  : ss_CcfcCnf   (cmdId);      break;
      case (KSD_CMD_CB)  : ss_ClckCnf   (cmdId);      break;
      case (KSD_CMD_CW)  : ss_CcwaCnf   (cmdId);      break;
      case (KSD_CMD_PWD) : sec_CpwdCnf  (cmdId);      break;
      case (AT_CMD_CHLD) :
      case (AT_CMD_CTFR) : cal_ChldCtfrCnf (cmdId);   break;
      case (AT_CMD_CMGD) : sms_CmgdCnf  (cmdId);      break;
      case (AT_CMD_VTS)  : cal_VtsCnf   (cmdId);      break;
      case (KSD_CMD_CL)  :                            break;
      case (KSD_CMD_UBLK):                            break;
      case (KSD_CMD_USSD):                            break;

      default: break;
    }
  }
}

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

  PURPOSE : This function is used ...

            <device>:   device identity
            <function>: function corresponding to devide
            <val1>:     first value of corresponding function
            <val2>:     second value of corresponding function
*/
GLOBAL void rAT_PercentDRV(T_ACI_DRV_DEV device,
                           T_ACI_DRV_FCT function,
                           UBYTE         val1,
                           UBYTE         val2)
{
  TRACE_FUNCTION ("rAT_PercentDRV");

  switch (device)
  {
    case (DRV_DEV_Keypad):
      switch (function)
      {
        case (DRV_FCT_KeypadInd):
          ui_keypadInd (val1, val2);
          break;

         default:
          break;
      }
      break;

    default:
      break;
  }
}

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

  PURPOSE : This function is used ...

*/
GLOBAL void rAT_PercentCLOG( T_ACI_CLOG * cmd )
{
}

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

  PURPOSE : This function is used ...

*/
GLOBAL void rAT_PercentRLOG( T_ACI_RLOG * rslt )
{
}

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

  PURPOSE : This function is used to convert a phone number (either 
            SMS service centre address or destination address) as a
            string into a phone number in the format used by the ACI.

*/
GLOBAL void aca_cvtNumber (CHAR* inNumber, T_ACA_NUMBER* outNumber)
{
  BOOL  international = FALSE; /* holds whether number is          */
                               /* international                    */
  CHAR* restNumber;            /* points to the phone number       */
                               /* without international indication */

  if (inNumber[0] EQ '+')
  {
    international = TRUE;
    restNumber    = inNumber + 1;
  }
  else if (inNumber[0] EQ '0' AND inNumber[1] EQ '0')
  {
    international = TRUE;
    restNumber    = inNumber + 2;
  }
  else
    restNumber    = inNumber;

  strncpy (outNumber->number, restNumber, MAX_SMS_NUM_LEN - 1);
  outNumber->number[MAX_SMS_NUM_LEN - 1] = NULL_TERM;

  outNumber->type.ton = (international ? TON_International :
                                         TON_Unknown);

  outNumber->type.npi = NPI_IsdnTelephony;
}

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

  PURPOSE : This function is used to convert a phone number (either 
            SMS service centre address or destination address) in the
            format used by the ACI into a phone number as a string.

*/
GLOBAL void aca_recvtNumber (T_ACA_NUMBER* inNumber, CHAR* outNumber)
{
  UBYTE offset = 0;

  if (inNumber->type.ton EQ TON_International)
  {
    outNumber[0] = '+';
    offset       = 1;
  }

  strncpy (outNumber + offset,
           inNumber->number,
           MAX_SMS_NUM_LEN - 1 - offset);

  outNumber[MAX_SMS_NUM_LEN - 1] = NULL_TERM;
}

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

  PURPOSE : This function is used to set the command which should be
            aborted.
*/
GLOBAL BOOL aca_setAbrtCmd (T_ACI_AT_CMD cmd)
{
  BOOL ret = FALSE;

  if ( currAbrtCmd EQ  AT_CMD_NONE  AND
       cmd         NEQ AT_CMD_ABRT      )
  {
    currAbrtCmd = cmd;
    ret         = TRUE;
  }

  return ret;
}

⌨️ 快捷键说明

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