📄 d.cpp
字号:
#include "stdafx.h"
//#include <windows.h>
//#include <commdlg.h>
//#include <commctrl.h>
//#include <windowsx.h>
#include "D.h"
#include "..\\..\\..\\..\\inc\\NewSig.h"
#include "..\\..\\..\\..\\inc\\tc08a32.h"
#include "resource.h"
extern CListCtrl m_list;
WORD TotalLine;
long DriverOpenFlag;
LINESTRUCT *Lines;
char VoicePath[100];
char sTmp[128];
HINSTANCE hInst;
//#pragma argsused
BOOL WINAPI yzInitSystem()
{
int i;
GetVoicePath();
DriverOpenFlag = LoadDRV ( );
if ( DriverOpenFlag ) {
AfxMessageBox ("Load Driver FAIL");
return FALSE;
}
TotalLine = CheckValidCh();
if ( EnableCard(TotalLine,1024*8) != (long)0) {
FreeDRV();
AfxMessageBox ("Enable Board FAIL");
return FALSE;
}
Lines=new LINESTRUCT[TotalLine];
Sig_Init(0);
for(i=0;i<TotalLine;i++)
{
Lines[i].nType=CheckChTypeNew(i);
strcpy(Lines[i].CallerID,"");
strcpy(Lines[i].Dtmf,"");
Lines[i].State = CH_FREE;
Lines[i].nDialStatus=S_NORESULT;
}
static int ColumnWidth[60] = {66, 80, 200, 100, 72, 200, 100, 50, 150};
LV_COLUMN lvc;
char dig[10];
lvc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
hInst = AfxGetInstanceHandle();
lvc.iSubItem = 0;
LoadString(hInst, IDS_CHANNEL_NO, sTmp, 128);
lvc.pszText = sTmp;
lvc.cx = ColumnWidth[0];
m_list.InsertColumn(0,&lvc);
lvc.iSubItem = 1;
LoadString(hInst, IDS_CHANNEL_TYPE, sTmp, 128);
lvc.pszText = sTmp;
lvc.cx = ColumnWidth[1];
m_list.InsertColumn(1,&lvc);
lvc.iSubItem = 2;
LoadString(hInst, IDS_FLOW, sTmp, 128);
lvc.pszText = sTmp;
lvc.cx = ColumnWidth[2];
m_list.InsertColumn(2,&lvc);
lvc.iSubItem = 3;
LoadString(hInst, IDS_DIAL_STATUS, sTmp, 128);
lvc.pszText = sTmp;
lvc.cx = ColumnWidth[3];
m_list.InsertColumn(3,&lvc);
lvc.iSubItem = 4;
lvc.pszText = "Dtmf" ;
lvc.cx = ColumnWidth[4];
m_list.InsertColumn(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;
m_list.InsertItem(&lvi);
}
for(i=0;i<TotalLine;i++)
{
if(Lines[i].nType==CHTYPE_TRUNK)
{
LoadString(hInst, IDS_TRUNK, sTmp, 128);
lvc.pszText = sTmp;
m_list.SetItemText( i, 1, sTmp);
}
else if(Lines[i].nType==CHTYPE_USER)
{
LoadString(hInst, IDS_USER, sTmp, 128);
lvc.pszText = sTmp;
m_list.SetItemText( i, 1, sTmp);
}
else if(Lines[i].nType==CHTYPE_RECORD)
{
LoadString(hInst, IDS_RECORD, sTmp, 128);
lvc.pszText = sTmp;
m_list.SetItemText( i, 1, sTmp);
}
else if(Lines[i].nType==CHTYPE_EMPTY)
{
LoadString(hInst, IDS_EMPTY, sTmp, 128);
lvc.pszText = sTmp;
m_list.SetItemText( i, 1, sTmp);
}
}
return TRUE;
}
void WINAPI yzExitSystem()
{
for(int i = 0; i < TotalLine; i++)
{
if(Lines[i].nType==CHTYPE_TRUNK)
{
StartSigCheck(i);
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_CONNECT:
LoadString(hInst, IDS_CH_CONNECTED, state, 100);
break;
case CH_CALLOUT:
LoadString(hInst, IDS_CH_CALLOUT, state, 100);
break;
case CH_CHECKDIALRESULT:
LoadString(hInst, IDS_CH_CHECKDIALRESULT, state, 100);
break;
case CH_WAIT:
LoadString(hInst, IDS_CH_WAIT, state, 100);
break;
}
m_list.GetItemText( trkno, 2, tmpstr, 100 ) ;
if ( strcmp(state,tmpstr )!=0)
m_list.SetItemText( trkno, 2, state );
switch(Lines[trkno].nDialStatus)
{
case S_NORESULT:
strcpy(state,"No Result");
break;
case S_BUSY:
strcpy(state,"Busy");
break;
case S_NOBODY:
strcpy(state,"No Body");
break;
case S_NODIALTONE:
strcpy(state,"No Dialtone");
break;
case S_NOSIGNAL:
strcpy(state,"No Signal");
break;
case S_CONNECT:
strcpy(state,"Connected");
break;
}
m_list.GetItemText( trkno, 3, tmpstr, 100 ) ;
if ( strcmp(state,tmpstr )!=0)
m_list.SetItemText( trkno, 3, state );
strcpy(state,Lines[trkno].Dtmf);
m_list.GetItemText( trkno, 4, tmpstr, 100 ) ;
if ( strcmp(state,tmpstr )!=0)
m_list.SetItemText( trkno, 4, state );
}
void yzResetChannel(int channelID)
{
if(Lines[channelID].nType==CHTYPE_TRUNK)
{
StartSigCheck(channelID);
HangUp(channelID);
Sig_ResetCheck(channelID);
}
Lines[channelID].Dtmf[0]=0;
Lines[channelID].CallerID[0]=0;
Lines[channelID].nDialStatus=S_NORESULT;
Lines[channelID].State=CH_WAIT;
}
char yzConvertDtmf(int ch)
{
char c;
switch(ch)
{
case 10:
c = '0';
break;
case 11:
c = '*';
break;
case 12:
c = '#';
break;
case 13:
case 14:
case 15:
c=ch-13+'a';
break;
case 0:
c='d';
break;
default:
c = ch + '0'; //transfer into ASCII code
break;
}
return c;
}
void WINAPI yzDoWork()
{
char FileName[100];
short int code;
int len;
PUSH_PLAY();
FeedSigFunc();
static int a=0;
for(int i=0;i<TotalLine;i++)
{
yzDrawState(i);
switch(Lines[i].State)
{
case CH_FREE:
break;
case CH_WAIT:
a++;
if(a>50)
{
a=0;
Lines[i].State=CH_CALLOUT;
}
break;
case CH_CALLOUT:
OffHook(i);
Sig_StartDial(i,Lines[i].Num,Lines[i].PreNum,Lines[i].Mode);
Lines[i].State=CH_CHECKDIALRESULT;
break;
case CH_CHECKDIALRESULT:
Lines[i].nDialStatus=Sig_CheckDial(i);
switch(Lines[i].nDialStatus)
{
case S_NORESULT:
break;
case S_CONNECT:
strcpy(FileName,VoicePath);
strcat(FileName,"bank.001");
InitDtmfBuf(i);
StartPlayFile(i,FileName,0L);
Lines[i].State = CH_CONNECT;
break;
case S_NOBODY:
case S_BUSY:
case S_NOSIGNAL:
case S_NODIALTONE:
yzResetChannel(i);
break;
}
break;
case CH_CONNECT:
len=strlen(Lines[i].Dtmf);
while((code=GetDtmfCode(i))!=-1)
{
Lines[i].Dtmf[len++]=yzConvertDtmf(code);
}
Lines[i].Dtmf[len]=0;
break;
default:
break;
}//end switch
if(Lines[i].nType==CHTYPE_TRUNK && (Lines[i].State==CH_CONNECT))
{
//if( Sig_CheckBusy(i) )
if( Sig_CheckBusy(i) || CheckPlayEnd(i) )
{
StopPlayFile(i);
yzResetChannel(i);
}
}
}//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 yzCallOut(int chan,char* PreNum,char* DialNum,int mode)
{
strcpy(Lines[chan].PreNum,PreNum);
strcpy(Lines[chan].Num,DialNum);
Lines[chan].Mode=mode;
Lines[chan].State=CH_CALLOUT;
}
void yzHangup(int channelID)
{
StartSigCheck(channelID);
HangUp(channelID);
Sig_ResetCheck(channelID);
Lines[channelID].Dtmf[0]=0;
Lines[channelID].CallerID[0]=0;
Lines[channelID].nDialStatus=S_NORESULT;
Lines[channelID].State=CH_FREE;
}
bool yzIsTrkChnl(int channelID)
{
if (CHTYPE_TRUNK == Lines[channelID].nType)
return true;
else
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -