📄 pbxdlg.cpp
字号:
SendMessage(WM_USER+E_TK_RELEASE, ChInfo[nCh].nLinkToCh, nCh);
break;
case USER_F_WAIT_TALK:
//stop playback of background music
nPlayResult = SsmCheckPlay(nCh);
if(nPlayResult != -1)
{
if(nPlayResult == 0)
{
if(SsmStopPlayFile(nCh) == -1)
{
ShowErrMsg("E_CHG_HookState", "USER_F_WAIT_TALK", "SsmStopPlayFile");
}
}
}
else
{
ShowErrMsg("E_CHG_HookState", "USER_F_WAIT_TALK", "SsmCheckPlay");
}
//E_MSG_HANGUP→ch1
SendMessage(WM_USER+E_MSG_HANGUP, ChInfo[nCh].nLinkToCh, nCh);
break;
case USER_F_GET_DTMF:
//close T4
if(SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_HookState", "USER_F_GET_DTMF", "SsmStopTimer");
}
//E_MSG_RELEASE→ch0
if(!ChInfo[nCh].bSubmiteChHookFlag)
{
SendMessage(WM_USER+E_MSG_RELEASE, ChInfo[nCh].nSaveSubmiteCh, nCh);
}
break;
case USER_F_REQ_USER:
//E_MSG_RELEASE→ch0
if(!ChInfo[nCh].bSubmiteChHookFlag)
{
SendMessage(WM_USER+E_MSG_RELEASE, ChInfo[nCh].nSaveSubmiteCh, nCh);
}
break;
case USER_F_RING_BACK:
//masked by wangfeng for sc-1077(闪断接续问题), 2008.06.03
/*
//E_US_RELEASE→ch2
SendMessage(WM_USER+E_US_RELEASE, ChInfo[nCh].nLinkToCh, nCh);
//E_MSG_RELEASE→ch0
if(!ChInfo[nCh].bSubmiteChHookFlag)
{
SendMessage(WM_USER+E_MSG_RELEASE, ChInfo[nCh].nSaveSubmiteCh, nCh);
}*/
//masked by wangfeng for sc-1077(闪断接续问题), 2008.06.03
//added by wangfeng for sc-1077(闪断接续问题), 2008.06.03
if(!ChInfo[nCh].bSubmiteChHookFlag)
{
ChInfo[ChInfo[nCh].nLinkToCh].nLinkToCh = ChInfo[nCh].nSaveSubmiteCh;
SendMessage(WM_USER+E_MSG_CONNECT,ChInfo[nCh].nSaveSubmiteCh,ChInfo[nCh].nLinkToCh);
if(SsmTalkWith(ChInfo[nCh].nSaveSubmiteCh, ChInfo[nCh].nLinkToCh) == -1)
{
ShowErrMsg("E_CHG_HookState", "USER_F_TALKING", "SsmTalkWith");
}
ChInfo[ChInfo[nCh].nLinkToCh].bPressFlag = FALSE;
}
//added by wangfeng for sc-1077(闪断接续问题), 2008.06.03
break;
case USER_F_TALKING:
//tear down bus connection between ch1 and ch2
if(SsmStopTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
{
ShowErrMsg("E_CHG_HookState", "USER_F_TALKING", "SsmStopTalkWith");
}
if(!ChInfo[nCh].bSubmiteChHookFlag) //Ch0 go off-hook, Flag==0?
{
ChInfo[ChInfo[nCh].nLinkToCh].nLinkToCh = ChInfo[nCh].nSaveSubmiteCh;
//E_MSG_CONNECT→ch0
SendMessage(WM_USER+E_MSG_CONNECT, ChInfo[nCh].nSaveSubmiteCh, ChInfo[nCh].nLinkToCh);
//to link original calling party and extenion transferred (ch0,ch2)
if(SsmTalkWith(ChInfo[nCh].nSaveSubmiteCh, ChInfo[nCh].nLinkToCh) == -1)
{
ShowErrMsg("E_CHG_HookState", "USER_F_TALKING", "SsmTalkWith");
}
ChInfo[ChInfo[nCh].nLinkToCh].bPressFlag = FALSE;
}
else
{
//E_MSG_RELEASE→ch2
SendMessage(WM_USER+E_MSG_RELEASE, ChInfo[nCh].nLinkToCh, nCh);
}
break;
case USER_F_OPERATE:
if(!ChInfo[nCh].bSubmiteChHookFlag)
{
//E_MSG_RELEASE→ch0
SendMessage(WM_USER+E_MSG_RELEASE, ChInfo[nCh].nSaveSubmiteCh, nCh);
}
break;
default:
break;
}//end of switch for ChInfo[nCh].nStatus
//clear DTMF buffer
if(SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_HookState", "USER_F_OPERATE", "SsmClearRxDtmfBuf");
}
//initialize channel concerned parameters
ChInfo[nCh].nStatus = USER_IDLE;
ChInfo[nCh].bPressFlag = FALSE;
ChInfo[nCh].bSubmiteChHookFlag = FALSE;
ChInfo[nCh].nSaveSubmiteCh = -1;
ChInfo[nCh].nTimer = -1;
ChInfo[nCh].nLinkToCh = -1;
memset(ChInfo[nCh].szCallerId, '\0', sizeof(char)*NUM_LENGTH); //clear CallerId
memset(ChInfo[nCh].szCalleeId, '\0', sizeof(char)*NUM_LENGTH); //clear CalledID
}
else if(nHook == 1) //station goes off-hook
{
switch(ChInfo[nCh].nStatus)
{
case USER_IDLE:
memset(ChInfo[nCh].szPhoneNumBuf, '\0', sizeof(char)*NUM_LENGTH);
ChInfo[nCh].nStatus = USER_GET_1STDTMF;
//clear DTMF buffer
if(SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_HookState", "USER_IDLE", "SsmClearRxDtmfBuf");
}
//start T1: 7 seconds
if( (ChInfo[nCh].nTimer = SsmStartTimer(7000, 1)) == -1)
{
ShowErrMsg("E_CHG_HookState", "USER_IDLE", "SsmStartTimer");
}
break;
case USER_LOCAL_RING:
//stop ringing
if(SsmStopRing(nCh) == -1)
{
ShowErrMsg("E_CHG_HookState", "USER_LOCAL_RING", "SsmStopRing");
}
ChInfo[nCh].nStatus = USER_TALKING;
//send E_US_PICKUP
SendMessage(WM_USER+E_US_PICKUP, ChInfo[nCh].nLinkToCh, nCh);
break;
default:
break;
}
}
break;
case E_CHG_RcvDTMF: //dtmf event is detected by station channel
dwDtmfLen = lParam >> 16;
dwDtmfNum = lParam & 0xFFFF;
switch(ChInfo[nCh].nStatus)
{
case USER_GET_1STDTMF:
//close T1
if(SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_1STDTMF", "SsmStopTimer");
}
ChInfo[nCh].nTimer = -1;
//retrieve first DTMF
ChInfo[nCh].szPhoneNumBuf[dwDtmfLen-1] = dwDtmfNum;
switch(dwDtmfNum)
{
case '0':
memset(ChInfo[nCh].szPhoneNumBuf, '\0', sizeof(char)*NUM_LENGTH);
//search for idle analog trunk channel
ChInfo[nCh].nLinkToCh = SsmSearchIdleCallOutCh(1, 0);
if(ChInfo[nCh].nLinkToCh >= 0)
{
if(SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_1STDTMF", "SsmClearRxDtmfBuf");
}
ChInfo[nCh].nStatus = USER_REQ_TRUNK;
//send E_US_SEIZURE_TK
SendMessage(WM_USER+E_US_SEIZURE_TK, ChInfo[nCh].nLinkToCh, nCh);
}
else
{
//note: if value "-1" is returned by function SsmSearchIdleCallOutCh(), then it is due to failed call of this function or
// no idle channel is found
if(ChInfo[nCh].nLinkToCh == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_1STDTMF", "SsmSearchIdleCallOutCh");
}
if(SsmSendTone(nCh, 1) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_1STDTMF", "SsmSendTone");
}
ChInfo[nCh].nStatus = USER_WAIT_HANGUP;
}
break;
case '2':
ChInfo[nCh].nStatus = USER_GET_DTMF;
//start T2:8 seconds
if( (ChInfo[nCh].nTimer = SsmStartTimer(8000, 1)) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_1STDTMF", "SsmStartTimer");
}
break;
default:
//send busy tone to station channel
if(SsmSendTone(nCh, 1) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_1STDTMF", "SsmSendTone");
}
ChInfo[nCh].nStatus = USER_WAIT_HANGUP;
break;
}
break;
case USER_GET_DTMF:
if(dwDtmfLen == MAX_USER_DTMFLEN)
{
ChInfo[nCh].szPhoneNumBuf[dwDtmfLen-1] = dwDtmfNum;
//close T2
if(SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_DTMF", "SsmStopTimer");
}
ChInfo[nCh].szPhoneNumBuf[MAX_USER_DTMFLEN] = '\0';
for(int i=0; i<nMaxCh; i++)
{
//to identify channel number Ch-k according to extension number
if ( (ChInfo[i].nChType == 2)
&& (strcmp(ChInfo[nCh].szPhoneNumBuf, ChInfo[i].CUserNum) == 0 ) && i != nCh)
{
ChInfo[nCh].nLinkToCh = i;
ChInfo[nCh].nStatus = USER_REQ_USER;
//send E_US_SEIZURE
SendMessage(WM_USER+E_US_SEIZURE, ChInfo[nCh].nLinkToCh, nCh); //send seizure reqest to called party channel
}
}
if(ChInfo[nCh].nLinkToCh == -1)
{
//send busy tone to station channel
if(SsmSendTone(nCh, 1) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_DTMF", "SsmSendTone");
}
ChInfo[nCh].nStatus = USER_WAIT_HANGUP;
}
}//end of first if
else
{
ChInfo[nCh].szPhoneNumBuf[dwDtmfLen-1] = dwDtmfNum;
//close and restart T2 in order to reset T2
if(SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_DTMF", "SsmStopTimer");
}
if( (ChInfo[nCh].nTimer = SsmStartTimer(8000, 1)) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_DTMF", "SsmStartTimer");
}
}
break;
case USER_DIALOUT:
//close and restart T3 in order to reset T3
if(SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_DIALOUT", "SsmStopTimer");
}
if( (ChInfo[nCh].nTimer = SsmStartTimer(18000, 1)) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_DIALOUT", "SsmStartTimer");
}
//Send E_US_DTMF2TK
SendMessage(WM_USER+E_US_DTMF2TK, ChInfo[nCh].nLinkToCh, lParam); //post dtmf event to trunk channel
break;
case USER_F_GET_DTMF:
if(dwDtmfLen == MAX_USER_DTMFLEN)
{
ChInfo[nCh].szPhoneNumBuf[dwDtmfLen-1] = dwDtmfNum;
//close T4
if(SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_F_GET_DTMF", "SsmStopTimer");
}
ChInfo[nCh].szPhoneNumBuf[MAX_USER_DTMFLEN] = '\0';
for(int i=0; i<nMaxCh; i++)
{
//station channel rule judge
if( (ChInfo[i].nChType == 2)
&&(strcmp(ChInfo[nCh].szPhoneNumBuf, ChInfo[i].CUserNum) ==0) && i != nCh )
{
ChInfo[nCh].nLinkToCh = i;
ChInfo[nCh].nStatus = USER_F_REQ_USER;
//F_US_ SEIZURE→ch2
SendMessage(WM_USER+F_US_SEIZURE, ChInfo[nCh].nLinkToCh, nCh); //post seizure event to station channel
}
}
if(ChInfo[nCh].nLinkToCh == -1)
{
//send busy tone to station channel
if(SsmSendTone(nCh, 1) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_F_GET_DTMF", "SsmSendTone");
}
ChInfo[nCh].nStatus = USER_F_OPERATE;
}
}//end of first if
else
{
ChInfo[nCh].szPhoneNumBuf[dwDtmfLen-1] = dwDtmfNum;
//close and restart T4 in order to reset T4
if(SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_F_GET_DTMF", "SsmStopTimer");
}
if( (ChInfo[nCh].nTimer = SsmStartTimer(8000, 1)) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_F_GET_DTMF", "SsmStartTimer");
}
}
break;
case USER_REQ_USER:
break;
case USER_RING_BACK:
break;
case USER_TALKING:
break;
case USER_WAIT_HANGUP:
break;
case USER_LOCAL_RING:
break;
case USER_REQ_TRUNK:
break;
case USER_WAIT_REMOTE_PICKUP:
break;
case USER_F_REQ_USER:
break;
case USER_F_RING_BACK:
break;
case USER_F_TALKING:
break;
case USER_F_OPERATE:
break;
default:
break;
}
break;//end of switch for E_CHG_RcvDTMF
case E_CHG_FlashCount:
switch(ChInfo[nCh].nStatus)
{
case USER_TALKING:
if(!ChInfo[nCh].bPressFlag) //flash Flag==0?
{
//tear down bus connection between ch0 and ch1
if(SsmStopTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_TALKING", "SsmStopTalkWith");
}
//E_MSG _FLASH→ch0
SendMessage(WM_USER+E_MSG_FLASH, ChInfo[nCh].nLinkToCh, nCh);
//falsh Flag=1
ChInfo[nCh].bPressFlag = TRUE;
//clear DTMF buffer
if(SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_TALKING", "SsmClearRxDtmfBuf");
}
//send dial tone
if(SsmSendTone(nCh, 0) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_TALKING", "SsmSendTone");
}
ChInfo[nCh].nSaveSubmiteCh = ChInfo[nCh].nLinkToCh;
ChInfo[nCh].nStatus =USER_F_GET_DTMF;
ChInfo[nCh].nLinkToCh = -1;
//start T4:8 seconds
if( (ChInfo[nCh].nTimer = SsmStartTimer(8000, 1)) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_TALKING", "SsmStartTimer");
}
}
break;
case USER_F_GET_DTMF:
//close T4
if(SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmStopTimer");
}
//stop dial tone
nToneType = -2;
nToneChResult = SsmChkSendTone(nCh,&nToneType);
if(nToneChResult == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmChkSendTone");
}
else
{
if(nToneChResult == 1)
{
if(SsmStopSendTone(nCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmStopSendTone");
}
}
}
// on-hook Flag==0? on Ch0
if(ChInfo[nCh].bSubmiteChHookFlag)
{
if(SsmSendTone(nCh, 3) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmSendTone");
}
ChInfo[nCh].nStatus = USER_WAIT_HANGUP;
}
else
{
ChInfo[nCh].nStatus = USER_TALKING;
ChInfo[nCh].nLinkToCh = ChInfo[nCh].nSaveSubmiteCh;
//E_MSG_CONNECT→ch0
SendMessage(WM_USER+E_MSG_CONNECT, ChInfo[nCh].nLinkToCh, nCh);
//flash Flag=0
ChInfo[nCh].bPressFlag = FALSE;
ChInfo[nCh].nSaveSubmiteCh = -1;
//build bus connection
if(SsmTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmTalkWith");
}
//clear DTMF buffer
if(SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmClearRxDtmfBuf");
}
}
break;
case USER_F_REQ_USER:
//on-hook Flag==0?
if(ChInfo[nCh].bSubmiteChHookFlag)
{
if(SsmSendTone(nCh, 3) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_REQ_USER", "SsmSendTone");
}
ChInfo[nCh].nStatus = USER_WAIT_HANGUP;
}
else
{
ChInfo[nCh].nLinkToCh = ChInfo[nCh].nSaveSubmiteCh;
ChInfo[nCh].nStatus = USER_TALKING;
//E_MSG_CONNECT→ch0
SendMessage(WM_USER+E_MSG_CONNECT, ChInfo[nCh].nLinkToCh, nCh);
//flash Flag=0
ChInfo[nCh].bPressFlag = FALSE;
ChInfo[nCh].nSaveSubmiteCh = -1;
//build bus connectin between ch0 and ch1
if(SsmTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_REQ_USER", "SsmTalkWith");
}
//clear DTMF buffer
if(SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_REQ_USER", "SsmClearRxDtmfBuf");
}
}
break;
case USER_F_OPERATE:
if(SsmStopSendTone(nCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_OPERATE", "SsmStopSendTone");
}
//on-hook Flag==0? on Ch0
if(ChInfo[nCh].bSubmiteChHookFlag)
{
//play howler tone
if(SsmSendTone(nCh, 3) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_OPERATE", "SsmSendTone");
}
ChInfo[nCh].nStatus = USER_WAIT_HANGUP;
}
else
{
ChInfo[nCh].nLinkToCh = ChInfo[nCh].nSaveSubmiteCh;
//E_MSG_CONNECT→ch0
SendMessage(WM_USER+E_MSG_CONNECT, ChInfo[nCh].nLinkToCh, nCh);
//build bus connection between ch0 and ch1
if(SsmTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_OPERATE", "SsmTalkWith");
}
//clear DTMF
if(SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_OPERATE", "SsmClearRxDtmfBuf");
}
ChInfo[nCh].nStatus = USER_TALKING;
ChInfo[nCh].nSaveSubmiteCh = -1;
ChInfo[nCh].bPressFlag = FALSE;
}
break;
case USER_GET_1STDTMF:
break;
case USER_GET_DTMF:
break;
case USER_REQ_USER:
break;
case USER_RING_BACK:
break;
case USER_WAIT_HANGUP:
break;
case USER_REQ_TRUNK:
break;
case USER_DIALOUT:
break;
case USER_WAIT_REMOTE_PICKUP:
break;
case USER_F_RING_BACK:
break;
case USER_F_TALKING:
break;
default:
break;
}
break;
case E_SYS_TIMEOUT: //timer Timeout event
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -