📄 faxfunc.pas
字号:
SsmFaxStartSend(TrunkCh[i].nToFaxCh,PChar(MainForm.Edit7.Text));
end
else begin
SsmFaxStartSend(TrunkCh[i].nToFaxCh,PChar(MainForm.Edit4.Text));
end;
TrunkCh[i].InUse :=8;
TrunkCh[i].nTimeOut :=0;
TrunkCh[i].nStep:=TRUNK_WAIT_FAX_END
end;
end;
TRUNK_WAIT_FAX_END:
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(inttostr(i)+'通道: '+'线路故障');
TrunkCh[i].nA_LineVoltage :=15;
FAXCh[TrunkCh[i].nToFaxCh].InUse := 0;
FAXCh[TrunkCh[i].nToFaxCh].EnCalled :=True;
SsmFaxStop(TrunkCh[i].nToFaxCh);
SsmStopTalkWith(i,TrunkCh[i].nToFaxCh);
TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
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;
if SsmGetChState(i)=7 then
begin
if SsmGetToneAnalyzeResult(i)=2 then
begin
MainForm.ListBox1.Items.Add('远端挂机');
MainForm.ListBox2.Items.Add('对端先挂机,传真发送停止');
FAXCh[TrunkCh[i].nToFaxCh].InUse := 0;
FAXCh[TrunkCh[i].nToFaxCh].EnCalled :=True;
SsmFaxStop(TrunkCh[i].nToFaxCh);
SsmStopTalkWith(i,TrunkCh[i].nToFaxCh);
TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
end;
end
else begin
GetMem(FaxMsg,200);
SsmFaxGetChStateMsg(TrunkCh[i].nToFaxCh,FaxMsg);
if(FFaxMsg<>FaxMsg)then
begin
FFaxMsg:=FaxMsg;
MainForm.ListBox2.Items.Add(string(FaxMsg));
end;
FreeMem(FaxMsg);
nResult:=SsmFaxCheckEnd(TrunkCh[i].nToFaxCh);
if(nResult<>TrunkCh[i].nnResult1)then
begin
TrunkCh[i].nnResult1:=nResult;
case nResult of
0: MainForm.ListBox2.Items.Add('传真任务尚未完成,包括握手过程以及传真接收或发送过程');
1: begin MainForm.ListBox2.Items.Add('传真任务已经完成,指定通道已经进入空闲状态');
SsmStopTalkWith(i,TrunkCh[i].nToFaxCh);
MainForm.ListBox1.Items.Add('***传真结束***');
TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
inc(TrunkCh[i].nFaxCntSuccess);
end;
2:begin
MainForm.ListBox2.Items.Add('驱动程序在执行最近一次传真的接收或发送任务过程中发生错误');
MainForm.ListBox1.Items.Add('***警告:传真结束***');
SsmFaxStop(TrunkCh[i].nToFaxCh);
SsmStopTalkWith(i,TrunkCh[i].nToFaxCh);
TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
end;
else;
end;
end;
end;
inc(TrunkCh[i].nTimeOut);
if(TrunkCh[i].nTimeOut>=20*60*15)then
begin
MainForm.ListBox1.Items.Add('通话时长超过限定时间');
MainForm.ListBox2.Items.Add('本端挂机,停止传真');
FAXCh[TrunkCh[i].nToFaxCh].InUse := 0;
FAXCh[TrunkCh[i].nToFaxCh].EnCalled :=True;
SsmFaxStop(TrunkCh[i].nToFaxCh);
SsmStopTalkWith(i,TrunkCh[i].nToFaxCh);
TrunkCh[i].nStep:=TRUNK_WAIT_HANGUP;
end;
end;
TRUNK_BUSY:;
TRUNK_WAIT_HANGUP:begin
SsmHangup(i);
FAXCh[TrunkCh[i].nToFaxCh].InUse := 0;
TrunkCh[i].InUse:=0;
FAXCh[TrunkCh[i].nToFaxCh].EnCalled :=True;
TrunkCh[i].nStep:=TRUNK_IDLE;
SsmSetDtmfStopPlay(i,False);
SsmStopRecToFile(i);
TrunkCh[i].nnResult:=$ff;
TrunkCh[i].nnResult1:=$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;
end;
procedure DrawTrunkChState;
var
state:String;
tmpstr:String;
i:integer;
nindex:integer;
nResult:integer;
//SystemTime:TSystemTime;
begin
//GetLocalTime(SystemTime);
EndTime:=Time-StartTime;
mainform.Label10.Caption := FormatDateTime ('软件运行时间: '+'hh:nn:ss', EndTime);//DateTimeToStr(EndTime);
mainform.Label6.Caption:='当前时间: ' +DateToStr(Date)+' '+TimeToStr(Time);
if mainform.ListBox1.Items.Count >1000 then mainform.ListBox1.Items.Clear;
if mainform.ListBox2.Items.Count >1000 then mainform.ListBox2.Items.Clear;
nindex:=0;
for i:=0 to nTotalCh-1 do
begin
if( not FAXCh[i].EnCalled ) then continue;
begin
case TrunkCh[i].InUse of
0: begin
state:='空闲';
TrunkCh[i].DtmfBuf:='';
SsmClearRxDtmfBuf(i);
end;
1: state:='摘机';
2: state:='拨号';
3: state:='等待被叫摘机';
4: state:='通话';
5: state:='接收按键或F1,F2信号';
6: state:='等待传真机按开始键';
7: state:='接收传真中。。。';
8: state:='发送传真中。。。';
end;
tmpstr:=MainForm.TrunkChListView.Items[nindex].SubItems[1];
if state <> tmpstr then
MainForm.TrunkChListView.Items[nindex].SubItems[1]:=state;
//SsmGetDtmfStr(i,@TrunkCh[i].DtmfBuf[0]);
tmpstr:=MainForm.TrunkChListView.Items[nindex].SubItems[2];
//if tmpstr<>StrPas(@TrunkCh[i].DtmfBuf[0]) then
// MainForm.TrunkChListView.Items[nindex].SubItems[2]:=StrPas(@TrunkCh[i].DtmfBuf[0]);
if tmpstr<>(inttostr(TrunkCh[i].nFaxCnt)+':'+inttostr(TrunkCh[i].nFaxCntSuccess)) then
MainForm.TrunkChListView.Items[nindex].SubItems[2]:=inttostr(TrunkCh[i].nFaxCnt)+':'+inttostr(TrunkCh[i].nFaxCntSuccess);
nResult:=SsmGetChType(i);
case nResult of
0: state:='外线';
5: state:='硬传真';
9: state:='软传真';
6: state:='TUPio';
4: state:='SS1io';
7: state:='ISDNuser';
8: state:='ISDNnet';
else
Beep;
end;
tmpstr:=MainForm.TrunkChListView.Items[nindex].SubItems[0];
if tmpstr<>state then
MainForm.TrunkChListView.Items[nindex].SubItems[0]:=state;
nindex:=nindex+1;
end;
end;
end;
function InitCtiBoard():boolean;
var
CurPath:PChar;
ShConfig:string;
ShIndex:string;
ErrMsg:PChar;
i:integer;
nDirection:Integer;
F: TextFile;
S: string;
begin
//Initialization of CTI driver
GetMem(CurPath,200);
GetCurrentDirectory(200,CurPath);
ShConfig:=StrPas(CurPath)+'\ShConfig.ini';
ShIndex:=StrPas(CurPath)+'\ShIndex.ini';
FreeMem(CurPath);
if SsmStartCti(@ShConfig[1], @ShIndex[1] )<>0 then
begin
GetMem(ErrMsg,200);
SsmGetLastErrMsg(ErrMsg);
Application.MessageBox(ErrMsg,'错误', MB_OK) ;
FreeMem(ErrMsg);
InitCtiBoard:=false;
Exit;
end;
CreateDir('FileLog');
//Initialization of channels on trunk-board
nTotalCh := SsmGetMaxCh();
for i:=0 to nTotalCh-1 do
begin
FAXCh[i].EnCalled := false;
if( SsmGetChType(i) = 5) or( SsmGetChType(i) = 9)then
begin
FAXCh[i].nStep := FAX_IDLE;
FAXCh[i].EnCalled:=TRUE;
FAXCh[i].InUse := 0;
end
else
begin
if( SsmGetAutoCallDirection(i,@nDirection) = 1 ) then //允许自动接续
begin
if( nDirection = 1) or (nDirection = 2 ) then //enable dial
begin
CreateDir('FileLog');
CreateDir('FileLog\CH'+inttostr(i));
CreateDir('FileLog\CH'+inttostr(i)+'\FaxRx');
CreateDir('FileLog\CH'+inttostr(i)+'\FaxTx');
TrunkCh[i].SLogDerectionTx := 'FileLog\CH'+inttostr(i)+'\FaxTx';
TrunkCh[i].SLogDerectionRx := 'FileLog\CH'+inttostr(i)+'\FaxRx';
TrunkCh[i].InUse := 0;
TrunkCh[i].DtmfBuf:='';
TrunkCh[i].bCircleSendingFax:=False;
TrunkCh[i].bMultSendFax:=False;
TrunkCh[i].sPhoneNum :='';
TrunkCh[i].nFaxCnt :=0;
TrunkCh[i].nFaxCntSuccess :=0;
TrunkCh[i].nnResult:=$ff;
TrunkCh[i].nnResult1:=$ff;
TrunkCh[i].nA_LineVoltage :=10;
TrunkCh[i].bLogFileCreate :=False;
SsmSetMinVocDtrEnergy (i, 1000);
FAXCh[i].EnCalled := true;
SsmSetRecMixer(i,True,0);
end;
end;
end;
end;
nTelCnt:=0;
mainform.Label9.Caption:='开始时间: ' +DateTimeToStr(Now);
StartTime :=Time;
InitCtiBoard:=True;
end;
procedure ExitCtiBoard;
var
i,nRet:integer;
begin
for i:=0 to nTotalCh-1 do
begin
nRet := SsmGetChType(i);
if( nRet = 0) or( nRet = 4) or( nRet = 6) or( nRet = 7) or( nRet = 8) or( nRet = 11)then
begin
if(TrunkCh[i].bLogFileCreate)then CloseLog(i)
end;
end;
SsmCloseCti();
end;
procedure GetVersion;
begin
end;
function myGetAnIdleChannel():integer;
var
i:integer;
begin
for i:=0 to nTotalCh-1 do
begin
if( (TrunkCh[i].InUse = 0) and FAXCh[i].EnCalled ) then break;
end;
if (i=nTotalCh) then myGetAnIdleChannel:=-1
else myGetAnIdleChannel:=i;
end;
function myGetAnIdleFaxChannel():integer;
var
i:integer;
begin
for i:=0 to nTotalCh-1 do
begin
if((SsmGetChType(i)=5)or(SsmGetChType(i)=9))then
begin
if( (FAXCh[i].InUse = 0) and FAXCh[i].EnCalled ) then break;
end;
end;
if (i=nTotalCh) then myGetAnIdleFaxChannel:=-1
else myGetAnIdleFaxChannel:=i;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -