Exemple #1
0
//////////////////////////////////////////////////////////////////////////
// XMS_EVT_CLEARCALL event handler (call dropped by local or remote)
void OnClearCall(Acs_Evt_t *pAcsEvt)
{
	Acs_CallControl_Data *pCallEvt = (Acs_CallControl_Data *)FetchEventData(pAcsEvt);

	TRACE(_T("Device[%02d][%02d][%02d] call cleared (ret=%d)\n"),
		pAcsEvt->m_DeviceID.m_s8ModuleID,
		pAcsEvt->m_DeviceID.m_s16DeviceMain,
		pAcsEvt->m_DeviceID.m_s16ChannelID,
		pCallEvt->m_s32AcsEvtErrCode);

	// if has Voice Device binded, unbind it
	int iDeviceIP = pAcsEvt->m_DeviceID.m_s16ChannelID;
	int iDeviceVoc = g_deviceVoIP[iDeviceIP].iVoiceDevice;
	if (iDeviceVoc != -1)
	{
		MixerControlParam_t paramMixer = {0};

		// send SetParam command
		RetCode_t ret = XMS_ctsSetParam(g_acsHandle, &g_deviceVoIP[iDeviceIP].device,
			VOIP_PARAM_RTPMIXER, sizeof(paramMixer), &paramMixer);

		g_deviceVoIP[iDeviceIP].iVoiceDevice = -1;
		g_deviceVoc[iDeviceVoc].iVoIPDevice = -1;

		g_pDlg->refreshListIP(iDeviceIP);
		g_pDlg->refreshListVoc(iDeviceVoc);
	}
}
Exemple #2
0
//////////////////////////////////////////////////////////////////////////
// XMS_EVT_OPEN_DEVICE event handler
void OnOpenDevice(Acs_Evt_t *pAcsEvt)
{
	TRACE(_T("Device[%02d][%02d][%02d] opened (ret=%d)\n"),
		pAcsEvt->m_DeviceID.m_s8ModuleID,
		pAcsEvt->m_DeviceID.m_s16DeviceMain,
		pAcsEvt->m_DeviceID.m_s16ChannelID,
		pAcsEvt->m_u32EsrParam);

	switch (pAcsEvt->m_DeviceID.m_s16DeviceMain)
	{
	case XMS_DEVMAIN_VOIP:
	case XMS_DEVMAIN_VOICE:
	case XMS_DEVMAIN_CONFERENCE:
		g_pDlg->enableDevice(&pAcsEvt->m_DeviceID);
		break;
	}

#ifdef TEST_ACCESS
	// test for set slot access
	if (pAcsEvt->m_DeviceID.m_s16DeviceMain == XMS_DEVMAIN_VOIP &&
		pAcsEvt->m_DeviceID.m_s16ChannelID == 29)
	{
		DJ_U8 u8AccessFlag = 0x22;
		XMS_ctsSetParam(g_acsHandle, &g_deviceVoIP[29].device,
			VOIP_PARAM_ACCESS, 1, &u8AccessFlag);
	}
#endif
}
int    UnBindOneVoice(VOIP_STRUCT *pOneVOIP)
{
	MixerControlParam_t paramMixer = {0};
	RetCode_t r = -1;

	if (pOneVOIP == NULL)
		return r;

	r = XMS_ctsSetParam(g_acsHandle, &pOneVOIP->deviceID,
		VOIP_PARAM_RTPMIXER, sizeof(paramMixer), &paramMixer);

	return r;
}
int    BindOneFreeVoice(VOIP_STRUCT *pOneVOIP, const DeviceID_t &FreeVocDevID)
{
	MixerControlParam_t paramMixer = {0};
	RetCode_t r = -1;

	if (pOneVOIP == NULL)
		return r;
	
	paramMixer.m_u8SRC1_Ctrl = XMS_MIXER_FROM_PLAY;
	paramMixer.m_u16SRC_ChID1 = FreeVocDevID.m_s16ChannelID;

	// send SetParam command
	r = XMS_ctsSetParam(g_acsHandle, &pOneVOIP->deviceID,
		VOIP_PARAM_RTPMIXER, sizeof(paramMixer), &paramMixer);

	return r;
}
Exemple #5
0
int  PSTNToVOIPCallout(char* pCallerNum, char* pCalledNum,  DeviceID_t* pVoipDev, INTERFACE_STRUCT* pOneInterface)
{
	RetCode_t ret = -1;
	VOIP_STRUCT *pOneVOIP = NULL;
	DeviceID_t   FreeVocDeviceID;
	MixerControlParam_t     VocCmdP = {0};
	CmdParamData_Voice_t    VocMixParam = {0};
	VoIPCallPrivate_t       voipCallParam = {0};
	int iPreCnt = 0;	
	int iRoutCnt = 0;

	_ASSERT(pCallerNum != NULL);
	_ASSERT(pCalledNum != NULL);
	_ASSERT(pVoipDev != NULL);
	_ASSERT(pOneInterface != NULL);

	
	voipCallParam.m_PrivateData.m_u32DataSize = sizeof(VoIPCallPrivate_t);
	voipCallParam.m_s32Protocol =  XMS_VOIP_PROTOCOL_SIP;
	strncpy(voipCallParam.m_s8CallerUserID, pCallerNum, sizeof(voipCallParam.m_s8CallerUserID));

	char cfg_MapIP[255] = {0};
	if (outRout == NULL)
	{		
		sprintf(cfg_MapIP,"%s",pubOutVoipAddress);
		strncpy(voipCallParam.m_s8CalleeAddress, cfg_MapIP, sizeof(voipCallParam.m_s8CallerAddress));
		
		voipCallParam.m_s32CalleePort = pubOutVoipPort;
	}
	else
	{
		int bRout = 0;
		for (iRoutCnt = 1; iRoutCnt <= cfg_routCnt; iRoutCnt++)
		{
			if (bRout == 1)
				break;

			for (iPreCnt = 0; iPreCnt < 10; iPreCnt++)
			{
				if (strlen(outRout[iRoutCnt].phonePreNum[iPreCnt]) > 0)
				{			
					if (strncmp(outRout[iRoutCnt].phonePreNum[iPreCnt], pCalledNum, strlen(outRout[iRoutCnt].phonePreNum[iPreCnt])) == 0)
					{
						strncpy(voipCallParam.m_s8CalleeAddress, outRout[iRoutCnt].outBAddr.proxyAddr, sizeof(voipCallParam.m_s8CallerAddress));
						
						voipCallParam.m_s32CalleePort = outRout[iRoutCnt].outBAddr.proxyPort;
						
						bRout = 1;
						break;
					}
				}
			}
		}

		if (bRout == 0)
		{
			sprintf(cfg_MapIP,"%s",pubOutVoipAddress);
			strncpy(voipCallParam.m_s8CalleeAddress, cfg_MapIP, sizeof(voipCallParam.m_s8CallerAddress));
			
			voipCallParam.m_s32CalleePort = pubOutVoipPort;			
		}
	}

	if (g_logfp != NULL)
	{
		char	mTemp[512]={0};
		char	mCurrTime[50]={0};
		getCurrTime(mCurrTime);
		
		sprintf(mTemp,"%s IPCALLOUT In PSTNToVOIPCallOut: DSP:%d Ch:%d AcsHandle:%d, FlowType:%d FlowChannelID:%d CalleAddress:%s Port:%d Caller:%s Called:%s \n\r",
			mCurrTime,
			pVoipDev->m_s8ModuleID,
			pVoipDev->m_s16ChannelID,
			g_acsHandle,
			pVoipDev->m_CallID.m_s32FlowType,
			pVoipDev->m_CallID.m_s32FlowChannel,
			voipCallParam.m_s8CalleeAddress,
			voipCallParam.m_s32CalleePort,
			pCallerNum,
			pCalledNum);
		fwrite(mTemp,strlen(mTemp),1,g_logfp);
		fflush(g_logfp);
	}


	pOneVOIP = &M_OneVOIP(*pVoipDev);
		
	ret = XMS_ctsMakeCallOut(g_acsHandle, pVoipDev, pCallerNum, pCalledNum, (PrivateData_t *)&voipCallParam);
	if(ret > 0)
	{		
		
		FreeVocDeviceID=pOneVOIP->pVoiceDeviceID;			
		
		VocCmdP.m_u8SRC1_Ctrl = XMS_MIXER_FROM_INPUT;							
		VocCmdP.m_u16SRC_ChID1 = pOneVOIP->pVoiceDeviceID.m_s16ChannelID;
		//如果不屏蔽这两行,会造成DTMF播放死循环
	//	VocCmdP.m_u8SRC2_Ctrl = XMS_MIXER_FROM_PLAY;
	//	VocCmdP.m_u16SRC_ChID2 = pOneVOIP->pVoiceDeviceID.m_s16ChannelID;
		ret = XMS_ctsSetParam(g_acsHandle, &pOneVOIP->deviceID,
			VOIP_PARAM_RTPMIXER, sizeof(VocCmdP), &VocCmdP);
		
	/*	VocMixParam.m_u8InputCtrlValid=1;             //使能输入控制参数
		VocMixParam.m_VocInputControl.m_u8AgcEnable=0;// inputContol使能自动增益
		VocMixParam.m_VocInputControl.m_u8AgcMode = 0 ;//设为ALS模式
		VocMixParam.m_VocInputControl.m_u16FixGain=1024;
		VocMixParam.m_VocInputControl.m_u8EcEnable=0;//禁止回声抑制
		VocMixParam.m_VocInputControl.m_u8TadEnable=1;   //启动语音TONE音抑制使能
		VocMixParam.m_VocInputControl.m_u8EcRefType=0;	*/
	
		VocMixParam.m_u8GtdCtrlValid = 1;
		VocMixParam.m_VocGtdControl.m_u8DTMFEnable = 1;
		VocMixParam.m_VocGtdControl.m_u8FSKEnable = 1;
		VocMixParam.m_VocGtdControl.m_u8ChannelEnable = 1;
		VocMixParam.m_VocGtdControl.m_u8GTDEnable = 1;
		unsigned char gtdID[] = {"GHIJKLM"};
		memcpy(VocMixParam.m_VocGtdControl.m_u8GTDID, gtdID, sizeof(VocMixParam.m_VocGtdControl.m_u8GTDID));

	//	EnableGtg(&pOneVOIP->pVoiceDeviceID);
		
		
		VocMixParam.m_u8OutputCtrlValid = 1;
		VocMixParam.m_VocOutputControl.m_u8OutputType = XMS_VOC_OUTPUT_FROM_MIXER;				
		VocMixParam.m_VocOutputControl.m_u16FixGain = 1024;
		VocMixParam.m_VocOutputControl.m_MixerControl.m_u8SRC1_Ctrl = XMS_MIXER_FROM_PLAY;
		VocMixParam.m_VocOutputControl.m_MixerControl.m_u16SRC_ChID1 = pOneVOIP->pVoiceDeviceID.m_s16ChannelID;
		VocMixParam.m_VocOutputControl.m_MixerControl.m_u8SRC2_Ctrl = XMS_MIXER_FROM_IP;
		VocMixParam.m_VocOutputControl.m_MixerControl.m_u16SRC_ChID2 = pOneVOIP->deviceID.m_s16ChannelID;
		ret = XMS_ctsSetParam(g_acsHandle, &pOneVOIP->pVoiceDeviceID,VOC_PARAM_UNIPARAM, sizeof(VocMixParam), &VocMixParam);			
	
		My_DualLink(&pOneInterface->deviceID, &pOneInterface->pVoiceDeviceID);		
		
		XMS_ctsAlertCall(g_acsHandle,&pOneInterface->deviceID,NULL);			
		
		DrawVOIP_VocInfo(pOneVOIP);	
		
	}
/*	else
	{
		char	mTemp[255]={0};
		char	mCurrTime[50]={0};

		if (g_logfp != NULL)
		{
			getCurrTime(mCurrTime);
			
			sprintf(mTemp,"%s,PSTNToVOIP Faile!!,m_s16DeviceMain=%d,m_s16DeviceSub=%d,m_s8ModuleID=%d,m_s8MachineID=%d,m_s16ChannelID=%d,m_s32FlowType=%d,m_s32FlowChannel=%d\r",
				mCurrTime,
				pVoipDev->m_s16DeviceMain,pVoipDev->m_s16DeviceSub,pVoipDev->m_s8ModuleID,
				pVoipDev->m_s8MachineID,pVoipDev->m_s16ChannelID,
				pVoipDev->m_CallID.m_s32FlowType,pVoipDev->m_CallID.m_s32FlowChannel);
			fwrite(mTemp,strlen(mTemp),1,g_logfp);
		}

	//	return ret;
	
	}*/
	return ret;
}