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

📄 d.cpp

📁 语音卡的拨号检测示例程序,单线程拨号示例.d80a/d161a
💻 CPP
字号:
#include <windows.h>
#include <windowsx.h>
#include <winbase.h>
#include <commdlg.h>
#include <commctrl.h>
#include <string.h>
#include <stdio.h>

#include "..\\..\\..\\..\\inc\\tc08a32.h"
#include "..\\..\\..\\..\\inc\\NewSig.h"
#include "dial.h"
#include "d.h"
#include "resource.h"

extern HWND hGWnd;
WORD TotalLine;
LINESTRUCT *Lines;
char VoicePath[100];
char sTmp[128];
extern HINSTANCE hInst;

BOOL WINAPI yzInitSystem()
{
	int i;
	long DriverOpenFlag = LoadDRV ( );
	if ( DriverOpenFlag ) {
		MessageBox ( hGWnd, "Load driver FAIL", "Message", MB_OK );
		return FALSE;
	}

	TotalLine = CheckValidCh();
	if ( EnableCard(TotalLine,1024*8) != (long)0) {
		FreeDRV();
		MessageBox ( hGWnd, "Enable Board FAIL", "Message", MB_OK );
		return FALSE;
	}
	Lines=new LINESTRUCT[TotalLine];
	SetBusyPara(350);
	for(i=0;i<TotalLine;i++)
	{
        Lines[i].nType=CheckChTypeNew(i);
		Lines[i].State = CH_FREE;
	}

	Sig_Init(0);

	static int ColumnWidth[60] = {66, 78, 240, 100, 150, 100, 50, 150};
	LV_COLUMN lvc;
	char dig[10];
	lvc.mask =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

	lvc.iSubItem = 0;
	LoadString(hInst, IDS_CHANNEL_NO, sTmp, 128);
	lvc.pszText = sTmp ;
	lvc.cx = ColumnWidth[0];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),0,&lvc);

	lvc.iSubItem = 1;
	LoadString(hInst, IDS_CHANNEL_TYPE, sTmp, 128);
	lvc.pszText = sTmp ;
	lvc.cx = ColumnWidth[1];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),1,&lvc);
	
	lvc.iSubItem = 2;
	LoadString(hInst, IDS_FLOW, sTmp, 128);
	lvc.pszText = sTmp ;
	lvc.cx = ColumnWidth[2];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),2,&lvc);

	lvc.iSubItem = 3;
	LoadString(hInst, IDS_TEL_NUMBER, sTmp, 128);
	lvc.pszText = sTmp ;
	lvc.cx = ColumnWidth[3];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),3,&lvc);

	lvc.iSubItem = 4;
	LoadString(hInst,IDS_NUMBER , sTmp, 128);
	lvc.pszText = sTmp ;
	lvc.cx = ColumnWidth[4];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),4,&lvc);

	LV_ITEM lvi;
	for(i = 0; i < TotalLine; 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);
	}

	for(i=0;i<TotalLine;i++)
	{
		if(Lines[i].nType==CHTYPE_TRUNK)
		{
			itoa(i,dig,10);
			SendMessage(GetDlgItem(hGWnd,IDC_CHANNEL),CB_ADDSTRING,0,(LPARAM)dig);
			LoadString(hInst, IDS_TRUNK, sTmp, 128);
			ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), i, 1, sTmp);
		}
		else if(Lines[i].nType==CHTYPE_USER)
		{
			LoadString(hInst, IDS_USER, sTmp, 128);
			ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), i, 1, sTmp);
		}
		else if(Lines[i].nType==CHTYPE_RECORD)
		{
			LoadString(hInst, IDS_RECORD, sTmp, 128);
			ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), i, 1, sTmp);
		}
		else if(Lines[i].nType==CHTYPE_EMPTY)
		{
			LoadString(hInst, IDS_EMPTY, sTmp, 128);
			ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), i, 1, sTmp);
		}
		Lines[i].TelNum[0]=0;
	}

	return TRUE;
}
void WINAPI yzExitSystem()
{
	for(int i = 0; i < TotalLine; i++)
	{
		if(Lines[i].nType==CHTYPE_TRUNK)
		{
			HangUp(i);
			Sig_ResetCheck(i);
		}
	}
	DisableCard();
	FreeDRV();
	delete Lines;
}
void WINAPI yzDrawState( int trkno )
{	
	char state[100]; 
	char tmpstr[100] ;

	switch( Lines[trkno].State ) 
	{
	case CH_FREE:		
		LoadString(hInst, IDS_CH_FREE, state, 100);
		break ;
	case CH_DIAL:
		LoadString(hInst, IDS_CH_DIAL, state, 100);
		break;
	case CH_CHECKSIG:
		LoadString(hInst, IDS_CH_CHECKSIG, state, 100);
		break;
	case CH_BUSY:
		LoadString(hInst, IDS_CH_BUSY, state, 100);
		break;
	case CH_NOBODY:
		LoadString(hInst, IDS_CH_NOBODY, state, 100);
		break;
	case CH_NODIALTONE:
		LoadString(hInst, IDS_CH_NODIALTONE, state, 100);
		break;
	case CH_NOSIGNAL:
		LoadString(hInst, IDS_CH_NOSIGNAL, state, 100);
		break;
	case CH_OFFHOOK:
		LoadString(hInst, IDS_CH_OFFHOOK, state, 100);
		break;
	case CH_PLAY:
		LoadString(hInst, IDS_CH_PLAY, state, 100);
		break ;
	case CH_ONHOOK:
		LoadString(hInst, IDS_CH_ONHOOK, state, 100);
		break;
	}
	
	ListView_GetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 2, tmpstr, 99 ) ;
	if ( strcmp(state,tmpstr )!=0) 
		ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 2, state );

	strcpy(state, Lines[trkno].TelNum) ;

	ListView_GetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 3, tmpstr, 99 ) ;
	if ( strcmp(state,tmpstr )!=0) 
		ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trkno, 3, state );
}
void yzResetChannel(int channelID)
{
	if(Lines[channelID].nType==CHTYPE_TRUNK)
	{
		HangUp(channelID);
		Sig_ResetCheck(channelID);
		StartSigCheck(channelID);
	}
	Lines[channelID].TelNum[0]=0;
	Lines[channelID].State = CH_FREE;
}
void WINAPI yzDoWork()
{
	int tt;
	PUSH_PLAY();
	FeedSigFunc();
	for(int Line=0;Line<TotalLine;Line++)
	{
		yzDrawState(Line);		//draw

		switch(Lines[Line].State)		//state transfer
		{
		case CH_FREE:
			break;
		case CH_DIAL:
			if(CheckSendEnd(Line) == 1)
			{
				StartSigCheck(Line);
				Lines[Line].State=CH_CHECKSIG;
			}
			break;
		case CH_CHECKSIG:
			//tt=ReadCheckResult(Line,SEND_CHECK);
			tt = Sig_CheckDial(Line);
			if(tt == S_BUSY)
			{
				Lines[Line].State = CH_BUSY;
			}
			else if(tt == S_CONNECT)
			{
				Lines[Line].State = CH_CONNECT;
			}
			else if(tt == S_NOSIGNAL)
			{
				Lines[Line].State= CH_NOSIGNAL;
			}
			else if(tt == S_NOBODY)
			{
				Lines[Line].State= CH_NOBODY;
			}
			else if(tt == S_NODIALTONE)
			{
				Lines[Line].State= CH_NODIALTONE;
			}
			break;
		case CH_BUSY:
		case CH_NOSIGNAL:
		case CH_NOBODY:
		case CH_NODIALTONE:
			yzResetChannel(Line);
			break;
		case CH_CONNECT:
			GetVoicePath();
			char FileName[128];

			RsetIndexPlayFile(Line);
			strcpy(FileName,VoicePath);
			strcat(FileName,"dial.001");
			AddIndexPlayFile(Line,FileName);

			strcpy(FileName,VoicePath);
			strcat(FileName,"dial.002");
			AddIndexPlayFile(Line,FileName);

			strcpy(FileName,VoicePath);
			strcat(FileName,"d1");
			AddIndexPlayFile(Line,FileName);

			strcpy(FileName,VoicePath);
			strcat(FileName,"d2");
			AddIndexPlayFile(Line,FileName);

			strcpy(FileName,VoicePath);
			strcat(FileName,"d8");
			AddIndexPlayFile(Line,FileName);

			strcpy(FileName,VoicePath);
			strcat(FileName,"d15");
			AddIndexPlayFile(Line,FileName);

			strcpy(FileName,VoicePath);
			strcat(FileName,"d9");
			AddIndexPlayFile(Line,FileName);

			strcpy(FileName,VoicePath);
			strcat(FileName,"d7");
			AddIndexPlayFile(Line,FileName);

			strcpy(FileName,VoicePath);
			strcat(FileName,"dial.003");
			AddIndexPlayFile(Line,FileName);

			strcpy(FileName,VoicePath);
			strcat(FileName,"dial.004");
			AddIndexPlayFile(Line,FileName);
			Lines[Line].State = CH_OFFHOOK;
			break;
		case CH_OFFHOOK:
			StartIndexPlayFile(Line);
			Lines[Line].State=CH_PLAY;
			break;
		case CH_PLAY:
			if(CheckIndexPlayFile(Line) == 1)
			{
				StopIndexPlayFile(Line);
				Lines[Line].State = CH_ONHOOK;
			}
			break;
		case CH_ONHOOK:
			yzResetChannel(Line);
			break;
		}//end switch

		if(Lines[Line].nType==CHTYPE_TRUNK && Lines[Line].State!=CH_FREE)		//exception
		{
			//WORD wSigCheckResult=ReadCheckResult(i,PLAY_CHECK);
			//if(wSigCheckResult==R_BUSY)
			if (Sig_CheckBusy(Line))
			{
				if(CH_PLAY == Lines[Line].State)
				{
					StopIndexPlayFile(Line);
				}
				yzResetChannel(Line);
			}
		}//end if
	}//end for
}
void GetVoicePath()
{
	char FileName[100];
	GetWindowsDirectory(FileName,100);
	strcat(FileName,"\\tc08a-v.ini");
	GetPrivateProfileString("SYSTEM","InstallDir",NULL,VoicePath,100,FileName);
	strcat(VoicePath,"voc\\");
}

