📄 faxfunc.pas
字号:
TrunkCh[i].sCallerID:=StrPas(Mem);
end
else
TrunkCh[i].sCallerID:='No CallerID';
FreeMem(Mem);
MainForm.ListBox1.Items.Add(format('@@ %d通道检测到电话呼入,其号码为%s,系统摘机。',[i,TrunkCh[i].sCallerID]));
SsmPickup(i);
TrunkCh[i].nStep:=TRUNK_WAIT_RCV_DTMF;
end;
end;
TRUNK_PICK_UP:;
TRUNK_DAIL: begin
wnResult:=SsmChkAutoDial(i);
if (TrunkCh[i].nnResult<> wnResult) then
begin
TrunkCh[i].nnResult:=wnResult;
case wnResult of
0:;
1:MainForm.ListBox1.Items.Add('正在拨号。。。');
2:MainForm.ListBox1.Items.Add('回铃');
3:begin
MainForm.ListBox1.Items.Add('没有检测到拨号音,自动拨号操作结束。');
TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
end;
4:begin
MainForm.ListBox1.Items.Add('被叫用户忙');
SsmHangup(i);
TrunkCh[i].InUse:=0;
TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
SsmSetDtmfStopPlay(i,False);
SsmStopRecToFile(i);
if(TrunkCh[i].bCircleSendingFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
if(TrunkCh[i].bMultSendFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
end;
5:begin
MainForm.ListBox1.Items.Add('听到回铃声后线路上无声,自动拨号操作结束。');
TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
end;
6:begin
MainForm.ListBox1.Items.Add('线路上没有声音,自动拨号操作结束。');
TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
end;
7:begin
MainForm.ListBox1.Items.Add('被叫用户摘机(检测到话音),自动拨号操作结束。');
MainForm.ListBox1.Items.Add('等待F2信号');
SsmClearRxDtmfBuf(i);
TrunkCh[i].nTimeOut:=0;
SsmPlayFile(i,'step1.voc',6,0,$ffffffff);
TrunkCh[i].nStep:=TRUNK_WAIT_RCV_DTMF;
end;
8:begin
MainForm.ListBox1.Items.Add('被叫用户摘机(检测到F1频率的应答信号),自动拨号操作结束。');
MainForm.ListBox1.Items.Add('等待F2信号。。。');
TrunkCh[i].nTimeOut:=0;
TrunkCh[i].nStep:=TRUNK_WAIT_F2;
end;
9:begin
MainForm.ListBox1.Items.Add(' 被叫用户摘机(检测到F2频率的应答信号),自动拨号操作结束。只有模拟外线通道才会有此返回值。 ');
TrunkCh[i].nTimeOut:=0;
TrunkCh[i].nStep:=TRUNK_TO_FAX_TX;
end;
//10:MainForm.ListBox1.Items.Add('被叫在指定时间内没有摘机,自动拨号操作结束。该时间在系统配置文件[SystemConfig]段中的“MaxWaitAutoDialAnswerTime=”配置项中指定,缺省值为60秒。自动拨号操作结束');
10,11:begin
MainForm.ListBox1.Items.Add('自动拨号因为某种原因失败。详细的失败原因可以通过函数SsmGetAutoDialFailureReason获得');
SsmHangup(i);
TrunkCh[i].InUse:=0;
TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
SsmSetDtmfStopPlay(i,False);
SsmStopRecToFile(i);
TrunkCh[i].nnResult:=$ff;
if(TrunkCh[i].bCircleSendingFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
if(TrunkCh[i].bMultSendFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
end;
12:MainForm.ListBox1.Items.Add('被叫用户号码为空号,自动拨号操作结束。');
13:MainForm.ListBox1.Items.Add('基本祯同步丢失超过100ms');
else;
end; //end case
end;
end;
TRUNK_WAIT_RCV_DTMF:
begin
if SsmGetChType(i)=0then
begin
if SsmGetLineVoltage(i)<3then
begin
dec(TrunkCh[i].nA_LineVoltage);
if(TrunkCh[i].nA_LineVoltage<=0)then
begin
MainForm.ListBox1.Items.Add('自动拨号因为某种原因失败。详细的失败原因可以通过函数SsmGetAutoDialFailureReason获得');
SsmHangup(i);
TrunkCh[i].InUse:=0;
TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
SsmSetDtmfStopPlay(i,False);
SsmStopRecToFile(i);
TrunkCh[i].nnResult:=$ff;
TrunkCh[i].nA_LineVoltage :=15;
if(TrunkCh[i].bCircleSendingFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
if(TrunkCh[i].bMultSendFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
end;
end
else begin
inc(TrunkCh[i].nA_LineVoltage);
if(TrunkCh[i].nA_LineVoltage>=15)then
begin
TrunkCh[i].nA_LineVoltage :=15;
end;
end;
end;
inc(TrunkCh[i].nTimeOut);
if(TrunkCh[i].nTimeOut>=20*60*3)then
begin
MainForm.ListBox1.Items.Add(inttostr(i)+'通道'+'传真信号超时,挂机退出。');
SsmHangup(i);
TrunkCh[i].InUse:=0;
TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
SsmSetDtmfStopPlay(i,False);
SsmStopRecToFile(i);
TrunkCh[i].nnResult:=$ff;
if(TrunkCh[i].bCircleSendingFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
if(TrunkCh[i].bMultSendFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
end
else begin
TrunkCh[i].InUse :=5;
SsmSetDtmfStopPlay(i,True);
if SsmCheckPlay(i)>0then
begin
SsmPlayFile(i,'step1.voc',6,0,$ffffffff);
end;
if SsmGet1stDtmfClr(i,@sDtmf)=1then
begin
case sDtmf of
'1': //recieve fax
begin
SsmStopPlayFile(i);
SsmPlayFile(i,'step2.voc',6,0,$ffffffff);
TrunkCh[i].nTimeOut:=0;
TrunkCh[i].nStep:= TRUNK_WAIT_F2;
end;
'2': //send fax
begin
SsmStopPlayFile(i);
SsmPlayFile(i,'step2.voc',6,0,$ffffffff);
TrunkCh[i].nTimeOut:=0;
TrunkCh[i].nStep:= TRUNK_WAIT_F1;
end;
else;
end;
end;
if SsmGetToneAnalyzeResult(i)=7 then
begin
SsmStopPlayFile(i);
MainForm.ListBox1.Items.Add('等到F1信号开始接收传真');
TrunkCh[i].InUse :=4;
TrunkCh[i].nTimeOut:=0;
TrunkCh[i].nStep:=TRUNK_TO_FAX_RX;
end
else if(SsmGetToneAnalyzeResult(i)=8)then
begin
SsmStopPlayFile(i);
MainForm.ListBox1.Items.Add('等到F2信号开始发送传真');
TrunkCh[i].InUse :=4;
TrunkCh[i].nTimeOut:=0;
TrunkCh[i].nStep:=TRUNK_TO_FAX_TX;
end;
if SsmGetChState(i)=7 then
begin
MainForm.ListBox1.Items.Add('对端先挂机!!');
SsmHangup(i);
TrunkCh[i].InUse:=0;
TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
SsmSetDtmfStopPlay(i,False);
SsmStopRecToFile(i);
TrunkCh[i].nnResult:=$ff;
if(TrunkCh[i].bCircleSendingFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
if(TrunkCh[i].bMultSendFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
end;
end;
end;
TRUNK_WAIT_F1:
begin
TrunkCh[i].InUse :=6;
TrunkCh[i].nTimeOut:=TrunkCh[i].nTimeOut+1;
if SsmGetToneAnalyzeResult(i)=7 then
begin
MainForm.ListBox1.Items.Add('等到F1信号开始接收传真');
TrunkCh[i].InUse :=4;
TrunkCh[i].nStep:=TRUNK_TO_FAX_RX;
end;
if TrunkCh[i].nTimeOut>800 then
begin
MainForm.ListBox1.Items.Add('未等到F1信号,强行接收传真');
TrunkCh[i].nStep:=TRUNK_TO_FAX_RX;
end;
if SsmGetChState(i)=7 then
begin
MainForm.ListBox1.Items.Add('对端先挂机!!');
SsmHangup(i);
TrunkCh[i].InUse:=0;
TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
SsmSetDtmfStopPlay(i,False);
SsmStopRecToFile(i);
TrunkCh[i].nnResult:=$ff;
if(TrunkCh[i].bCircleSendingFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
if(TrunkCh[i].bMultSendFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
end;
end;
TRUNK_WAIT_F2:begin
TrunkCh[i].InUse :=6;
TrunkCh[i].nTimeOut:=TrunkCh[i].nTimeOut+1;
if SsmGetToneAnalyzeResult(i)=8 then
begin
MainForm.ListBox1.Items.Add('等到F2信号开始发送传真');
TrunkCh[i].InUse :=4;
TrunkCh[i].nStep:=TRUNK_TO_FAX_TX;
end;
if TrunkCh[i].nTimeOut>3*20 then
begin
MainForm.ListBox1.Items.Add('未等到F2信号,强行发送传真');
TrunkCh[i].nStep:=TRUNK_TO_FAX_TX;
end;
if SsmGetChState(i)=7 then
begin
MainForm.ListBox1.Items.Add('对端先挂机!!');
SsmHangup(i);
TrunkCh[i].InUse:=0;
TrunkCh[i].nStep:=TRUNK_PRE_IDLE;
SsmSetDtmfStopPlay(i,False);
SsmStopRecToFile(i);
TrunkCh[i].nnResult:=$ff;
if(TrunkCh[i].bCircleSendingFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
if(TrunkCh[i].bMultSendFax)then
begin
TrunkCh[i].nTimeOut :=0;
end;
end;
end;
TRUNK_TO_FAX_RX:
begin
Fax_Ch:=myGetAnIdleFaxChannel();
if Fax_Ch=-1 then
begin
MainForm.ListBox2.Items.Add('没有传真资源通道无法接收传真');
TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
end else begin
TrunkCh[i].nToFaxCh:=Fax_Ch;
FAXCh[Fax_Ch].InUse := 1;
FAXCh[Fax_Ch].EnCalled :=False;
SsmTalkWith(i,TrunkCh[i].nToFaxCh);
//Sleep(50);
SsmFaxStartReceive(TrunkCh[i].nToFaxCh,PChar(TrunkCh[i].sFileCuDerection +'\'+TrunkCh[i].sSoundFileName + '.tif'));
MainForm.ListBox2.Items.Add(format('正在接收的传真文件将命名为%s,并保存在当前目录下。',[TrunkCh[i].sFileCuDerection +'\'+TrunkCh[i].sSoundFileName + '.tif']));
TrunkCh[i].InUse :=7;
TrunkCh[i].nTimeOut :=0;
TrunkCh[i].nStep:=TRUNK_WAIT_FAX_END;
end;
end;
TRUNK_TO_FAX_TX:
begin
Fax_Ch:=myGetAnIdleFaxChannel();
if Fax_Ch=-1 then
begin
MainForm.ListBox2.Items.Add('没有传真资源通道无法发送传真');
TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
end else begin
TrunkCh[i].nToFaxCh:=Fax_Ch;
FAXCh[Fax_Ch].InUse := 1;
FAXCh[Fax_Ch].EnCalled :=False;
SsmTalkWith(i,TrunkCh[i].nToFaxCh);
//Sleep(50);
if(TrunkCh[i].bMultSendFax)then
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -