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

📄 faxdemo.cpp

📁 用语音卡实现传真的示例程序,可以使用传真模块来调用此模块
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		{
			case 0:
				if(RingDetect(i))
				{
					OutStatus(i,"Ring ...");
					OffHook(i);
					StartSigCheck(i);
					InitDtmfBuf(i);
					pTrunk[i].Status = 10;
				}
/*				if( i == 9 )
				{
					OffHook(i);
					SendDtmfBuf(i,"70");
					pTrunk[i].Status = 90;
				}
*/				break;
			case 10:
				OutStatus(i,"Play Message ...... ");
				strcpy(filename,VoicePath);
				strcat(filename,"faxdemo.001");
				StartPlayFile(i,filename,0);
				pTrunk[i].Status = 20;
				break;
			case 20:
				if(CheckPlayEnd(i)==1)
				{
					StopPlayFile(i);
					pTrunk[i].Status = 30;
				}
				else
				{
					if((pTrunk[i].Code = GetDtmfCode(i))!=-1)
					{
						StopPlayFile(i);
						pTrunk[i].Status = 40;
					}
				}
				break;
			case 30:
				if((pTrunk[i].Code = GetDtmfCode(i))!=-1)
						pTrunk[i].Status = 40;
				break;
			case 40:
				if(CheckPlayEnd(i)==1)
				{
					switch(pTrunk[i].Code)
					{
						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 = 700;
							break;
						case 6:
							pTrunk[i].Status = 800;
							break;
						default:
							OutStatus(i,"Input error, please reinput");
							pTrunk[i].Status = 30;
							break;
					}
				}
				break;
			case 90://send fax
				if(CheckSendEnd(i) == 1)
				{
//					StartSigCheck(i);
					pTrunk[i].Status = 100;
				}
				break;
			case 100://send fax
				strcpy(filename,VoicePath);
				strcat(filename,"faxdemo.002");
				StartPlayFile(i,filename,0);
				pTrunk[i].Status=110;
				break;
			case 110:
				if(CheckPlayEnd(i)!=1) break;

				StopPlayFile(i);
				FaxChnl = DJFax_GetOneFreeFaxChnl();
				if(!DJFax_SetLink(FaxChnl,i))
				{
					HangUp(i);
					OutLinkFax(i,"Error");
					pTrunk[i].Status = 0;
					break;
				}
				DJFax_SetLocalID (FaxChnl, "1234567890ABCDEF1234");
				DJFax_SetResolution(FaxChnl,HIGH_RESOLUTION);
				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);
					HangUp(i);
					pTrunk[i].Status = 0;
				}
				break;
			case 200://Receive fax
				FaxChnl = DJFax_GetOneFreeFaxChnl();
				if(!DJFax_SetLink(FaxChnl,i))
				{
					HangUp(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);
					HangUp(i);
					pTrunk[i].Status = 0;
				}
				break;
			case 300://send fax
				strcpy(filename,VoicePath);
				strcat(filename,"faxdemo.003");
				StartPlayFile(i,filename,0);
				pTrunk[i].Status=310;
				break;
			case 310:
				if(CheckPlayEnd(i)==1) 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:
				if(CheckPlayEnd(i)==1) StopPlayFile(i);
				ConvID=GetConvIDOfVoiceChannel(i);
				if(CheckConvertEnd(ConvID)) 
				{
					StopConvert(ConvID);
					pTrunk[i].Status=350;
				}
				break;
			case 350:
				StopPlayFile(i);
				strcpy(filename,VoicePath);
				strcat(filename,"faxdemo.002");

				StartPlayFile(i,filename,0);
				pTrunk[i].Status=380;
				break;
			case 380:
				if(CheckPlayEnd(i)!=1) break;
				StopPlayFile(i);
				FaxChnl = DJFax_GetOneFreeFaxChnl();
				if(!DJFax_SetLink(FaxChnl,i))
				{
					HangUp(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);
					HangUp(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);
				HangUp(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);
				HangUp(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
				HangUp(i);
				OutStatus(i,"FREE");
				OutLinkFax(i,"");
				pTrunk[i].Status = 0;

				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				if ( FaxChnl != -1 ) 
				{
					DJFax_StopFax(FaxChnl);
					OutFax(FaxChnl,"Free ...                         ");
					sprintf(PStr,"Have error. Err No. %d ...",DJFax_GetErrCode(FaxChnl));
					OutFax(FaxChnl,PStr);
					DJFax_ClearLink(FaxChnl,i);
					pFax[FaxChnl].CurrPage = 0;
					pFax[FaxChnl].Status = 0;
				}
				break;

			case 700://Response Modem
				FaxChnl = DJFax_GetOneFreeFaxChnl();
				if(!DJFax_SetLink(FaxChnl,i)){
					HangUp(i);
					OutLinkFax(i,"Error Error");
					pTrunk[i].Status = 0;
					break;
				}

				DJFax_SetModemMode(FaxChnl,MODE_ANSWER,NULL);
				OutStatus(i,"Link ...           ");
				sprintf(PStr,"%d            ",FaxChnl);
				OutLinkFax(i,PStr);
				OutFax(FaxChnl,"Modem answer mode...");

				pTrunk[i].Status =760;
				break;
			case 800://Call Modem
				FaxChnl = DJFax_GetOneFreeFaxChnl();
				if(!DJFax_SetLink(FaxChnl,i)){
					HangUp(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 =760;
				break;
			case 760:
				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				Return=DJFax_CheckConnect(FaxChnl);
				switch(Return){
				case RESULT_MODEM_WORKING:
					break;
				case RESULT_MODEM_ERROR:
				case RESULT_LINE_ERROR:
				case RESULT_MODEM_NOCARRIER:
					pTrunk[i].Status =910;
					break;
				case RESULT_MODEM_CONNECT:
					pTrunk[i].Status =770;
					break;
				}
				break;
		    case 770:
				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				Return=DJFax_GetModemError(FaxChnl);
				if (Return==RESULT_MODEM_ERROR || Return==RESULT_LINE_ERROR)
				{
					pTrunk[i].Status =900;
					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 900:
				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				OutFax(FaxChnl,"Free ....");
				OutStatus(i,"FREE");
				OutLinkFax(i,"");
				pFax[FaxChnl].CurrPage = 0;
				pFax[FaxChnl].Status = 0;
				pTrunk[i].Status = 950;
				break;
			case 910:
				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				OutFax(FaxChnl,"Data have error....                      ");
				OutStatus(i,"FREE");
				OutLinkFax(i,"");
				pFax[FaxChnl].CurrPage = 0;
				pFax[FaxChnl].Status = 0;
				pTrunk[i].Status = 950;
				break;
			case 950:
				FaxChnl = DJFax_GetFaxChnlOfVoiceChnl(i);
				DJFax_StopFax(FaxChnl);
				DJFax_ClearLink(FaxChnl,i);
				HangUp(i);
				pTrunk[i].Status = 0;
				break;
		}
	}

	ReleaseDC(hwnd,hDC);
}

char Convert(int ch)
{
	char c;

	switch(ch) {
		case 10:
			c = '0';
			break;
		case 11:
			c = '*';
			break;
		case 12:
			c = '#';
			break;
		default:
			c = ch + '0';
	}
	return c;
}
void WINAPI GetVoicePath()
{
	char path[100];
	GetWindowsDirectory(path,100);
	strcat(path,"\\tc08a-v.ini");
	GetPrivateProfileString("SYSTEM","InstallDir","",VoicePath,100,path);
	strcat(VoicePath,"voc\\");	
}

⌨️ 快捷键说明

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