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

📄 voip.h

📁 telcobridges voip develop
💻 H
📖 第 1 页 / 共 3 页
字号:
/*--------------------------------------------------------------------------------------------------------------------------------
 |
 |	Project:    	VOIP sample
 |
 |	Filename:   	voip.h
 |
 |	Copyright:  	TelcoBridges 2002-2004, All Rights Reserved
 |
 |	Description:	This file contains structures used by the voip project.
 |
 |	Notes:      	Tabs = 4
 |
 *-------------------------------------------------------------------------------------------------------------------------------
 |
 |	Revision:   	$Revision: 1.68.2.1 $
 |
 *------------------------------------------------------------------------------------------------------------------------------*/


/*--------------------------------------------------------------------------------------------------------------------------------
 |  Define header file
 *------------------------------------------------------------------------------------------------------------------------------*/
#ifndef __VOIP_H__
#define __VOIP_H__


/*--------------------------------------------------------------------------------------------------------------------------------
 |  C++ support
 *------------------------------------------------------------------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */


/*--------------------------------------------------------------------------------------------------------------------------------
 |  Global variables
 *------------------------------------------------------------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------------------------------------------------------------
 |  Defines
 *------------------------------------------------------------------------------------------------------------------------------*/

/* String defines */
#define VOIP_APPLICATION_NAME					"voip"
#define VOIP_DEFAULT_CONFIG_FILE_NAME			"config.txt"
#define VOIP_DEFAULT_STREAM_SOCKET_IP_ADDRESS	"192.168.0.1"

/* Limits and other values defined */
#define VOIP_MAX_CONFIG_NAME_MAX_LENGTH			64
#define VOIP_MAX_ADAPTERS						16
#define VOIP_MAX_TRUNK_PER_ADAPTER				64
#define VOIP_MAX_TIMESLOT_PER_E1_TRUNK			31
#define VOIP_MAX_TIMESLOT_PER_T1_TRUNK			24
#define VOIP_MAX_TIMESLOT_PER_TRUNK				32
#define VOIP_MAX_RES_PER_TRUNK					VOIP_MAX_TIMESLOT_PER_TRUNK
#define VOIP_MAX_TRUNK_RES						(VOIP_MAX_TRUNK_PER_ADAPTER * VOIP_MAX_RES_PER_TRUNK)
#define VOIP_MAX_MBL_PORT_PER_ADAPTER			4	/* Can be increased up to 16 for full TB640-SW support, was reduced to save RAM */
#define VOIP_MAX_STREAM_PER_MBL_PORT			16
#define VOIP_MAX_TIMESLOT_PER_MBL_STREAM		128
#define VOIP_MAX_RES_PER_MBL_PORT				(VOIP_MAX_STREAM_PER_MBL_PORT * VOIP_MAX_TIMESLOT_PER_MBL_STREAM)
#define VOIP_MAX_CONNECTION_PER_ADAPTER			4096
#define VOIP_MAX_CONNECTION_IDX_PER_ADAPTER		(VOIP_MAX_CONNECTION_PER_ADAPTER * 2)
#define VOIP_CONFIG_FILE_LINE_LENGTH			1024
#define VOIP_MAX_IDLE_CODE_VALUE				127
#define VOIP_MAX_BERT_FIXED_PATTERN				0xFF
#define VOIP_MAX_BERT_RES						1
#define VOIP_MAX_STREAM_RES						(TB640_STREAM_MAX_PORTS * 2)
#define VOIP_MAX_VP_GROUP						(404 * 6 * 2) /* 404 channels per device * 6 devices */
#define VOIP_MAX_VP_RES_PER_GROUP				2
#define VOIP_MAX_VP_RES							(VOIP_MAX_VP_GROUP * VOIP_MAX_VP_RES_PER_GROUP)
#define VOIP_MAX_PATH_DESC_PER_CONNECTION		2
#define VOIP_MAX_RES_PER_ADAPTER				(VOIP_MAX_BERT_RES + VOIP_MAX_TRUNK_RES + VOIP_MAX_STREAM_RES + VOIP_MAX_VP_GROUP + VOIP_MAX_VP_RES)
#define VOIP_MAX_PROMPTS						256
#define VOIP_MAX_RAW_DATA_FILES					256
#define VOIP_PATH_NAME_MAX_LENGTH				256
#define VOIP_TRUNK_NAME_MAX_LENGTH				64
#define VOIP_MBL_PORT_NAME_MAX_LENGTH			64
#define VOIP_PROMPT_NAME_MAX_LENGTH				64
#define VOIP_RAW_DATA_FILE_NAME_MAX_LENGTH		64
#define VOIP_MAX_LOG_LINE_LENGTH				256
#define VOIP_CLI_MAX_LOG_FILE_SIZE				TBX_CLI_TOOLS_CLI_DEFAULT_MAX_LOG_FILE_SIZE
#define VOIP_STRESS_TEST_MAX_CONNECTIONS_PER_LOOP			25	/* Every 10ms -> 2500 connections per second max */
#define VOIP_STRESS_TEST_CONNECTIONS_PER_SEC_AVERAGE_TIME	20	/* The bigger, the longer the nb connections per second average is updated */
#define VOIP_STRESS_TEST_FIRST_IP_PORT			20000
#define VOIP_STRESS_TEST_LAST_IP_PORT			(VOIP_STRESS_TEST_FIRST_IP_PORT + VOIP_MAX_CONNECTION_PER_ADAPTER * 2)
#define VOIP_STRESS_TEST_IP_PORT_COUNT			(VOIP_STRESS_TEST_LAST_IP_PORT - VOIP_STRESS_TEST_FIRST_IP_PORT + 1)
#define VOIP_STRESS_TEST_BER_CONN_DUR_MSEC		(5 * 1000)
#define VOIP_STRESS_TEST_BER_RESET_TMO_MSEC		(2 * 1000)
#define VOIP_STRESS_TEST_MAX_BER_ERROR_ACCEPTED	200
#define VOIP_MAX_STRESS_TEST_PACKET_TYPE		25
#define VOIP_MAX_STEPS_PER_ADAPTER				100
#define VOIP_DEMO_TITLE_MAX_LENGTH				256
#define VOIP_STRESS_TEST_CLEANUP_RETRY_COUNT	5
#define VOIP_DEMO_CLEANUP_RETRY_COUNT			5

#define VOIP_DURATION_INFINITE					((TBX_UINT32)-1)
#define VOIP_RAW_DATA_FILE_PACKET_SIZE			TBX_STREAM_LIB_PACKET_SIZE_1280	/* equivalent to 160ms */


/* Timeouts */
#define VOIP_TIMER_GRANULARITY_MS				100
#define VOIP_TIMER_MAX_TIME_MS					(1000*VOIP_TIMER_GRANULARITY_MS)
#define VOIP_TIMER_POLL_PERIOD_MS				(VOIP_TIMER_GRANULARITY_MS / 2)
#define VOIP_STATES_UPDATE_DELAY_MS				500
#define VOIP_STATS_UPDATE_DELAY_SECOND			1
#define VOIP_STRESS_TEST_LOOP_DELAY_MS			10
#define VOIP_STRESS_TEST_CPS_CHECK_DELAY_MS		25
#define VOIP_STRESS_TEST_CLEANUP_DELAY_MS		1000
#define VOIP_HOST_LIB_RECEIVE_TIMEOUT_MS		VOIP_TIMER_GRANULARITY_MS
#define VOIP_DEFAULT_NETWORK_DOWN_DELAY_MS		2000
#define VOIP_DEFAULT_ADAPTER_DOWN_DELAY_MS		5000
#define VOIP_DEFAULT_POLL_DELAY_MS				500
#define VOIP_STREAM_SERVER_DISCOVERY_TIMEOUT	1000
#define VOIP_DEMO_LOOP_DELAY_MS					VOIP_TIMER_GRANULARITY_MS
#define VOIP_DEMO_CLEANUP_DELAY_MS				1000

