📄 t38fax.c
字号:
/*-----------------------------
* 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 + -