Delphi之三彙模擬語音卡(SHT-8B/PCI/FAX)可複用源碼
作者:成曉旭
設計簡介:
1、 設計思路請參考本站Blog的另一篇文章:“Delphi之東進模擬語音卡(D160A)可複用源碼”;鏈接http://blog.csdn.net/CXXSoft/archive/2006/08/23/1108211.aspx。
2、 其實,仔細對比,你會發現這兩種卡的代碼類方法簽名幾乎99%是一樣的,也就是說,這兩都之間,還需要更進一步的抽象,以解決“重複代碼”或者“相似代碼”的問題。
3、 更高層次的抽象,請參考我的設計文檔。
4、 類圖(以後補上):
5、 卡類源碼:
//------------------------------------------------------------------------------
//
// 産品名稱: 成曉旭的個人軟件Delphi源碼庫
// 産品版本: CXXSoft delphi code source lib 2.0
// 模塊名稱: Delphi之三彙模擬語音卡類
// 模塊描述:
// 單元文件: unSHCard8B.pas
// 開發作者: 成曉旭
// 備注: 任何人使用此文件時,請保留此段自述文件,謝謝!
// 開發時間: 2003-12-03
// 修改曆史:
// 修改描述:
//------------------------------------------------------------------------------
unit unSHCard8B;
interface
uses
Windows,
//unDJTC08a32,unDJNewSig,
unBaseDefine,
//unDJ160ADefine,unDJChanne160A,
unShpa3api,unSHChanne18B,unSH8BDefine;
type
TCXXCommCard8B = class(TObject)
private
ChannelNumber:Word;
channelObject:array of TCXXSHChannel8B;
OnCardChannelState:TTrunkStatusEvent;
procedure ReleaseCommDevice();
function GetChannelObjectOrder(const aChannelID:Word):Word;
function InitChannel():boolean;
public
constructor Create(const trunkEvent:TTrunkStatusEvent);
destructor Destroy(); override;
function LoadCommDevice(const loadAll:boolean=false):boolean;
function Startup():boolean;
function GetAFreeChannel():Word;
function GetChannelNumber():Word;
function DialPhone(const aChannelID:Word;const DialPhoneNumber:PChar):boolean;
function HangUp(const aChannelID:Word):boolean;
end;
implementation
const
SH_ConfigFile = 'C:ShCtiShConfig.ini';
SH_IndexFile = 'C:ShCtiShIndex.ini';
...{ TCXXCommCard8B }
constructor TCXXCommCard8B.Create(const trunkEvent:TTrunkStatusEvent);
begin
ChannelNumber := 0;
Self.OnCardChannelState := trunkEvent;
end;
destructor TCXXCommCard8B.Destroy;
var
Loop:Word;
begin
if (Length(channelObject) > 0) and (channelNumber > 0) then
begin
for Loop := 0 to ChannelNumber - 1 do
begin
if Assigned(channelObject[Loop]) then
begin
channelObject[Loop].Free();
channelObject[Loop] := nil;
end;
end;
end;
ReleaseCommDevice();
end;
function TCXXCommCard8B.DialPhone(const aChannelID: Word;
const DialPhoneNumber: PChar): boolean;
var
K:Word;
begin
Result := false;
K := GetChannelObjectOrder(aChannelID);
if (K <> ErrorTrunkNumber) and (Assigned(channelObject[K])) then
begin
Result := channelObject[K].DialPhone(DialPhoneNumber);
end;
end;
procedure TCXXCommCard8B.ReleaseCommDevice();
begin
SsmCloseCti() ;
end;
function TCXXCommCard8B.GetAFreeChannel(): Word;
var
Loop:Word;
begin
Result := ErrorTrunkNumber;
for Loop := Low(channelObject) to High(channelObject) do
begin
if NOT channelObject[Loop].CheckDialOutEnabled() then continue;
if (channelObject[Loop].GetChannelStatus() = atsFree) then
begin
Result := channelObject[Loop].GetChannelID();
break;
end;
end;
end;
function TCXXCommCard8B.GetChannelNumber(): Word;
begin
Result := channelNumber;
end;
function TCXXCommCard8B.GetChannelObjectOrder(
const aChannelID: Word): Word;
var
Loop:Word;
begin
Result := ErrorTrunkNumber;
for Loop := Low(channelObject) to High(channelObject) do
begin
if (channelObject[Loop].GetChannelID = aChannelID) then
begin
Result := Loop;
break;
end;
end;
end;
function TCXXCommCard8B.HangUp(const aChannelID: Word): boolean;
var
K:Word;
begin
Result := false;
K := GetChannelObjectOrder(aChannelID);
if (K <> ErrorTrunkNumber) and (Assigned(channelObject[K])) then
begin
channelObject[K].ChannelHangUp();
Result := true;
end;
end;
function TCXXCommCard8B.LoadCommDevice(const loadAll:boolean): boolean;
const
loadEmpty = true;
begin
Result := false;
if SsmStartCti(SH_ConfigFile,SH_IndexFile) <> 0 then
begin
TCXXSHChannel8B.InformInvodeError();
Exit;
end;
if(SsmGetMaxUsableBoard() <> SsmGetMaxCfgBoard()) then
begin //部分板卡初始化失敗,取出失敗原因
TCXXSHChannel8B.InformInvodeError();
Exit;
end;
Result := InitChannel();
end;
function TCXXCommCard8B.Startup(): boolean;
var
Loop:integer;
begin
for Loop := 0 to channelNumber - 1 do
begin
channelObject[Loop].Startup();
end;
Result := true;
end;
function TCXXCommCard8B.InitChannel():boolean;
var
number,Loop:integer;
begin
Result := false;
number := SsmGetMaxCh();
if (number < 0) then Exit;
ChannelNumber := number;
SetLength(channelObject,channelNumber);
for Loop := 0 to channelNumber - 1 do
begin
channelObject[Loop] := TCXXSHChannel8B.Create(OnCardChannelState);
channelObject[Loop].CreateCommChannel(Loop);
end;
Result := true;
end;
end.
6、 通道類源碼:
//------------------------------------------------------------------------------
//
// 産品名稱: 成曉旭的個人軟件Delphi源碼庫
// 産品版本: CXXSoft delphi code source lib 2.0
// 模塊名稱: Delphi之三彙模擬語音卡通道類
// 模塊描述:
// 單元文件: unSHChanne18B.pas
// 開發作者: 成曉旭
// 備注: 任何人使用此文件時,請保留此段自述文件,謝謝!
// 開發時間: 2003-12-01
// 修改曆史:
// 修改描述:
//------------------------------------------------------------------------------
unit unSHChanne18B;
...{$DEFINE ThreadChannel}
interface
uses
Windows,Classes,SysUtils,
unBaseDefine,unShpa3api,unSH8BDefine,
//unDJ160ADefine,
unDJTC08a32,unDJNewSig;
Type
...{$IFDEF ThreadChannel}
TCXXSHChannel8B = class(TThread)
...{$ELSE}
TCXXSHChannel8B = class(TObject)
...{$ENDIF}
private
channelType:TChannelType;
oldChannelState,channelState:TTrunkState;
channelID:Word;
phoneNumber:string;
dtmfString:string;
aCallerId:PAnsiChar;
isConntectd:boolean;
isDialOut:boolean;
aTrunkState:TTrunkStatus;
procedure ChannelProcessor();
procedure InformTrunkStatus(const aMsgFlag: TLVOperateFlag);
procedure ClearTrunkStatus();
procedure ClearChannelBuffer();
function CheckSigHangup():boolean;
function CheckCallIn():boolean;
function SwitchOnCallIn():boolean;
procedure ProcessCallInSuccess();
procedure ProcessDialSuccess();
procedure ProcessCheckDialSend();
procedure ProcessDialOut();
procedure Stop();
//三彙卡專用方法
function GetTrunkStateBySsm(const ssmState: integer): TTrunkState;
protected
...{$IFDEF ThreadChannel}
procedure Execute(); override;
...{$ENDIF}
public
strMessage:string;
OnChannelState:TTrunkStatusEvent;
constructor Create(const trunkEvent:TTrunkStatusEvent);
destructor Destroy();override;
procedure CreateCommChannel(const aChennelID: Word);
procedure Startup();
function GetChannelID():Word;
function GetChannelStatus():TTrunkState;
function GetChannelType():TChannelType;
function DialPhone(const DialPhoneNumber:PChar):boolean;overload;
function DialPhone(const DialPhoneNumber:PChar;const PreDialNumber:PChar):boolean;overload;
procedure ChannelHangUp();
function GetDialOut():boolean;
//三彙卡特性方法
function CheckDialOutEnabled():boolean;
class procedure InformInvodeError();
end;
implementation
...{ TCXXSHChannel8B }
procedure TCXXSHChannel8B.ChannelHangUp();
begin
isDialOut := false;
SsmHangUp(channelID);
ClearChannelBuffer();
ClearTrunkStatus();
InformTrunkStatus(lvofUpdate);
end;
procedure TCXXSHChannel8B.ChannelProcessor();
var
ssmState:integer;
begin
// ssmState := SsmGetChState(channelID);
// channelState := GetTrunkStateBySsm(ssmState);
CheckCallIn();
case channelState of
atsFree:
begin
//
end;
atsCallIning:
begin
SwitchOnCallIn();
end;
atsCallInSuccess:
begin
if CheckSigHangup() then Exit;
ProcessCallInSuccess();
end;
atsCheckSendDial:
begin
ProcessCheckDialSend();
end;
atsDialing:
begin
ProcessDialOut();
end;
atsDialSuccess:
begin
if CheckSigHangup() then Exit;
ProcessDialSuccess();
strMessage := '撥號成功';
end;
atsHangOff:
begin
ChannelHangUp();
end;
end;
if (oldChannelState <> channelState) then
begin
oldChannelState := channelState;
InformTrunkStatus(lvofUpdate);
end;
end;
function TCXXSHChannel8B.CheckCallIn(): boolean;
begin
Result := false;
if(SsmGetChState(channelID)=2) then //檢測到振鈴信號
begin
SsmGetCallerId(channelID, aCallerId); //取出CALLERID信息
channelState := atsCallIning;
Result := true;
end;
...{
Result := RingDetect(channelID);
if Result then
begin
OffHook(channelID);
if isDialOut then
channelState := atsDialSuccess
else
channelState := atsCallIning;
end;
}
end;
function TCXXSHChannel8B.CheckSigHangup(): boolean;
begin
Result := false;
if (SsmGetChState(channelID) = S_CALL_PENDING) then
begin
strMessage := '對方已挂機';
InformTrunkStatus(lvofUpdate);
SsmStopPlay(channelID);
channelState := atsHangOff;
Result := true;
end;
end;
procedure TCXXSHChannel8B.ClearTrunkStatus();
begin
channelState := atsFree;
oldChannelState := channelState;
phoneNumber := '';
dtmfString := '';
strMessage := '';
isConntectd := false;
end;
constructor TCXXSHChannel8B.Create(const trunkEvent:TTrunkStatusEvent);
begin
GetMem(aCallerId,50);
Self.OnChannelState := trunkEvent;
...{$IFDEF ThreadChannel}
Self.FreeOnTerminate := true;
inherited Create(true);
...{$ENDIF}
end;
destructor TCXXSHChannel8B.Destroy;
begin
ChannelHangUp();
Stop();
...{$IFNDEF ThreadChannel}
inherited Destroy();
...{$ENDIF}
InformTrunkStatus(lvofDelete);
FreeMem(aCallerId);
end;
function TCXXSHChannel8B.DialPhone(const DialPhoneNumber:PChar;
const PreDialNumber:PChar): boolean;
begin
Result := false;
if (channelState <> atsFree) then Exit;
phoneNumber := DialPhoneNumber;
Result := (SsmPickup(channelID) = 0);
if NOT Result then Exit;
Result := (SsmAutoDial(channelID,DialPhoneNumber)=0);
if Result then
begin
isDialOut := true;
channelState := atsCheckSendDial;
end;
end;
function TCXXSHChannel8B.DialPhone(
const DialPhoneNumber: PChar): boolean;
begin
Result := DialPhone(DialPhoneNumber,'');
end;
...{$IFDEF ThreadChannel}
procedure TCXXSHChannel8B.Execute;
begin
while NOT Terminated do
begin
Synchronize(ChannelProcessor);
Sleep(10);
end;
end;
...{$ENDIF}
function TCXXSHChannel8B.GetChannelID(): Word;
begin
Result := channelID;
end;
function TCXXSHChannel8B.GetChannelStatus(): TTrunkState;
begin
Result := channelState;
end;
procedure TCXXSHChannel8B.InformTrunkStatus(const aMsgFlag: TLVOperateFlag);
begin
if NOT Assigned(OnChannelState) then Exit;
aTrunkState.lvFlag := aMsgFlag;
aTrunkState.TrunkID := IntToStr(channelID);
aTrunkState.TrunkType := Ord(channelType);
aTrunkState.TrunkTypeStr := ChannelTypeString[channelType];
aTrunkState.TrunkStep := Ord(channelState);
aTrunkState.TrunkStepStr := TrunkStateString[channelState];
aTrunkState.TrunkPhone := phoneNumber;
aTrunkState.TrunkData := dtmfString;
OnChannelState(aTrunkState);
end;
procedure TCXXSHChannel8B.ProcessCallInSuccess();
begin
end;
function TCXXSHChannel8B.SwitchOnCallIn(): boolean;
begin
SsmPickup(channelID); //摘機
ClearChannelBuffer();
channelState := atsCallInSuccess;
Result := true;
end;
procedure TCXXSHChannel8B.ProcessDialSuccess();
begin
end;
procedure TCXXSHChannel8B.CreateCommChannel(const aChennelID: Word);
var
ct:integer;
begin
channelID := aChennelID;
ct := SsmGetChType(channelID);
if (ct < 0) then Exit;
channelType := TChannelType(ct);
ClearTrunkStatus();
InformTrunkStatus(lvofAdd);
end;
function TCXXSHChannel8B.GetChannelType(): TChannelType;
begin
Result := channelType;
end;
function TCXXSHChannel8B.GetDialOut(): boolean;
begin
Result := isDialOut;
end;
procedure TCXXSHChannel8B.ProcessCheckDialSend();
begin
//三彙卡直接轉換狀態
channelState := atsDialing;
end;
procedure TCXXSHChannel8B.Startup();
begin
...{$IFDEF ThreadChannel}
Resume();
...{$ENDIF}
end;
procedure TCXXSHChannel8B.Stop();
begin
...{$IFDEF ThreadChannel}
Suspend();
Terminate();
...{$ENDIF}
end;
function TCXXSHChannel8B.CheckDialOutEnabled(): boolean;
begin
//內線通道、坐席通道、磁石通道和錄音通道不支持本SsmPicuup操作
Result := NOT((channelType = ct1) or
(channelType = ct2) or
(channelType = ct3) or
(channelType = ct10));
end;
class procedure TCXXSHChannel8B.InformInvodeError;
var
msgBuffer:PAnsiChar;
begin
GetMem(msgBuffer,255);
try
SsmGetLastErrMsg(msgBuffer);
//記錄異常日志,或者通知用戶
//Showmessage(msgBuffer);
finally
FreeMem(msgBuffer);
end;
end;
function TCXXSHChannel8B.GetTrunkStateBySsm(
const ssmState: integer): TTrunkState;
begin
Result := atsFree;
case ssmState of
0: Result := atsFree;
4,5,6,9: Result := atsCallIning;
7: Result := atsHangOff;
//8:“斷線”狀態。只有錄音通道才會進入本狀態。暫時不處理
//8: Result := atsHangOff;
//3: Result := atsCallInSuccess;
end;
end;
procedure TCXXSHChannel8B.ProcessDialOut();
var
dState:integer;
begin
dState := SsmChkAutoDial(channelID);
case dState of
DIAL_VOICE,
DIAL_VOICEF1,
DIAL_VOICEF2:
begin
channelState := atsDialSuccess;
isConntectd := true;
end;
DIAL_STANDBY,
DIAL_NO_DIALTONE,
DIAL_ECHO_NOVOICE,
DIAL_NOVOICE,
DIAL_NOANSWER,
DIAL_FAILURE,
DIAL_INVALID_PHONUM:
begin
channelState := atsHangOff;
end;
end;
strMessage := '撥號中...';
end;
procedure TCXXSHChannel8B.ClearChannelBuffer();
begin
SsmClearRxDTMFBuf(channelID); //清空驅動程序內部的DTMF按鍵號碼接收緩沖區
SsmClearRxBuf(channelID); //清除指定通道ch上MODEM模塊的接收緩沖區中的所有數據
//“搶撥” 開關是指當在放音過程中收到對方的DTMF按鍵字符時,由驅動程序程序立即停止正在進行的放音操作。
//SsmSetDtmfStopPlay(channelID,true); //打開搶撥開關
end;
end.
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
Delphi之三彙模擬語音卡(SHT-8B/PCI/FAX)可複用源碼
作者:成曉旭
設計簡介:
1、 設計思路請參考本站Blog的另一篇文章:“Delphi之東進模擬語音卡(D160A)可複用源碼”;鏈接[url=http://blog.csdn.net/CXXSoft/archive/2006/08/23/1108211.aspx]http://blog.csdn.net/CXXSoft/archive/2006/08/23/1108211.aspx[/url]。
2、 其實,仔細對比,你會發現這兩種卡的代碼類方法簽名幾乎99%是一樣的,也就是說,這兩都之間,還需要更進一步的抽象,以解決“重複代碼”或者“相似代碼”的問題。
3、 更高層次的抽象,請參考我的設計文檔。
4、 類圖(以後補上):
5、 卡類源碼:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803724739.png[/img]//------------------------------------------------------------------------------
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803724771.png[/img]//
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803724802.png[/img]// 産品名稱: 成曉旭的個人軟件Delphi源碼庫
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803724833.png[/img]// 産品版本: CXXSoft delphi code source lib 2.0
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803724849.png[/img]// 模塊名稱: Delphi之三彙模擬語音卡類
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803724911.png[/img]// 模塊描述:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803724942.png[/img]// 單元文件: unSHCard8B.pas
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803724974.png[/img]// 開發作者: 成曉旭
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725005.png[/img]// 備注: 任何人使用此文件時,請保留此段自述文件,謝謝!
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725036.png[/img]// 開發時間: 2003-12-03
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725067.png[/img]// 修改曆史:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725099.png[/img]// 修改描述:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725130.png[/img]//------------------------------------------------------------------------------
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725161.png[/img]unit unSHCard8B;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725192.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725271.png[/img]interface
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725317.png[/img]uses
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725349.png[/img] Windows,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725411.png[/img] //unDJTC08a32,unDJNewSig,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725442.png[/img] unBaseDefine,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725474.png[/img] //unDJ160ADefine,unDJChanne160A,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725521.png[/img] unShpa3api,unSHChanne18B,unSH8BDefine;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725552.png[/img]type
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725567.png[/img] TCXXCommCard8B = class(TObject)
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725599.png[/img] private
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725646.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725677.png[/img] ChannelNumber:Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725739.png[/img] channelObject:array of TCXXSHChannel8B;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725771.png[/img] OnCardChannelState:TTrunkStatusEvent;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725786.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725817.png[/img] procedure ReleaseCommDevice();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725864.png[/img] function GetChannelObjectOrder(const aChannelID:Word):Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725942.png[/img] function InitChannel():boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725974.png[/img] public
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803725989.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726021.png[/img] constructor Create(const trunkEvent:TTrunkStatusEvent);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726083.png[/img] destructor Destroy(); override;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726114.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726192.png[/img] function LoadCommDevice(const loadAll:boolean=false):boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726208.png[/img] function Startup():boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726239.png[/img] function GetAFreeChannel():Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726271.png[/img] function GetChannelNumber():Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726302.png[/img] function DialPhone(const aChannelID:Word;const DialPhoneNumber:PChar):boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726333.png[/img] function HangUp(const aChannelID:Word):boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726349.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726380.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726411.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726442.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726474.png[/img]implementation
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726489.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726521.png[/img]const
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726552.png[/img] SH_ConfigFile = 'C:ShCtiShConfig.ini';
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726583.png[/img] SH_IndexFile = 'C:ShCtiShIndex.ini';
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726599.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726630.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726661.png[/img]...{ TCXXCommCard8B }
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726708.png[/img]constructor TCXXCommCard8B.Create(const trunkEvent:TTrunkStatusEvent);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726739.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726771.png[/img] ChannelNumber := 0;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726802.png[/img] Self.OnCardChannelState := trunkEvent;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726896.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726958.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803726974.png[/img]destructor TCXXCommCard8B.Destroy;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803727005.png[/img]var
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803727036.png[/img] Loop:Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803727067.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803727099.png[/img] if (Length(channelObject) > 0) and (channelNumber > 0) then
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803727130.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803727771.png[/img] for Loop := 0 to ChannelNumber - 1 do
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728067.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728099.png[/img] if Assigned(channelObject[Loop]) then
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728130.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728161.png[/img] channelObject[Loop].Free();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728177.png[/img] channelObject[Loop] := nil;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728271.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728286.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728427.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728458.png[/img] ReleaseCommDevice();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728474.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728505.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728536.png[/img]function TCXXCommCard8B.DialPhone(const aChannelID: Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728567.png[/img] const DialPhoneNumber: PChar): boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728583.png[/img]var
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728630.png[/img] K:Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728661.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728692.png[/img] Result := false;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728755.png[/img] K := GetChannelObjectOrder(aChannelID);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728771.png[/img] if (K <> ErrorTrunkNumber) and (Assigned(channelObject[K])) then
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728817.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728849.png[/img] Result := channelObject[K].DialPhone(DialPhoneNumber);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728880.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728927.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728958.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803728974.png[/img]procedure TCXXCommCard8B.ReleaseCommDevice();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729005.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729052.png[/img] SsmCloseCti() ;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729067.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729099.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729130.png[/img]function TCXXCommCard8B.GetAFreeChannel(): Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729161.png[/img]var
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729177.png[/img] Loop:Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729224.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729255.png[/img] Result := ErrorTrunkNumber;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729302.png[/img] for Loop := Low(channelObject) to High(channelObject) do
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729317.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729349.png[/img] if NOT channelObject[Loop].CheckDialOutEnabled() then continue;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729380.png[/img] if (channelObject[Loop].GetChannelStatus() = atsFree) then
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729411.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729427.png[/img] Result := channelObject[Loop].GetChannelID();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729458.png[/img]
break;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729489.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729536.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729567.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729583.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729614.png[/img]function TCXXCommCard8B.GetChannelNumber(): Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729646.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729677.png[/img] Result := channelNumber;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729708.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729724.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729755.png[/img]function TCXXCommCard8B.GetChannelObjectOrder(
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729786.png[/img] const aChannelID: Word): Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729817.png[/img]var
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729849.png[/img] Loop:Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729864.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729896.png[/img] Result := ErrorTrunkNumber;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729927.png[/img] for Loop := Low(channelObject) to High(channelObject) do
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729958.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803729974.png[/img] if (channelObject[Loop].GetChannelID = aChannelID) then
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730036.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730083.png[/img] Result := Loop;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730114.png[/img]
break;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730146.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730177.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730208.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730224.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730271.png[/img]function TCXXCommCard8B.HangUp(const aChannelID: Word): boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730302.png[/img]var
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730333.png[/img] K:Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730349.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730380.png[/img] Result := false;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730411.png[/img] K := GetChannelObjectOrder(aChannelID);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730442.png[/img] if (K <> ErrorTrunkNumber) and (Assigned(channelObject[K])) then
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730458.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730521.png[/img] channelObject[K].ChannelHangUp();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730552.png[/img] Result := true;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730567.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730599.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730630.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730661.png[/img]function TCXXCommCard8B.LoadCommDevice(const loadAll:boolean): boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730677.png[/img]const
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730708.png[/img] loadEmpty = true;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730755.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730786.png[/img] Result := false;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730817.png[/img] if SsmStartCti(SH_ConfigFile,SH_IndexFile) <> 0 then
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730849.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730880.png[/img] TCXXSHChannel8B.InformInvodeError();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730911.png[/img] Exit;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730942.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730974.png[/img] if(SsmGetMaxUsableBoard() <> SsmGetMaxCfgBoard()) then
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803730989.png[/img] begin //部分板卡初始化失敗,取出失敗原因
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731021.png[/img] TCXXSHChannel8B.InformInvodeError();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731052.png[/img] Exit;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731083.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731099.png[/img] Result := InitChannel();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731146.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731177.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731192.png[/img]function TCXXCommCard8B.Startup(): boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731224.png[/img]var
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731255.png[/img] Loop:integer;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731286.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731333.png[/img] for Loop := 0 to channelNumber - 1 do
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731364.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731396.png[/img] channelObject[Loop].Startup();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731427.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731442.png[/img] Result := true;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731474.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731505.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731536.png[/img]function TCXXCommCard8B.InitChannel():boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731567.png[/img]var
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731599.png[/img] number,Loop:integer;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731630.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731661.png[/img] Result := false;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731677.png[/img] number := SsmGetMaxCh();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731708.png[/img] if (number < 0) then Exit;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731771.png[/img] ChannelNumber := number;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731802.png[/img] SetLength(channelObject,channelNumber);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731849.png[/img] for Loop := 0 to channelNumber - 1 do
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731880.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731911.png[/img] channelObject[Loop] := TCXXSHChannel8B.Create(OnCardChannelState);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731942.png[/img] channelObject[Loop].CreateCommChannel(Loop);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731974.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803731989.png[/img] Result := true;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732021.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732052.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732083.png[/img]end.
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732130.png[/img]
6、 通道類源碼:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732146.png[/img]//------------------------------------------------------------------------------
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732177.png[/img]//
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732208.png[/img]// 産品名稱: 成曉旭的個人軟件Delphi源碼庫
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732239.png[/img]// 産品版本: CXXSoft delphi code source lib 2.0
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732271.png[/img]// 模塊名稱: Delphi之三彙模擬語音卡通道類
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732286.png[/img]// 模塊描述:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732317.png[/img]// 單元文件: unSHChanne18B.pas
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732349.png[/img]// 開發作者: 成曉旭
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732396.png[/img]// 備注: 任何人使用此文件時,請保留此段自述文件,謝謝!
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732411.png[/img]// 開發時間: 2003-12-01
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732442.png[/img]// 修改曆史:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732474.png[/img]// 修改描述:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732536.png[/img]//------------------------------------------------------------------------------
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732552.png[/img]unit unSHChanne18B;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732583.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732614.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732646.png[/img]...{$DEFINE ThreadChannel}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732661.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732692.png[/img]interface
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732724.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732755.png[/img]uses
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732786.png[/img] Windows,Classes,SysUtils,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732802.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732833.png[/img] unBaseDefine,unShpa3api,unSH8BDefine,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732864.png[/img] //unDJ160ADefine,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732896.png[/img] unDJTC08a32,unDJNewSig;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732911.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732942.png[/img]Type
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803732974.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733005.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733036.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733052.png[/img] ...{$IFDEF ThreadChannel}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733083.png[/img] TCXXSHChannel8B = class(TThread)
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733114.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733146.png[/img] ...{$ELSE}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733161.png[/img] TCXXSHChannel8B = class(TObject)
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733192.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733224.png[/img] ...{$ENDIF}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733255.png[/img] private
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733286.png[/img] channelType:TChannelType;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733302.png[/img] oldChannelState,channelState:TTrunkState;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733333.png[/img] channelID:Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733364.png[/img] phoneNumber:string;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733396.png[/img] dtmfString:string;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733411.png[/img] aCallerId:PAnsiChar;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733442.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733474.png[/img] isConntectd:boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733505.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733536.png[/img] isDialOut:boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733552.png[/img] aTrunkState:TTrunkStatus;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733583.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733614.png[/img] procedure ChannelProcessor();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733646.png[/img] procedure InformTrunkStatus(const aMsgFlag: TLVOperateFlag);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733661.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733692.png[/img] procedure ClearTrunkStatus();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733724.png[/img] procedure ClearChannelBuffer();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733755.png[/img] function CheckSigHangup():boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733786.png[/img] function CheckCallIn():boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733802.png[/img] function SwitchOnCallIn():boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733833.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733880.png[/img] procedure ProcessCallInSuccess();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733911.png[/img] procedure ProcessDialSuccess();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733942.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803733958.png[/img] procedure ProcessCheckDialSend();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734005.png[/img] procedure ProcessDialOut();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734021.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734052.png[/img] procedure Stop();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734083.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734130.png[/img] //三彙卡專用方法
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734146.png[/img] function GetTrunkStateBySsm(const ssmState: integer): TTrunkState;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734177.png[/img] protected
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734208.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734255.png[/img] ...{$IFDEF ThreadChannel}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734286.png[/img] procedure Execute(); override;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734302.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734333.png[/img] ...{$ENDIF}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734364.png[/img] public
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734396.png[/img] strMessage:string;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734411.png[/img] OnChannelState:TTrunkStatusEvent;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734442.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734474.png[/img] constructor Create(const trunkEvent:TTrunkStatusEvent);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734505.png[/img] destructor Destroy();override;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734521.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734552.png[/img] procedure CreateCommChannel(const aChennelID: Word);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734583.png[/img] procedure Startup();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734614.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734646.png[/img] function GetChannelID():Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734677.png[/img] function GetChannelStatus():TTrunkState;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734724.png[/img] function GetChannelType():TChannelType;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734755.png[/img] function DialPhone(const DialPhoneNumber:PChar):boolean;overload;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734786.png[/img] function DialPhone(const DialPhoneNumber:PChar;const PreDialNumber:PChar):boolean;overload;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734802.png[/img] procedure ChannelHangUp();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734833.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734864.png[/img] function GetDialOut():boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734896.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734911.png[/img] //三彙卡特性方法
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734942.png[/img] function CheckDialOutEnabled():boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803734974.png[/img] class procedure InformInvodeError();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735005.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735021.png[/img]implementation
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735052.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735083.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735114.png[/img]...{ TCXXSHChannel8B }
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735146.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735177.png[/img]procedure TCXXSHChannel8B.ChannelHangUp();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735192.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735224.png[/img] isDialOut := false;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735255.png[/img] SsmHangUp(channelID);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735286.png[/img] ClearChannelBuffer();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735317.png[/img] ClearTrunkStatus();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735349.png[/img] InformTrunkStatus(lvofUpdate);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735364.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735396.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735442.png[/img]procedure TCXXSHChannel8B.ChannelProcessor();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735474.png[/img]var
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735505.png[/img] ssmState:integer;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735536.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735552.png[/img]// ssmState := SsmGetChState(channelID);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735583.png[/img]// channelState := GetTrunkStateBySsm(ssmState);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735614.png[/img] CheckCallIn();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735646.png[/img] case channelState of
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735661.png[/img] atsFree:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735692.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735724.png[/img] //
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735755.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735786.png[/img] atsCallIning:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735817.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735833.png[/img] SwitchOnCallIn();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735864.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735896.png[/img] atsCallInSuccess:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735942.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803735974.png[/img] if CheckSigHangup() then Exit;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736005.png[/img] ProcessCallInSuccess();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736021.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736052.png[/img] atsCheckSendDial:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736083.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736114.png[/img] ProcessCheckDialSend();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736130.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736161.png[/img] atsDialing:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736192.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736224.png[/img] ProcessDialOut();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736255.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736286.png[/img] atsDialSuccess:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736317.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736349.png[/img] if CheckSigHangup() then Exit;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736364.png[/img] ProcessDialSuccess();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736396.png[/img] strMessage := '撥號成功';
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736427.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736458.png[/img] atsHangOff:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736489.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736505.png[/img] ChannelHangUp();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736536.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736567.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736599.png[/img] if (oldChannelState <> channelState) then
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736630.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736661.png[/img] oldChannelState := channelState;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736677.png[/img] InformTrunkStatus(lvofUpdate);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736708.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736739.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736771.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736802.png[/img]function TCXXSHChannel8B.CheckCallIn(): boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736817.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736849.png[/img] Result := false;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736880.png[/img] if(SsmGetChState(channelID)=2) then //檢測到振鈴信號
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736911.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803736927.png[/img] SsmGetCallerId(channelID, aCallerId); //取出CALLERID信息
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737052.png[/img] channelState := atsCallIning;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737083.png[/img] Result := true;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737114.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737146.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737161.png[/img]...{
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737192.png[/img] Result := RingDetect(channelID);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737224.png[/img] if Result then
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737255.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737286.png[/img] OffHook(channelID);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737302.png[/img] if isDialOut then
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737333.png[/img] channelState := atsDialSuccess
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737364.png[/img] else
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737396.png[/img] channelState := atsCallIning;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737411.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737442.png[/img]}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737474.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737505.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737536.png[/img]function TCXXSHChannel8B.CheckSigHangup(): boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737552.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737583.png[/img] Result := false;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737614.png[/img] if (SsmGetChState(channelID) = S_CALL_PENDING) then
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737646.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737677.png[/img] strMessage := '對方已挂機';
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737708.png[/img] InformTrunkStatus(lvofUpdate);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737739.png[/img] SsmStopPlay(channelID);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737771.png[/img] channelState := atsHangOff;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737786.png[/img] Result := true;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737817.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737849.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737880.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737896.png[/img]procedure TCXXSHChannel8B.ClearTrunkStatus();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737927.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737958.png[/img] channelState := atsFree;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803737989.png[/img] oldChannelState := channelState;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738021.png[/img] phoneNumber := '';
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738052.png[/img] dtmfString := '';
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738083.png[/img] strMessage := '';
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738099.png[/img] isConntectd := false;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738130.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738161.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738192.png[/img]constructor TCXXSHChannel8B.Create(const trunkEvent:TTrunkStatusEvent);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738208.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738239.png[/img] GetMem(aCallerId,50);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738271.png[/img] Self.OnChannelState := trunkEvent;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738302.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738333.png[/img]...{$IFDEF ThreadChannel}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738349.png[/img] Self.FreeOnTerminate := true;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738380.png[/img] inherited Create(true);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738411.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738442.png[/img]...{$ENDIF}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738474.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738489.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738521.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738552.png[/img]destructor TCXXSHChannel8B.Destroy;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738583.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738614.png[/img] ChannelHangUp();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738630.png[/img] Stop();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738661.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738692.png[/img]...{$IFNDEF ThreadChannel}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738724.png[/img] inherited Destroy();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738755.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738771.png[/img]...{$ENDIF}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738817.png[/img] InformTrunkStatus(lvofDelete);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738833.png[/img] FreeMem(aCallerId);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738864.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738896.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738927.png[/img]function TCXXSHChannel8B.DialPhone(const DialPhoneNumber:PChar;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738958.png[/img] const PreDialNumber:PChar): boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803738974.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739005.png[/img] Result := false;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739036.png[/img] if (channelState <> atsFree) then Exit;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739067.png[/img] phoneNumber := DialPhoneNumber;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739099.png[/img] Result := (SsmPickup(channelID) = 0);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739114.png[/img] if NOT Result then Exit;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739146.png[/img] Result := (SsmAutoDial(channelID,DialPhoneNumber)=0);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739177.png[/img] if Result then
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739208.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739239.png[/img] isDialOut := true;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739271.png[/img] channelState := atsCheckSendDial;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739286.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739317.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739349.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739380.png[/img]function TCXXSHChannel8B.DialPhone(
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739411.png[/img] const DialPhoneNumber: PChar): boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739427.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739458.png[/img] Result := DialPhone(DialPhoneNumber,'');
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739489.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739521.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739552.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739583.png[/img]...{$IFDEF ThreadChannel}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739630.png[/img]procedure TCXXSHChannel8B.Execute;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739646.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739677.png[/img] while NOT Terminated do
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739708.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739739.png[/img] Synchronize(ChannelProcessor);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739755.png[/img] Sleep(10);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739786.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739817.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739849.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739880.png[/img]...{$ENDIF}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739896.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739927.png[/img]function TCXXSHChannel8B.GetChannelID(): Word;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739958.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803739989.png[/img] Result := channelID;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740021.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740036.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740083.png[/img]function TCXXSHChannel8B.GetChannelStatus(): TTrunkState;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740114.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740146.png[/img] Result := channelState;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740177.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740224.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740255.png[/img]procedure TCXXSHChannel8B.InformTrunkStatus(const aMsgFlag: TLVOperateFlag);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740286.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740317.png[/img] if NOT Assigned(OnChannelState) then Exit;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740349.png[/img] aTrunkState.lvFlag := aMsgFlag;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740380.png[/img] aTrunkState.TrunkID := IntToStr(channelID);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740411.png[/img] aTrunkState.TrunkType := Ord(channelType);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740427.png[/img] aTrunkState.TrunkTypeStr := ChannelTypeString[channelType];
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740458.png[/img] aTrunkState.TrunkStep := Ord(channelState);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740489.png[/img] aTrunkState.TrunkStepStr := TrunkStateString[channelState];
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740521.png[/img] aTrunkState.TrunkPhone := phoneNumber;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740567.png[/img] aTrunkState.TrunkData := dtmfString;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740599.png[/img] OnChannelState(aTrunkState);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740630.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740646.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740677.png[/img]procedure TCXXSHChannel8B.ProcessCallInSuccess();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740739.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740771.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740802.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740864.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740880.png[/img]function TCXXSHChannel8B.SwitchOnCallIn(): boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740911.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803740958.png[/img] SsmPickup(channelID); //摘機
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741005.png[/img] ClearChannelBuffer();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741036.png[/img] channelState := atsCallInSuccess;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741067.png[/img] Result := true;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741099.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741114.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741177.png[/img]procedure TCXXSHChannel8B.ProcessDialSuccess();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741208.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741239.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741255.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741286.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741317.png[/img]procedure TCXXSHChannel8B.CreateCommChannel(const aChennelID: Word);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741349.png[/img]var
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741380.png[/img] ct:integer;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741411.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741442.png[/img] channelID := aChennelID;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741474.png[/img] ct := SsmGetChType(channelID);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741505.png[/img] if (ct < 0) then Exit;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741536.png[/img] channelType := TChannelType(ct);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741552.png[/img] ClearTrunkStatus();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741583.png[/img] InformTrunkStatus(lvofAdd);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741614.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741646.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741692.png[/img]function TCXXSHChannel8B.GetChannelType(): TChannelType;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741724.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741739.png[/img] Result := channelType;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741771.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741802.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741833.png[/img]function TCXXSHChannel8B.GetDialOut(): boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741849.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741880.png[/img] Result := isDialOut;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741911.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741942.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741974.png[/img]procedure TCXXSHChannel8B.ProcessCheckDialSend();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803741989.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742021.png[/img] //三彙卡直接轉換狀態
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742052.png[/img] channelState := atsDialing;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742083.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742114.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742130.png[/img]procedure TCXXSHChannel8B.Startup();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742161.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742208.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742239.png[/img] ...{$IFDEF ThreadChannel}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742255.png[/img] Resume();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742286.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742317.png[/img] ...{$ENDIF}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742349.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742364.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742396.png[/img]procedure TCXXSHChannel8B.Stop();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742427.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742458.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742489.png[/img] ...{$IFDEF ThreadChannel}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742505.png[/img] Suspend();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742536.png[/img] Terminate();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742567.png[/img][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742599.png[/img] ...{$ENDIF}
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742614.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742646.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742692.png[/img]function TCXXSHChannel8B.CheckDialOutEnabled(): boolean;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742724.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742739.png[/img] //內線通道、坐席通道、磁石通道和錄音通道不支持本SsmPicuup操作
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742771.png[/img] Result := NOT((channelType = ct1) or
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742833.png[/img] (channelType = ct2) or
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742849.png[/img] (channelType = ct3) or
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742880.png[/img] (channelType = ct10));
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742911.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742942.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742958.png[/img]class procedure TCXXSHChannel8B.InformInvodeError;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803742989.png[/img]var
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743021.png[/img] msgBuffer:PAnsiChar;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743052.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743083.png[/img] GetMem(msgBuffer,255);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743114.png[/img] try
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743146.png[/img] SsmGetLastErrMsg(msgBuffer);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743161.png[/img] //記錄異常日志,或者通知用戶
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743192.png[/img] //Showmessage(msgBuffer);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743224.png[/img] finally
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743255.png[/img] FreeMem(msgBuffer);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743271.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743317.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743333.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743364.png[/img]function TCXXSHChannel8B.GetTrunkStateBySsm(
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743396.png[/img] const ssmState: integer): TTrunkState;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743427.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743442.png[/img] Result := atsFree;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743474.png[/img] case ssmState of
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743505.png[/img] 0: Result := atsFree;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743536.png[/img] 4,5,6,9: Result := atsCallIning;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743567.png[/img] 7: Result := atsHangOff;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743599.png[/img] //8:“斷線”狀態。只有錄音通道才會進入本狀態。暫時不處理
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743630.png[/img] //8: Result := atsHangOff;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743646.png[/img] //3: Result := atsCallInSuccess;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743677.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743708.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743739.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743771.png[/img]procedure TCXXSHChannel8B.ProcessDialOut();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743786.png[/img]var
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743817.png[/img] dState:integer;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743849.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743880.png[/img] dState := SsmChkAutoDial(channelID);
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743896.png[/img] case dState of
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743927.png[/img] DIAL_VOICE,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803743958.png[/img] DIAL_VOICEF1,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744005.png[/img] DIAL_VOICEF2:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744021.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744052.png[/img] channelState := atsDialSuccess;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744083.png[/img] isConntectd := true;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744114.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744130.png[/img] DIAL_STANDBY,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744161.png[/img] DIAL_NO_DIALTONE,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744192.png[/img] DIAL_ECHO_NOVOICE,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744224.png[/img] DIAL_NOVOICE,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744255.png[/img] DIAL_NOANSWER,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744271.png[/img] DIAL_FAILURE,
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744302.png[/img] DIAL_INVALID_PHONUM:
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744333.png[/img] begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744364.png[/img] channelState := atsHangOff;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744380.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744458.png[/img] end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744474.png[/img] strMessage := '撥號中...';
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744505.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744536.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744567.png[/img]procedure TCXXSHChannel8B.ClearChannelBuffer();
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744599.png[/img]begin
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744614.png[/img] SsmClearRxDTMFBuf(channelID); //清空驅動程序內部的DTMF按鍵號碼接收緩沖區
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744646.png[/img] SsmClearRxBuf(channelID); //清除指定通道ch上MODEM模塊的接收緩沖區中的所有數據
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744677.png[/img] //“搶撥” 開關是指當在放音過程中收到對方的DTMF按鍵字符時,由驅動程序程序立即停止正在進行的放音操作。
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744708.png[/img] //SsmSetDtmfStopPlay(channelID,true); //打開搶撥開關
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744724.png[/img]end;
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744755.png[/img]
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744786.png[/img]end.
[img]http://images.wangchao.net.cn/images/upload/images/lsdn/1189803744817.png[/img]