📄 faxdemo.cpp
字号:
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 + -