/* State machine timeouts */
#define VOIP_ADAPTER_STATE_NOT_USED_TIMEOUT_MS			0xFFFFFFFF
#define VOIP_ADAPTER_STATE_NOT_READY_TIMEOUT_MS			0xFFFFFFFF
#define VOIP_ADAPTER_STATE_SYNC_TIMEOUT_MS				15000	/* Should not happen... Adapter down should happen before in case of problem */
#define VOIP_ADAPTER_STATE_CONFIGURING_CLEAR_TIMEOUT_MS	30000	/* Should not happen... Adapter down should happen before in case of problem */
#define VOIP_ADAPTER_STATE_CONFIGURING_ALLOC_TIMEOUT_MS	60000	/* Should not happen... Adapter down should happen before in case of problem */
#define VOIP_ADAPTER_STATE_READY_TIMEOUT_MS				15000
#define VOIP_ADAPTER_STATE_CLEAR_TIMEOUT_MS				20000	/* Should not happen... Adapter down should happen before in case of problem */

/* Other defines */
#ifdef SOLARIS8
#define VOIP_USER_CONTEXT	0x55708A0000000000ll
#else
#define VOIP_USER_CONTEXT	0x55708A0000000000
#endif

/*
 * Messages used internally by VoIP application
 */

/* Message sent every time a state is entered */
#define	VOIP_MSG_ID_NOTIF_STATE_ENTER				TBX_MSG_ID_GEN (TBX_ID_CLASS_TBX_APPS_VOIP_PRIVATE, 0x000)

/* Timeout occurred for an adapter in current state machine's state */
#define	VOIP_MSG_ID_NOTIF_STATE_TIMEOUT				TBX_MSG_ID_GEN (TBX_ID_CLASS_TBX_APPS_VOIP_PRIVATE, 0x001)

/* Stop using an adapter with this current application */
#define	VOIP_MSG_ID_NOTIF_STOP_USING				TBX_MSG_ID_GEN (TBX_ID_CLASS_TBX_APPS_VOIP_PRIVATE, 0x002)

/* Apply new adapter configuration */
#define	VOIP_MSG_ID_NOTIF_APPLY_NEW_CONFIG			TBX_MSG_ID_GEN (TBX_ID_CLASS_TBX_APPS_VOIP_PRIVATE, 0x003)

/* Update all states */
#define	VOIP_MSG_ID_NOTIF_UPDATE_ALL_STATES			TBX_MSG_ID_GEN (TBX_ID_CLASS_TBX_APPS_VOIP_PRIVATE, 0x004)

/* Message used to inform an a state machine that some states have changes */
#define	VOIP_MSG_ID_NOTIF_RECHECK_STATES			TBX_MSG_ID_GEN (TBX_ID_CLASS_TBX_APPS_VOIP_PRIVATE, 0x005)

/* Indicate that an adapter can now be set active*/
#define	VOIP_MSG_ID_NOTIF_ADAPTER_ACTIVATED_CHANGED	TBX_MSG_ID_GEN (TBX_ID_CLASS_TBX_APPS_VOIP_PRIVATE, 0x006)


/*--------------------------------------------------------------------------------------------------------------------------------
 |  Types
 *------------------------------------------------------------------------------------------------------------------------------*/

/*
 * Adapter state machine's states
 */
typedef enum _VOIP_ADAPTER_STATE
{
	VOIP_ADAPTER_STATE_NOT_USED				= 0x00000000,	/* Adapter is not used in current configuration */
	VOIP_ADAPTER_STATE_NOT_READY			= 0x00000100,	/* Adapter is not connected */
	VOIP_ADAPTER_STATE_SYNC					= 0x00000200,	/* We are actually synchronizing with adapter's configuration */
	VOIP_ADAPTER_STATE_CONFIGURING_CLEAR	= 0x00000300,	/* We are actually configuring the adapter with it's assigned configuration */
	VOIP_ADAPTER_STATE_CONFIGURING_ALLOC	= 0x00000400,	/* We are actually configuring the adapter with it's assigned configuration */
	VOIP_ADAPTER_STATE_READY				= 0x00000500,	/* Adapter is ready and configured */
	VOIP_ADAPTER_STATE_CLEAR				= 0x00000600	/* We are actually clearing all configuration from the adapter */

} VOIP_ADAPTER_STATE, *PVOIP_ADAPTER_STATE;

/*
 * Type of resources
 */
typedef enum _VOIP_RESOURCE_TYPE
{
	VOIP_RESOURCE_TYPE_TRUNK,
	VOIP_RESOURCE_TYPE_MBL_PORT,
	VOIP_RESOURCE_TYPE_BERT,
	VOIP_RESOURCE_TYPE_STREAM_SOCKET,
	VOIP_RESOURCE_TYPE_PROMPT,
	VOIP_RESOURCE_TYPE_RAW_DATA_FILE,
	VOIP_RESOURCE_TYPE_INVALID

} VOIP_RESOURCE_TYPE, *PVOIP_RESOURCE_TYPE;

/*
 * Type of resources
 */
typedef enum _VOIP_RAW_DATAFILE_DIRECTION
{
	VOIP_RAW_DATAFILE_DIRECTION_REC,
	VOIP_RAW_DATAFILE_DIRECTION_PLAY,
	VOIP_RAW_DATAFILE_DIRECTION_REC_PLAY

} VOIP_RAW_DATAFILE_DIRECTION, *PVOIP_RAW_DATAFILE_DIRECTION;

/*--------------------------------------------------------------------------------------------------------------------------------
 |
 |  PFCT_VOIP_STATE_HANDLER		:	Prototype of a function that handles a message/event received within
 |									a specific state machine's state.
 |									The application must define one function per state machine's state
 |									based on this function prototype.
 |
 |	io_pStateMachineContext		:	Context for this state machine
 |	in_hMsg						:	Message received.
 |
 |  Note						:	The function must update content of io_pStateMachineContext
 |									according to the next state that needs to be processed.
 |
 |  Return        				:	~
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
typedef TBX_VOID (*PFCT_VOIP_STATE_HANDLER)
(
  IN_OUT	PTBX_VOID				io_pStateMachineContext,
  IN		TBX_MSG_HANDLE			in_hMsg
);

/* Sub-state when configuring and clearing adapter */
typedef enum _VOIP_ADAPTER_SUB_STATE
{
	VOIP_ADAPTER_SUB_STATE_1	= 1,	/* Configuring/clearing first step */
	VOIP_ADAPTER_SUB_STATE_2	= 2,	/* Configuring/clearing second step */
	VOIP_ADAPTER_SUB_STATE_3	= 3,	/* Configuring/clearing third step */
	VOIP_ADAPTER_SUB_STATE_DONE	= 99	/* Configuring/clearing done */

} VOIP_ADAPTER_SUB_STATE, *PVOIP_ADAPTER_SUB_STATE;

/* Clock configuration */
typedef struct _VOIP_CLOCK_CONFIG
{
	TBX_BOOL					fAllocated;

	/* Local references */
	TB640_CLK_DEFINITION		LocalRef1;
	TB640_CLK_DEFINITION		LocalRef2;
	TBX_BOOL					fLocalRefAutoFallback;

	/* Master clocking */
	TB640_MASTER_CLK			MasterClk;
	TB640_MASTER_ROLE			InitialMasterRole;

	/* Network reference */
	TB640_CLK_DEFINITION		NetRef1;
	TB640_CLK_DEFINITION		NetRef2;
	TB640_NETREF_FREQ_TYPE		NetRef1Freq;
	TB640_NETREF_FREQ_TYPE		NetRef2Freq;

	TBX_BOOL					fMBLSystemClockingEnabled;

} VOIP_CLOCK_CONFIG, *PVOIP_CLOCK_CONFIG;

/* Clock status */
typedef struct _VOIP_CLOCK_STATUS
{
	TB640_CLK_DEFINITION	ClockRef;

	TBX_BOOL				fNetref1;
	TBX_BOOL				fNetref2;

	TBX_BOOL				fRequireHostIntervention;
	TBX_BOOL				fMBLSystemClockingEnabled;

} VOIP_CLOCK_STATUS, *PVOIP_CLOCK_STATUS;

/* Generic resource context */
typedef struct _VOIP_RES
{
	TB640_RESOURCE_HANDLE		hRes;
	TBX_BOOLEAN					fAllocated;
	TBX_BOOLEAN					fMustClear;
	TBX_BOOLEAN					fUsed;
	TBX_BOOLEAN					fReserved;
	TBX_UINT32					un32ConnectionId;

} VOIP_RES, *PVOIP_RES;

/* BERT resource configuration */
typedef struct _VOIP_BERT_RES
{
	VOIP_RES					Common;

	/* Resource parameters */
	TB640_BERT_PARAMS			Params;

} VOIP_BERT_RES, *PVOIP_BERT_RES;

/* Trunk resource configuration */
typedef struct _VOIP_TRUNK_RES
{
	VOIP_RES					Common;

	/* Resource parameters */
	TB640_RESOURCE_TYPE			ResType;
	TBX_UINT32					un32TimeSlot;
	TB640_RESOURCE_CHANNEL_RATE	ChannelRate;
	TBX_UINT32					un32Channel;

} VOIP_TRUNK_RES, *PVOIP_TRUNK_RES;

typedef struct _TB640_MBL_RES_PARAMS_COMPACT
{
	TB640_MBL_PORT_HANDLE	hPort;
	TBX_UINT8				ResType;	/* Cast to TB640_RESOURCE_TYPE */
	TBX_UINT8				un8Stream;
	TBX_UINT8				un8TimeSlot;

} TB640_MBL_RES_PARAMS_COMPACT, *PTB640_MBL_RES_PARAMS_COMPACT;

/* MBL resource configuration */
typedef struct _VOIP_MBL_RES
{
	VOIP_RES						Common;

	/* Resource parameters */
	TB640_MBL_RES_PARAMS_COMPACT	Params;

} VOIP_MBL_RES, *PVOIP_MBL_RES;

/* Trunk configuration */
typedef struct _VOIP_TRUNK_CONFIG
{
	TBX_BOOL					fAllocated;
	TBX_BOOL					fActivated;
	TBX_BOOL					fMustClear;
	TBX_UINT32					un32TrunkNumber;
	TB640_TRUNK_HANDLE			hTrunk;

	/* Name of this trunk within this adapter setup */
	TBX_CHAR					szTrunkName[ VOIP_TRUNK_NAME_MAX_LENGTH ];

	TB640_TRUNK_CFG				TrunkCfg;
	VOIP_TRUNK_RES				aRes[ VOIP_MAX_RES_PER_TRUNK ];
	TBX_UINT32					un32MaxTimeSlot;

} VOIP_TRUNK_CONFIG, *PVOIP_TRUNK_CONFIG;

/* Trunk status */
typedef struct _VOIP_TRUNK_STATUS
{
	TB640_TRUNK_STATES			States;
	TB640_PMALARMMGR_COUNTER	Counters;

} VOIP_TRUNK_STATUS, *PVOIP_TRUNK_STATUS;

