📄 voip.h
字号:
/*--------------------------------------------------------------------------------------------------------------------------------
|
| 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 + -