📄 atrkfaxdlg.cpp
字号:
else
for(int i=0;i<m_nTotalCh;i++)
if( (SsmGetChType(i) == FAX_CH || SsmGetChType(i) == SOFTFAX_CH)
&& m_FaxCh[i].Step == FAX_IDLE) return i;
break;
case 1:
m_secondDlg.m_cmbFaxCh.GetWindowText(str);
if(!str.IsEmpty())
{
return atoi(str);
}
else
for(int i=0;i<m_nTotalCh;i++)
if( (SsmGetChType(i) == FAX_CH || SsmGetChType(i) == SOFTFAX_CH)
&& m_FaxCh[i].Step == FAX_IDLE) return i;
break;
case 2:
m_thirdDlg.m_cmbFaxCh.GetWindowText(str);
if(!str.IsEmpty())
{
return atoi(str);
}
else
for(int i=0;i<m_nTotalCh;i++)
if( (SsmGetChType(i) == FAX_CH || SsmGetChType(i) == SOFTFAX_CH)
&& m_FaxCh[i].Step == FAX_IDLE) return i;
break;
default:
break;
}
return -1;
}
BOOL CAtrkFaxDlg::myInitFaxBoard()
{
char fnIni[MAX_PATH], fnPrompt[MAX_PATH];
CString str;
GetCurrentDirectory(MAX_PATH, m_szCurPath);
strcpy(fnIni, m_szCurPath);
strcat(fnIni, "\\ShConfig.ini");
strcpy(fnPrompt, m_szCurPath);
strcat(fnPrompt, "\\ShIndex.ini");
int q = SsmStartCti( fnIni, fnPrompt );
if(q != 0 )
{
SsmGetLastErrMsg(m_szErrMsg); //取得初始化出错信息
AfxMessageBox(m_szErrMsg, MB_OK );
return FALSE;
}
m_nTotalCh = SsmGetMaxCh();
for(int i=0; i< m_nTotalCh; i++)
{
m_ATrkCh[i].EnCalled = FALSE;
if( SsmGetChType(i) == FAX_CH || SsmGetChType(i) == SOFTFAX_CH)
{
strcpy(m_FaxCh[i].PhoNum, "");
strcpy(m_FaxCh[i].pChErrMsg, "");
strcpy(m_FaxCh[i].szRecPathFile,""); //added by xxh for ex_demo, 2003.12.19
strcpy(m_FaxCh[i].szSendPathFile, ""); //added by xxh for ex_demo, 2003.12.19
m_FaxCh[i].ucCheckEnd = 0;
m_FaxCh[i].Go = 0;
m_FaxCh[i].Step = FAX_IDLE;
m_FaxCh[i].Mode = 0;
SsmEnableCh(i); //此函数在4.x版本已经不使用了,放着是为了兼容以前的驱动
str.Format("%d",i);
m_firstDlg.m_cmbFaxCh.InsertString(-1, str);
m_secondDlg.m_cmbFaxCh.InsertString(-1,str);
m_thirdDlg.m_cmbFaxCh.InsertString(-1,str);
m_cmbFaxCh.InsertString(-1,str);
}
else
{
int nDirection;
if( SsmGetAutoCallDirection(i, &nDirection) == 1 ) // 允许自动接续
{
if( nDirection == 0 || nDirection == 2 ) // enable call in
{
m_ATrkCh[i].nShow = 0;//added by xxh for ex_demo, 2003.12.19
m_ATrkCh[i].Step = TRK_IDLE;
m_ATrkCh[i].pChErrMsg[0] = '\0';
m_ATrkCh[i].EnCalled = TRUE;
str.Format("%d",i);
m_cmbCurCh.InsertString(-1,str);
m_secondDlg.m_cmbTrunkCh.InsertString(-1,str);
}
}
//CString str;
//str.Format(_T("%d") , i);
//m_ctlCurCh.InsertString(-1 , (LPCTSTR)str);
}
}
m_firstDlg.m_cmbFaxCh.InsertString(-1,"");
m_secondDlg.m_cmbFaxCh.InsertString(-1,"");
m_thirdDlg.m_cmbFaxCh.InsertString(-1,"");
m_firstDlg.m_cmbFaxCh.SetCurSel(0);
m_secondDlg.m_cmbFaxCh.SetCurSel(0);
m_thirdDlg.m_cmbFaxCh.SetCurSel(0);
m_cmbCurCh.SetCurSel(0);
m_cmbFaxCh.SetCurSel(0);
m_secondDlg.m_cmbTrunkCh.SetCurSel(0);
if( SsmLoadIndexData(1, "",6,"Step1.voc", 0, -1) == -1 || // load index-play file
SsmLoadIndexData(2, "",6,"Step2.voc", 0, -1) == -1 )
{
SsmCloseCti();
return FALSE;
}
return TRUE;
}
void CAtrkFaxDlg::myMakeFaxFile(char *fnsrcbmp, char *fnfax)
{
Bmp_Info pBmp;
if( !fBmp_OpenBmp(fnsrcbmp, &pBmp) )
{
fBmp_GetErrMsg(m_szErrMsg);
AfxMessageBox(m_szErrMsg,MB_OK);
return;
}
Img_Block pImg;
if( !fBmp_CreatBlock(pBmp.width, pBmp.high, &pImg) )
{
fBmp_GetErrMsg(m_szErrMsg);
AfxMessageBox(m_szErrMsg,MB_OK);
return;
}
if( !fBmp_ReadImgFromBmp(0, &pImg, &pBmp) )
{
fBmp_GetErrMsg(m_szErrMsg);
AfxMessageBox(m_szErrMsg,MB_OK);
return;
}
fBmp_CloseBmp(&pBmp);
fBmp_PrintText(83, 175, "数字中继卡", &pImg);
fBmp_PrintText(83, 196, "8路坐席卡", &pImg);
fBmp_PrintText(83, 217, "8路传真卡", &pImg);
fBmp_PrintText(185, 175, "SHP-30D", &pImg);
fBmp_PrintText(185, 196, "SHP-8U", &pImg);
fBmp_PrintText(185, 217, "SHP-8MF", &pImg);
fBmp_PrintText(285, 175, "块", &pImg);
fBmp_PrintText(285, 196, "块", &pImg);
fBmp_PrintText(285, 217, "块", &pImg);
fBmp_PrintText(350, 175, "1", &pImg);
fBmp_PrintText(350, 196, "1", &pImg);
fBmp_PrintText(350, 217, "2", &pImg);
fBmp_PrintText(385, 175, "25000.00", &pImg);
fBmp_PrintText(385, 196, "8000.00", &pImg);
fBmp_PrintText(385, 217, "20000.00", &pImg);
fBmp_PrintText(472, 175, "25000.00", &pImg);
fBmp_PrintText(472, 196, "8000.00", &pImg);
fBmp_PrintText(472, 217, "40000.00", &pImg);
fBmp_PrintText(472, 283, "73000.00", &pImg);
fBmp_PutText(197, 302, "零", 1,&pImg);
fBmp_PutText(232, 302, "零", 1,&pImg);
fBmp_PutText(267, 302, "柒", 1,&pImg);
fBmp_PutText(302, 302, "叁", 1,&pImg);
fBmp_PutText(332, 302, "零", 1,&pImg);
fBmp_PutText(366, 302, "零", 1,&pImg);
fBmp_PutText(401, 302, "零", 1,&pImg);
fBmp_PutText(435, 302, "零", 1,&pImg);
fBmp_PutText(466, 302, "零", 1,&pImg);
fBmp_PutText(185, 329, "2000", 1,&pImg);
fBmp_PutText(275, 329, "12", 1,&pImg);
fBmp_PutText(335, 329, "20", 1,&pImg);
myDrawSelect(268, 348, &pImg);
myDrawSelect(176, 374, &pImg);
myDrawSelect(176, 397, &pImg);
myDrawSelect(176, 467, &pImg);
myDrawSelect(330, 516, &pImg);
myDrawSelect(161, 564, &pImg);
fBmp_CreatBmp("FaxFile\\result.bmp", pImg.width, pImg.high, &pBmp);
fBmp_WriteImgToBmp(0, &pImg, &pBmp);
fBmp_CloseBmp(&pBmp);
fBmp_ConvertBlockToFax(&pImg, fnfax);
fBmp_FreeBlock(&pImg);
}
void CAtrkFaxDlg::myScanATrunkCh()
{
int ch;
CString str;
char szRecFile[250];
for(int i=0; i<m_nTotalCh; i++)
{
if( !m_ATrkCh[i].EnCalled )
continue;
m_ATrkCh[i].lineState = SsmGetChState(i);
switch(m_ATrkCh[i].Step)
{
case TRK_IDLE:
if( m_ATrkCh[i].lineState == S_CALL_RINGING ) // ring detected , for auto send/rcv
{
if(m_nTabShow == 0 || m_nTabShow == 2)//是呼入模式
{
m_ATrkCh[i].Step = TRK_WAIT_CONNECT;
}
else
{
break; //如果不是呼入模式,则不摘机
}
SsmPickup(i);
m_ATrkCh[i].dwTimeOut = 0;
sprintf(szRecFile,"channel%d.pcm",i);
SsmRecToFile(i,szRecFile,-1,0,-1,-1,0);
}
else if( m_ATrkCh[i].lineState == S_CALL_PICKUPED ) // Picked up , for manual send
{
sprintf(szRecFile,"channel%d.pcm",i);
SsmRecToFile(i,szRecFile,-1,0,-1,-1,0);
//SsmAutoDial(i , (LPSTR)(LPCTSTR)(m_strOtherPhoneNum)); //maskd by xxh
SsmAutoDial(i , m_ATrkCh[i].pPhoNum);
//strcpy(m_ATrkCh[i].pPhoNum , (LPSTR)(LPCTSTR)m_strOtherPhoneNum); //masked by xxh
m_ATrkCh[i].dwTimeOut = 0;
m_ATrkCh[i].Step = TRK_CHECK_AUTODIAL;
}
else
{
strcpy(m_ATrkCh[i].pChErrMsg , "");
strcpy(m_ATrkCh[i].pCallerId , "");
}
break;
//-----------------------------------------------
// for auto send/rcv
case TRK_WAIT_CONNECT:
if( m_ATrkCh[i].lineState == S_CALL_TALKING ) //线路处于通话状态
{
SsmGetCallerId( i , m_ATrkCh[i].pCallerId);
if(m_nTabShow ==0 )
m_ATrkCh[i].Step = TRK_PLAY_SELECT;
else if(m_nTabShow == 2)
{
if((ch = myFindAnIdleCh()) == -1)
m_ATrkCh[i].Step = TRK_HANGUP;
else
{
m_ATrkCh[i].toFaxCh = ch;
m_FaxCh[ch].Direction = C_RECEIVE_FAX; //接收
m_FaxCh[ch].nTrunkch = i;
m_FaxCh[ch].Mode = 0;
m_ATrkCh[i].Step = TRK_CHECK_FAX_PROCESS;
m_FaxCh[ch].Go = 1;
m_FaxCh[ch].OffLine = 0;
SsmTalkWith(i,ch); //talk with
}
}
else
return;
}
break;
case TRK_PLAY_SELECT: // 播放 "这里是传真与模拟演示程序,按1开始发送,按2开始接收" 语音提示 , for auto send/rcv
SsmSetDtmfStopPlay( i , 1 ); // enable DTMF-Stop-Play function
SsmPlayIndexString( i ,"1");
SsmClearRxDtmfBuf( i );
m_ATrkCh[i].Step = TRK_CHECK_PLAY_SELECT;
break;
case TRK_CHECK_PLAY_SELECT: // 检测用户是否按了1或2 , 如有则播放提示语音 "请按启动键开始" for auto send/rcv
if( m_ATrkCh[i].lineState == S_CALL_PENDING || m_ATrkCh[i].dwTimeOut++>200)
{
m_ATrkCh[i].Step = TRK_HANGUP;
}
else
{
if( SsmGet1stDtmfClr(i, &m_ATrkCh[i].dtmf) == 1
&&( m_ATrkCh[i].dtmf =='1' || m_ATrkCh[i].dtmf == '2' ) )
{
if( (ch = myFindAnIdleCh()) == -1 ) // no idle fax channel available
{
m_ATrkCh[i].Step = TRK_HANGUP;
}
else
{
SsmPlayIndexString( i ,"2" );
m_ATrkCh[i].toFaxCh = ch;
m_FaxCh[ch].nTrunkch = i;
m_ATrkCh[i].Step = TRK_CHECK_PLAY_START;
}
}
}
break;
case TRK_CHECK_PLAY_START: // 检测通道上的语音提示"请按启动键开始"是否播放完毕
if( m_ATrkCh[i].lineState == S_CALL_PENDING ) // remote user hangup detected
{
SsmStopPlayIndex( i );
m_ATrkCh[i].Step = TRK_HANGUP;
}
else if( SsmCheckPlay( i ) ) // end of play "step2.voc"
{
ch = m_ATrkCh[i].toFaxCh;
SsmTalkWith( i, ch );
if(m_ATrkCh[i].dtmf == '1') m_FaxCh[ch].Direction = C_SEND_FAX;
else m_FaxCh[ch].Direction = C_RECEIVE_FAX;
m_FaxCh[ch].OffLine = 0;
m_FaxCh[ch].Go = 1; //start receiving/sending a fax file
m_FaxCh[ch].Mode = 0; //auto send/rcv
m_ATrkCh[i].Step = TRK_CHECK_FAX_PROCESS;
}
break;
//----------------------------------------------
//-----------------------------------------------
// for manual send
case TRK_CHECK_AUTODIAL:
switch( SsmChkAutoDial(i) )
{
case DIAL_NO_DIALTONE :
strcpy(m_ATrkCh[i].pChErrMsg , "无拨号音");
WriteLog(m_ATrkCh[i].pChErrMsg);
m_ATrkCh[i].Step = TRK_HANGUP;
break;
case DIAL_BUSYTONE :
strcpy(m_ATrkCh[i].pChErrMsg , "忙音");
WriteLog(m_ATrkCh[i].pChErrMsg);
m_ATrkCh[i].Step = TRK_HANGUP;
break;
case DIAL_ECHO_NOVOICE :
strcpy(m_ATrkCh[i].pChErrMsg , "回铃后无声");
WriteLog(m_ATrkCh[i].pChErrMsg);
m_ATrkCh[i].Step = TRK_HANGUP;
break;
case DIAL_NOVOICE :
strcpy(m_ATrkCh[i].pChErrMsg , "拨号后无声");
WriteLog(m_ATrkCh[i].pChErrMsg);
m_ATrkCh[i].Step = TRK_HANGUP;
break;
case DIAL_VOICEF1 :
strcpy(m_ATrkCh[i].pChErrMsg , "对端传真机摘机,但处于发送状态");
WriteLog(m_ATrkCh[i].pChErrMsg);
m_ATrkCh[i].Step = TRK_HANGUP;
break;
case DIAL_NOANSWER :
strcpy(m_ATrkCh[i].pChErrMsg , "没人接听");
WriteLog(m_ATrkCh[i].pChErrMsg);
m_ATrkCh[i].Step = TRK_HANGUP;
break;
case DIAL_VOICE :
m_ATrkCh[i].Fax_Answered = 0;
m_ATrkCh[i].Step = TRK_PLAY_MANUAL_HINT;
break;
case DIAL_VOICEF2 :
m_ATrkCh[i].Fax_Answered = 1;
m_ATrkCh[i].Step = TRK_MANUAL_FAX_START;
break;
default :
break;
}
break;
case TRK_PLAY_MANUAL_HINT: // 播放 "请按开始键接收传真" 语音提示 , for manual send
SsmPlayIndexString( i , "2");
m_ATrkCh[i].Step = TRK_CHECK_MANUAL_PLAY_START;
break;
case TRK_CHECK_MANUAL_PLAY_START : // 检测通道上的语音提示"请按启动键开始"是否播放完毕 , only for manual send/rcv
if( SsmCheckPlay(i) ) // end of play "step2.voc"
{
m_ATrkCh[i].Step = TRK_MANUAL_FAX_START;
}
else
{
switch( SsmGetToneAnalyzeResult(i) )
{
case 2 :
SsmStopPlayIndex( i );
strcpy(m_ATrkCh[i].pChErrMsg , "忙音");
WriteLog(m_ATrkCh[i].pChErrMsg);
m_ATrkCh[i].Step = TRK_HANGUP;
break;
case 8 :
SsmStopPlayIndex(i);
SsmStopPlayIndex( i );
m_ATrkCh[i].Fax_Answered = 1;
m_ATrkCh[i].Step = TRK_MANUAL_FAX_START;
break;
default :
break;
}
}
break;
case TRK_MANUAL_FAX_START :
if( (ch = myFindAnIdleCh()) == -1 ) // no idle fax channel available
{
m_ATrkCh[i].Step = TRK_HANGUP;
}
else
{
SsmTalkWith( i , ch );
SsmRecToFile(i,"aa.wav",-1,0,-1,-1,0);
m_ATrkCh[i].toFaxCh = ch;
m_FaxCh[ch].Direction = C_SEND_FAX;
m_FaxCh[ch].OffLine = 0;
m_FaxCh[ch].nTrunkch = i;
m_FaxCh[ch].Go = 1; // start send a fax file
m_FaxCh[ch].Mode = 1; // manual send
m_FaxCh[ch].Fax_Answered = m_ATrkCh[i].Fax_Answered;
m_ATrkCh[i].Step = TRK_CHECK_FAX_PROCESS;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -