📄 ipgatewaydlg.cpp
字号:
lvc.iSubItem = 3;
cString.LoadString(IDS_GATEWAY24);
lvc.pszText = (LPTSTR)(LPCTSTR)cString;
lvc.cx = ColumnWidth[3];
m_LogList.InsertColumn(3, &lvc);
}
void CIPGatewayDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
ScanAnalogCh();
UpDateAnalogChListCtrl();
ScanSS1Ch();
UpDateSS1ChListCtrl();
ScanIpCh();
UpDateIpChListCtrl();
UpdateData(FALSE);
CDialog::OnTimer(nIDEvent);
}
///////////////////////////////////////////////////////////////////////////////////////////////
void CIPGatewayDlg::ScanAnalogCh()
{
for(int i = 0; i < m_nTotalAnalogCh; i++)
{
switch(m_AnalogCh[i].Step)
{
// unavailable
case E_STATE_ANALOG_UNAVAILABLE:
{
if(S_CALL_STANDBY == SsmGetChState(m_AnalogCh[i].nChId))
{
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
break;
}
else if(S_CALL_UNAVAILABLE != SsmGetChState(m_AnalogCh[i].nChId))
{
SsmHangup(m_AnalogCh[i].nChId);
break;
}
break;
}
// idle
case E_STATE_ANALOG_IDLE:
{
if(S_CALL_RINGING == SsmGetChState(m_AnalogCh[i].nChId))
{
SsmPickup(m_AnalogCh[i].nChId);
SsmGetCallerId( m_AnalogCh[i].nChId, m_AnalogCh[i].szCallerTelNumber);
m_AnalogCh[i].Step = E_STATE_ANALOG_WAIT_CALLER_CONNECT;
}
else
{
m_AnalogCh[i].iDirection = 0;
m_AnalogCh[i].nIpCh = -1;
memset(m_AnalogCh[i].szCalleeTelNumber, 0, 64);
memset(m_AnalogCh[i].szCallerTelNumber, 0, 64);
if(S_CALL_STANDBY != SsmGetChState(m_AnalogCh[i].nChId))
SsmHangup(m_AnalogCh[i].nChId);
if(S_CALL_UNAVAILABLE == SsmGetChState(m_AnalogCh[i].nChId))
m_AnalogCh[i].Step = E_STATE_ANALOG_UNAVAILABLE;
}
break;
}
// wait for the caller of this Analog channel to connect
case E_STATE_ANALOG_WAIT_CALLER_CONNECT:
{
if(S_CALL_PENDING == SsmGetChState(m_AnalogCh[i].nChId))
{
SsmHangup(m_AnalogCh[i].nChId);
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
}
else
{
if(S_CALL_TALKING == SsmGetChState(m_AnalogCh[i].nChId))
{
m_AnalogCh[i].Step = E_STATE_ANALOG_PLAY_SELECT;
}
}
break;
}
// go to play select music
case E_STATE_ANALOG_PLAY_SELECT:
{
if(S_CALL_PENDING == SsmGetChState(m_AnalogCh[i].nChId))
{
SsmHangup(m_AnalogCh[i].nChId);
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
}
else
{
if(SsmPlayIndexString(m_AnalogCh[i].nChId, _T("Select")) == -1)
{
AppErrorHandler(m_AnalogCh[i].nChId);
}
else
{
SsmSetDtmfStopPlay(m_AnalogCh[i].nChId,1); // enable DTMF-Stop-Play function
SsmClearRxDtmfBuf(m_AnalogCh[i].nChId);
memset(m_AnalogCh[i].szCalleeTelNumber, 0, 64);
m_AnalogCh[i].Step = E_STATE_ANALOG_CHECK_PLAY_SELECT;
}
}
break;
}
// playing select music
case E_STATE_ANALOG_CHECK_PLAY_SELECT:
{
if(S_CALL_PENDING == SsmGetChState(m_AnalogCh[i].nChId))
{
SsmStopPlayIndex(m_AnalogCh[i].nChId);
SsmHangup(m_AnalogCh[i].nChId);
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
}
else
{
if(SsmGetRxDtmfLen(m_AnalogCh[i].nChId) >= 1 && (2 == SsmCheckPlay(m_AnalogCh[i].nChId) || 1 == SsmCheckPlay(m_AnalogCh[i].nChId)))
{
char ch;
SsmGet1stDtmf(m_AnalogCh[i].nChId, &ch);
for(int a = 0;a < sizeof(m_nIPAddress) / sizeof(m_nIPAddress[0]); a++)
{
if(m_nIPAddress[a].nDTMF == ch - 0x30)
{
strcpy(m_AnalogCh[i].szCalleeTelNumber, m_nIPAddress[a].szAddress);
m_AnalogCh[i].Step = E_STATE_ANALOG_WAIT_IP_DIAL;
break;
}
}
}
}
break;
}
// wait for the app to dial with IP channel
case E_STATE_ANALOG_WAIT_IP_DIAL:
{
if(S_CALL_PENDING == SsmGetChState(m_AnalogCh[i].nChId))
{
SsmHangup(m_AnalogCh[i].nChId);
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
}
else
{
if('\0' == m_AnalogCh[i].szCalleeTelNumber[0])
{
m_AnalogCh[i].Step = E_STATE_ANALOG_PLAY_SELECT;
}
else
{
int nIpCh = Session_FindIdleIpCh();
if(-1 != nIpCh)
{
m_AnalogCh[i].nIpCh = nIpCh;
m_AnalogCh[i].iDirection = 1;
Session_SetIpChDial(nIpCh,
m_AnalogCh[i].nChId,
m_AnalogCh[i].szCallerTelNumber,
m_AnalogCh[i].szCalleeTelNumber,
2);
m_AnalogCh[i].Step = E_STATE_ANALOG_WAIT_IP_PICKUP;
}
}
}
break;
}
// wait for the remote ip user to pick up
case E_STATE_ANALOG_WAIT_IP_PICKUP:
{
if(S_CALL_PENDING == SsmGetChState(m_AnalogCh[i].nChId))
{
SsmHangup(m_AnalogCh[i].nChId);
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
}
else
{
if(Session_IsIpChIdle(m_AnalogCh[i].nIpCh))
{
SsmHangup(m_AnalogCh[i].nChId);
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
}
else
{
if(Session_IsIpChPickedUp(m_AnalogCh[i].nIpCh))
{
SsmTalkWith(m_AnalogCh[i].nChId, m_AnalogCh[i].nIpCh);
m_AnalogCh[i].Step = E_STATE_ANALOG_WAIT_HANGUP;
}
}
}
break;
}
// remote ip user has picked up,wait for anyone to hang up
case E_STATE_ANALOG_WAIT_HANGUP:
{
if(S_CALL_PENDING == SsmGetChState(m_AnalogCh[i].nChId))
{
SsmStopTalkWith(m_AnalogCh[i].nChId, m_AnalogCh[i].nIpCh);
SsmHangup(m_AnalogCh[i].nChId);
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
}
else
{
if(Session_IsIpChIdle(m_AnalogCh[i].nIpCh))
{
SsmStopTalkWith(m_AnalogCh[i].nChId, m_AnalogCh[i].nIpCh);
SsmHangup(m_AnalogCh[i].nChId);
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
}
}
break;
}
// go to dial with this Analog channel
case E_STATE_ANALOG_CALLOUT:
{
if(Session_IsIpChIdle(m_AnalogCh[i].nIpCh))
{
SsmHangup(m_AnalogCh[i].nChId);
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
}
else
{
SsmPickup(m_AnalogCh[i].nChId);
if(SsmAutoDial(m_AnalogCh[i].nChId, m_AnalogCh[i].szCalleeTelNumber))
{
AppErrorHandler(m_AnalogCh[i].nChId);
}
else
{
m_AnalogCh[i].Step = E_STATE_ANALOG_WAIT_CALLEE_PICKUP;
}
}
break;
}
// wait for the callee of this Analog channel to pickup
case E_STATE_ANALOG_WAIT_CALLEE_PICKUP:
{
if(S_CALL_PENDING == SsmGetChState(m_AnalogCh[i].nChId))
{
SsmHangup(m_AnalogCh[i].nChId);
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
}
else
{
if(Session_IsIpChIdle(m_AnalogCh[i].nIpCh))
{
SsmHangup(m_AnalogCh[i].nChId);
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
}
else
{
if(S_CALL_TALKING == SsmGetChState(m_AnalogCh[i].nChId))
{
m_AnalogCh[i].Step = E_STATE_ANALOG_CALLEE_PICKEDUP;
}
}
}
break;
}
// the callee of this Analog channel has picked up
case E_STATE_ANALOG_CALLEE_PICKEDUP:
{
if(S_CALL_PENDING == SsmGetChState(m_AnalogCh[i].nChId))
{
SsmHangup(m_AnalogCh[i].nChId);
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
}
else
{
if(Session_IsIpChIdle(m_AnalogCh[i].nIpCh))
{
SsmHangup(m_AnalogCh[i].nChId);
m_AnalogCh[i].Step = E_STATE_ANALOG_IDLE;
}
}
break;
}
}//? end switch
}//? end if
}
void CIPGatewayDlg::ScanSS1Ch()
{
for(int i = 0; i < m_nTotalSS1Ch; i++)
{
switch(m_SS1Ch[i].Step)
{
// unavailable
case E_STATE_SS1_UNAVAILABLE:
{
if(S_CALL_STANDBY == SsmGetChState(m_SS1Ch[i].nChId))
{
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
break;
}
else if(S_CALL_UNAVAILABLE != SsmGetChState(m_SS1Ch[i].nChId))
{
SsmHangup(m_SS1Ch[i].nChId);
break;
}
break;
}
// idle
case E_STATE_SS1_IDLE:
{
if(S_CALL_RINGING == SsmGetChState(m_SS1Ch[i].nChId))
{
SsmPickup(m_SS1Ch[i].nChId);
SsmGetCallerId(m_SS1Ch[i].nChId, m_SS1Ch[i].szCallerTelNumber);
m_SS1Ch[i].Step = E_STATE_SS1_WAIT_CALLER_CONNECT;
}
else
{
m_SS1Ch[i].iDirection = 0;
m_SS1Ch[i].nIpCh = -1;
memset(m_SS1Ch[i].szCalleeTelNumber, 0, 64);
memset(m_SS1Ch[i].szCallerTelNumber, 0, 64);
if(S_CALL_UNAVAILABLE == SsmGetChState(m_SS1Ch[i].nChId))
m_SS1Ch[i].Step = E_STATE_SS1_UNAVAILABLE;
}
break;
}
// wait for the caller of this SS1 channel to connect
case E_STATE_SS1_WAIT_CALLER_CONNECT:
{
if(S_CALL_PENDING == SsmGetChState(m_SS1Ch[i].nChId))
{
SsmHangup(m_SS1Ch[i].nChId);
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
}
else
{
if(S_CALL_TALKING == SsmGetChState(m_SS1Ch[i].nChId))
{
m_SS1Ch[i].Step = E_STATE_SS1_PLAY_SELECT;
}
}
break;
}
// go to play select music
case E_STATE_SS1_PLAY_SELECT:
{
if(S_CALL_PENDING == SsmGetChState(m_SS1Ch[i].nChId))
{
SsmHangup(m_SS1Ch[i].nChId);
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
}
else
{
if(SsmPlayIndexString(m_SS1Ch[i].nChId, _T("Select1")) == -1)
{
AppErrorHandler(m_SS1Ch[i].nChId);
}
else
{
SsmSetDtmfStopPlay(m_SS1Ch[i].nChId,1); // enable DTMF-Stop-Play function
SsmClearRxDtmfBuf(m_SS1Ch[i].nChId);
memset(m_SS1Ch[i].szCalleeTelNumber, 0, 64);
m_SS1Ch[i].Step = E_STATE_SS1_CHECK_PLAY_SELECT;
}
}
break;
}
// playing select music
case E_STATE_SS1_CHECK_PLAY_SELECT:
{
if(S_CALL_PENDING == SsmGetChState(m_SS1Ch[i].nChId))
{
SsmStopPlayIndex(m_SS1Ch[i].nChId);
SsmHangup(m_SS1Ch[i].nChId);
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
}
else
{
if(SsmGetRxDtmfLen(m_SS1Ch[i].nChId) >= 1 && (2 == SsmCheckPlay(m_SS1Ch[i].nChId) || 1 == SsmCheckPlay(m_SS1Ch[i].nChId)))
{
char ch;
SsmGet1stDtmf(m_SS1Ch[i].nChId, &ch);
for(int a = 0;a < sizeof(m_nIPAddress) / sizeof(m_nIPAddress[0]); a++)
{
if(m_nIPAddress[a].nDTMF == ch - 0x30)
{
strcpy(m_SS1Ch[i].szCalleeTelNumber, m_nIPAddress[a].szAddress);
m_SS1Ch[i].Step = E_STATE_SS1_WAIT_IP_DIAL;
break;
}
}
}
}
break;
}
// wait for the app to dial with IP channel
case E_STATE_SS1_WAIT_IP_DIAL:
{
if(S_CALL_PENDING == SsmGetChState(m_SS1Ch[i].nChId))
{
SsmHangup(m_SS1Ch[i].nChId);
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
}
else
{
if('\0' == m_SS1Ch[i].szCalleeTelNumber[0])
{
m_SS1Ch[i].Step = E_STATE_SS1_PLAY_SELECT;
}
else
{
int nIpCh = Session_FindIdleIpCh();
if(-1 != nIpCh)
{
m_SS1Ch[i].nIpCh = nIpCh;
m_SS1Ch[i].iDirection = 1;
Session_SetIpChDial(nIpCh,
m_SS1Ch[i].nChId,
m_SS1Ch[i].szCallerTelNumber,
m_SS1Ch[i].szCalleeTelNumber,
2);
m_SS1Ch[i].Step = E_STATE_SS1_WAIT_IP_PICKUP;
}
}
}
break;
}
// wait for the remote ip user to pick up
case E_STATE_SS1_WAIT_IP_PICKUP:
{
if(S_CALL_PENDING == SsmGetChState(m_SS1Ch[i].nChId))
{
SsmHangup(m_SS1Ch[i].nChId);
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
}
else
{
if(Session_IsIpChIdle(m_SS1Ch[i].nIpCh))
{
SsmHangup(m_SS1Ch[i].nChId);
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
}
else
{
if(Session_IsIpChPickedUp(m_SS1Ch[i].nIpCh))
{
SsmTalkWith(m_SS1Ch[i].nChId, m_SS1Ch[i].nIpCh);
m_SS1Ch[i].Step = E_STATE_SS1_WAIT_HANGUP;
}
}
}
break;
}
// remote ip user has picked up,wait for anyone to hang up
case E_STATE_SS1_WAIT_HANGUP:
{
if(S_CALL_PENDING == SsmGetChState(m_SS1Ch[i].nChId))
{
SsmStopTalkWith(m_SS1Ch[i].nChId, m_SS1Ch[i].nIpCh);
SsmHangup(m_SS1Ch[i].nChId);
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
}
else
{
if(Session_IsIpChIdle(m_SS1Ch[i].nIpCh))
{
SsmStopTalkWith(m_SS1Ch[i].nChId, m_SS1Ch[i].nIpCh);
SsmHangup(m_SS1Ch[i].nChId);
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
}
}
break;
}
// go to dial with this SS1 channel
case E_STATE_SS1_CALLOUT:
{
if(Session_IsIpChIdle(m_SS1Ch[i].nIpCh))
{
SsmHangup(m_SS1Ch[i].nChId);
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
}
else
{
SsmPickup(m_SS1Ch[i].nChId);
if(SsmAutoDial(m_SS1Ch[i].nChId, m_SS1Ch[i].szCalleeTelNumber))
{
AppErrorHandler(m_SS1Ch[i].nChId);
}
else
{
m_SS1Ch[i].Step = E_STATE_SS1_WAIT_CALLEE_PICKUP;
}
}
break;
}
// wait for the callee of this SS1 channel to pick up
case E_STATE_SS1_WAIT_CALLEE_PICKUP:
{
if(S_CALL_PENDING == SsmGetChState(m_SS1Ch[i].nChId))
{
SsmHangup(m_SS1Ch[i].nChId);
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
}
else
{
if(Session_IsIpChIdle(m_SS1Ch[i].nIpCh))
{
SsmHangup(m_SS1Ch[i].nChId);
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
}
else
{
if(S_CALL_TALKING == SsmGetChState(m_SS1Ch[i].nChId))
{
m_SS1Ch[i].Step = E_STATE_SS1_CALLEE_PICKEDUP;
}
}
}
break;
}
// the callee of this SS1 channel has picked up
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -