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

📄 tce1.cpp

📁 电话银行演示系统(需硬件板卡支持)
💻 CPP
字号:
/**********************************************************
  this project is mainly to show how to handle voice play 
  and record functions.
  Before running this demo,your should make sure that your
computer has pluged with the TC-30E1(60E1) board and it is
connected with another TC-30E1(60E1) board in another
computer that running an application(such as dial.exe). 

  Oriental Co.,Ltd. 
**********************************************************/
#include <windows.h>
#include <winbase.h>
#include <commctrl.h>

#include <stdlib.h>
#include <io.h>
#include <fcntl.h>
#include "..\\..\\..\\..\\inc\\tce1_32.h"
#include "Tce1.h"
#include "resource.h"

///////////////////////////////////////////////////////////
TRUNK_STRUCT *Trunk ;		//trunk channel data struct
int TotalTrunk ;			//total trunk number
extern HWND hGWnd;
///////////////////////////////////////////////////////////

void yzDoTrunkWork() 
{
	DJSys_PushPlay() ;
	
	for(int i=0 ; i< TotalTrunk ; i++ ) 
	{
		yzDrawState(i) ;		//put on screen of the current trunk state
		TrunkWork(i);
	}
}

////////////////////////////////////////////////////////////

bool yzInitSystem()
{
	
	int i = DJSys_EnableCard( "", "PROMPT.INI" ) ;
	if ( i != 0 ) 
	{
		MessageBox(NULL,"Load Drive Fail!","Error", MB_OK ) ;
		return false;
    }
	
//	DJSys_DisableWarn();
	TotalTrunk = DJTrk_GetTotalTrunkNum() ;
	
	Trunk = new TRUNK_STRUCT[TotalTrunk] ;
	if( !Trunk )
	{
		DJSys_DisableCard();
		MessageBox(NULL,"Memory alloc error!","Error", MB_OK ) ;
		return false;
	}

	for(i = 0; i < TotalTrunk; i++)	
	{
		Trunk[i].State= TRK_FREE;
		DJTrk_SetTrunkType( i, Type_Import );
	}
	
	static int ColumnWidth[60] = {50, 50, 50, 100, 100, 100, 50, 150};
	LV_COLUMN lvc;
	char dig[10];
	lvc.mask =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	lvc.iSubItem = 0;
	lvc.pszText = "通道号" ;
	lvc.cx = ColumnWidth[0];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),0,&lvc);

	lvc.iSubItem = 1;
	lvc.pszText = "DL信令" ;
	lvc.cx = ColumnWidth[1];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),1,&lvc);
	
	lvc.iSubItem = 2;
	lvc.pszText = "线路状态" ;
	lvc.cx = ColumnWidth[2];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),2,&lvc);

	lvc.iSubItem = 3;
	lvc.pszText = "流程状态" ;
	lvc.cx = ColumnWidth[3];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),3,&lvc);

	lvc.iSubItem = 4;
	lvc.pszText = "MFC" ;
	lvc.cx = ColumnWidth[4];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),4,&lvc);

	lvc.iSubItem = 5;
	lvc.pszText = "DTMF" ;
	lvc.cx = ColumnWidth[4];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),5,&lvc);

	LV_ITEM lvi;
	for(i = 0; i < TotalTrunk; i++)	
	{
		lvi.mask = LVIF_TEXT;
		lvi.iItem = i;
		lvi.iSubItem = 0;
		itoa( i, dig, 10 ) ; 
		lvi.pszText = dig;
		ListView_InsertItem(GetDlgItem(hGWnd,IDC_STATELIST),&lvi);
	}
	return true;
}

////////////////////////////////////////////////////////////

void yzExitSystem() 
{
	DJSys_DisableCard() ;
	delete [] Trunk ;
}

////////////////////////////////////////////////////////////

