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

📄 tvcdrvapi.h

📁 上海维卡的事件驱动模式示例
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef _TVC_DRVAPI_H_
#define _TVC_DRVAPI_H_

#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 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;
#endif
#endif	
#endif

#ifndef WINAPI
#define WINAPI __stdcall
#endif

typedef void (CALLBACK* EVENTCALLBACKPROC)(WORD wEvent, int nReference, DWORD dwParam);

typedef void (CALLBACK* WAITDTMFPROC)(int ch,char *szWaitStr,int nWaitEndResult,char *szRxDtmfStr);
typedef void (CALLBACK* DUALBUFFRECORDPROC)(int ch,UCHAR ucRecStopReason,LPBYTE pBuff,DWORD dwBytes,PVOID pParam);
typedef void (CALLBACK*  TVCRECMEMPROC) (int ch, LPBYTE lpData, DWORD dwDataLen) ;

// 会议属性
//////////////////////////////////////////////////////////////////////////
#define CONF_ATTRIB_DTMFNOTONBUS	0x00000001 // 成员通道按键音是否上总线
#define CONF_ATTRIB_TONENOTONBUS	0x00000002 // 成员通道信号音是否上总线
//////////////////////////////////////////////////////////////////////////
// 通道标志
#define CH_FLAG_DTMFSTOPPLAY		0x00000001 // 有Dtmf时停止放音
#define CH_FLAG_DTMFSTOPSENDTONE	0x00000002 // 有Dtmf时停止发送信号音
#define CH_FLAG_HANGUPSTOPPLAY		0x00000004 // 挂机时停止放音
#define CH_FLAG_BARGEINSTOPPLAY		0x00000008 // 有人说话时停止放音
#define CH_FLAG_AUTOSENDDIALTONE	0x00000010 // 坐席通道摘机时是否自动发送拨号音
#define CH_FLAG_PLAYTOBUS			0x00000040 //放音是否上总线
#define CH_FLAG_HANGUPSTOPREC		0x00000080 //挂机时停止录音
//////////////////////////////////////////////////////////////////////////



//----------------------------------------事件轮询BG------------------------------//
enum{
	APIPcm_NOSIG=0,
	APIPcm_SS1,
	APIPcm_ISDNU,
	APIPcm_ISDNN,
	APIPcm_TUP,
	APIPcm_ISUP
};

enum
{
	NO_EVENT,		// 无事件方式
	EVENT_POLLING,	//事件轮询
	EVENT_CALLBACK, //事件回调
	EVENT_MESSAGE	//windows消息
};
typedef struct  {
	DWORD  dwWorkMode;
	LPVOID lpHandlerParam;
	DWORD  dwOutCondition;
	DWORD  dwOutParamVal;
}EVENT_SET,*PEVENT_SET;

typedef struct{
	WORD	wEventCode;		//事件代码
	int		nReference;		//通道号(...)
	DWORD	dwParam;		//通道状态.输出参数(...)
}TVCEVENTMSG,*PTVCEVENTMSG;

//
////过滤事件队列
//typedef struct  {
//	TVCEVENTMSG	TvcMsg;
//	bool	bEnable;
//}FILTEREVENT,*PFILTEREVENT;

//主要事件
enum
{
		//Dtmf接收
		TvcE_Dtmf_Geted=0x0000,			//Dtmf字符接收缓冲写入了新的Dtmf字符
		TvcE_WaitDtmf_End=0x0001,					//接收指定Dtmf字符串的任务结束
		
		//Dtmf发送	
		TvcE_SendDtmf_End=0x0002,					//发送Dtmf任务结束
		
		//发送闪断
		TvcE_SendFlash_End=0x0003,				//发送闪断任务结束事件
		
		//放音
		TvcE_Play_End=0x0004,					//放音任务结束
		//录音
		TvcE_Record_End=0x0005,				//录音任务结束
		
		//FSK发送
		TvcE_SendFSK_End=0x0006,					//发送FSK任务结束事件

		TvcE_LineVoltage_Changed=0x0007,			//线路电压变化
		//呼叫控制
		TvcE_ChState_Changed=0x0008,					//道状态发生变化 
	
		TvcE_RingDt_Changed=0x0009,					//铃流电平变化
		TvcE_RingCount_Changed=0x000a,					//振铃计数变化
		TvcE_CallerID_Geted=0x000b,					//接收主叫号码
		TvcE_CalleeID_Geted=0x000c,					//被叫号码变化

		TvcE_Remote_Pickup=0x000d,				//模拟电话线相对能量算法检测被叫摘机
		
		//坐席
		TvcE_FlashCount_Changed=0x000e,				//flash计数发生变化
		TvcE_HookState_Changed=0x000f,					//内线Hook(摘机、挂机)状态发生变化

		//信号音检测
		TvcE_BusyTone_Changed=0x0010,					//忙音计数变化
		TvcE_EchoTone_Changed=0x0011,					//检测到一个完整的回铃音周期 
		TvcE_DialTone_Detected=0x0012,					//发现拨号音	
		TvcE_BargeIn_Detected=0x0013,					//检测到BargeIn(检测到 BargeIn TvcGetNoSoundTime 将重新计数)
		TvcE_NoSound_Found=0x0014,					//检测到线路无声
		TvcE_SpecFreq_Found=0x0015,				//指定检测的频率发现
		TvcE_Last_Api_Event=0x0100,		
};



//----------------------------------------事件轮询ED------------------------------//


enum{
	plyrec_always,
	plyrec_stopbytime,
	plyrec_stopbybyte,
};
enum
{
	tvc_voc_alaw = 0x1,
	tvc_voc_ulaw = 0x2,
	tvc_voc_adpcm = 0x4,
	tvc_voc_pcm16 = 0x5,		//线性16位语音格式
	tvc_voc_pcm8 = 0x6,			//线性8位语音格式
	tvc_voc_gsm = 0x31,
};
enum _CH_TYPE_{
	ANALOG_REC		= 0,
	ANALOG_USER		= 1,
	ANALOG_TRK		= 2,
	DIGITAL_SS1		= 3,
	DIGITAL_ISDNU	= 4,
	DIGITAL_ISDNN	= 5,
	DIGITAL_SS7TUP	= 6,
	DIGITAL_SS7ISUP	= 7,
	DIGITAL_NOSIG	= 8,
	EX_SOFTFAX		= 0x80,		//外部的传真通道
	CH_NULL			= 0xff,
};

enum _TONE_TYPE_{
	 DIAL_TONE=0,		// 0: 拨号音; 
	 BUSY_TONE,
	 ECHO_TONE,
	 HANG_TONE,		 
	 USER_SELF_TONE=0xff,
};

enum _CH_STATE_{
	ch_free=0x0,	// 空闲
	ch_pickuped,	// 摘机
	ch_talking,		// 通话
	ch_ringing,		// 振铃
	ch_empty,		// 断线
	ch_wait_talk,	// 等对方摘机
	ch_dialout,		// 外拨拨号
	ch_dialfail,	// 外拨失败

	ch_callin,		// 数字通道有呼入
	ch_waithangup,	// 数字通道等待挂机
	ch_waitrelease,	// 数字通道等待释放

	ch_localblock,		// 本地闭塞
	ch_remoteblock,		// 远方闭塞
	ch_tup_reset,		//电路复位
	ch_waitappset,		//等等待应用程序设置KB
};

enum DIAL_STEP{
	adial_silence=0x100,		//无声
	adial_silnceafterecho,		//回铃后无声
	adial_busy,				//对方忙
	adial_nodialtone,		//没有拨号音
	adial_timeout,			//拨号超时	
	adial_nobody,			//无人接听
	adial_unavailable,
	adial_signal_error,			//收到未定义的信号
	adial_remote_refuse,			//呼出时对方挂机
	adial_code_empty,					//空号
	adial_pbx_busy,						//一号信令中的机键拥塞 ,ISND表示网络忙,TUP中表示交换机忙


	adial_ss1_mfc_timeout=0x180,		//MFC互控超时
	adial_ss1_waitack_timeout,			//等待对端应答超时	
	

	adial_tup_waitack_timeout=0x1a0,
	adial_tup_cgc,
	adial_tup_adail_fial,		//其它原因的呼叫失败
	adial_tup_blo,
	adial_tup_rsc,		//电路复原信号
	adial_tup_stb,		//用户长话忙
	adial_tup_slb,		//用户市话忙
	adial_tup_sec,		//机键拥塞
	adial_tup_unn,		//空号
	adial_tup_adi,		//地址消息不全
	adial_tup_los,		//LOS
	adial_tup_acb,		//	
	adial_tup_noreply,
};

// 等待挂机原因
enum WAIT_HANGUP_REASON{
	WH_NULL,
	WH_Busy,						// 忙音
	WH_CallerHangupWhenTalking,		// 通话中主叫挂机
	WH_CalleeHangupWhenTalking,		// SS7 通话中被叫挂机

	WH_ChNotAvailable,				//通道不可用
	WH_NetTimeout,				
	WH_RelTimeout,
	WR_ConTimeout,
};

// 主叫接收模式
enum{
	DTMF_MODE,
	FSK_MODE,
	AUTO_MODE,
};

// 通道加入电话会议的模式
enum CONF_MODE{
	CONF_SPEAK_ALWAYS,		// 总是具有发言权
	CONF_SPEAK_DYNAMIC,		// 具有动态发言权
	CONF_SPEAK_ONLY,		// 只有发言权,听不到其他通道的声音,用于对会议放音
	CONF_LISTEN,			// 没有发言权(听众)
	CONF_SPEAK_DTMF,		// 按键发言

	CONF_MAXMODE,
};

typedef struct _API_SYSTEM_INFO_{
	short  wTotalCh;
	unsigned char  ucMaxCfgBoard;
	unsigned char ucMaxUseableBoard;
	short  wVerMajor;		// 主版本号
	short  wVerMinor;		// 辅版本号
}APISYSTEMINFO,*PAPISYSTEMINFO;

typedef struct _API_BOARD_INFO_{
	unsigned short ucBoardModel;	// 板卡类型
	short wAccreditId;				// 客户ID
	short wChunnelOnBoard;			// 板卡上的总数
	unsigned long  uBoardSerial;	// 序列号
	char szBoardSerial[9];			// 板卡序列号
}APIBOARDINFO,*PAPIBOARDINFO;

typedef struct  {
	UCHAR mask;					// 0--一直录音,1--时间为准,2--字节为准
	int  dwRecStopTime;			// 单位字节
	int  dwRecStopBytes;		// 音位毫秒
	UCHAR ucRecFormat;			// 录音格式
	UCHAR ucWaveFileHead;		// 录音文件是否要WAVE HEAD
	UCHAR ucStopRecWhenHangUp;	// 当挂机时自动停止录音
	UCHAR ucRecVol;				// 录音音量
}RECORDCONFIG,*PRECORDCONFIG; 

enum{
		V08PCI=0x100,
		V08BPCI=0x180,
		V16PCI=0x200,
		V30PCI=0x300,
		V30PCI_SS1=0x320,
		V30PCI_ISDN=0x360,
		V30PCI_SS7=0x380,
		V60PCI=0x400,
		V60PCI_SS1=0x420,
		V60PCI_ISDN=0x460,
		V60PCI_SS7=0x480,
		V120PCI=0x500,
		V120PCI_SS1=0x520,
		V120PCI_ISDN=0x560,
		V120PCI_SS7=0x580,
};

int	WINAPI TvcLoadDrv(char *szIniFile,char *szIndexFile);
int WINAPI TvcLoadDrvA();
void WINAPI	TvcFreeDrv(void);
int	WINAPI TvcGetBoardInfo(int nBoardId,PAPIBOARDINFO pInfo);
int	WINAPI TvcGetDrvInfo(PAPISYSTEMINFO pInfo);
int WINAPI TvcGetChType(int ch);


int WINAPI TvcGetDtmfStr(int ch,PUCHAR pucDtmf,int Wanted ,UCHAR bisClr);
int WINAPI TvcClrRxDtmfBuf(int ch);
int WINAPI TvcCheckTxDtmf(int ch);
int WINAPI TvcStopTxDtmf(int ch);
int WINAPI TvcStartTxDtmf(int ch,char *szDtmf);
int WINAPI TvcSetTxDtmfPara(int ch,int iOnTime,int iOffTime);
int WINAPI TvcGetTxDtmfPara(int ch,int *iOnTime,int *iOffTime);
int WINAPI TvcSetRxDtmfDWLDT(int ch,UCHAR  bDisplay);
int WINAPI TvcSetRxDtmfIsOmitABCD(int ch,UCHAR  bisOmit);
int WINAPI TvcSetRxDtmfSensitive(int ch,int wLevel);


int WINAPI TvcSetTxTonePara(int ch,int wFreq1,int wFreq2);
int WINAPI TvcStopSendTone(int ch);
int WINAPI TvcStartSendTone(int ch,int nToneType,int OnTime,int OffTime);
int WINAPI TvcGetBusyCount(int ch);
int WINAPI TvcGetEchoCount(int ch);
int WINAPI TvcSetRxToneFreqPara(int ch,int  wFreq1,int wFreq2,int wBand1,int wBand2,int wRatio);
int WINAPI TvcSetBusyToneTimePara(int ch,int TimePeriod);
int WINAPI TvcSetEchoToneTimePara(int ch,int OnTime,int OffTime);
int WINAPI TvcClearBusyCount(int ch);
int WINAPI TvcClearEchoCount(int ch);
int WINAPI TvcGetBusyTime(int ch);
int WINAPI TvcGetEchoTime(int ch);


int WINAPI TvcPickUp(int ch);
int WINAPI TvcHangUp(int ch);
int WINAPI TvcGetChState(int ch);
int WINAPI TvcGetCallDirection(int ch);
int WINAPI TvcGetRingCount(int ch);
int WINAPI TvcGetRingDT(int ch);
int WINAPI TvcClearRingCount(int ch);
int WINAPI TvcGetChStateKeepTime(int ch);

int WINAPI TvcIsBargeIn(int ch);
int WINAPI TvcIsSound(int ch);
int WINAPI TvcGetNoSoundTime(int ch);
int WINAPI TvcGetNoSoundDtrTime(int ch);
int WINAPI TvcSetNoSoundDtrTime(int ch,int NoSoundTime);
int WINAPI TvcSetBargeInSensitive(int ch,int Sensitive);


int WINAPI TvcGetPolarCount(int ch);
int WINAPI TvcClearPolarCount(int ch);
int WINAPI TvcGetPolarState(int ch);

int WINAPI TvcSetPickupDtmrVoltage(int ch,int Voltage);
int WINAPI TvcSetOfflineDtmrVoltage(int ch,int Voltage);
int WINAPI TvcGetOfflineDtmrVoltage(int ch);
int WINAPI TvcGetPickUpDtmrVoltage(int ch);
int WINAPI TvcGetLineVoltage(int ch);
int WINAPI TvcSetIsIgnoreVoltage(int ch,UCHAR ucIsIgnore);

int WINAPI TvcGetCallerId(int ch,char *szBuf,int want);
int WINAPI TvcGetCallerIdLen(int ch);
int WINAPI TvcClrCallerIdBuf(int ch);
int WINAPI TvcSetCIDMode(int ch ,int Mode);

int WINAPI TvcSetLocalVol(int nBoard,int Vol);

int WINAPI TvcSetPreRecordPara(int ch,UCHAR  nRecType,UCHAR nVol,int dwTime );
int WINAPI TvcCheckRecord(int ch);
int WINAPI TvcStopRecord(int ch);
int WINAPI TvcStartFileRecord(int ch,char *szMasterFile,char *szSlaveFile);
int WINAPI TvcSetRecordPara(int ch,PRECORDCONFIG Rec);
int WINAPI TvcPauseRecord(int ch);
int WINAPI TvcRestartRecord(int ch);
int WINAPI TvcGetRecordTime(int ch);
int WINAPI TvcGetRecordBytes(int ch);
int WINAPI TvcSetRecAgc(int ch,UCHAR ucEnable);
int WINAPI TvcStartMemoryRecord(int ch,char *pBuf,int BlockSize,int StartOffset,int StopBytes);
int WINAPI TvcGetRecordOffset(int ch);
int WINAPI TvcStartFileRecordA(int ch,char *szMasterFile,char *szSlaveFile,	int  nRecFormat,DWORD dwStopBytes,DWORD dwStoptime,int nMask);
int WINAPI TvcSetRecVol(int ch,int Vol);
int WINAPI TvcSetDefaultRecFormat(int ch,int nFormat);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -