📄 voip_adapter_configure.c
字号:
TBX_UINT32 un32DstTrunkNb;
TBX_UINT32 un32DstMblPortNb;
TBX_UINT32 un32DstMblStreamNb;
TBX_UINT32 un32DstTimeSlot;
TBX_UINT32 un32PathDescCount;
TBX_CHAR szErr[128];
TBX_BOOL fFullDuplex;
/*---------------------------------------------------------------------------------------------------------------------------
| Code section
*--------------------------------------------------------------------------------------------------------------------------*/
CODE
{
/* Initialize local variables */
Result = TBX_RESULT_OK;
un32ConnectionIdx = (TBX_UINT32)-1;
un32ConnectionId = 0;
pVpGrp0Params = &in_pAdapterContext->pTargetConfig->VpGrp0Params;
pVpGrp1Params = &in_pAdapterContext->pTargetConfig->VpGrp1Params;
pVpGroup = NULL;
pStreamRes = NULL;
fFullDuplex = TBX_TRUE;
un32PathDescCount = 0;
/* Get free connection idx and reserved it */
for( un32Index = 0; un32Index < VOIP_MAX_CONNECTION_IDX_PER_ADAPTER; un32Index++ )
{
un32Index2 = ((in_pAdapterContext->pTargetConfig->un32ConnectionIdxReservedLast + un32Index + 1) % VOIP_MAX_CONNECTION_IDX_PER_ADAPTER);
if( in_pAdapterContext->pTargetConfig->aun32ConnectionIdxReserved[un32Index2] == 0 )
{
un32ConnectionIdx = un32Index2;
break;
}
}
if( un32Index >= VOIP_MAX_CONNECTION_IDX_PER_ADAPTER )
{
TBX_EXIT_ERROR( TBX_RESULT_NOT_FOUND, 0, "Failed to found free connection index!" );
}
if( in_pConnectionParams->Type == VOIP_CONNECTION_TYPE_0 )
{
/*
* Connection type 0 (prompt or raw data file connection)
*/
/* Create new connection identifier */
un32ConnectionId = VOIP_CREATE_CONNECTION_ID(VOIP_CONNECTION_TYPE_0, un32ConnectionIdx);
/*
* Create and fill new VP group context
*/
/* Get VP group context */
pVpGroup = TBXPoolOfBuffersAlloc
(
in_pAdapterContext->pTargetConfig->hPoolOfVpGroups,
(TBX_HASH_KEY)NULL
);
if( pVpGroup == NULL )
{
TBX_EXIT_ERROR( TBX_RESULT_FAIL, 0, "Maximum number of VP groups reached." );
}
/* Initialize voice processing resource context */
pVpGroup->Common.hRes = (TB640_VPGROUP_HANDLE)NULL;
pVpGroup->Common.un32ConnectionId = un32ConnectionId;
pVpGroup->Common.fAllocated = TBX_TRUE;
#ifdef VOIP_PROMPT_USE_GROUP1
{
/*
* Using voice processing group 1
*/
pVpGroup->GroupParams.GroupType = TB640_VP_GROUP_TYPE_1;
pVpGroup->GroupParams.Group0.GroupType = TB640_VP_GROUP_TYPE_1;
{
TB640_VP_GROUP1_CONF_PARAMS ConfParams;
TB640_VP_GROUP1_CONF_PARAMS_DEFAULT( &ConfParams, 1 );
memcpy( &pVpGroup->GroupParams.Group1.Conf, &ConfParams, sizeof(ConfParams) );
}
pVpGroup->un32NbResources = 2;
/*
* Stream resource
*/
pVpGroup->aRes[0].Params.Group1.ResType = TB640_VP_RES_TYPE_STREAM;
pVpGroup->aRes[0].Params.Group1.un64UserContext1 = un32ConnectionId;
pVpGroup->aRes[0].Params.Group1.un64UserContext2 = 0;
{
TB640_VP_GROUP1_STREAM_PARAMS StreamParams;
TB640_VP_GROUP1_STREAM_PARAMS_DEFAULT( &StreamParams );
/* Set all payload types to unused */
for (un32Count=0; un32Count<TB640_VP_GROUP1_MAX_PAYLOAD_TYPES; un32Count++)
{
StreamParams.aPacketProtocol[un32Count].PacketType = TBX_STREAM_PACKET_TYPE_UNKNOWN;
StreamParams.aPacketProtocol[un32Count].un8TxProtocolType = TBX_STREAM_PACKET_TYPE_UNKNOWN;
StreamParams.aPacketProtocol[un32Count].un8RxProtocolType = TBX_STREAM_PACKET_TYPE_UNKNOWN;
}
/* Set the appropriate payload types required */
un32Count = 0;
StreamParams.aPacketProtocol[un32Count].PacketType = TBX_STREAM_PACKET_TYPE_RFC2833;
StreamParams.aPacketProtocol[un32Count].un8TxProtocolType = TBX_STREAM_PACKET_TYPE_RFC2833;
StreamParams.aPacketProtocol[un32Count++].un8RxProtocolType = TBX_STREAM_PACKET_TYPE_RFC2833;
StreamParams.aPacketProtocol[un32Count].PacketType = TBX_STREAM_PACKET_TYPE_DTMF;
StreamParams.aPacketProtocol[un32Count].un8TxProtocolType = TBX_STREAM_PACKET_TYPE_DTMF;
StreamParams.aPacketProtocol[un32Count++].un8RxProtocolType = TBX_STREAM_PACKET_TYPE_DTMF;
StreamParams.aPacketProtocol[un32Count].PacketType = TBX_STREAM_PACKET_TYPE_DTMF_AAL2;
StreamParams.aPacketProtocol[un32Count].un8TxProtocolType = TBX_STREAM_PACKET_TYPE_DTMF_AAL2;
StreamParams.aPacketProtocol[un32Count++].un8RxProtocolType = TBX_STREAM_PACKET_TYPE_DTMF_AAL2;
StreamParams.aPacketProtocol[un32Count].PacketType = TBX_STREAM_PACKET_TYPE_COMFORT_NOISE;
StreamParams.aPacketProtocol[un32Count].un8TxProtocolType = TBX_STREAM_PACKET_TYPE_COMFORT_NOISE;
StreamParams.aPacketProtocol[un32Count++].un8RxProtocolType = TBX_STREAM_PACKET_TYPE_COMFORT_NOISE;
StreamParams.aPacketProtocol[un32Count].PacketType = TBX_STREAM_PACKET_TYPE_SECONDARY_SID;
StreamParams.aPacketProtocol[un32Count].un8TxProtocolType = TBX_STREAM_PACKET_TYPE_SECONDARY_SID;
StreamParams.aPacketProtocol[un32Count++].un8RxProtocolType = TBX_STREAM_PACKET_TYPE_SECONDARY_SID;
StreamParams.aPacketProtocol[un32Count].PacketType = TBX_STREAM_PACKET_TYPE_PCMA;
StreamParams.aPacketProtocol[un32Count].un8TxProtocolType = TBX_STREAM_PACKET_TYPE_PCMA;
StreamParams.aPacketProtocol[un32Count++].un8RxProtocolType = TBX_STREAM_PACKET_TYPE_PCMA;
memcpy( &pVpGroup->aRes[0].Params.Group1.Stream, &StreamParams, sizeof(StreamParams) );
}
pVpGroup->aRes[0].Params.Group1.Stream.Codec.CodecType = TBX_STREAM_PACKET_TYPE_PCMA;
switch( pVpGroup->aRes[0].Params.Group1.Stream.Codec.CodecType )
{
case TBX_STREAM_PACKET_TYPE_G723:
pVpGroup->aRes[0].Params.Group1.Stream.Codec.G723.fUseHighRateCodec = TBX_FALSE;
pVpGroup->aRes[0].Params.Group1.Stream.Codec.G723.fEnableDcRemoval = TBX_FALSE;
break;
case TBX_STREAM_PACKET_TYPE_G726_16:
case TBX_STREAM_PACKET_TYPE_G726_24:
case TBX_STREAM_PACKET_TYPE_G726_32:
case TBX_STREAM_PACKET_TYPE_G726_40:
pVpGroup->aRes[0].Params.Group1.Stream.Codec.G726.fUseIETFBitPacking = TBX_FALSE;
break;
case TBX_STREAM_PACKET_TYPE_AMR:
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Amr.SpeedRate = TBX_STREAM_AMR_RATE_12_2;
break;
case TBX_STREAM_PACKET_TYPE_SMV:
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Smv.CdmaParams.un8CodecMode = 0;
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Smv.CdmaParams.un8MaxRate = 0x04;
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Smv.CdmaParams.un8MinRate = 0x01;
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Smv.CdmaParams.un8Signaling = 0;
break;
case TBX_STREAM_PACKET_TYPE_EVRC:
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Evrc.CdmaParams.un8CodecMode = 0;
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Evrc.CdmaParams.un8MaxRate = 0x04;
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Evrc.CdmaParams.un8MinRate = 0x01;
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Evrc.CdmaParams.un8Signaling = 0;
break;
case TBX_STREAM_PACKET_TYPE_QCELP8:
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Qcelp8.CdmaParams.un8CodecMode = 0;
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Qcelp8.CdmaParams.un8MaxRate = 0x04;
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Qcelp8.CdmaParams.un8MinRate = 0x01;
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Qcelp8.CdmaParams.un8Signaling = 0;
break;
case TBX_STREAM_PACKET_TYPE_QCELP13:
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Qcelp13.CdmaParams.un8CodecMode = 0;
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Qcelp13.CdmaParams.un8MaxRate = 0x04;
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Qcelp13.CdmaParams.un8MinRate = 0x01;
pVpGroup->aRes[0].Params.Group1.Stream.Codec.Qcelp13.CdmaParams.un8Signaling = 0;
break;
default:
/* No parameters to initialize for the other stream packet types */
break;
}
pVpGroup->aRes[0].Params.Group1.Stream.PacketDurationMs = TBX_STREAM_PACKET_DURATION_20MS;
/*
* TDM resource
*/
pVpGroup->aRes[1].Params.Group1.ResType = TB640_VP_RES_TYPE_TDM;
pVpGroup->aRes[1].Params.Group1.un64UserContext1 = 0;
pVpGroup->aRes[1].Params.Group1.un64UserContext2 = 0;
{
TB640_VP_GROUP1_TDM_PARAMS TdmParams;
TB640_VP_GROUP1_TDM_PARAMS_DEFAULT( &TdmParams );
memcpy( &pVpGroup->aRes[1].Params.Group1.Tdm, &TdmParams, sizeof(TdmParams) );
}
}
#else
{
/*
* Using voice processing group 0
*/
pVpGroup->GroupParams.GroupType = TB640_VP_GROUP_TYPE_0;
pVpGroup->GroupParams.Group0.GroupType = TB640_VP_GROUP_TYPE_0;
{
TB640_VP_GROUP0_CONF_PARAMS ConfParams;
TB640_VP_GROUP0_FSK_RX_AUTO_PARAMS FskRxParams;
TB640_VP_GROUP0_CONF_PARAMS_DEFAULT( &ConfParams );
TB640_VP_GROUP0_FSK_RX_AUTO_PARAMS_DEFAULT( &FskRxParams );
memcpy (&pVpGroup->GroupParams.Group0.Conf, &ConfParams, sizeof(ConfParams));
memcpy (&pVpGroup->GroupParams.Group0.FskRxAuto, &FskRxParams, sizeof(FskRxParams));
}
pVpGroup->un32NbResources = 2;
pVpGroup->aRes[0].Params.Group0.ResType = TB640_VP_RES_TYPE_STREAM;
pVpGroup->aRes[0].Params.Group0.un64UserContext1 = un32ConnectionId;
pVpGroup->aRes[0].Params.Group0.un64UserContext2 = 0;
TB640_VP_GROUP0_STREAM_PARAMS_DEFAULT(&(pVpGroup->aRes[0].Params.Group0.Stream));
pVpGroup->aRes[0].Params.Group0.Stream.fPlaybackEnabled = in_pConnectionParams->Type0.fPlaybackEnabled;
pVpGroup->aRes[0].Params.Group0.Stream.fRecordEnabled = in_pConnectionParams->Type0.fRecordEnabled;
pVpGroup->aRes[0].Params.Group0.Stream.PacketType = TBX_STREAM_PACKET_TYPE_PCMA;
pVpGroup->aRes[0].Params.Group0.Stream.PacketDurationMs = TBX_STREAM_PACKET_DURATION_160MS;
pVpGroup->aRes[0].Params.Group0.Stream.un32JitterBufferSize = 3;
pVpGroup->aRes[0].Params.Group0.Stream.Agc.fEnabled = TBX_FALSE;
pVpGroup->aRes[0].Params.Group0.Stream.Tone.fGenerationEnabled = TBX_FALSE;
pVpGroup->aRes[0].Params.Group0.Stream.Tone.fDetectionEnabled = TBX_FALSE;
pVpGroup->aRes[0].Params.Group0.Stream.Tone.DetectionTypeMask = 0;
pVpGroup->aRes[0].Params.Group0.Stream.Tone.fSuppressionEnabled = TBX_FALSE;
pVpGroup->aRes[0].Params.Group0.Stream.Tone.CompleteSuppressMode= TB640_VP_GRP0_TONE_SUPPRESS_MODE_SILENCE;
pVpGroup->aRes[0].Params.Group0.Stream.Tone.fCompleteSuppression= TBX_FALSE;
pVpGroup->aRes[1].Params.Group0.ResType = TB640_VP_RES_TYPE_TDM;
pVpGroup->aRes[1].Params.Group0.un64UserContext1 = 0;
pVpGroup->aRes[1].Params.Group0.un64UserContext2 = 0;
//TB640_VP_GROUP0_TDM_PARAMS_DEFAULT(&(pVpGroup->aRes[1].Params.Group0.Tdm));
pVpGroup->aRes[1].Params.Group0.Tdm.Vad.fEnabled = TBX_FALSE;
pVpGroup->aRes[1].Params.Group0.Tdm.Agc.fEnabled = TBX_FALSE;
pVpGroup->aRes[1].Params.Group0.Tdm.Tone.fGenerationEnabled = TBX_FALSE;
pVpGroup->aRes[1].Params.Group0.Tdm.Tone.fDetectionEnabled = TBX_FALSE;
pVpGroup->aRes[1].Params.Group0.Tdm.Tone.DetectionTypeMask = 0;
pVpGroup->aRes[1].Params.Group0.Tdm.Tone.fSuppressionEnabled = TBX_FALSE;
pVpGroup->aRes[1].Params.Group0.Tdm.Tone.CompleteSuppressMode = TB640_VP_GRP0_TONE_SUPPRESS_MODE_SILENCE;
pVpGroup->aRes[1].Params.Group0.Tdm.Tone.fCompleteSuppression = TBX_FALSE;
}
#endif
/*
* Create and fill new stream resource context
*/
/* Get free stream resource context */
pStreamRes = TBXPoolOfBuffersAlloc
(
in_pAdapterContext->pTargetConfig->hPoolOfStreamRes,
(TBX_HASH_KEY)NULL
);
if( pStreamRes == NULL )
{
TBX_EXIT_ERROR (TBX_RESULT_FAIL, 0, "Maximum number of stream resources reached.");
}
/* Initialize stream resource context */
pStreamRes->Common.hRes = (TB640_RESOURCE_HANDLE)TBX_HANDLE_INVALID;
pStreamRes->Common.un32ConnectionId = un32ConnectionId;
pStreamRes->Common.fAllocated = TBX_TRUE;
if( in_pConnectionParams->Type0.fPlaybackEnabled == TBX_TRUE &&
in_pConnectionParams->Type0.fRecordEnabled == TBX_TRUE )
{
pStreamRes->Params.ResType = TB640_RESOURCE_TYPE_FD;
}
else if( in_pConnectionParams->Type0.fPlaybackEnabled == TBX_TRUE )
{
pStreamRes->Params.ResType = TB640_RESOURCE_TYPE_HD_SRC;
}
else
{
pStreamRes->Params.ResType = TB640_RESOURCE_TYPE_HD_DST;
}
pStreamRes->Params.PacketType = TBX_STREAM_PACKET_TYPE_PCMA;
#ifdef VOIP_PROMPT_USE_GROUP1
{
pStreamRes->Params.PacketDurationMs = TBX_STREAM_PACKET_DURATION_20MS;
pStreamRes->Params.Interface = TB640_STREAM_INTERFACE_TYPE_VOIP;
pStreamRes->Params.un16FromNetworkIPPort = in_pConnectionParams->Type0.un16RxIPPort;
pStreamRes->Params.un16ToNetworkIPPort = in_pConnectionParams->Type0.un16RxIPPort;
pStreamRes->Params.fUseRtpOverRawIp = TBX_FALSE;
pStreamRes->Params.fUseRtcp = TBX_FALSE;
if( in_pConnectionParams->Type0.fRecordEnabled == TBX_TRUE )
{
strncpy(&pStreamRes->Params.szIPAddr0[0], &in_pConnectionParams->Type0.szStreamSocketIP[0], sizeof(pStreamRes->Params.szIPAddr0));
pStreamRes->Params.szIPAddr0[ sizeof(pStreamRes->Params.szIPAddr0) - 1] = '\0';
pStreamRes->Params.szIPAddr1[0] = '\0';
}
else
{
pStreamRes->Params.szIPAddr0[0] = '\0';
pStreamRes->Params.szIPAddr1[0] = '\0';
}
pStreamRes->Params.RedundancyMode = TBX_STREAM_NETWORK_REDUNDANCY_MODE_NONE;
pStreamRes->Params.un8TosByte = 0;
}
#else
{
pStreamRes->Params.PacketDurationMs = TBX_STREAM_PACKET_DURATION_160MS;
pStreamRes->Params.Interface = TB640_STREAM_INTERFACE_TYPE_BASE;
pStreamRes->Params.un16FromNetworkIPPort = in_pConnectionParams->Type0.un16RxIPPort;
pStreamRes->Params.un16ToNetworkIPPort = in_pConnectionParams->Type0.un16TxIPPort;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -