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

📄 smi_cal.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 4 页
字号:
GLOBAL BOOL cal_isWithinCall (void)
{
  T_ACI_RETURN  ret;                    /* holds status information */
  T_ACI_CAL_LST callTable;              /* holds call table         */
  USHORT        i;                      /* Counter variable         */

  TRACE_FUNCTION ("cal_isWithinCall ()");

  ret = qAT_PercentCAL (CMD_SRC_LCL, &callTable[0]);

  if (ret EQ AT_CMPL)
  {
    /*
     * searching for any non-idle call.
     * Note1: This code could be simplified, the switch() maybe superflous.
     * Note2: The check for having stopped tone generation maybe weak here. 
     */
    for (i = 0; (i < MAX_CALL_NR) AND (callTable[i].index NEQ -1); i++)
    {
      switch (callTable[i].status)
      {
        case CAL_STAT_Held:
        case CAL_STAT_Active:
        case CAL_STAT_Wait:
        case CAL_STAT_Dial:
        case CAL_STAT_DeactiveReq:
        case CAL_STAT_Incomming:
        case CAL_STAT_Alerting:
          return TRUE; /* One call in appropriate state found */
        default: /* Check next call table entry */
          break;
      }
    }
  }
  return FALSE;
}

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

  PURPOSE : This function is used to request whether no call is 
            listed in the call table.

            returns: TRUE if the above condition is correct, otherwise
                     FALSE
*/
GLOBAL BOOL cal_isNoCall (void)
{
  T_ACI_RETURN  ret        = AT_FAIL; /* holds status information   */
  T_ACI_CAL_LST callTable;            /* holds call table           */
  SHORT         index      = -1;      /* first index in call table  */

  TRACE_FUNCTION ("cal_isNoCall ()");

  ret = qAT_PercentCAL (CMD_SRC_LCL, &callTable[0]);

  if (ret EQ AT_CMPL)
    index = callTable[0].index;

  return (index EQ -1);
}

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

  PURPOSE : This function is called to concentrate all reject 
            indications delivered by rAT_NO_CARRIER, rAT_BUSY and
            rAT_NO_ANSWER.

            <cmdId>: command indentity
            <cId>  : call id
            <cbId> : callback indentity
*/
LOCAL void cal_rejectCallbackInd (T_ACI_AT_CMD cmdId,
                                  SHORT        cId,
                                  T_MMI_RCB_ID cbId)
{
#ifdef AT_INTERPRETER
  if ( cId EQ extCallId )
  {

    switch ( cbId )
    {
      case ( NO_CARRIER ):
        rCI_NO_CARRIER ( cmdId, cId );
        break;

      case ( BUSY ):
        rCI_BUSY ( cmdId, cId );
        break;

      case ( NO_ANSWER ):
        rCI_NO_ANSWER ( cmdId, cId );
        break;
    }
    extCallId = ACI_NumParmNotPresent;
  }
  else
#endif
  {
    if (cmdId EQ currCalCmd)
      currCalCmd = AT_CMD_NONE;

    switch (cmdId)
    {
      case (AT_CMD_D): cal_DRej (cbId); break;
      case (AT_CMD_A): cal_ARej (cbId); break;
      case (AT_CMD_H): cal_HRej (cbId); break;
      case (AT_CMD_Z): cal_HRej (cbId); break;
 
      case (AT_CMD_NONE):
        ui_signal (UI_SIG_DISCONNECT, cal_getCause ());
        break;

      default:
        break;
    }
  }
}

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

  PURPOSE : This function is called to indicated that no carrier
            is present or carrier is lost.

            <cmdId>: command identity
*/
GLOBAL void rAT_NO_CARRIER (T_ACI_AT_CMD cmdId, SHORT cId)
{
  TRACE_FUNCTION ("rAT_NO_CARRIER");

  cal_rejectCallbackInd (cmdId, cId, NO_CARRIER);
}

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

  PURPOSE : This function is called to indicate that line is busy.
            
            <cmdId>: command identity
*/
GLOBAL void rAT_BUSY (T_ACI_AT_CMD cmdId, SHORT cId )
{
  TRACE_FUNCTION ("rAT_BUSY");

  cal_rejectCallbackInd (cmdId, cId, BUSY);
}

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

  PURPOSE : This function is called to indicate ...

            <cmdId>: command identity
*/
GLOBAL void rAT_NO_ANSWER (T_ACI_AT_CMD cmdId, SHORT cId)
{
  TRACE_FUNCTION ("rAT_NO_ANSWER");

  cal_rejectCallbackInd (cmdId, cId, NO_ANSWER);
}

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

  PURPOSE : This functions sends a MMI_AUDIO_TONE_REQ primitive to PL
            to switch on/off a specified tone.

            <callTone>: call tone
            <volume>:   volume
            <toneStat>: tone status
*/
GLOBAL void cal_sendAudioToneReq (UBYTE callTone,
                                  UBYTE volume,
                                  UBYTE toneStat)
{
  if (toneStat EQ TONE_SWT_OFF)
    audio_StopSoundbyID (AUDIO_SPEAKER,
                         callTone);
  else
    audio_PlaySoundID (AUDIO_SPEAKER,
                       callTone,
                       volume,
                       toneStat);
}

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

  PURPOSE : This functions is used to get the phone number used in
            the context of abbreviated dialing.

            <index>: abbreviated dialing index

            returns: exact phone number
*/
GLOBAL CHAR* cal_getAbbrDial (UBYTE index)
{
  if (index >= 0 AND index < MAX_ABBR_DIAL_NUM)
    return abbrDial[index];

  return "";
}

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

  PURPOSE : This functions is used to set the phone number used in
            the context of abbreviated dialing.

            <index>:  abbreviated dialing index
            <number>: exact phone number
*/
GLOBAL void cal_setAbbrDial (BYTE index, CHAR* number)
{
  if (index >= 0 AND index < MAX_ABBR_DIAL_NUM AND number NEQ NULL)
  {
    strncpy (abbrDial[index], number, MAX_PHB_NUM_LEN - 1);
    abbrDial[index][MAX_PHB_NUM_LEN - 1] = NULL_TERM;
  }
}

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

  PURPOSE : This function is used to send a DMTF tone.

            <dtmf>:  DTMF tone

            returns: status information concerning the sending
                     progress
*/
GLOBAL T_ACI_RETURN cal_sendDtmf (CHAR dtmf, BOOL pressed)
{
  T_ACI_RETURN ret = AT_FAIL; /* holds the status information */

  TRACE_FUNCTION ("cal_sendDtmf ()");
  
  /*
   *-----------------------------------------------------------------
   * call to ACI function when no answer on a further ACI function
   * call is expected
   *-----------------------------------------------------------------
   */
  if (currDTMFCmd EQ AT_CMD_NONE)
  {
    ret = sAT_PlusVTS (CMD_SRC_LCL, dtmf, ((pressed)?
                                            VTS_MOD_ManStart:
                                            VTS_MOD_ManStop));
    currDTMFCmd = AT_CMD_VTS;

    /*
     *---------------------------------------------------------------
     * process result code of ACI function call
     *---------------------------------------------------------------
     */   
    switch (ret)
    {
      case (AT_CMPL):
        rAT_OK (AT_CMD_VTS);
        break;

      case (AT_EXCT):
        break;

      default:
        rAT_PlusCME (AT_CMD_VTS, CME_ERR_Unknown);
        break;
    }
  }
  else if( currDTMFCmd EQ AT_CMD_VTS )
  {
    /*
     *---------------------------------------------------------------
     * abort current +VTS command
     *---------------------------------------------------------------
     */
    ret = sAT_Abort (CMD_SRC_LCL, AT_CMD_VTS);

    currDTMFCmd = AT_CMD_NONE;

    /*
     *---------------------------------------------------------------
     * process result code of ACI function call
     *---------------------------------------------------------------
     */   
    switch (ret)
    {
      case (AT_CMPL):
        rAT_OK (AT_CMD_NONE); // Is this correct ...?
        break;

      default:
        rAT_PlusCME (AT_CMD_NONE, CME_ERR_Unknown); // Is this correct ...?
        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_CAL                  |
| STATE   : code                  ROUTINE : cal_VtsCnf               |
+--------------------------------------------------------------------+

  PURPOSE : This function is called when sending of a DTMF tone is
            successfull
*/
GLOBAL void cal_VtsCnf (T_ACI_AT_CMD cmdId)
{
  TRACE_FUNCTION ("cal_VtsCnf ()");

  currDTMFCmd = AT_CMD_NONE;
}
                                        
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_CAL                  |
| STATE   : code                  ROUTINE : cal_VtsRej               |
+--------------------------------------------------------------------+

  PURPOSE : This function is called when sending of a DTMF tone
            failed.

            <err>: error code
*/
GLOBAL void cal_VtsRej (T_ACI_AT_CMD  cmdId, 
                        T_ACI_CME_ERR err)
{
  TRACE_FUNCTION ("cal_VtsRej ()");

  currDTMFCmd = AT_CMD_NONE;
}

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

  PURPOSE : This function is used to indicate additional information
            about call progress.

            <cId>:     call identity
            <msgType>: source of information
            <ibt>:     in-band tones indication
            <tch>:     traffic channel indication 
*/

GLOBAL void rAT_PercentCPI ( SHORT         cId, 
                             T_ACI_CPI_MSG msgType,
                             T_ACI_CPI_IBT ibt,
                             T_ACI_CPI_TCH tch )
{
  TRACE_FUNCTION ("rAT_PercentCPI()");

  if (msgType NEQ CPI_MSG_NotPresent)
    currMsgType = msgType;

  if (ibt NEQ CPI_IBT_NotPresent)
    currIbt = ibt;

  if (tch NEQ CPI_TCH_NotPresent)
    currTch = tch;

  if (ibt EQ CPI_IBT_True AND
      tch EQ CPI_TCH_True     )
  {
    ui_signal (UI_SIG_NIBT, NIBT_OFF);
  }
  else
  {
    if (msgType EQ CPI_MSG_Disc)
    {
      ui_signal (UI_SIG_NIBT, NIBT_DISC);
    }
    else if (msgType EQ CPI_MSG_Alert)
    {
      ui_signal (UI_SIG_NIBT, NIBT_ALERT);
    }
  }
}

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

  PURPOSE : Indication about TTY service
*/

GLOBAL void rAT_PercentCTYI (T_ACI_CTTY_NEG neg,
                             T_ACI_CTTY_TRX trx)
{
  TRACE_FUNCTION ("rAT_PercentCTYI()");

//  if (cmhPrm[CMD_SRC_LCL].ccCmdPrm.CTTYmode EQ CTTY_MOD_ENABLE)
    TRACE_EVENT_P2 ("[0]CTYI: %d, %d", neg, trx);
}

⌨️ 快捷键说明

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