Asterisk 's hardware?

Hi,
I have a voice card,but asterisk can’t support it! I want use it,
how do it!

head file contant:

#ifndef SHCTI_CONST
#define SHCTI_CONST

//-----------------------------------------------------------------------
// definition of channel type, which can be retrieved by invoking
// function “SsmGetFlag()” and set by invoking “SsmSetFlag()”
//-----------------------------------------------------------------------
enum{
F_RCVDTMFSENS=1, //接收DTMF敏感度
F_TXDTMFAMP=2, //发送DTMF信号强度
F_RCVPHONUMHOLDUP=3, //被叫号码拦截标记

// Added by xxb for 模拟电话线被叫摘机检测新算法,2003.2.27	
F_RELATIVEENGYHOOKDETECT=4, //是否启用模拟电话线被叫摘机检测新算法

//Added by xxb,for 一号信令R2滤波点数不可调,2003.3.7
F_RXR2FILTERTIME=5, //R2接收滤波时间
F_RECTOFILEA_CALLBACKTIME = 6, //Appended by xxb, for SsmRecToFileA回调时间可调, 2003.06.24
F_CALLERIDSTYLE=7,	
F_InVoiceToBus=8, //Added by xxb,for 来话上总线 DTMF切音,2004.04.19
F_ClearInVoiceOnRcvDtmf=9, //Added by xxb,for 来话上总线 DTMF切音,2004.04.19
F_MixerResToBus=10, //added by xxb,for 混音源上总线,2004.06.02
F_HighAndLowFreqEnScale=11, //appended by cqb for 过滤语音中误判的DTMF , 2004.11.01
F_DualAndAllFreqEnScale=12 //appended by cqb for 过滤语音中误判的DTMF , 2004.11.01

};

//-----------------------------------------------------------------------
// definition of channel type, which can be retrieved by invoking
// function “SsmGetChType()”
//-----------------------------------------------------------------------
#if !defined(MCONST_H__F9FCDFC0_116C_11d7_A073_00E04C68629B__INCLUDED_)
enum{
ANALOG_CH=0,
INTER_CH=1,
USER_CH=2,
REC_CH=3,
SS1_CH=4,
FAX_CH=5,
TUP_CH=6,
ISDN_USER_CH=7,
ISDN_NET_CH = 8,
SOFTFAX_CH = 9,
MAGNET_CH = 10,
ISUP_CH = 11,
IDLE_CH = 20,
};
#endif
//-----------------------------------------------------------------------
// definition of blocking reason, which can be retrieved by invoking
// function “SsmGetBlockReason()”
//-----------------------------------------------------------------------
enum{
BLOCKBY_NULL,
BLOCKBY_TupRcvMGB,
BLOCKBY_TupRcvHGB,
BLOCKBY_TupRcvSGB,
BLOCKBY_TupWaitRLGTimeout,
BLOCKBY_TupBlockByApp,
};

//-----------------------------------------------------------------------
// Definition of status on blocking remote circuit or circuit groups,
// which might be used by following functions
// 1. “SsmChkBlockRemoteXXX()”
// 2. “SsmChkBlockRemoteXXX()”
//-----------------------------------------------------------------------
#define BLOCKREMOTE_Unblocked 0 // no block-signal is issued
#define BLOCKREMOTE_Blocked 1 // is in blocked state now
#define BLOCKREMOTE_WaitBlockAck 2 // waiting for acknowledgement signal after sending block-signal
#define BLOCKREMOTE_WaitUnblockAck 3 // waiting for acknowledgement signal after sending unblock-signal

//-----------------------------------------------------------------------
// Definition of local blocking status on circuit or circuit groups,
// which might be used by following functions
// “SsmQueryLocalXXXBlockState()”
//-----------------------------------------------------------------------
#define BLOCK_AppBlockCic 0x00000001 // channel is blocked by invoking SsmBlockLocalCh()
#define BLOCK_TupRcvBLO 0x00000002 // channel is blocked by received BLO
#define BLOCK_TupRcvSGB 0x00000004 // channel is blocked by received SGB
#define BLOCK_TupRcvHGB 0x00000008 // channel is blocked by received HGB
#define BLOCK_TupRcvMGB 0x00000010 // channel is blocked by received MGB
#define BLOCK_AppBlockPCM 0x00000020 // channel is blocked by invoking SsmBlockLocalPCM()

//-----------------------------------------------------------------------
// Definition of channel unavailable reason
//-----------------------------------------------------------------------
#define UNAVAILABLE_PcmSyncLos 0x00000001
#define UNAVAILABLE_Mtp3Unusuable 0x00000002

//-----------------------------------------------------------------------
// 函数调用失败原因的常量定义,用于函数SsmGetLastErrCode()返回值
//-----------------------------------------------------------------------
enum{
C_ERROR_INIT_FAILURE =0,
C_ERROR_SSMAPI_UNOPENED =1,
C_ERROR_INVALID_APPCH =2,
C_ERROR_UNSUPPORTED_OP =3,
C_ERROR_INDEX_UNOPENED =4,
C_ERROR_INVALID_BUSCH =5,
C_ERROR_OP_UNOPENED =6,
C_ERROR_INVALID_FORMAT =7,
C_ERROR_INVALID_PARAMETER =8,
C_ERROR_FILEOP_FAILURE =9,
C_ERROR_MEMORY_FAILURE =10,
C_ERROR_RESOURCE_USEUP =11,
C_ERROR_SYSTEM =12,
C_ERROR_IdleChNotFound =13, // appended by cxg for SS7,10.22,2001
C_ERROR_OP_FAILURE =14, //appended by xxb, for 停录放音会出现句柄无效,2003.7.18
C_ERROR_INVALID_APPSPYCIC =15,
//++++start++++ fax error code
C_ERROR_FAX_NOFILE = 16
//++++end++++ fax error code
};

//-----------------------------------------------------------------------
// 自动拨号任务失败的常量定义,用于函数SsmGetAutoDialFailureReason()返回值
//-----------------------------------------------------------------------
enum{
ATDL_NULL=0, // 没有呼出任务
ATDL_Cancel=1, // 应用程序主动取消
ATDL_WaitDialAnsTimeout=2, // 等待被叫应答超时
ATDL_WaitRemotePickupTimeout=3, // 等待被叫摘机超时
ATDL_PcmSyncLos=4, // PCM链路基本祯失步超过100ms

ATDL_Mtp3Unusable=10,						// No.7信令:信令不可用
ATDL_RcvSSB=11,								// No.7信令:收到SSB
ATDL_RcvSLB=12,								// No.7信令:收到SLB
ATDL_RcvSTB=13,								// No.7信令:收到STB
ATDL_RcvUNN=14,								// No.7信令:收到UNN
ATDL_RcvSEC=15,								// No.7信令:收到SEC
ATDL_RcvCGC=16,								// No.7信令:收到CGC
ATDL_RcvNNC=17,								// No.7信令:收到NNC
ATDL_RcvCFL=18,								// No.7信令:收到CFL
ATDL_RcvLOS=19,								// No.7信令:收到LOS
ATDL_RcvSST=20,								// No.7信令:收到SST
ATDL_RcvACB=21,								// No.7信令:收到ACB
ATDL_RcvDPN=22,								// No.7信令:收到DPN
ATDL_RcvEUM=23,								// No.7信令:收到EUM
ATDL_RcvADI=24,								// No.7信令:收到ADI
ATDL_RcvBLO=25,								// No.7信令:收到BLO
ATDL_DoubleOccupy=26,						// No.7信令:检出同抢
ATDL_CircuitReset=27,						// No.7信令:收到电路/群复原信号
ATDL_BlockedByRemote=28,					// No.7信令:电路被对端交换机闭塞

ATDL_SS1WaitOccupyAckTimeout=40,			// No.1信令:等待占用应答信号超时
ATDL_SS1RcvCAS_HANGUP=41,					// No.1信令:收到后向拆线信号
ATDL_SS1RcvA4=42,							// No.1信令:收到A4信号(机键拥塞)
ATDL_SS1RcvA5=43,							// No.1信令:收到A5信号(空号)
ATDL_SS1RcvUndefinedAx=44,					// No.1信令:收到未定义的后向A组信号
ATDL_SS1RcvUndefinedAxOnTxCallerId=45,		// No.1信令:送主叫时收到未定义的后向A组信号
ATDL_SS1WaitAxTimeout=46,					// No.1信令:等候接收后向A组信号超时
ATDL_SS1WaitAxStopTimeout=47,				// No.1信令:等候后向A组信号停发超时
ATDL_SS1WaitAxTimeoutOnTxCallerId=48,		// No.1信令:送主叫时等候后向A组信号超时
ATDL_SS1WaitAxStopTimeoutOnTxCallerId=49,	// No.1信令:送主叫时等候后向A组信号停发超时
ATDL_SS1RcvKB2=50,							// No.1信令:收到KB2信号(用户“市忙”)
ATDL_SS1RcvKB3=51,							// No.1信令:收到KB3信号(用户“长忙”)
ATDL_SS1RcvKB4=52,							// No.1信令:收到KB4信号(机键拥塞)
ATDL_SS1RcvKB5=53,							// No.1信令:收到KB5信号(空号)
ATDL_SS1RcvUndefinedKB=54,					// No.1信令:收到未定义的KB信号
ATDL_SS1WaitKBTimeout=55,					// No.1信令:接收后向KB信号超时
ATDL_SS1WaitKBStopTimeout=56,				// No.1信令:等候被叫方停发后向KB信号超时

ATDL_ISDNNETISBUS	= 60,					//ISDN:网络忙
ATDL_ISDNEMPTYNO	= 61,					//ISDN:所拨的是空号.

ATDL_IllegalMessage = 65,                   //SS7:非法消息
ATDL_RcvREL         = 66,                   //ISUP:收到释放消息

};

//-----------------------------------------------------------------------
// 自动拨号任务执行情况的常量定义,函数SsmChkAutoDial()的返回值
//-----------------------------------------------------------------------
enum{
DIAL_STANDBY = 0, // 没有自动拨号任务
DIAL_DIALING = 1, // 正在自动拨号
DIAL_ECHOTONE = 2, // 发送完被叫号码后检测到了回铃音
DIAL_NO_DIALTONE = 3, // 没有拨号音,自动拨号失败。
DIAL_BUSYTONE = 4, // 被叫用户忙,自动拨号结束
DIAL_ECHO_NOVOICE = 5, // 模拟外线通道拨号结束并收到回铃音后出现无声,自动拨号结束
DIAL_NOVOICE = 6, // 模拟外线通道拨号结束后在指定时间内没有检测到任何声音,自动拨号结束
DIAL_VOICE = 7, // 被叫用户摘机,自动拨号结束
DIAL_VOICEF1 = 8, // 被叫用户摘机且收到频率F1的声音(模拟外线通道),自动拨号结束
DIAL_VOICEF2 = 9, // 被叫用户摘机且收到频率F2的声音(模拟外线通道),自动拨号结束
DIAL_NOANSWER = 10, // 无人接听,自动拨号失败
DIAL_FAILURE = 11, // 自动拨号失败
DIAL_INVALID_PHONUM = 12, // 空号,自动拨号结束
};

//-----------------------------------------------------------------------
// 通道挂起原因常量定义,函数SsmGetPendingReason()的返回值
//-----------------------------------------------------------------------
enum{
ANALOGOUT_NO_DIALTONE=0, // 模拟通道:自动拨号时没有检测到拨号音,自动拨号失败。
ANALOGOUT_BUSYTONE=1, // 模拟通道:自动拨号结束后检测到拨号音,自动拨号失败。
ANALOGOUT_ECHO_NOVOICE=2, // 模拟通道:自动拨号结束后并检测到回铃后出现无。
ANALOGOUT_NOANSWER=3, // 模拟通道:自动拨号结束后检测到回铃信号但在指定的时间内没有应答。
ANALOGOUT_TALKING_REMOTE_HANGUPED=4, // 模拟通道:在"通话"状态时检测对方挂机
ANALOGOUT_NOVOICE=5, // 模拟通道:自动拨号结束后检测到线路上出现无声

PEND_WaitBckStpMsg=10,					// 数字中继通道:等待应用程序设置被叫用户状态

SS1IN_BWD_KB5=11,						// No.1信令通道:等待主叫拆线
PEND_RemoteHangupOnTalking=12,			// 数字中继通道:自动呼入进入通话后检测到主叫用户先挂机

PEND_AutoDialFailed=13,					// 数字中继通道:自动拨号失败
PEND_SsxUnusable=14,					// 数字中继通道:信令不可用
PEND_CircuitReset=15,					// 数字中继通道:电路复原
PEND_PcmSyncLos=16,						// 数字中继通道:基本祯同步丢失时间超过100ms

SS1OUT_TALKING_REMOTE_HANGUPED=20,		// 数字中继通道:自动呼出进入通话后检测到被叫用户先挂机
PEND_CalleeHangupOnTalking=20,			// 数字中继通道:自动呼出进入通话后检测到被叫用户先挂机

SS1OUT_NOANSWER=21,						// No.1信令通道:等待被叫用户摘机超时
SS1OUT_NOBWDACK=22,						// No.1信令通道:等待占用应答信号超时
SS1OUT_DIALING_BWD_HANGUP=23,			// No.1信令通道:收到后向拆线信号
SS1OUT_BWD_A5=24,						// No.1信令通道:收到A=5(空号)信号
SS1OUT_BWD_KB5=25,						// No.1信令通道:收到KB=5(空号)信号
SS1OUT_BWD_KB2=26,						// No.1信令通道:用户“市忙”
SS1OUT_BWD_KB3=27,						// No.1信令通道:用户”长忙“
SS1OUT_BWD_A4=28,						// No.1信令通道:机键拥塞
SS1OUT_BWD_KB4=29,						// No.1信令通道:收到KB=4(机键拥塞)信号
SS1OUT_TIMEOUT_BWD_A=30,				// No.1信令通道:等候接收后向A组信号超时
SS1OUT_TIMEOUT_BWD_A_STOP=31,			// No.1信令通道:等候后向A组信号停发超时
SS1OUT_TIMEOUT_BWD_KB=32,				// No.1信令通道:接收后向KB信号超时
SS1OUT_TIMEOUT_BWD_KB_STOP=33,			// No.1信令通道:等候被叫方停发后向KB信号超时
SS1OUT_TIMEOUT_CALLERID_BWD_A1=34,		// No.1信令通道:收到未定义的后向A组信号
SS1OUT_TIMEOUT_CALLERID_BWD_A1_STOP=35,	// No.1信令通道:发送CALLERID时等候后向A组信号停发超时
SS1OUT_UNDEFINED_CALLERID_BWD_A=36,		// No.1信令通道:发送主叫号码时收到未定义的后向A组信号
SS1OUT_UNDEFINED_BWD_A=37,				// No.1信令通道:收到未定义的后向A组信号
SS1OUT_UNDEFINED_BWD_KB=38,				// No.1信令通道:收到未定义的KB信号

ISDN_CALLOVER		= 41,			//呼叫结束,对方先挂机.
ISDN_WAIT_RELEASE	= 42,			//等待释放
ISDN_HANGING		= 43,			//拆线中
ISDN_RELEASING		= 44,			//正在释放

ISDN_UNALLOCATED_NUMBER = 45,		//ISDN,未分配的号码
ISDN_NETWORK_BUSY		= 46,		//ISDN, 网络忙。
ISDN_CIRCUIT_NOT_AVAILABLE= 47,		//ISDN, 指定的电路不可用。
PEND_CalleeHangupOnWaitRemotePickUp=48,		// added by cqb for SHCTI030902 数字中继通道:自动呼出后等待被叫挂机时检测到被叫用户先挂机

ISUP_HardCircuitBlock    = 49,
ISUP_RemoteSuspend       = 50,

PEND_RcvHGBOrSGB		 = 51,//Appended by xxb,for 接收到对端交换机SGB/HGB后驱动错误处理,2003.11.27

ISDN_NO_ANSWER			=52,		//ISDN, 无应答
ISDN_CALL_REJ			=53,		//ISDN, 呼叫拒绝

};