void yzDrawState( int trkno )
{	
	char state[100]; ;
	char tmpstr[20] ;
	int dl ;

	dl = DJTrk_GetTrunkForwardDL( trkno ) ;
	if(dl>8) strcpy(state,"1");
	else strcpy(state,"0");
	if((dl%8) > 4 ) strcat(state,"1 ");
	else strcat(state,"0 " ) ;

	dl = DJTrk_GetTrunkBackwardDL( trkno ) ;
	if( dl > 8 ) strcat(state,"1");
	else strcat(state, "0" ) ;
	if( (dl%8) > 4 ) strcat(state, "1");
	else strcat(state, "0" ) ;

	ListView_GetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 1, tmpstr, 19 ) ;
	if ( strcmp(state,tmpstr )!=0) 
		ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 1, state );

	switch( DJTrk_GetTrunkStatus( trkno) )
	{
		case Step_Free:         strcpy(state,"FREE"); break ;
		case Step_Disable:      strcpy(state,"DIS!"); break ;
		case Step_Used:         strcpy(state,"USED"); break ;
		case Step_RecvCall:     strcpy(state,"RCAL"); break ;
		case Step_RecvMfc:      strcpy(state,"RMFC"); break ;
		case Step_StopMfc:      strcpy(state,"RSTP"); break ;
		case Step_ReadyDial:    strcpy(state,"RDIL"); break ;
		case Step_DialCall:     strcpy(state,"DCAL"); break ;
		case Step_DialMfc:      strcpy(state,"DMFC"); break ;
		case Step_DialStop:     strcpy(state,"DSTP"); break ;
		case Step_Delay:        strcpy(state,"DLAY"); break ;
		case Step_Wait:         strcpy(state,"WAIT"); break ;
		case Step_Connect:      strcpy(state,"CONN"); break ;
		case Step_RecvFail:     strcpy(state,"RFAL"); break ;
		case Step_DialFail:     strcpy(state,"SFAL"); break ;
		case Step_Block:        strcpy(state,"BLK!"); break ;
		case Step_OverTime:     strcpy(state,"OVER"); break ;
		default:				strcpy(state,"    "); break ;
	}
	ListView_GetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 2, tmpstr, 19 ) ;
	if ( strcmp(state,tmpstr )!=0) 
		ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 2, state );

	switch( Trunk[trkno].State ) 
	{
	case TRK_FREE:		
		strcpy(state,"空闲"); 
		break ;
				
	case TRK_WELCOME:
		strcpy(state,"这里是东进电话银行演示系统");
		break ;
				
	case TRK_ACCOUNT:
		strcpy(state,"请输入8位帐号") ;
		break ;
	case TRK_PASSWORD:
		strcpy(state,"请输入6位密码");
	case TRK_SELECT:
		strcpy(state,"选择功能");
		break;
	case TRK_RECORDFILE:
		strcpy(state,"录制留言");
		break;
	case TRK_PLAYRESULT:
		strcpy(state,"播放查询结果");
		break;
	case TRK_PLAYRECORD:
		strcpy(state,"播放留言");
		break;
	}
	
	ListView_GetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 3, tmpstr, 19 ) ;
	if ( strcmp(state,tmpstr )!=0) 
		ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 3, state );

	char * s;
	s = DJTrk_GetMfcCode(trkno) ;
	strcpy(state, s) ;

	ListView_GetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 4, tmpstr, 19 ) ;
	if ( strcmp(state,tmpstr )!=0) 
		ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 4, state );

	s=DJTrk_GetDtmfCode(trkno);
	strcpy(state,s);

	ListView_GetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 5, tmpstr, 19 ) ;
	if ( strcmp(state,tmpstr )!=0) 
		ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 5, state );

}


void ResetTrunk(int trunkID)
{
	int userID = DJTrk_GetConnectUserID( trunkID );
	if( userID >= 0 )
		DJExg_ClearLinkTrunkAndUserByTrunk( trunkID );
	int voiceID = DJTrk_GetTrunkRecordID( trunkID );
	if( voiceID >= 0 )
	{
		DJVoc_StopRecordFile(trunkID);
		Trunk[trunkID].State = TRK_FREE;
	}
	else{
		voiceID = DJTrk_GetTrunkPlayID( trunkID );
		if( voiceID >= 0 ){
			VoiceResourcesType	resType = DJVoc_GetVoiceResourceType( voiceID );
			
			if( resType == Res_File )
				DJVoc_StopPlayFile(trunkID);
			else if( DJVoc_GetVoiceOperateType( voiceID ) == OP_Play ){
				DJExg_ClearLinkPlayVoiceFromTrunk( trunkID );
				DJVoc_StopPlayFile(trunkID);
				DJVoc_VoiceStop(voiceID);
			}
		}
	}	
	DJTrk_BackwardHangUp( trunkID );
	DJTrk_InitDtmfBuf(trunkID);
	Trunk[trunkID].State = TRK_FREE;
}

void TrunkWork(int trunkID)
{
	int VoiceID;
	int result;
	char FileName[200];
	if(! DJTrk_CheckReady(trunkID) ) return; 

	if(DJTrk_CheckForwardHangUp(trunkID))
		ResetTrunk( trunkID );
	else if( DJTrk_GetTrunkStatus( trunkID ) != Step_Delay )
	{
		switch(Trunk[trunkID].State)
		{
			case TRK_FREE:
				strcpy ( FileName, DJSys_GetInstallDir () );
				strcat ( FileName, "voc\\bank.001");
				result=DJVoc_PlayFileNew(trunkID,FileName,0,0);
				Trunk[trunkID].State = TRK_WELCOME;
				break;
			case TRK_WELCOME:
				VoiceID = DJTrk_GetTrunkPlayID(trunkID);
				if(VoiceID<0) 
				{
					MessageBox(NULL,"Get Voice ID Error!","Error",MB_OK);
					ResetTrunk(trunkID);
				}
				else
				{
					if(DJVoc_CheckVoiceEnd(VoiceID)||(DJTrk_GetReciveDtmfNum(trunkID)>0))
					{
						DJVoc_StopPlayFile(trunkID);
						strcpy(FileName,DJSys_GetInstallDir());
						strcat(FileName,"voc\\bank.002");
						DJVoc_PlayFile(trunkID,FileName);
						Trunk[trunkID].State=TRK_ACCOUNT;
					}
				}
				break;
			case TRK_ACCOUNT:
				VoiceID=DJTrk_GetTrunkPlayID(trunkID);
				if(VoiceID>=0)
				{
					if(DJVoc_CheckVoiceEnd(VoiceID))
					{
						DJVoc_StopPlayFile(trunkID);					
					}
				}
				if(DJTrk_GetReciveDtmfNum(trunkID)>=8)
				{
					if(VoiceID>0) DJVoc_StopPlayFile(trunkID);

					DJTrk_InitDtmfBuf(trunkID);
					strcpy ( FileName, DJSys_GetInstallDir () );
					strcat ( FileName, "voc\\bank.003");
					DJVoc_PlayFile(trunkID,FileName);
					Trunk[trunkID].State = TRK_PASSWORD;
				}
				break;
			case TRK_PASSWORD:
				VoiceID=DJTrk_GetTrunkPlayID(trunkID);
				if(VoiceID>=0)
				{
					if(DJVoc_CheckVoiceEnd(VoiceID))
					{
						DJVoc_StopPlayFile(trunkID);					
					}
				}
				if(DJTrk_GetReciveDtmfNum(trunkID)>=6)
				{
					if(VoiceID>0) DJVoc_StopPlayFile(trunkID);

					DJTrk_InitDtmfBuf(trunkID);
					strcpy ( FileName, DJSys_GetInstallDir () );
					strcat ( FileName, "voc\\bank.004");
					DJVoc_PlayFile(trunkID,FileName);
					Trunk[trunkID].State = TRK_SELECT;
				}
				break;
			case TRK_SELECT:
				VoiceID=DJTrk_GetTrunkPlayID(trunkID);
				if(VoiceID>=0)
				{
					if(DJVoc_CheckVoiceEnd(VoiceID))
					{
						DJVoc_StopPlayFile(trunkID);					
					}
					VoiceID=-1;
				}
				if(DJTrk_GetReciveDtmfNum(trunkID)>0)
				{
					char Code = DJTrk_GetLastDtmfCode(trunkID);
					DJTrk_InitDtmfBuf(trunkID);
					switch(Code)
					{
					case '1':
						if(VoiceID>0) DJVoc_StopPlayFile(trunkID);
						DJVoc_InitIndexPlayFile(trunkID);
						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\bank.005");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d5");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d12");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d8");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d11");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d9");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d10");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d6");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d15");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d8");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\bank.008");
						DJVoc_AddIndexPlayFile(trunkID,FileName);
						DJVoc_StartIndexPlayFile(trunkID);
						Trunk[trunkID].State = TRK_PLAYRESULT;
						break;
					case '2':
						if(VoiceID>0) DJVoc_StopPlayFile(trunkID);
						DJVoc_InitIndexPlayFile(trunkID);
						strcpy(FileName,DJSys_GetInstallDir());
						strcat(FileName,"voc\\bank.006");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d0");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d15");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d4");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d8");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\bank.008");
						DJVoc_AddIndexPlayFile(trunkID,FileName);
						DJVoc_StartIndexPlayFile(trunkID);
						Trunk[trunkID].State = TRK_PLAYRESULT;
						break;
					case '3':
						if(VoiceID>0) DJVoc_StopPlayFile(trunkID);
						DJVoc_InitIndexPlayFile(trunkID);
						strcpy(FileName,DJSys_GetInstallDir());
						strcat(FileName,"voc\\bank.007");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d3");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d13");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d7");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\d12");
						DJVoc_AddIndexPlayFile(trunkID,FileName);

						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\bank.008");
						DJVoc_AddIndexPlayFile(trunkID,FileName);
						DJVoc_StartIndexPlayFile(trunkID);
						Trunk[trunkID].State = TRK_PLAYRESULT;
						break;
/*
					case '4':
						if(VoiceID>0) DJVoc_StopPlayFile(trunkID);
						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\test.voc");
						DJVoc_RecordFile(trunkID,FileName,8000*320);
						Trunk[trunkID].State = TRK_RECORDFILE;
						break;
					case '5':
						if(VoiceID>0) DJVoc_StopPlayFile(trunkID);
						strcpy ( FileName, DJSys_GetInstallDir () );
						strcat ( FileName, "voc\\test.voc");
						if(DJVoc_PlayFile(trunkID,FileName))
							Trunk[trunkID].State = TRK_PLAYRECORD;
						else ResetTrunk(trunkID);
						break;
*/						
					default:
						break;
					}
				}
				break;
			case TRK_PLAYRESULT:
				if(DJVoc_CheckIndexPlayEnd(trunkID))
				{
					DJVoc_StopIndexPlayFile(trunkID);
					ResetTrunk(trunkID);
				}
				break;
			case TRK_RECORDFILE:
				VoiceID = DJTrk_GetTrunkPlayID(trunkID);
				if(DJVoc_CheckVoiceEnd(VoiceID))
				{
					DJVoc_StopRecordFile(trunkID);
					ResetTrunk(trunkID);
					break;
				}
				if(DJTrk_GetReciveDtmfNum(trunkID) >= 1)
				{	
					if(DJTrk_GetLastDtmfCode(trunkID) == '5')
					{
						DJVoc_StopRecordFile(trunkID);
						ResetTrunk(trunkID);
					}
				}
				break;
			case TRK_PLAYRECORD:
				VoiceID=DJTrk_GetTrunkPlayID(trunkID);
				if(VoiceID<0)
				{
					MessageBox(NULL,"Get Voice ID Error!","Error",MB_OK);
					ResetTrunk(trunkID);
				}
				else
				{
					if(DJVoc_CheckVoiceEnd(VoiceID))
					{
						DJVoc_StopPlayFile(trunkID);					
						ResetTrunk(trunkID);
					}
				}
				break;
		}//end switch
	}//end if
}

⌨️ 快捷键说明

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