📄 d.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 + -