//-----------------------------------------------------------------------
// 通道状态常量定义,函数SsmGetChState()的返回值
//-----------------------------------------------------------------------
enum{
S_CALL_STANDBY =0, //“空闲”状态
S_CALL_PICKUPED=1, //“摘机”状态
S_CALL_RINGING =2, //“振铃”状态
S_CALL_TALKING =3, //“通话”状态

S_CALL_ANALOG_WAITDIALTONE  =4,		// “等待拨号音”状态  (模拟通道)
S_CALL_ANALOG_TXPHONUM      =5,		// “拨号”状态        (模拟通道)
S_CALL_ANALOG_WAITDIALRESULT=6,		// “等待拨号结果”状态(模拟通道)

S_CALL_PENDING            =7,		// “挂起”状态
S_CALL_OFFLINE            =8,		// “断线”状态        (录音通道)
S_CALL_WAIT_REMOTE_PICKUP =9,		// “等待被叫摘机”状态
S_CALL_ANALOG_CLEAR      =10,		//  **内部状态**       (模拟通道)
S_CALL_UNAVAILABLE       =11,		// “通道不可用”状态
S_CALL_LOCKED            =12,		// “呼出锁定”状态

S_CALL_RemoteBlock	     =19,		// “对端闭塞”状态
S_CALL_LocalBlock        =20,		// “本端闭塞”状态

S_CALL_Ss1InWaitPhoNum  =30,		// “等待接收被叫号码”状态			(No.1信令呼入)
S_CALL_Ss1InWaitFwdStop =31,		// “等待前向停发”状态				(No.1信令呼入)
S_CALL_Ss1InWaitCallerID=32,		// “等待接收CALLERID号码”状态		(No.1信令呼入)
S_CALL_Ss1InWaitKD      =33,		// “等待接收KD信号”状态			(No.1信令呼入)
S_CALL_Ss1InWaitKDStop  =34,		// “等待KD信号停发”状态			(No.1信令呼入)
S_CALL_SS1_SAYIDLE      =35,		// “发送示闲信令”状态				(No.1信令)
S_CALL_SS1WaitIdleCAS   =36,		// “等待对端示闲”状态				(No.1信令)
S_CALL_SS1PhoNumHoldup  =37,		// “冗余号码拦截”状态				(No.1信令)
S_CALL_Ss1InWaitStopSendA3p=38,		// “等待停发A3p信号”状态			(No.1信令)


S_CALL_Ss1OutWaitBwdAck       =40,	// “等待后向占用证实信令”状态		(No.1信令呼出)
S_CALL_Ss1OutTxPhoNum         =41,	// “发送被叫号码”状态				(No.1信令呼出)
S_CALL_Ss1OutWaitAppendPhoNum =42,	// “等待应用程序追加电话号码”状态	(No.1信令呼出)
S_CALL_Ss1OutTxCallerID       =43,	// “发送主叫号码”状态				(No.1信令呼出)
S_CALL_Ss1OutWaitKB           =44,	// “等待接收KB信号”状态			(No.1信令呼出)
S_CALL_Ss1OutDetectA3p        =45,	// “检测A3p信号(脉冲)”状态		(No.1信令呼出)


S_FAX_Wait    = S_CALL_STANDBY,		// “空闲”状态								(传真通道)
S_FAX_ROUND   = 50,					// “状态转移过程中”状态					(传真通道)
S_FAX_PhaseA  = 51,					// “传真呼叫建立”状态						(传真通道)
S_FAX_PhaseB  = 52,					// “传真报文前处理”状态					(传真通道)
S_FAX_SendDCS = 53,					// “传真发送中向接收方发送DCS信号”状态    (传真通道)
S_FAX_Train   = 54,					// “传真报文传输前传输训练”状态			(传真通道)
S_FAX_PhaseC  = 55,					// “传真报文传输中”状态					(传真通道)
S_FAX_PhaseD  = 56,					// “传真报文后处理”状态					(传真通道)
S_FAX_NextPage= 57,					// “传真报文传输下一页”状态				(传真通道)
S_FAX_AllSent = 58,					// “传真发送中报文传输结束”状态			(传真通道)
S_FAX_PhaseE  = 59,					// “传真呼叫释放”状态						(传真通道)
S_FAX_Reset   = 60,					// “复位MODEM”状态						(传真通道)
S_FAX_Init    = 61,					// “初始化MODEM”状态						(传真通道)
S_FAX_RcvDCS  = 62,					// “传真接收中接收发方的DCS信号”状态		(传真通道)
S_FAX_SendFTT = 63,					// “传真接收中向发方发送训练失败信号FTT”状态		(传真通道)
S_FAX_SendCFR = 64,					// “传真接收中向发方发送可接受的证实信号CFR”状态  (传真通道)

S_TUP_WaitPcmReset    = 70,			// “等待电路群复原”状态		(No.7信令TUP协议)
S_TUP_WaitSAM         = 71,			// “等待后续地址消息”状态		(No.7信令TUP协议)
S_TUP_WaitGSM         = 72,			// “等待GSM消息”状态			(No.7信令TUP协议)
S_TUP_WaitCLF         = 73,			// “等待主叫拆线信号”状态		(No.7信令TUP协议)
S_TUP_WaitPrefix      = 74,			// “等待接收入局字冠”状态		(No.7信令TUP协议)
S_TUP_WaitDialAnswer  = 75,			// “等待拨号结果”状态			(No.7信令TUP协议)
S_TUP_WaitRLG         = 76,			// “等待释放监护信号”状态		(No.7信令TUP协议)
S_TUP_WaitSetCallerID = 77,

S_ISDN_OUT_WAIT_NET_RESPONSE	= 81,	//ISDN:等待网络响应
S_ISDN_OUT_PLS_APPEND_NO		= 82,	//ISDN:请追加号码
S_ISDN_IN_CHK_CALL_IN			= 83,	//ISDN:检测到呼入
S_ISDN_IN_RCVING_NO				= 84,	//ISDN:正在接收号码
S_ISDN_IN_WAIT_TALK				= 85,	//ISDN:准备进入通话
S_ISDN_OUT_WAIT_ALERT			= 86,	//ISDN: 等待对方发提醒信号

S_ISDN_CALL_BEGIN				= 87,	//ISDN:呼出时为刚发起呼叫,呼入时为刚检测到呼入
S_ISDN_WAIT_HUANGUP				= 88,	//ISDN:等待释放完成

S_CALL_SENDRING                 = 100,  //磁石模块正在发送振铃

S_SPY_STANDBY					= S_CALL_STANDBY,	//监控:空闲
S_SPY_RCVPHONUM                 = 105,  //监控:接收号码
S_SPY_RINGING					= S_CALL_RINGING,	//监控:振铃
S_SPY_TALKING					= S_CALL_TALKING,	//监控:通话

S_SPY_SS1RESET					= 110,	//SS1监控:复原
S_SPY_SS1WAITBWDACK				= 111,	//SS1监控:等待后向证实
S_SPY_SS1WAITKB					= 112,	//SS1监控:等待KB

S_ISUP_WaitSAM                 = 120,// ISUP:等待后继号码
S_ISUP_WaitRLC                 = 121,// ISUP:等待释放完成消息
S_ISUP_WaitReset               = 122,// ISUP:电路复原
S_ISUP_LocallyBlocked          = 123,// ISUP:本地闭塞,即本地闭塞远端呼出
S_ISUP_RemotelyBlocked         = 124,// ISUP:远端闭塞,即远端闭塞本端呼出
S_ISUP_WaitDialAnswer          = 125,// ISUP:等待呼出结果
S_ISUP_WaitINF                 = 126,// ISUP:等待主叫号码
S_ISUP_WaitSetCallerID         = 127,

};

#ifndef WIN32
#ifndef OS_LINUX
#ifndef TYPEDEF_H
#define TYPEDEF_H

typedef char CHAR;
typedef float FLOAT;
typedef int BOOL;
typedef int INT;
typedef long LONG;
typedef void VOID;

typedef unsigned char BYTE;
typedef unsigned char UCHAR;
typedef unsigned int UINT;
typedef unsigned long DWORD;
typedef unsigned long ULONG;
typedef unsigned short USHORT;
typedef unsigned short WORD;

typedef BOOL *LPBOOL;
typedef BYTE *LPBYTE;
typedef BYTE *PBYTE;
typedef CHAR *LPSTR;
typedef CHAR *LPTSTR;
typedef CHAR *PCHAR;
typedef DWORD *LPDWORD;
typedef DWORD *PDWORD;
typedef WORD *LPWORD;
typedef WORD *PWORD;
typedef UCHAR *PUCHAR;
typedef long *LPLONG;
typedef long *PLONG;
typedef void *LPVOID;

typedef const CHAR *LPCSTR;
typedef const CHAR *LPCTSTR;
typedef const void *LPCVOID;
typedef void *PVOID; // masked by cqb for Linux Transplant

#endif // end of #ifndef TYPEDEF_H
#endif // end of #ifndef OS_LINUX
#if !defined(EVENT_H__1CBCD5C7_E3D1_457d_A287_DD3F338090BC__INCLUDED_)

enum {
//语音识别
E_PROC_Recognize, //0x0000 //语音识别结束事件

//ISDN呼叫
E_CHG_ISDNStatus,		//0x0001        //ISDN底层状态改变事件

//ss7
E_RCV_Ss7Msu,		//0x0002        //SS7 MSU接收通知事件
E_CHG_Mtp3State,		//0x0003        //Mtp3状态改变事件

//传真
E_CHG_FaxChState,		//0x0004        //传真通道传真状态改变事件
E_CHG_FaxPages,		//0x0005        //传真接收/发送页结束事件
E_PROC_FaxEnd,		//0x0006        //传真结束事件

//PCM线路同步状态
E_CHG_PcmLinkStatus,	//0x0007    //PCM线路同步状态改变事件

//录音通道
E_CHG_LineVoltage,	//0x0008        //录音通道线路电压变化事件

//ss1
E_RCV_CAS,		//0x0009        //接收到的CAS值有变化
E_RCV_R2,			//0x000A        //收到新的R2 值

//DTMF接收
E_PROC_WaitDTMF,		//0x000B        //WaitDTMF任务结束事件
E_CHG_RcvDTMF,		//0x000C

//DTMF发送
E_PROC_SendDTMF,		//0x000D        //发送DTMF任务结束事件

//发送闪断
E_PROC_SendFlash,		//0x000E        //发送闪断任务结束事件

//放音
E_PROC_PlayEnd,		//0x000F        //放音任务结束
E_PROC_PlayFile,		//0x0010        //文件放音进程指示
E_PROC_PlayFileList,	//0x0011    //文件列表放音进程指示
E_PROC_PlayMem,		//0x0012        //内存放音进程指示

//录音
E_PROC_RecordEnd,		//0x0013        //录音任务结束
E_PROC_RecordFile,		//0x0014        //文件录音任务进展指示
E_PROC_RecordMem,		//0x0015        //内存录音任务进展指示

//FSK发送
E_PROC_SendFSK,		//0x0016        //发送FSK任务结束事件

//FSK接收
E_PROC_RcvFSK,		//0x0017        //RcvFSK任务结束

//呼叫控制
E_CHG_ChState,		//0x0018        //通道状态发生变化
E_PROC_AutoDial,		//0x0019        //AutoDial任务有进展
E_CHG_RemoteChBlock,	//0x001A
E_CHG_RemotePCMBlock,	//0x001B
E_SYS_ActualPickup,		//0x001C        //外线通道实际摘机
E_CHG_RingFlag,		//0x001D        //铃流电平变化
E_CHG_RingCount,		//0x001E        //振铃计数变化
E_CHG_CIDExBuf,		//0x001F        //CID扩展接收缓冲区变化
E_CHG_RxPhoNumBuf,		//0x0020        //被叫号码接收缓冲区变化
E_CHG_PolarRvrsCount,	//0x0021   //外线通道极性反转
E_SYS_RemotePickup,		//0x0022        //模拟电话线相对能量算法检测被叫摘机

//座席
E_CHG_FlashCount,		//0x0023        //flash计数发生变化
E_CHG_HookState,		//0x0024        //Hook状态发生变化

//信号音检测
E_CHG_ToneAnalyze,	//0x0025        //信号音分析结果变化事件
E_OverallEnergy,		//0x0026
E_CHG_OvrlEnrgLevel,	//0x0027    //全频能量标识输出事件
E_CHG_BusyTone,		//0x0028        //忙音计数变化事件
E_CHG_BusyToneEx,		//0x0029        //松散忙音变化
E_CHG_VocFxFlag,		//0x002A        //单音频信号音电平变化
E_CHG_ToneValue,		//0x002B        //信号音电平变化
E_CHG_RingEchoToneTime,	//0x002C
E_CHG_PeakFrq,		//0x002D        //PeakFrq有变化
E_SYS_BargeIn,		//0x003E        //检测到BargeIn
E_SYS_NoSound,		//0x002F        //检测到NoSound

//定时器
E_SYS_TIMEOUT,		//0x0030        //定时器事件

//信令监控
E_CHG_SpyState,		//0x0031        //被监控电路的接续状态通知事件
E_CHG_SpyLinkStatus,	//0x0032    //被监控的PCM链路状态通知事件

};

enum {
TIMER_ONE,
TIMER_PERIODIC
};

enum {
NO_EVENT, // 无事件方式
EVENT_POLLING, //事件轮询
EVENT_CALLBACK, //事件回调
EVENT_MESSAGE //windows消息
};

//文件放音进程指示输出参数类型.
enum {
PLAYPERCENT,
PLAYTIME,
DATABYTESPLAYED,
DATABYTESTOPLAY
};

//内存录放音进程指示输出参数类型.
enum {
END_HALF_BUFFER,
END_BUFFER,
MEM_OFFSET
};

//文件录音进程指示输出参数类型.
enum
{
RECORD_TIME,
RECORD_BYTES
};
typedef struct _MESSAGE_INFO
{
WORD wEventCode;
int nReference;
DWORD dwParam; //输出参数
} MESSAGE_INFO, *PMESSAGE_INFO;

typedef struct _EVENT_SET_INFO
{
DWORD dwWorkMode;
LPVOID lpHandlerParam;
DWORD dwOutCondition;
DWORD dwOutParamVal;
DWORD dwUser;
} EVENT_SET_INFO, *PEVENT_SET_INFO;

typedef struct tagFAX_FILE_SCT
{
char szFileName[256];
int nStartPage;
int nEndPage;
int nReserve1;
int nReserve2;
}FAX_FILE_SCT, *PFAX_FILE_SCT;
#endif

#endif // end SHCTI_CONST

#ifndef WINAPI
#define WINAPI
#endif
//++++START++++ appended by cqb for Linux Transplant
#ifndef CALLBACK
#define CALLBACK
#endif
//++++END++++ appended by cqb for Linux Transplant
#endif // end of #ifndef WIN32

#ifndef SHCTI_CALLBACK
#define SHCTI_CALLBACK

typedef void (WINAPI *RXDTMFHANDLER) (int ch, char cDtmf, int nDTStatus, PVOID pV);
typedef BOOL (WINAPI *RECORDMEMBLOCKHANDLER) (int ch, int nEndReason, PUCHAR pucBuf, DWORD dwStopOffset, PVOID pV);
typedef BOOL (WINAPI *PLAYMEMBLOCKHANDLER) (int ch, int nEndReason, PUCHAR pucBuf, DWORD dwStopOffset, PVOID pV);
typedef void (CALLBACK *LPRECTOMEM) (int ch, LPBYTE lpData, DWORD dwDataLen); //appended by xxb,2002.12.02
typedef int (CALLBACK *LPFNEVENTCALLBACK) (WORD wEvent, int nReference, DWORD dwParam, DWORD dwUser);
#endif

#ifdef __cplusplus
extern “C” {
#endif

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@ INITIALIZATION OPERATION  @@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int WINAPI SsmStartCti(LPSTR lpSsmCfgFileName, LPSTR lpIndexCfgFileName);
int WINAPI SsmCloseCti();
void WINAPI SsmGetLastErrMsg(LPSTR szErrMsgBuf);
char *WINAPI SsmGetLastErrMsgA(void);
int WINAPI SsmGetLastErrCode();
int WINAPI SsmGetMaxUsableBoard();
int WINAPI SsmGetMaxCfgBoard();
int WINAPI SsmGetRxDtmfBufSize();
int WINAPI SsmGetAccreditId(int nBId);
int WINAPI SsmGetMaxCh(void);
int WINAPI SsmGetChType(int ch);
int WINAPI SsmSetMaxIdxSeg(WORD wMaxIdxSeg);
int WINAPI SsmLoadIndexData(int	nSegNo, LPSTR pAlias, int nCodec, LPSTR	pVocFile, long lStartPos, long lLen);
int WINAPI SsmFreeIndexData(int nSegNo);
int WINAPI SsmGetTotalIndexSeg();
int WINAPI SsmPauseCard();
int WINAPI SsmRestartCard();

int WINAPI SsmGetAccreditIdEx(int nBId);	
int WINAPI SsmGetBoardModel(int nBId);		
void WINAPI SsmSetDV(BOOL bEnable);			
BOOL WINAPI SsmGetDV(void);

DWORD WINAPI SsmGetPciSerialNo(int nBId);

DWORD WINAPI SsmGetIntCount();
int WINAPI SsmSetListenMode(int nMode);

int WINAPI SsmStartBoard(int nBId);	//add by wangjiang for cPCI 2003.4.23
int WINAPI SsmStopBoard(int nBId);	//add by wangjiang for cPCI 2003.4.23
int WINAPI SsmGetChHdInfo(int ch, int * pnBId, int * pnBCh);
int WINAPI SsmGetAppChId(int * AppchId, int BrdId, int BrdChId);	//add by JK Shi 2003.9.25

int WINAPI SsmSetChState(int ch, int nState);

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ PLAY OPERATION @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int WINAPI SsmSetPlayVolume(int ch, int nVolume);
int WINAPI SsmSetDtmfStopPlay(int ch, BOOL bDspf);
int WINAPI SsmGetDtmfStopPlayFlag(int ch);
int WINAPI SsmSetBargeinStopPlay(int ch, BOOL bBispf);
int WINAPI SsmGetBargeinStopPlayFlag(int ch);
int WINAPI SsmPlayFile(int ch, LPSTR pszFileName, int nFormat, DWORD dwStartPos, DWORD dwLen);
int	WINAPI SsmStopPlay(int ch);
int WINAPI SsmStopPlayFile(int ch);
int WINAPI SsmPausePlay(int ch);
int WINAPI SsmRestartPlay(int ch);
int WINAPI SsmFastFwdPlay(int ch);
int WINAPI SsmFastBwdPlay(int ch);
int WINAPI SsmSetPlayTime(int ch, DWORD dwTime);
long WINAPI SsmGetPlayedTimeEx(int ch);												// added by cqb for SHCTI030902
int  WINAPI SsmGetPlayingFileInfo(int ch , int *pnFormat , long *pnTotalTime);		// added by cqb for SHCTI030902
int WINAPI SsmSetPlayPrct(int ch, DWORD dwPercentage);
long WINAPI SsmGetPlayedTime(int ch);
int WINAPI SsmGetPlayedPercentage(int ch);
long WINAPI SsmGetDataBytesToPlay(int ch);
int WINAPI SsmCheckPlay(int ch);
int WINAPI SsmGetPlayType(int ch);
int WINAPI SsmPlayIndexString(int ch, LPSTR pszIdxStr);
int WINAPI SsmPlayIndexList(int ch, WORD wIdxListLen, PWORD pwIdxList);
int WINAPI SsmStopPlayIndex(int ch);
int WINAPI SsmClearFileList(int ch);
int WINAPI SsmAddToFileList(int ch, LPSTR pszFileName, int nFormat, DWORD dwStartPos, DWORD dwLen);
int WINAPI SsmPlayFileList(int ch);
int WINAPI SsmStopPlayFileList(int ch);
int WINAPI SsmPlayMem(int ch, int nFormat, LPBYTE pBuf, DWORD dwBufSize, DWORD dwStartOffset, DWORD dwStopOffset);
int WINAPI SsmGetPlayOffset(int ch, DWORD* pdwPlayOffset);
int WINAPI SsmSetStopPlayOffset(int ch, DWORD dwStopPlayOffset);
int WINAPI SsmStopPlayMem(int ch);
int WINAPI SsmClearPlayMemList(void);
int WINAPI SsmAddToPlayMemList(LPBYTE pBuf, DWORD dwDataLen, int nFormat);
int WINAPI SsmPlayMemList(int ch, PWORD pMemList, WORD wMemListLen);
int WINAPI SsmStopPlayMemList(int ch);

//appended by xxb for 恒生,01.09,2002 +++++
int WINAPI SsmSetDTMFStopPlayCharSet(int ch, LPSTR lpstrDtmfCharSet);
int WINAPI SsmGetDTMFStopPlayCharSet(int ch, LPSTR lpstrDtmfCharSet);
int WINAPI SsmSetHangupStopPlayFlag(int ch, BOOL bHangupStopRecFlag );
int WINAPI SsmPlayMemBlock(int ch,
		int nFormat,
		LPBYTE pBuf,
		DWORD dwBufSize,
		PLAYMEMBLOCKHANDLER OnPlayMemBlockDone,
		PVOID pV);

int WINAPI SsmStopPlayMemBlock(int ch);
//appended by xxb for 恒生,01.09,2002 -----
long WINAPI SsmGetDataBytesPlayed(int ch);	//add by wangjiang 2002.12.25


//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@    RECORD OPERATION   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int WINAPI SsmSetRecVolume(int ch, int nVolume);
int WINAPI SsmGetRecType(int ch);
int WINAPI SsmRecToFile(int ch, LPSTR pszFileName, int nFormat, DWORD dwStartPos, DWORD dwBytes, DWORD dwTime, int nMask);
int WINAPI SsmRecToFileA(int ch, LPSTR pszFileName, int nFormat,
		DWORD dwStartPos, DWORD dwBytes, DWORD dwTime, int nMask,
		LPRECTOMEM	pfnRecToMem);

int WINAPI SsmRecToFileEx(int ch, LPSTR pszFileName, int nFormat,
		DWORD dwStartPos, DWORD dwBytes, DWORD dwTime, int nMask,
		BOOL bSaveToFileOnBargin, DWORD dwRollbackTime);

int WINAPI SsmPauseRecToFile(int ch);
int WINAPI SsmRestartRecToFile(int ch);
long WINAPI SsmGetRecTime(int ch);
long WINAPI SsmGetDataBytesToRecord(int ch);
int WINAPI SsmStopRecToFile(int ch);
int WINAPI SsmChkRecToFile(int ch);
int WINAPI SsmRecToMem(int ch, int nFormat, LPBYTE pBuf, DWORD dwBufSize, DWORD dwStartOffset);
int WINAPI SsmStopRecToMem(int ch);
long WINAPI SsmGetRecOffset(int ch);

int WINAPI SsmGetRecAGCSwitch(int ch);
int WINAPI SsmSetRecAGC(int ch, BOOL bEnable);

int WINAPI SsmQueryOpRecMixer(int ch);
int WINAPI SsmSetRecMixer(int ch, BOOL bEnRecMixer, int nMixerVolume);
int WINAPI SsmGetRecMixerState(int ch, int* pnEnRecMixer, int* pnMixerVolume);

int WINAPI SsmSetPrerecord(int ch, BOOL bEnable, int nMode, WORD wInsertTime, int nFormat);
int WINAPI SsmSetTruncateTail(int ch, DWORD	dwTime);
long WINAPI SsmGetTruncateTailTime(int ch);
int WINAPI SsmGetPrerecordState(int ch, int* pnMode, PWORD pwInsertTime, int* pnFormat);
//appended by xxb for 恒生,01.09,2002 +++++
int WINAPI SsmSetDTMFStopRecCharSet(int ch, LPSTR lpstrDtmfCharSet);
int WINAPI SsmGetDTMFStopRecCharSet(int ch, LPSTR lpstrDtmfCharSet);
int WINAPI SsmSetHangupStopRecFlag(int ch, BOOL bHangupStopRecFlag );
int WINAPI SsmCheckRecord(int ch);
int WINAPI SsmRecordMemBlock(int ch, int nFormat, LPBYTE pBuf,
		DWORD dwBufSize, RECORDMEMBLOCKHANDLER OnRecMemBlockDone, PVOID pV);
int WINAPI SsmStopRecordMemBlock(int ch);
//appended by xxb for 恒生,01.09,2002 -----
int WINAPI SsmSetNoModuleChBusRec(int ch, int nRec);

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@   RxDTMF OPERATION   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int WINAPI SsmEnableRxDtmf(int ch, BOOL bRun);
int WINAPI SsmClearRxDtmfBuf(int ch);
int WINAPI SsmGetDtmfStr(int ch, LPSTR pszDtmf);
char* WINAPI SsmGetDtmfStrA(int ch);
int WINAPI SsmGetRxDtmfLen(int ch);
int WINAPI SsmGet1stDtmf(int ch, char* pcDtmf);
int WINAPI SsmGet1stDtmfClr(int ch, char* pcDtmf);
int WINAPI SsmGetLastDtmf(int ch, char* pcDtmf);
int WINAPI SsmSetWaitDtmf(int ch, WORD wTimeOut, WORD wMaxLen, char cEndChar, BOOL bWithEndChar);
int WINAPI SsmChkWaitDtmf(int ch, LPSTR	pszDtmf);

int WINAPI SsmCancelWaitDtmf(int ch);	
int WINAPI SsmSetWaitDtmfEx(int ch, WORD wTimeOut, WORD wMaxLen, char cEndChar, BOOL bWithEndChar);

//appended by xxb for 恒生,01.09,2002 +++++
// 设置接收DTMF字符回调函数:
int WINAPI SsmSetRxDtmfHandler(int ch, RXDTMFHANDLER OnRcvDtmf, PVOID pV);
//appended by xxb for 恒生,01.09,2002 -----

int WINAPI SsmSetWaitDtmfExA(int ch, WORD wTimeOut, WORD wMaxLen, char* szEndChar, BOOL bWithEndChar);
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@ TXDTMF OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int WINAPI SsmQueryTxDtmf(int ch, LPSTR pszDtmf);
int WINAPI SsmQueryTxFlash(int ch, LPSTR pszDtmf);
int WINAPI SsmSetTxDtmfPara(int ch, WORD wOnTime, WORD wOffTime);
int WINAPI SsmGetTxDtmfPara(int ch, PWORD pwOnTime, PWORD pwOffTime);
int WINAPI SsmTxDtmf(int ch, LPSTR pszDtmf);
int WINAPI SsmStopTxDtmf(int ch);
int WINAPI SsmChkTxDtmf(int ch);
int WINAPI SsmTxFlash(int ch, WORD time);
int WINAPI SsmChkTxFlash(int ch);
int WINAPI SsmSetTxFlashCharTime(int ch, WORD time);	//appended by LM for 上海刘锦宏,2001.11.02
int WINAPI SsmGetTxFlashCharTime(int ch);				//appended by LM for 上海刘锦宏,2001.11.02


//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@ INTER-CH OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int WINAPI SsmSetLocalFlashTime(int nFlashTime);
int WINAPI SsmSetASDT(int ch, BOOL bEnAutoSendDialTone);
int WINAPI SsmGetASDT(int ch);
int WINAPI SsmSetASTOD(int ch, BOOL bEnAutoSendDialTone);
int WINAPI SsmGetASTOD(int ch);
int WINAPI SsmGetFlashCount(int ch);
int WINAPI SsmClearFlashCount(int ch);
int WINAPI SsmGetHookState(int ch);
int WINAPI SsmStartRing(int ch);
int WINAPI SsmStopRing(int ch);
int WINAPI SsmStartRingWithFskCID(int ch, LPSTR pBuf, DWORD dwMaxBit, DWORD dw1stRingOffDelay);
int WINAPI SsmStartRingWithCIDStr(int ch, LPSTR pBuf, DWORD dwLen, DWORD dw1stRingOffDelay);
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@ SEND TONE OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int WINAPI SsmQueryOpSendTone(int ch);
int WINAPI SsmSendTone(int ch, int nToneType);
int WINAPI SsmSendToneEx(int ch, DWORD dwOnTime, DWORD dwOffTime);
int WINAPI SsmStopSendTone(int ch);
int WINAPI SsmSetTxTonePara(int ch, int nFreq1, int nVolume1, int nFreq2, int nVolume2);
int WINAPI SsmGetTxTonePara(int ch, int* pnFreq1, int* pnVolume1, int* pnFreq2, int* pnVolume2);


//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@ TONE ANALYZE OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int WINAPI SsmQueryOpToneAnalyze(int ch);
int WINAPI SsmClearToneAnalyzeResult(int ch);
int WINAPI SsmStartToneAnalyze(int ch);
int WINAPI SsmCloseToneAnalyze(int ch);
long WINAPI SsmGetOverallEnergy(int ch);
int WINAPI SsmGetVocFxFlag(int ch, int nSelFx, BOOL bClear);
int WINAPI SsmGetToneAnalyzeResult(int ch);
int WINAPI SsmGetBusyToneLen(int ch);
int WINAPI SsmGetBusyToneCount(int ch);
int WINAPI SsmGetRingEchoToneTime(int ch);

//++++START++++ appended by CXG for 放宽背靠背忙音检测条件,2001.11.22
int WINAPI SsmGetBusyToneEx(int ch);
//++++END++++ appended by LM for 放宽背靠背忙音检测条件,2001.11.22

int WINAPI SsmSetTonePara(int ch, WORD wToneFreq1,WORD wToneBW1,WORD wToneFreq2,WORD wToneBW2,DWORD dwIsToneRatio);
int WINAPI SsmSetIsDialToneDtrTime(int ch, WORD wIsDialToneDtrTime);
int WINAPI SsmSetBusyTonePeriod(int ch, WORD wBusyTonePeriod);
int WINAPI SsmSetIsBusyToneDtrCnt(int ch, WORD wIsBusyToneDtrCnt);
int WINAPI SsmSetRingEchoTonePara(int ch, WORD wRingEchoOnTime,WORD wRingEchoOffTime);
int WINAPI SsmSetVoiceFxPara(int ch, WORD wSelFx, WORD wFx,WORD wFxBW, DWORD dwIsVocFxRatio, WORD wIsVocFxDtrTime);
int WINAPI SsmSetVoiceOnDetermineTime(int ch, WORD wIsVocDtrTime);
int WINAPI SsmSetMinVocDtrEnergy(int ch, DWORD dwMinVocDtrEnergy);
int WINAPI SsmGetTonePara(int ch, PWORD pwToneFreq1, PWORD pwToneBW1,PWORD pwToneFreq2,PWORD pwToneBW2,PDWORD pdwIsToneRatio);
int WINAPI SsmGetIsDialToneDtrTime(int ch, PWORD pwIsDialToneDtrTime);
int WINAPI SsmGetBusyTonePeriod(int ch, PWORD pwBusyTonePeriod);
int WINAPI SsmGetIsBusyToneDtrCnt(int ch, PWORD pwIsBusyToneDtrCnt);
int WINAPI SsmGetRingEchoTonePara(int ch, PWORD pwRingEchoOnTime, PWORD pwRingEchoOffTime);
int WINAPI SsmGetIsNoVocDtrmTime(int ch, PWORD pwIsNoVocDtrmTime);
int WINAPI SsmGetVoiceFxPara(int ch, WORD wSelFx, PWORD pwFx,PWORD pwFxBW, PDWORD pdwIsVocFxRatio, PWORD pwIsVocFxDtrTime);
int WINAPI SsmGetVoiceOnDetermineTime(int ch, PWORD pwIsVocDtrTime);
int WINAPI SsmGetMinVocDtrEnergy(int ch, PDWORD pdwMinVocDtrEnergy);

int WINAPI SsmQueryOpPeakFrqDetect(int ch);
int WINAPI SsmSetPeakFrqDetectBW(int ch, WORD nPeakBW);
int WINAPI SsmGetPeakFrqDetectBW(int ch);
long WINAPI SsmGetPeakFrqEnergy(int ch);
int WINAPI SsmGetPeakFrq(int ch);

int WINAPI SsmStart2ndToneAnalyzer(int ch, BOOL bEn);
int WINAPI SsmGet2ndToneAnalyzerState(int ch);
int WINAPI SsmSet2ndTonePara(int ch, WORD wToneFreq1,WORD wToneBW1,WORD wToneFreq2,WORD wToneBW2,DWORD dwIsToneRatio);
int WINAPI SsmGet2ndTonePara(int ch, PWORD pwToneFreq1, PWORD pwToneBW1,PWORD pwToneFreq2,PWORD pwToneBW2,PDWORD pdwIsToneRatio);
int WINAPI SsmGet2ndToneAnalyzeResult(int ch);
int WINAPI SsmClear2ndToneAnalyzeResult(int ch);
int WINAPI SsmGet2ndBusyToneLen(int ch);
int WINAPI SsmGet2ndBusyToneCount(int ch);
int WINAPI SsmSet2ndBusyTonePeriod(int ch, WORD wBusyTonePeriod);
int WINAPI SsmGet2ndBusyTonePeriod(int ch, PWORD pwBusyTonePeriod);
int WINAPI SsmSet2ndIsBusyToneDtrCnt(int ch, WORD wIsBusyToneDtrCnt);
int WINAPI SsmGet2ndIsBusyToneDtrCnt(int ch, PWORD pwIsBusyToneDtrCnt);
int WINAPI SsmSet2ndIsDialToneDtrTime(int ch, WORD wIsDialToneDtrTime);
int WINAPI SsmGet2ndIsDialToneDtrTime(int ch, PWORD pwIsDialToneDtrTime);
int WINAPI SsmSet2ndRingEchoTonePara(int ch, WORD wRingEchoOnTime,WORD wRingEchoOffTime);
int WINAPI SsmGet2ndRingEchoTonePara(int ch, PWORD pwRingEchoOnTime, PWORD pwRingEchoOffTime);
int WINAPI SsmSetBusyTonePeriodEx(int ch, int nType, WORD wMax, PWORD pwPeriod);	//appended by LM for 上海刘锦宏,2001.11.02
int WINAPI SsmGetBusyTonePeriodEx(int ch, int nType, PWORD pwPeriod);				//appended by LM for 上海刘锦宏,2001.11.02
WORD WINAPI SsmGetToneValue(int ch);
int WINAPI SsmSetToneValue(int ch,WORD value);

int WINAPI SsmGetOverallEnergyAllCh(int nBeginCh, int nChNum, PDWORD pdwEnergyTable);	//add by wangjiang 2002.12.28 for open conference

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@ BARGEIN OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int WINAPI SsmSetNoSoundDtrmTime(int ch, DWORD dwIsNoSoundDtrTime);
int WINAPI SsmSetIsBargeInDtrmTime(int ch, WORD wIsBargeInDtrmTime);
int WINAPI SsmSetBargeInSens(int ch, int nBargeInSens);
long WINAPI SsmGetNoSoundTime(int ch);
long WINAPI SsmGetNoSoundDtrmTime(int ch);
int WINAPI SsmGetIsBargeInDtrmTime(int ch);
int WINAPI SsmGetBargeInSens(int ch);
int WINAPI SsmDetectBargeIn(int ch);
int WINAPI SsmDetectNoSound(int ch);

//设置模拟电话线相对能量被叫摘机检测参数
//返回值 0:操作成功, -1:操作失败
int WINAPI SsmSetCalleeHookDetectP(int ch, // 通道号
		WORD wMulti, //预定倍数
		WORD wValidTime); //有效时间
//读取模拟电话线相对能量被叫摘机检测参数
//返回值 0:操作成功, -1:操作失败
int WINAPI SsmGetCalleeHookDetectP(int ch, // 通道号
		PWORD pwMulti, //预定倍数
		PWORD pwValidTime); //有效时间


//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@ RING DETECT OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int WINAPI SsmQueryOpRingDetect(int ch);
int WINAPI SsmGetRingFlag(int ch);
int WINAPI SsmGetRingCount(int ch);
int WINAPI SsmClearRingCount(int ch);
int WINAPI SsmChkOpCallerId(int ch);
int WINAPI SsmGetCallerId(int ch, LPSTR szCallerId);
char* WINAPI SsmGetCallerIdA(int ch);
int WINAPI SsmGetCallerIdEx(int ch, LPSTR szCallerIdEx);
int WINAPI SsmClearCallerId(int ch);
int WINAPI SsmClearCallerIdEx(int ch);


//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@ CALL OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int WINAPI SsmPickup(int ch);
int WINAPI SsmCheckActualPickup(int ch);
int WINAPI SsmSetPickupNow(int ch, BOOL bFlag);
int WINAPI SsmHangup(int ch);
int WINAPI SsmAutoDial(int ch, LPSTR szPhoNum);
int WINAPI SsmAutoDialEx(int ch, LPSTR szPhoNum , WORD wParam);
int WINAPI SsmChkAutoDial(int ch);
int WINAPI SsmGetAutoDialFailureReason(int ch);
int WINAPI SsmGetBlockReason(int ch);
int WINAPI SsmGetChState(int ch);

int WINAPI SsmSetPlayDest(int ch, int nSelDest);
int WINAPI SsmSetRecBack(int ch, int nRecBack);

int WINAPI SsmSearchIdleCallOutCh(WORD wSearchMode, DWORD dwPrecedence);
int WINAPI SsmSetAutoCallDirection(int ch, BOOL bEnAutoCall, int nDirection);
int WINAPI SsmGetAutoCallDirection(int ch, int* pnDirection);
int WINAPI SsmAppendPhoNum(int ch, LPSTR szPhoNum);
int WINAPI SsmGetPendingReason(int ch);
long WINAPI SsmGetChStateKeepTime(int ch);
int WINAPI SsmGetPhoNumStr(int ch, LPSTR pszPhoNum);
char* WINAPI SsmGetPhoNumStrA(int ch);
int WINAPI SsmGetPhoNumLen(int ch);

int WINAPI SsmGet1stPhoNumStr(int ch, LPSTR pszPhoNum);
char* WINAPI SsmGet1stPhoNumStrA(int ch);
int WINAPI SsmGet1stPhoNumLen(int ch);

int WINAPI SsmEnableAutoSendKB(int ch, BOOL bEnable);
int WINAPI SsmGetAutoSendKBFlag(int ch);
int WINAPI SsmSetKB(int ch, BYTE btSigKB);
int WINAPI SsmSetKD(int ch, BYTE btSigKD);
int WINAPI SsmSetKA(int ch, BYTE btSigKA);
int WINAPI SsmSetTxCallerId(int ch, LPSTR pszTxCallerId);
int WINAPI SsmGetTxCallerId(int ch, LPSTR pszTxCallerId);
int WINAPI SsmGetKA(int ch);
int WINAPI SsmGetKB(int ch);
int WINAPI SsmGetKD(int ch);

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//	Following functions are newly appended by cxg for applications using SS7
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

int WINAPI SsmBlockLocalCh(int ch);
int WINAPI SsmUnblockLocalCh(int ch);
int WINAPI SsmQueryLocalChBlockState(int ch, PDWORD pdwBlockState);

int WINAPI SsmBlockLocalPCM(int nLocalPcmNo);
int WINAPI SsmUnblockLocalPCM(int nLocalPcmNo);
int WINAPI SsmQueryLocalPCMBlockState(int nLocalPcmNo, PDWORD pdwBlockState);

int WINAPI SsmQueryOpBlockRemoteCh(int ch);
int WINAPI SsmBlockRemoteCh(int ch);
int WINAPI SsmUnblockRemoteCh(int ch);
int WINAPI SsmGetRemoteChBlockStatus(int ch);

int WINAPI SsmBlockRemotePCM(int nLocalPcmNo, DWORD dwBlockMode);
int WINAPI SsmUnblockRemotePCM(int nLocalPcmNo, DWORD dwUnblockMode);
int WINAPI SsmGetRemotePCMBlockStatus(int nLocalPcmNo, DWORD dwBlockMode);

BOOL WINAPI SsmGetWaitAutoDialAnswerTime(WORD * pwSeconds);
BOOL WINAPI SsmSetWaitAutoDialAnswerTime(WORD wSeconds);

//Ver3.5.26.
//+++BEGIN+++ Added by xxb for 模拟电话线相对能量算法检测被叫摘机不适用于调用SsmTxDtmf()外拨及二次拨号,2003.3.7
int WINAPI SsmStartPickupAnalyze(int ch);
int WINAPI SsmGetPickup(int ch);
//+++END+++ Added by xxb for 模拟电话线相对能量算法检测被叫摘机不适用于调用SsmTxDtmf()外拨及二次拨号,2003.3.7

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@ ADAPTIVE FILTER OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int WINAPI SsmQueryOpEchoCanceller(int ch);
int WINAPI SsmSetEchoCanceller(int ch, BOOL bRun);
int WINAPI SsmGetEchoCancellerState(int ch);
int WINAPI SsmSetEchoCancellerStudy(int ch, BOOL bRun);
int WINAPI SsmGetEchoCancellerStudyState(int ch);
int WINAPI SsmGetEchoCancellerRatio(int ch);
int WINAPI SsmSaveEchoCancellerPara(int ch);
int WINAPI SsmSetEchoCancelDelaySize(int ch,WORD wSize);
WORD WINAPI SsmGetEchoCancelDelaySize(int ch);

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@ CT-BUS OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//int WINAPI SsmGetChBusInfo(int ch, PBUS_OP* p);
int WINAPI SsmListenTo(int ch1,int ch2);
int WINAPI SsmListenToEx(int ch1, int nVolume1, int ch2);
int WINAPI SsmStopListenTo(int ch1,int ch2);
int WINAPI SsmTalkWith(int ch1,int ch2);
int WINAPI SsmTalkWithEx(int ch1, int nVlm1, int ch2, int nVlm2);
int WINAPI SsmStopTalkWith(int ch1,int ch2);

void WINAPI PlayListen(DWORD dwBId, DWORD ch);
void WINAPI PlayListenNew(DWORD dwSpeakerCh, DWORD dwMonitorCh);
void WINAPI StopListen(DWORD dwBId);
void WINAPI StopListenNew(DWORD dwSpeakerCh);

int	WINAPI SsmLinkFrom(int ch1,int ch2);	//add by wangjiang 2002.12.28 for open conference
int WINAPI SsmStopLinkFrom(int ch1,int ch2);	//add by wangjiang 2002.12.28 for open conference
int WINAPI SsmLinkFromEx(int ch1, int nVolume1, int ch2); //add by wangjiang 2002.12.28 for open conference
int	WINAPI SsmLinkFromAllCh(int ch, int nVolume, int*nListenerTable,int nListenerNum);	//add by wangjiang 2002.12.28 for open conference
int	WINAPI SsmUnLinkFromAllCh(int ch, int*nListenerTable,int nListenerNum);	//add by wangjiang 2002.12.28 for open conference

int WINAPI	SsmLinkToBus(int ch,int ts);
int	WINAPI  SsmUnLinkToBus(int ch,int ts);
int WINAPI	SsmLinkFromBus(int ts,int ch);
int WINAPI	SsmLinkFromBusEx(int ts, int ch, int vlm);
int WINAPI	SsmUnLinkFromBus(int ts,int ch);
int WINAPI	SsmListenToPlay(int ch1, int vlm1, int ch2);
int WINAPI	SsmUnListenToPlay(int ch1, int ch2);

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@ CONFERENCE OPERATION  @@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
int WINAPI SsmCreateConfGroup(int nMaxMember, int nMaxSpeaker, int nMaxSpeaking, int nMaxSilenceTime);
int WINAPI SsmFreeConfGroup(int nGrpId);
int WINAPI SsmJoinConfGroup(int nGrpId, int ch, WORD wJoinMode, int nMixerVolume, BOOL bCreateAlways, BOOL bExitGrpAlways);
int WINAPI SsmExitConfGroup(int ch, BOOL bFreeGrpAlways);
int WINAPI SsmGetConfCfgInfo(PWORD pwMaxMember, PWORD pwMaxSpeaker, PWORD pwMaxSpeaking, PWORD pwMaxSilenceTime);
int WINAPI SsmGetTotalConfGroup();
int WINAPI SsmGetConfGrpId(int* pnGrpId);
int WINAPI SsmGetConfGrpCfgInfo(int nGrpId, PWORD pwMaxMember, PWORD pwMaxSpeaker, PWORD pwMaxSpeaking, PWORD pwMaxSilenceTime);
int WINAPI SsmGetConfGrpInfo(int nGrpId, PWORD pwTotalMember, PWORD pwTotalSpeaker, PWORD pwTotalSpeaking);
int WINAPI SsmGetConfGrpMmbrId(int nGrpId, int* pnMmbrId);
int WINAPI SsmGetConfGrpMmbrInfo(int nGrpId, int nMmbrId, int* pnAppCh, PWORD pwJoinMode, PWORD pwIsSpeaking, PDWORD pdwSilenceTime);
int WINAPI SsmGetConfChInfo(int ch, int * pnGrpId, int * pnMmbrId, PWORD pwJoinMode, PWORD pwIsSpeaking, PDWORD pdwSilenceTime);

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@ DRIVER  Ver. 1.x COMPATIBLE FUNCTIONS  @@@@@@@@@@@@@@@@@@@@@@@@
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
DWORD WINAPI InitCard(DWORD add1,DWORD add2,DWORD add3,DWORD add4,DWORD add5,
		DWORD add6,DWORD

[quote=“tengulre”]Hi,
I have a voice card,but asterisk can’t support it! I want use it, how do it!
[/quote]
In my opinion it would be more usefull to let us know what brand/type it is.

And if it it’s known not to work, why bother…

as title

it sounds to me you would have to write your own driver wrapper to talk to zaptel. what kind of card is this?

Asterisk does not support this card afaik.

/Z