/* MBL port configuration */
typedef struct _VOIP_MBL_PORT_CONFIG
{
	TBX_BOOL					fAllocated;
	TBX_BOOL					fActivated;
	TBX_BOOL					fMustClear;
	TBX_UINT32					un32PortNumber;
	TB640_TRUNK_HANDLE			hPort;

	/* Name of this port within this adapter setup */
	TBX_CHAR					szPortName[ VOIP_MBL_PORT_NAME_MAX_LENGTH ];

	TBX_UINT32					un32Port;
	TBX_BOOL					fAutoLinkSwitchover;
	TBX_BOOL					fPropagateLinkSwitchover;
	TBX_UINT64					un64UserContext1;
	TBX_UINT64					un64UserContext2;
	VOIP_MBL_RES				aRes[ VOIP_MAX_STREAM_PER_MBL_PORT ][ VOIP_MAX_TIMESLOT_PER_MBL_STREAM ];

} VOIP_MBL_PORT_CONFIG, *PVOIP_MBL_PORT_CONFIG;

/* Stream resource configuration */
typedef struct _VOIP_STREAM_RES
{
	VOIP_RES					Common;

	/* Resource parameters */
	TB640_STREAM_RES_PARAMS		Params;

} VOIP_STREAM_RES, *PVOIP_STREAM_RES;

typedef struct _VOIP_VP_GROUP	VOIP_VP_GROUP, *PVOIP_VP_GROUP;

/* Voice processing resource configuration */
typedef struct _VOIP_VP_RES
{
	VOIP_RES					Common;

	PVOIP_VP_GROUP				pVpGroup;

	/* Resource parameters */
	TB640_VP_GROUP_RES_PARAMS	Params;

} VOIP_VP_RES, *PVOIP_VP_RES;

/* Voice processing group configuration */
struct _VOIP_VP_GROUP
{
	VOIP_RES					Common;

	/* Resource parameters */
	TB640_VP_GROUP_PARAMS		GroupParams;
	TBX_UINT32					un32NbResources;
	VOIP_VP_RES					aRes[ VOIP_MAX_VP_RES_PER_GROUP ];
};

/* Voice processing group 0 parameters */
typedef struct _VOIP_VP_GRP0_PARAMS
{
	/* TDM tone params */
	TBX_BOOL					fTdmToneParamsAvailable;
	TBX_BOOL					fTdmToneGenerationEnabled;
	TBX_BOOL					fTdmToneDetectionEnabled;
	TBX_BOOL					fTdmToneShortDetection;
	TBX_BOOL					fTdmToneSuppressionEnabled;
	TBX_BOOL					fTdmToneCompleteSuppression;

	/* TDM AGC params */
	TBX_BOOL					fTdmAgcParamsAvailable;
	TBX_BOOL					fTdmAgcEnabled;

	/* TDM VAD params */
	TBX_BOOL					fTdmVadParamsAvailable;
	TBX_BOOL					fTdmVadEnabled;

	/* Stream params */
	TBX_BOOL					fStreamParamsAvailable;
	TBX_STREAM_PACKET_DURATION	StreamPacketDurationMs;

	/* Stream AGC params */
	TBX_BOOL					fStreamAgcParamsAvailable;
	TBX_BOOL					fStreamAgcEnabled;

	/* Stream tone params */
	TBX_BOOL					fStreamToneParamsAvailable;
	TBX_BOOL					fStreamToneGenerationEnabled;
	TBX_BOOL					fStreamToneDetectionEnabled;
	TBX_BOOL					fStreamToneShortDetection;
	TBX_BOOL					fStreamToneSuppressionEnabled;
	TBX_BOOL					fStreamToneCompleteSuppression;

	/* Stream jitter buffer params */
	TBX_BOOL					fStreamJitterBufferParamsAvailable;
	TBX_UINT32					un32StreamJitterBufferSize;

} VOIP_VP_GRP0_PARAMS, *PVOIP_VP_GRP0_PARAMS;

/* Voice processing group 1 parameters */
typedef struct _VOIP_VP_GRP1_PARAMS
{

⌨️ 快捷键说明

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