void yzDialOut()
{
	bool bRightChnl = false;
	char a[32], b[32];
	memset(a,0,32);
	memset(b,0,32);

	//Get ChnlNo
	int CurSel=SendMessage(GetDlgItem(hGWnd,IDC_CHANNEL),CB_GETCURSEL,0,0);
	if(CurSel!=CB_ERR)
	{
		SendMessage(GetDlgItem(hGWnd,IDC_CHANNEL),CB_GETLBTEXT,CurSel,(LPARAM)a);
	}
	else
	{
		GetWindowText(GetDlgItem(hGWnd, IDC_CHANNEL), a, 32);
	}
	int ChNo=atoi(a);		//Chnl No

	if( CHTYPE_TRUNK != Lines[ChNo].nType )
	{
		MessageBox(hGWnd, "Please select a trunk channel to dial out!", "message", MB_OK);
		return;
	}

/*	int iTotalItem = SendMessage(GetDlgItem(hGWnd,IDC_CHANNEL), CB_GETCOUNT, 0, 0);
	for (int ii = 0; ii < iTotalItem; ii ++)
	{
		SendMessage(GetDlgItem(hGWnd,IDC_CHANNEL), CB_GETLBTEXT, ii, (LPARAM)b);
		if(strcmp(a,b)==0) 
		{
			bRightChnl = true;
			break;
		}
		memset(b,0,32);
	}
	if( !bRightChnl ) 
	{
		MessageBox(hGWnd, "Please select a trunk channel to dial out!", "message", MB_OK);
		return;
	}
*/

	GetWindowText(GetDlgItem(hGWnd,IDC_DIALNUM),a,32);		// a = DialNum
	OffHook(ChNo);
	//SendDtmfBuf(ChNo,a);
	Sig_StartDial(ChNo, a, "", 0);
	strcpy(Lines[ChNo].TelNum, a);
	Lines[ChNo].State=CH_DIAL;
}

⌨️ 快捷键说明

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