📄 form1.cs
字号:
//search for idle analog trunk channel
ChInfo[nCh].nLinkToCh = SsmSearchIdleCallOutCh(1, 0);
if(ChInfo[nCh].nLinkToCh >= 0)
{
if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_1STDTMF", "SsmClearRxDtmfBuf");
}
ChInfo[nCh].nStatus = APP_USER_STATUS.USER_REQ_TRUNK;
//send E_US_SEIZURE_TK
SendMessage(hwnd,WM_USER+(int)EventMsg.E_US_SEIZURE_TK, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)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 = APP_USER_STATUS.USER_WAIT_HANGUP;
}
break;
case '2':
ChInfo[nCh].nStatus = APP_USER_STATUS.USER_GET_DTMF;
//start T2:8 seconds
if( (ChInfo[nCh].nTimer = ShDll.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 = APP_USER_STATUS.USER_WAIT_HANGUP;
break;
}
break;
case APP_USER_STATUS.USER_GET_DTMF:
if(dwDtmfLen == MAX_USER_DTMFLEN)
{
ChInfo[nCh].szPhoneNumBuf.Insert (dwDtmfLen-1,dwDtmfNum);//[dwDtmfLen-1] = dwDtmfNum;
//close T2
if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_DTMF", "SsmStopTimer");
}
for(int i=0; i<nMaxCh; i++)
{
//to identify channel number Ch-k according to extension number
if ( (ChInfo[i].nChType == 2) && (ChInfo[nCh].szPhoneNumBuf.ToString ().Equals ( ChInfo[i].szUserNum.ToString ())) && i != nCh) // && (ChInfo[nCh].szPhoneNumBuf== ChInfo[i].szUserNum.ToString ().ToCharArray ()) && i != nCh)
{
ChInfo[nCh].nLinkToCh = i;
ChInfo[nCh].nStatus = APP_USER_STATUS.USER_REQ_USER;
//send E_US_SEIZURE
SendMessage(hwnd,WM_USER+(int)EventMsg.E_US_SEIZURE, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)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 = APP_USER_STATUS.USER_WAIT_HANGUP;
}
}//end of first if
else
{
ChInfo[nCh].szPhoneNumBuf.Insert (dwDtmfLen-1,dwDtmfNum);
//close and restart T2 in order to reset T2
if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_DTMF", "SsmStopTimer");
}
if( (ChInfo[nCh].nTimer = ShDll.SsmStartTimer(8000, 1)) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_GET_DTMF", "SsmStartTimer");
}
}
break;
case APP_USER_STATUS.USER_DIALOUT:
//close and restart T3 in order to reset T3
if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_DIALOUT", "SsmStopTimer");
}
if( (ChInfo[nCh].nTimer = ShDll.SsmStartTimer(18000, 1)) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_DIALOUT", "SsmStartTimer");
}
//Send E_US_DTMF2TK
SendMessage(hwnd,WM_USER+(int)EventMsg.E_US_DTMF2TK, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)lParam); //post dtmf event to trunk channel
break;
case APP_USER_STATUS.USER_F_GET_DTMF:
if(dwDtmfLen == MAX_USER_DTMFLEN)
{
ChInfo[nCh].szPhoneNumBuf.Insert (dwDtmfLen-1,dwDtmfNum);//[dwDtmfLen-1] = dwDtmfNum;
//close T4
if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_F_GET_DTMF", "SsmStopTimer");
}
for(int i=0; i<nMaxCh; i++)
{
//station channel rule judge ?
if( (ChInfo[i].nChType == 2)
&&(ChInfo[nCh].szPhoneNumBuf.ToString ().Equals (ChInfo[i].szUserNum.ToString ())) && i != nCh )
{
ChInfo[nCh].nLinkToCh = i;
ChInfo[nCh].nStatus = APP_USER_STATUS.USER_F_REQ_USER;
//F_US_ SEIZURE→ch2
SendMessage(hwnd,WM_USER+(int)EventMsg.F_US_SEIZURE, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)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 = APP_USER_STATUS.USER_F_OPERATE;
}
}//end of first if
else
{
ChInfo[nCh].szPhoneNumBuf.Insert (dwDtmfLen-1,dwDtmfNum);
//close and restart T4 in order to reset T4
if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_F_GET_DTMF", "SsmStopTimer");
}
if( (ChInfo[nCh].nTimer = ShDll.SsmStartTimer(8000, 1)) == -1)
{
ShowErrMsg("E_CHG_RcvDTMF", "USER_F_GET_DTMF", "SsmStartTimer");
}
}
break;
case APP_USER_STATUS.USER_REQ_USER:
break;
case APP_USER_STATUS.USER_RING_BACK:
break;
case APP_USER_STATUS.USER_TALKING:
break;
case APP_USER_STATUS.USER_WAIT_HANGUP:
break;
case APP_USER_STATUS.USER_LOCAL_RING:
break;
case APP_USER_STATUS.USER_REQ_TRUNK:
break;
case APP_USER_STATUS.USER_WAIT_REMOTE_PICKUP:
break;
case APP_USER_STATUS.USER_F_REQ_USER:
break;
case APP_USER_STATUS.USER_F_RING_BACK:
break;
case APP_USER_STATUS.USER_F_TALKING:
break;
case APP_USER_STATUS.USER_F_OPERATE:
break;
default:
break;
}
break;//end of switch for E_CHG_RcvDTMF
case (int)Event.E_CHG_FlashCount:
switch(ChInfo[nCh].nStatus)
{
case APP_USER_STATUS.USER_TALKING:
if(!ChInfo[nCh].bPressFlag) //flash Flag==0?
{
//tear down bus connection between ch0 and ch1
if(ShDll.SsmStopTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_TALKING", "SsmStopTalkWith");
}
//E_MSG _FLASH→ch0
SendMessage(hwnd,WM_USER+(int)EventMsg.E_MSG_FLASH, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
//falsh Flag=1
ChInfo[nCh].bPressFlag = true;
//clear DTMF buffer
if(ShDll.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 =APP_USER_STATUS.USER_F_GET_DTMF;
ChInfo[nCh].nLinkToCh = -1;
ChInfo[nCh].szPhoneNumBuf = new StringBuilder ();
//start T4:8 seconds
if( (ChInfo[nCh].nTimer = ShDll.SsmStartTimer(8000, 1)) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_TALKING", "SsmStartTimer");
}
}
break;
case APP_USER_STATUS.USER_F_GET_DTMF:
//close T4
if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmStopTimer");
}
//stop dial tone
nToneType = -2;
nToneChResult = SsmChkSendTone(nCh, ref 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 = APP_USER_STATUS.USER_WAIT_HANGUP;
}
else
{
ChInfo[nCh].nStatus = APP_USER_STATUS.USER_TALKING;
ChInfo[nCh].nLinkToCh = ChInfo[nCh].nSaveSubmiteCh;
//E_MSG_CONNECT→ch0
SendMessage(hwnd,WM_USER+(int)EventMsg.E_MSG_CONNECT, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
//flash Flag=0
ChInfo[nCh].bPressFlag = false;
ChInfo[nCh].nSaveSubmiteCh = -1;
//build bus connection
if(ShDll.SsmTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmTalkWith");
}
//clear DTMF buffer
if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_GET_DTMF", "SsmClearRxDtmfBuf");
}
}
break;
case APP_USER_STATUS.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 = APP_USER_STATUS.USER_WAIT_HANGUP;
}
else
{
ChInfo[nCh].nLinkToCh = ChInfo[nCh].nSaveSubmiteCh;
ChInfo[nCh].nStatus = APP_USER_STATUS.USER_TALKING;
//E_MSG_CONNECT→ch0
SendMessage(hwnd,WM_USER+(int)EventMsg.E_MSG_CONNECT, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
//flash Flag=0
ChInfo[nCh].bPressFlag = false;
ChInfo[nCh].nSaveSubmiteCh = -1;
//build bus connectin between ch0 and ch1
if(ShDll.SsmTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_REQ_USER", "SsmTalkWith");
}
//clear DTMF buffer
if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_REQ_USER", "SsmClearRxDtmfBuf");
}
}
break;
case APP_USER_STATUS.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 = APP_USER_STATUS.USER_WAIT_HANGUP;
}
else
{
ChInfo[nCh].nLinkToCh = ChInfo[nCh].nSaveSubmiteCh;
//E_MSG_CONNECT→ch0
SendMessage(hwnd,WM_USER+(int)EventMsg.E_MSG_CONNECT,(IntPtr) ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
//build bus connection between ch0 and ch1
if(ShDll.SsmTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_OPERATE", "SsmTalkWith");
}
//clear DTMF
if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_FlashCount", "USER_F_OPERATE", "SsmClearRxDtmfBuf");
}
ChInfo[nCh].nStatus = APP_USER_STATUS.USER_TALKING;
ChInfo[nCh].nSaveSubmiteCh = -1;
ChInfo[nCh].bPressFlag = false;
}
break;
case APP_USER_STATUS.USER_GET_1STDTMF:
break;
case APP_USER_STATUS.USER_GET_DTMF:
break;
case APP_USER_STATUS.USER_REQ_USER:
break;
case APP_USER_STATUS.USER_RING_BACK:
break;
case APP_USER_STATUS.USER_WAIT_HANGUP:
break;
case APP_USER_STATUS.USER_REQ_TRUNK:
break;
case APP_USER_STATUS.USER_DIALOUT:
break;
case APP_USER_STATUS.USER_WAIT_REMOTE_PICKUP:
break;
case APP_USER_STATUS.USER_F_RING_BACK:
break;
case APP_USER_STATUS.USER_F_TALKING:
break;
default:
break;
}
break;
case (int)Event.E_SYS_TIMEOUT: //timer Timeout event
switch(ChInfo[nCh].nStatus)
{
case APP_USER_STATUS.USER_GET_1STDTMF:
//close T1
if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_SYS_TIMEOUT", "USER_F_GET_DTMF", "SsmStopTimer");
}
nToneType = 0;
nToneChResult = SsmChkSendTone(nCh,ref nToneType);
if(nToneChResult != -1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -