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

📄 t38fax.c

📁 m80320 VoIP DSP驱动源码
💻 C
📖 第 1 页 / 共 4 页
字号:
/*-----------------------------
* t38Fax.c - T.38 FAX相关功能源文件
*
* Description:
*  
* Author: ZhengQishan
* 
* Modified history
*------------------------------
* 2006-3-15 15:13 ZhengaQishan Created.
*
**/

#include "t38Fax.h"

/*用于记录上层传递下来的T38 FAX的相关参数*/
PortStatusParameter  * gpT38FaxParameter[M803XX_MAX_PORT_NUM * MAX_PIN_NUM];/* = {(PortStatusParameter  *)NULL};在初始化的时候进行*/


/*-----------------------------
* initT38FaxArgVar - 初始化T.38 FAX参数结构变量
*
* Description:
* 
* Argument:
*   int slot - 槽位号,取值范围从1 到 8
*
* Modified history
*------------------------------
* 2006-3-15 15:13 ZhengaQishan Created.
*
**/
STATUS initT38FaxArgVar(int slot)
{
    int loopCnt;
    static int firstTime = 1;

    if (slot < 1 || slot > MAX_PIN_NUM)
        return ERROR;
    
    if (firstTime == 1)
    {
        memset((void *)gpT38FaxParameter, 0, 4 * M803XX_MAX_PORT_NUM * MAX_PIN_NUM);
        firstTime = 0;
    }
    if ((PortStatusParameter *)NULL == gpT38FaxParameter[M803XX_MAX_PORT_NUM * (slot - 1)])
    {
        gpT38FaxParameter[M803XX_MAX_PORT_NUM * (slot - 1)] = (PortStatusParameter *)malloc(M803XX_MAX_PORT_NUM * sizeof(PortStatusParameter));
        if ((PortStatusParameter *)NULL == gpT38FaxParameter[M803XX_MAX_PORT_NUM * (slot - 1)])
            taskSuspend(0);

        memset((void *)gpT38FaxParameter[M803XX_MAX_PORT_NUM * (slot - 1)], 0, M803XX_MAX_PORT_NUM * sizeof(PortStatusParameter));
        
        for (loopCnt = 1; loopCnt < M803XX_MAX_PORT_NUM; loopCnt ++)
        {
            gpT38FaxParameter[M803XX_MAX_PORT_NUM * (slot - 1) + loopCnt] = gpT38FaxParameter[M803XX_MAX_PORT_NUM * (slot - 1)] + loopCnt;
        }
    }
    return OK;
}

/*-----------------------------
* faxRelayStateChangeProcess - 查看T.38 FAX状态改变的情况
*
* Description:
* 
* Argument:
*   int portNo  - 端口号
*   UINT16* ptr - The pointer to FIFO value
*   UINT8 len   - The length of FIFO value
*
*   FIFO值的属性:
* FIFO Value (hex) Fax Relay State
* 0000             Idle
* 0001             NoSignal message from IP – entered Idle
* 0002             CNG received from PCM
* 0003             CNG sent to PCM
* 0004             CED received from PCM
* 0005             CED sent to PCM
* 0006             V.21 Ch 2 demodulation
* 0007             V.21 Ch 2 remodulation
* 0008             V.27 ter 2400 demodulation
* 0009             V.27 ter 2400 remodulation
* 000A             V.27 ter 4800 demodulation
* 000B             V.27 ter 4800 remodulation
* 000C             V.29 7200 demodulation
* 000D             V.29 7200 remodulation
* 000E             V.29 9600 demodulation
* 000F             V.29 9600 remodulation
* 0010             V.17 7200 short train demodulation
* 0011             V.17 7200 short train remodulation
* 0012             V.17 7200 long train demodulation (V.33)
* 0013             V.17 7200 long train demodulation (V.33)
* 0014             V.17 9600 short train demodulation
* 0015             V.17 9600 short train remodulation
* 0016             V.17 9600 long train demodulation (V.33)
* 0017             V.17 9600 long train demodulation (V.33)
* 0018             V.17 12000 short train demodulation
* 0019             V.17 12000 short train remodulation
* 001A             V.17 12000 long train demodulation (V.33)
* 001B             V.17 12000 long train demodulation (V.33)
* 001C             V.17 14400 short train demodulation
* 001D             V.17 14400 short train remodulation
* 001E             V.17 14400 long train demodulation (V.33)
* 001F             V.17 14400 long train demodulation (V.33)
* mm06 (mm non zero) T.30 message with FCF=mm has been demodulated. Note: The X bit of
* the FCF will be reset, and 7F is a special case that indicates TCF.
* mm07 (mm non zero) T.30 message with FCF=mm has been remodulated. Note: The X bit of
* the FCF will be reset, and 7F is a special case that indicates TCF.
* Return:
*    
* Modified history
*------------------------------
* 2006-3-15 15:13 ZhengaQishan Created.
*
**/
void faxRelayStateChangeProcess(UINT8 portNo, UINT16* ptr, UINT8 len)
{
    UINT16  faxRelayState;
    UINT32 gPort;
    UINT16  dir;
    char *pDir = NULL;
    char detectStr[] = {"det "};
    char rcvMsgStr[] = {"msg "};
    int dbgClass = 0;

    gPort = (((UINT32)((CON_TO_DP[m_port[portNo].Channel].chan)+1))<<16)+(UINT32)((CON_TO_DP[m_port[portNo].Channel].chip+1)<<24);  /* 全局端口号 */
    

    faxRelayState = *ptr;
    
    if(m_port[portNo].CallType == LFXS_CALLTYPE_IN)
    {
        dbgClass = /*faxrelaymsg |*/ faxrelaymsgcalled;/*fax所有消息或被叫信息开关*/
    }
    else if(m_port[portNo].CallType == LFXS_CALLTYPE_OUT)
    {
        dbgClass = /*faxrelaymsg |*/ faxrelaymsgcalling;/*fax所有消息或主叫信息开关*/
    }

    if ((faxRelayState & 0xFF00)!=0)
    {
        dir = faxRelayState & 0xFF;
        if (dir == T38_FAX_DEMODULATION )
        {
            pDir = detectStr;
        }
        else
        {
            pDir = rcvMsgStr;
        }
        switch((faxRelayState >> 8) & 0xFF)
        {
        /*下面注释掉的内容是将直接打印的信息改为debug信息*/
        case T38_FAX_STATE_DIS:
        /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "DIS");*/
            faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "DIS (Digital identification signal)");
            break;

        case T38_FAX_STATE_DCS0:  
        case T38_FAX_STATE_DCS1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "DCS");*/
            faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "DCS (Digital command signal)");
            break;
            
        case T38_FAX_STATE_FTT0:  
        case T38_FAX_STATE_FTT1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "FTT");*/
            faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "FTT (Failure to train)");        
            break;
            
        case T38_FAX_STATE_CFR0: 
        case T38_FAX_STATE_CFR1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "CFR");*/
            faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "CFR (Confirmation to receive)");
            break;

        case T38_FAX_STATE_MPS0: 
        case T38_FAX_STATE_MPS1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "MPS");*/
            faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "MPS (Multipage signal)");
            break;
                        
        case T38_FAX_STATE_MCF0:  
        case T38_FAX_STATE_MCF1:    
             /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "MCF");*/
            faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "MCF (Message confirmation)");
            break;
          
        case T38_FAX_STATE_EOP0:  
        case T38_FAX_STATE_EOP1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "EOP");*/
            faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "EOP (End of procedure)");
            break;
          
        case T38_FAX_STATE_DCN0:  /*发送传真机相连的网关所接收到的传真机状态*/
        case T38_FAX_STATE_DCN1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "DCN");*/
            faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "DCN (Distroy chain)");
            break;

        case T38_FAX_STATE_CIG:  
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "CIG");*/
            faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "CIG (Calling subscriber identification)");
            break;

        case T38_FAX_STATE_CRP0:  
        case T38_FAX_STATE_CRP1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "CRP");*/
            faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "CRP (Command repeat)");
            break;
              
        case T38_FAX_STATE_CSI:  
        /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "CSI");*/
            faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "CSI (Called subscriber identification)");
            break;

        case T38_FAX_STATE_CTC0:  
        case T38_FAX_STATE_CTC1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "CTC");*/
            faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "CTC (Continue to correct)");
            break;

        case T38_FAX_STATE_CTR0:  
        case T38_FAX_STATE_CTR1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "CTR");*/
            faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "CTR (Response for continue to correct)");
            break;

        case T38_FAX_STATE_EOM0:  
        case T38_FAX_STATE_EOM1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "EOM");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "EOM (End of message)");
            break;

        case T38_FAX_STATE_EOR0:  
        case T38_FAX_STATE_EOR1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "EOR");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "EOR (End of retransmission)");
            break;

        case T38_FAX_STATE_ERR0:  
        case T38_FAX_STATE_ERR1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "ERR");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "ERR (Response for end of retransmission)");
            break;

        case T38_FAX_STATE_FCD: 
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "FCD");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "FCD (Facsimile coded data)");
            break;

        case T38_FAX_STATE_FDM0:  
        case T38_FAX_STATE_FDM1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "FDM");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "FDM (File diagnostic message)");
            break;

        case T38_FAX_STATE_NSC:  
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "NSC");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "NSC (Non-standard facilities command)");
            break;

        case T38_FAX_STATE_NSF:  
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "NSF");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "NSF (Non-standard facilities)");
            break;

        case T38_FAX_STATE_NSS0:  
        case T38_FAX_STATE_NSS1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "NSS");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "NSS (Non-standard set up)");
            break;

        case T38_FAX_STATE_PID0:  
        case T38_FAX_STATE_PID1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "PID");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "PID (Procedure interrupt disconnect)");
            break;

        case T38_FAX_STATE_PIN0:  
        case T38_FAX_STATE_PIN1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "PIN");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "PIN (Procedure interrupt negative)");
            break;

        case T38_FAX_STATE_PIP0:  
        case T38_FAX_STATE_PIP1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "PIP");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "PIP (Procedure interrupt positive)");
            break;

        case T38_FAX_STATE_PPS0:  
        case T38_FAX_STATE_PPS1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "PPS");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "PPS (Partial page signal)");
            break;

        case T38_FAX_STATE_PPR0:  
        case T38_FAX_STATE_PPR1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "PPR");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "PPR (Partial page request)");
            break;

        case T38_FAX_STATE_PRI_EOM0:  
        case T38_FAX_STATE_PRI_EOM1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "PRI_EOM");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "PRI_EOM (Procedure interrupt-EOM)");
            break;

        case T38_FAX_STATE_PRI_EOP0:  
        case T38_FAX_STATE_PRI_EOP1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "PRI_EOP");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "PRI_EOP (Procedure interrupt-EOP)");
            break;

        case T38_FAX_STATE_PRI_MPS0:  
        case T38_FAX_STATE_PRI_MPS1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "PRI_MPS");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "PRI_MPS (Procedure interrupt-MPS)");
            break;  

        case T38_FAX_STATE_PWD:  
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "PWD");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "PWD (Password (for polling))");
            break;

        case T38_FAX_STATE_PaWD0:  
        case T38_FAX_STATE_PaWD1:   
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "PaWD");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "PaWD (Password (for transmission))");
            break;

        case T38_FAX_STATE_RCP:  
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "RCP");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "RCP (Return to control for partial page)");
            break;

        case T38_FAX_STATE_RNR0:  
        case T38_FAX_STATE_RNR1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "RNR");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "RNR (Receive not ready)");
            break;

        case T38_FAX_STATE_RR0:  
        case T38_FAX_STATE_RR1: 
           /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "RR");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "RR (Receive ready)");
            break;

        case T38_FAX_STATE_RTN0:  
        case T38_FAX_STATE_RTN1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "RTN");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "RTN (Retrain negative)");
            break;

        case T38_FAX_STATE_RTP0:  
        case T38_FAX_STATE_RTP1:    
            /*printf("Port 0x%08x %s FAX Relay %s\n", gPort, pDir, "RTP");*/
                faxDebug(dbgClass, gPort, " %s FAX Relay %s\n", pDir, "RTP (Retrain positive)");
            break;

        case T38_FAX_STATE_SEP:  

⌨️ 快捷键说明

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