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

📄 faxdemo.cpp

📁 传真演示系统(需硬件板卡支持)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
int NowBufPos[128];

void WINAPI FaxEvent(HWND hwnd)
{
	int i,FaxChnl;;
	char PStr[40];
	int CheckReturn;
	char FileName[13];
	int Return;
	HDC hDC;
	static int F=0;
    int ReadCount;
    char ReadBuff[1024];
	BYTE SetValue;
	char filename[128];
	int ConvID;
	int VoiceID;
	char Choice;
	
	SetValue = 0x40;
	hDC = GetDC(hwnd);
		
	DispSomething();

	for(i = 0; i < TotalLine; i++) 
	{
		DispTrunkStatus(i);
		if( DJTrk_CheckForwardHangUp(i) ) 
		{
			// modify this fore good-fax
			//	ResetTrunk(i) ;
			//	continue ;
			if ( (pTrunk[i].Status >0) && (pTrunk[i].Status!= 650 ) )
				pTrunk[i].Status = 650;
		}

		switch(pTrunk[i].Status)
		{
			case 0:
				if( DJTrk_CheckReady(i))//user callin
					pTrunk[i].Status = 10;
				break;
			case 10:
				OutStatus(i,"Play Message ...... ");
				strcpy(filename,VoicePath);
				strcat(filename,"faxdemo.001");
				DJVoc_PlayFile(i,filename);
				pTrunk[i].Status = 20;
				break;
			case 20:
				VoiceID = DJTrk_GetTrunkPlayID(i);
				if(DJVoc_CheckVoiceEnd(VoiceID))
				{
					DJVoc_StopPlayFile(i);
					pTrunk[i].Status = 30;
				}
				else
				{
					if(DJTrk_GetReciveDtmfNum(i) > 0)
					{
						DJVoc_StopPlayFile(i);
						pTrunk[i].Status = 40;
					}
				}
				break;
			case 30:
				if(DJTrk_GetReciveDtmfNum(i) > 0)
					pTrunk[i].Status = 40;
				break;
			case 40:
				Choice = DJTrk_GetLastDtmfCode(i);
				switch(Choice)
				{
				case '1':
					pTrunk[i].Status = 100;
					break;
				case '2':
					pTrunk[i].Status = 200;
					break;
				case '3':
					pTrunk[i].Status = 300;
					break;
				case '5':
					pTrunk[i].Status = 5000;
					break;
				case '6':
					pTrunk[i].Status = 6000;
					break;
				default:
					DJTrk_InitDtmfBuf(i);
					OutStatus(i,"Input error, please reinput");
							pTrunk[i].Status = 30;
							break;
				}
				break;
			case 100://发送传真
				strcpy(filename,VoicePath);
				strcat(filename,"faxdemo.002");
				DJVoc_PlayFile(i,filename);
				pTrunk[i].Status=110;
				break;
			case 110:
				VoiceID = DJTrk_GetTrunkPlayID(i);
				if(VoiceID>=0 && (!DJVoc_CheckVoiceEnd(VoiceID))) break;
				DJVoc_StopPlayFile(i);
				FaxChnl = DJFax_GetOneFreeFaxChnl();
				if(!DJFax_SetLink(FaxChnl,i))
				{
					ResetTrunk(i);
					OutLinkFax(i,"Error");
					pTrunk[i].Status = 0;
					break;
				}
				DJFax_SetLocalID (FaxChnl, "1234567890ABCDEF1234");
				sprintf(PStr,"%d",FaxChnl);
				OutLinkFax(i,PStr);
				OutFax(FaxChnl,"Start Send Fax ...");
				OutStatus(i,"Start Send Fax ...");
				pFax[FaxChnl].Status = SEND;

				strcpy ( pFax[FaxChnl].SendFaxName, "w.bfx" );
				pTrunk[i].Status = 120;
				break;
			case 120:
				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				if((pFax[FaxChnl].TotalPage=DJFax_SendFaxFile(FaxChnl,pFax[FaxChnl].SendFaxName)) > 0)
				{
					sprintf(PStr,"Now Send Fax Page %d/%d  %ld bytes",
						pFax[FaxChnl].CurrPage+1,pFax[FaxChnl].TotalPage,
						DJFax_GetSendBytes(FaxChnl));
					OutFax(FaxChnl,PStr);
					pTrunk[i].Status = 500;
				}
				else
				{
					OutFax(FaxChnl,"Send fax Error...               ");
					DJFax_ClearLink(FaxChnl,i);
					ResetTrunk(i);
					pTrunk[i].Status = 0;
				}
				break;
			case 200://接收传真
				FaxChnl = DJFax_GetOneFreeFaxChnl();
				if(!DJFax_SetLink(FaxChnl,i))
				{
					ResetTrunk(i);
					OutLinkFax(i,"Error");
					pTrunk[i].Status = 0;
					break;
				}
				DJFax_SetLocalID (FaxChnl, "1234567890ABCDEF1234");
				sprintf(PStr,"%d   ",FaxChnl);
				OutLinkFax(i,PStr);
				OutFax(FaxChnl,"Start Receive Fax ...");
				OutStatus(i,"Start Receive Fax ...");
				pFax[FaxChnl].Status = RECEIVE;
				pTrunk[i].Status = 220;
				break;
			case 220:
				sprintf(FileName,"aaa%03d.bfx",F);
				F++;
				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				if(DJFax_RcvFaxFile(FaxChnl,FileName) == 1)
				{
					sprintf(PStr,"Now Recive Fax Page %d",pFax[FaxChnl].CurrPage+1);
					OutFax(FaxChnl,PStr);
					pTrunk[i].Status = 500;
				}
				else
				{
					OutFax(FaxChnl,"Recive fax error...");
					DJFax_ClearLink(FaxChnl,i);
					ResetTrunk(i);
					pTrunk[i].Status = 0;
				}
				break;
			case 300://发送传真//转换
				strcpy(filename,VoicePath);
				strcat(filename,"faxdemo.003");
				DJVoc_PlayFile(i,filename);
				pTrunk[i].Status=310;
				break;
			case 310:
				VoiceID=DJTrk_GetTrunkPlayID(i);
				if(VoiceID>=0 && DJVoc_CheckVoiceEnd(VoiceID)) DJVoc_StopPlayFile(i);
				ConvID=FindFreeConvertChannel();
				if(ConvID<0) break;
				sprintf(filename,"c%02d.bfx",i);
				StartConvert(i,ConvID,filename);
				OutStatus(i,"Start Convert Txt to Fax...");
				sprintf(PStr,"%d",ConvID);
				OutLinkFax(i,PStr);
				pTrunk[i].Status=320;
				break;
			case 320:
				VoiceID=DJTrk_GetTrunkPlayID(i);
				if(VoiceID>=0 && DJVoc_CheckVoiceEnd(VoiceID)) DJVoc_StopPlayFile(i);
				ConvID=GetConvIDOfVoiceChannel(i);
				if(CheckConvertEnd(ConvID)) 
				{
					StopConvert(ConvID);
					pTrunk[i].Status=350;
				}
				break;
			case 350:
				VoiceID=DJTrk_GetTrunkPlayID(i);
				if(VoiceID>=0) DJVoc_StopPlayFile(i);
				strcpy(filename,VoicePath);
				strcat(filename,"faxdemo.002");

				DJVoc_PlayFile(i,filename);
				pTrunk[i].Status=380;
				break;
			case 380:
				VoiceID=DJTrk_GetTrunkPlayID(i);
				if(VoiceID>=0 && (!DJVoc_CheckVoiceEnd(VoiceID))) break;
				DJVoc_StopPlayFile(i);
				FaxChnl = DJFax_GetOneFreeFaxChnl();
				if(!DJFax_SetLink(FaxChnl,i))
				{
					ResetTrunk(i);
					OutLinkFax(i,"Error");
					pTrunk[i].Status = 0;
					break;
				}
				pTrunk[i].FaxCh=FaxChnl;
				OutStatus(i,"Start Send ...");
				sprintf(PStr,"%d",FaxChnl);
				OutLinkFax(i,PStr);
				DJFax_SetLocalID (FaxChnl, "1234567890ABCDEF1234");
				pTrunk[i].Status=390;
				break;
			case 390:
				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				sprintf(pFax[FaxChnl].SendFaxName,"c%02d.bfx",i);
				if((pFax[FaxChnl].TotalPage=DJFax_SendFaxFile(FaxChnl,pFax[FaxChnl].SendFaxName)) > 0)
				{
					sprintf(PStr,"Now Send Fax Page %d/%d  %ld bytes",
						pFax[FaxChnl].CurrPage+1,pFax[FaxChnl].TotalPage,
						DJFax_GetSendBytes(FaxChnl));
					OutFax(FaxChnl,PStr);
					pTrunk[i].Status = 500;
					pFax[FaxChnl].Status=SEND;
				}
				else
				{
					OutFax(FaxChnl,"Send fax Error...               ");
					DJFax_ClearLink(FaxChnl,i);
					ResetTrunk(i);
					pTrunk[i].Status = 0;
				}
				break;
			case 500://
				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				if((pFax[FaxChnl].Status == SEND) &&
					((pFax[FaxChnl].CurrPage+1) <= pFax[FaxChnl].TotalPage))
				{
					sprintf(PStr,"Now Send Fax Page %d/%d  %ld bytes",
						pFax[FaxChnl].CurrPage+1,pFax[FaxChnl].TotalPage,
						DJFax_GetSendBytes(FaxChnl));
				}
				else if(pFax[FaxChnl].Status == RECEIVE)
				{
					sprintf(PStr,"Now Recive Fax Page %d %ld bytes",
						pFax[FaxChnl].CurrPage+1,DJFax_GetRcvBytes(FaxChnl));
				}
				OutFax(FaxChnl,PStr);
				CheckReturn = DJFax_CheckTransmit(FaxChnl);
				if(CheckReturn == 1)
					pTrunk[i].Status = 600;
				else if(CheckReturn == 2)
				{
					pFax[FaxChnl].CurrPage++;
				}
				else if(CheckReturn == -1)
					pTrunk[i].Status = 610;
				else if(CheckReturn == -2)
					pTrunk[i].Status = 610;
				break;
			case 600:
				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				DJFax_StopFax(FaxChnl);
				DJFax_ClearLink(FaxChnl,i);
				ResetTrunk(i);
				pTrunk[i].Status = 0;
				OutStatus(i,"FREE");
				OutLinkFax(i,"");
				OutFax(FaxChnl,"Free ....");
				pFax[FaxChnl].CurrPage = 0;
				pFax[FaxChnl].Status = 0;
				break;
			case 610:
				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				DJFax_StopFax(FaxChnl);
				OutStatus(i,"FREE");
				sprintf(PStr,"Have error. Err No. %d ...",DJFax_GetErrCode(FaxChnl));
				OutFax(FaxChnl,PStr);
				DJFax_ClearLink(FaxChnl,i);
				ResetTrunk(i);
				OutFax(FaxChnl,"Free ...");
				pTrunk[i].Status = 0;
				pFax[FaxChnl].CurrPage = 0;
				pFax[FaxChnl].Status = 0;
				break;
			case 650:		// check busy sig when handle fax
				OutStatus(i,"FREE");
				OutLinkFax(i,"");
				pTrunk[i].Status = 0;

				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				if ( FaxChnl != -1 ) 
				{
					DJFax_StopFax(FaxChnl);
					sprintf(PStr,"User Free");
					OutFax(FaxChnl,PStr);
					DJFax_ClearLink(FaxChnl,i);
					pFax[FaxChnl].CurrPage = 0;
					pFax[FaxChnl].Status = 0;
				}
				ResetTrunk(i);
				break;

			case 5000:
				//answer for modem
				FaxChnl = DJFax_GetOneFreeFaxChnl();
				if(!DJFax_SetLink(FaxChnl,i))
				{
					ResetTrunk(i);
					OutStatus(i,"FREE");
					OutLinkFax(i,"Error");
					pTrunk[i].Status = 0;
					break;
				}
				if( !DJFax_SetModemMode( FaxChnl, MODE_ANSWER, NULL ) )
				{
					OutStatus(i,"Link ...           ");
					sprintf(PStr,"%d",FaxChnl);
					OutLinkFax(i,PStr);
					OutStatus(i,"Modem answer mode...");
					OutFax(FaxChnl,"Modem answer mode...");
					pTrunk[i].Status = 5100;
				}
				else pTrunk[i].Status = 5300; 
				break;

			case 6000:
				FaxChnl = DJFax_GetOneFreeFaxChnl();
				if(!DJFax_SetLink(FaxChnl,i))
				{
					ResetTrunk(i);
					OutLinkFax(i,"Error");
					pTrunk[i].Status = 0;
					break;
				}

				DJFax_SetModemMode(FaxChnl,MODE_CALL,NULL);
				OutStatus(i,"Link ...               ");
				sprintf(PStr,"%d            ",FaxChnl);
				OutLinkFax(i,PStr);
				OutFax(FaxChnl,"Modem dialout mode...");
				pTrunk[i].Status = 5100;

				break;

			case 5100:
				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				Return = DJFax_CheckConnect(FaxChnl);
				switch( Return ) 
				{
				case RESULT_MODEM_WORKING:
					break ;
				case RESULT_MODEM_CONNECT:
					pTrunk[i].Status= 5200;
					break;
				case RESULT_MODEM_ERROR:
					pTrunk[i].Status = 5300;
					break;
				case RESULT_LINE_ERROR:
					pTrunk[i].Status = 5300;
					break;
				case RESULT_MODEM_NOCARRIER:
					pTrunk[i].Status= 5300;
					break;
				}
				break ;

				case 5200:
					FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
					Return=DJFax_GetModemError(FaxChnl);
					if (Return==RESULT_MODEM_ERROR || Return==RESULT_LINE_ERROR)
					{
						pTrunk[i].Status =5300;
						break;
					}			
					ReadCount=DJFax_ReadModemBuf(FaxChnl,ReadBuff);
					if (ReadCount!=0) 
					{
						DJFax_WriteModemBuf(FaxChnl,ReadBuff,ReadCount);
						// add for new modem buffer
						for ( int k=0; k < ReadCount; k ++ ) 
						{
							ModemBuf[FaxChnl][NowBufPos[FaxChnl]++] = ReadBuff[k];
							if (  (ReadBuff[k] == '\r') || (ReadBuff[k] == '\n') ) 
							{
								ReadBuff[0] = '\n';
								ReadBuff[1] = '\r';
								DJFax_WriteModemBuf(FaxChnl,ReadBuff,2);

								ModemBuf[FaxChnl][NowBufPos[FaxChnl]++] = '\n';
								ModemBuf[FaxChnl][NowBufPos[FaxChnl]++] = '\r';
			    				DJFax_WriteModemBuf(FaxChnl,ModemBuf[FaxChnl],NowBufPos[FaxChnl]-1);
								NowBufPos[FaxChnl] = 0;
							}
						} 
					}

					OutFax(FaxChnl,"Modem receive and send data...");
					break ;

				case 5300:
					FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
					OutFax(FaxChnl,"Data have error....                      ");
					OutStatus(i,"FREE");
					pFax[FaxChnl].CurrPage = 0;
					pFax[FaxChnl].Status= 0;
					FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
					DJFax_StopFax(FaxChnl);
					DJFax_ClearLink(FaxChnl,i);
					ResetTrunk( i ) ;
					break ;
		}
	}

}
void WINAPI GetVoicePath()
{
	char path[100];
	GetWindowsDirectory(path,100);
	strcat(path,"\\tce1-32.ini");
	GetPrivateProfileString("SYSTEM","InstallDir","",VoicePath,100,path);
	strcat(VoicePath,"voc\\");	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -