⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atrkfaxdlg.cpp

📁 这是一个Demo程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		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 + -