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

📄 faxfunc.pas

📁 三汇CTI示例程序源码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
                                   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 + -