📄 form1.cs
字号:
ChInfo[nCh].nStatus = APP_USER_STATUS.USER_TALKING;
break;
default:
break;
}
//retrieve CalledId
if (SsmGetDtmfStr(nCh,ChInfo[nCh].szCalleeId) == -1)
{
ShowErrMsg("E_TK_DIAL_OK", "", "SsmGetDtmfStr");
}
break;
/*+++++++++define public message+++++++++*/
case (int)EventMsg.E_MSG_RELEASE:
switch(ChInfo[nCh].nStatus)
{
case APP_USER_STATUS.USER_TALKING:
//play howler tone
if(SsmSendTone(nCh, 3) == -1)
{
ShowErrMsg("E_MSG_RELEASE", "USER_TALKING", "SsmSendTone");
}
ChInfo[nCh].nStatus = APP_USER_STATUS.USER_WAIT_HANGUP;
break;
case APP_USER_STATUS.USER_F_WAIT_TALK:
//stop playback of background music
nPlayResult = ShDll.SsmCheckPlay(nCh);
if(nPlayResult != -1)
{
if(nPlayResult == 0)
{
if(ShDll.SsmStopPlayFile(nCh) == -1)
{
ShowErrMsg("E_MSG_RELEASE", "USER_F_TALKING", "SsmStopPlayFile");
}
}
}
else
{
ShowErrMsg("E_MSG_RELEASE", "USER_F_TALKING", "SsmCheckPlay");
}
//call transfer failed and send howler tone to original calling party
if(SsmSendTone(nCh, 3) == -1)
{
ShowErrMsg("E_MSG_RELEASE", "USER_F_TALKING", "SsmSendTone");
}
ChInfo[nCh].nStatus = APP_USER_STATUS.USER_WAIT_HANGUP;
break;
case APP_USER_STATUS.USER_F_TALKING:
//play howler tone
if(SsmSendTone(nCh, 3) == -1)
{
ShowErrMsg("E_MSG_RELEASE", "USER_F_TALKING", "SsmSendTone");
}
ChInfo[nCh].nLinkToCh = -1;
ChInfo[nCh].nStatus = APP_USER_STATUS.USER_F_OPERATE;
break;
default:
break;
}
break;
case (int)EventMsg.E_MSG_FLASH:
//play background music
if(ShDll.SsmPlayFile(nCh, "bgmusic.wav", -1, 0, 0xffffffff) == -1)
{
ShowErrMsg("E_MSG_FLASH", "", "SsmPlayFile");
}
ChInfo[nCh].nStatus = APP_USER_STATUS.USER_F_WAIT_TALK;
break;
case (int)EventMsg.E_MSG_CONNECT:
ChInfo[nCh].nLinkToCh = lParam;
//stop playback of background music
nPlayResult = ShDll.SsmCheckPlay(nCh);
if(nPlayResult != -1)
{
if(nPlayResult == 0)
{
if(ShDll.SsmStopPlayFile(nCh) == -1)
{
ShowErrMsg("E_MSG_CONNECT", "", "SsmStopPlayFile");
}
}
}
else
{
ShowErrMsg("E_MSG_CONNECT", "", "SsmCheckPlay");
}
ChInfo[nCh].nStatus = APP_USER_STATUS.USER_TALKING;
break;
case (int)EventMsg.E_MSG_HANGUP:
ChInfo[nCh].bSubmiteChHookFlag = true; //origial calling party go on-hook
break;
default:
break;
}
}
void TrunkProc(int event1, int wParam, int lParam)
{
int nCh; //trunk channel number
int dwDtmfLen; //lenght of DTMF received
char dwDtmfNum; // DTMF received
int nChState; //current statt of trunk channel
int nPlayResult; //return value of function SsmCheckPlay()
string tempChar = "";//new char [20];
nCh = wParam;
switch(event1)
{
/*+++++++++driver message+++++++++*/
case (int)Event.E_CHG_ChState:
nChState = lParam & 0xffff;
switch(ChInfo[nCh].nStatus)
{
case APP_USER_STATUS.TRUNK_IDLE:
if(nChState == (int)ChState.S_CALL_RINGING)
{
if(ShDll.SsmPickup(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_IDLE", "SsmPickup");
}
//retrieve CallerId
if(ShDll.SsmGetCallerId(nCh, ChInfo[nCh].szCallerId) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_IDLE", "SsmGetDtmfStr");
}
ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_WAIT_ACTUAL_PICKUP;
}
break;
case APP_USER_STATUS.TRUNK_WAIT_ACTUAL_PICKUP:
if(nChState == (int)ChState.S_CALL_TALKING)
{
//play welcome
if(ShDll.SsmPlayFile(nCh, "Select.pcm", -1, 0, 0xffffffff) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_ACTUAL_PICKUP", "SsmPlayFile");
}
//set DTMF-STOP-PLAY switch
if(ShDll.SsmSetDtmfStopPlay(nCh, true) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_ACTUAL_PICKUP", "SsmSetDtmfStopPlay");
}
ChInfo[nCh].nTimer = ShDll.SsmStartTimer(15000,1);
ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_WAIT_SELECTION;
}
else
{
if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_ACTUAL_PICKUP", "SsmClearRxDtmfBuf");
}
if(ShDll.SsmHangup(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_ACTUAL_PICKUP", "SsmHangup");
}
ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;
}
break;
case APP_USER_STATUS.TRUNK_DIALING:
switch(nChState)
{
case (int)ChState.S_CALL_WAIT_REMOTE_PICKUP:
//retrieve CalledId
ChInfo[nCh].szCalleeId = new StringBuilder (ChInfo[nCh].szPhoneNumBuf.ToString ());
ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_WAIT_REMOTE_PICKUP;
SendMessage(hwnd,WM_USER+(int)EventMsg.E_TK_DIAL_OK, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
break;
case (int)ChState.S_CALL_TALKING:
//retrieve calledId
ChInfo[nCh].szCalleeId = new StringBuilder (ChInfo[nCh].szPhoneNumBuf.ToString ());
ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_CONNECTED;
SendMessage(hwnd,WM_USER+(int)EventMsg.E_TK_REMOTE_PICKUP, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
break;
case (int)ChState.S_CALL_PENDING:
SendMessage(hwnd,WM_USER+(int)EventMsg.E_TK_DIAL_FAIL, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
if(ShDll.SsmHangup(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_DIALING", "SsmHangup");
}
if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_DIALING", "SsmClearRxDtmfBuf");
}
ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;
break;
default:
break;
}
break;
case APP_USER_STATUS.TRUNK_WAIT_REMOTE_PICKUP:
if(nChState == (int)ChState.S_CALL_TALKING) //called trunk channel answer the call
{
ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_CONNECTED;
SendMessage(hwnd,WM_USER+(int)EventMsg.E_TK_REMOTE_PICKUP, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
}
else //called trunk channel does not answer the call
{
if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_REMOTE_PICKUP", "SsmClearRxDtmfBuf");
}
//go on-hook
if(ShDll.SsmHangup(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_REMOTE_PICKUP", "SsmHangup");
}
//send E_TK_REMOTE_NOANSWER
SendMessage(hwnd,WM_USER+(int)EventMsg.E_TK_REMOTE_NOANSWER, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;
}
break;
case APP_USER_STATUS.TRUNK_REQ_USER:
if(nChState == (int)ChState.S_CALL_PENDING)
{
//clear DTmf buffer
if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_REQ_USER", "SsmClearRxDtmfBuf");
}
//go on-hook
if(ShDll.SsmHangup(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_REQ_USER", "SsmHangup");
}
ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;
}
break;
case APP_USER_STATUS.TRUNK_RING_BACK:
if(nChState == (int)ChState.S_CALL_PENDING)
{
//stop background music
nPlayResult = ShDll.SsmCheckPlay(nCh);
if(nPlayResult != -1)
{
if(nPlayResult == 0)
{
if(ShDll.SsmStopPlayFile(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_RING_BACK", "SsmStopPlayFile");
}
}
}
else
{
ShowErrMsg("E_CHG_ChState", "TRUNK_RING_BACK", "SsmCheckPlay");
}
//clear DTMF buffer
if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_RING_BACK", "SsmClearRxDtmfBuf");
}
//go on-hook
if(ShDll.SsmHangup(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_RING_BACK", "SsmHangup");
}
//send E_US_RELEASE
SendMessage(hwnd,WM_USER+(int)EventMsg.E_US_RELEASE, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;
}
break;
case APP_USER_STATUS.TRUNK_CONNECTED:
if(nChState == (int)ChState.S_CALL_PENDING)
{
//send E_MSG_RELEASE to channel connected
SendMessage(hwnd,WM_USER+(int)EventMsg.E_MSG_RELEASE, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
//tear down bus connection
if(ShDll.SsmStopTalkWith(nCh, ChInfo[nCh].nLinkToCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_CONNECTED", "SsmStopTalkWith");
}
//clear DTMF buffer
if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_CONNECTED", "SsmClearRxDtmfBuf");
}
//go on-hook
if(ShDll.SsmHangup(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_CONNECTED", "SsmHangup");
}
ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;
}
break;
case APP_USER_STATUS.TRUNK_WAIT_SELECTION:
if(nChState ==(int)ChState.S_CALL_PENDING)
{
//close T1:8 seconds
if(ShDll.SsmStopTimer(ChInfo[nCh].nTimer) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_SELECTION", "SsmStopTimer");
}
//clear DTMF buffer
if(ShDll.SsmClearRxDtmfBuf(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_SELECTION", "SsmClearRxDtmfBuf");
}
//go on-hook
if(ShDll.SsmHangup(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_WAIT_SELECTION", "SsmHangup");
}
ChInfo[nCh].szCallerId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].szCalleeId = new StringBuilder (NUM_LENGTH);
ChInfo[nCh].nStatus = APP_USER_STATUS.TRUNK_IDLE;
}
break;
case APP_USER_STATUS.TRUNK_FLASHING:
if(nChState == (int)ChState.S_CALL_PENDING)
{
//stop background music
nPlayResult = ShDll.SsmCheckPlay(nCh);
if(nPlayResult != -1)
{
if(nPlayResult == 0)
{
if(ShDll.SsmStopPlayFile(nCh) == -1)
{
ShowErrMsg("E_CHG_ChState", "TRUNK_FLASHING", "SsmStopPlayFile");
}
}
}
else
{
ShowErrMsg("E_CHG_ChState", "TRUNK_FLASHING", "SsmCheckPlay");
}
SendMessage(hwnd,WM_USER+(int)EventMsg.E_MSG_HANGUP, (IntPtr)ChInfo[nCh].nLinkToCh, (IntPtr)nCh);
}
break;
default:
break;
}
break;
case (int)Event.E_CHG_RcvDTMF:
dwDtmfLen =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -