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

📄 faxdemo.cpp

📁 传真演示系统(需硬件板卡支持)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <windows.h>
#include <commdlg.h>
#include <commctrl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>    
#include <wchar.h>    
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <mmsystem.h>

#include "..\\..\\..\\..\\inc\\tce1_32.h"
// add for test fax-card
#include "..\\..\\..\\..\\inc\\faxapi32.h"
// end of add
#include "..\\..\\..\\..\\inc\\ModemAPI.h"
#include "resource.h"
#include "FaxCvt.h"

#define LINE    5
#define STATUS  70
#define LINK    140
//#define HOSTCODE 340
//#define DTMFCODE 365

#define FREE                            800
#define PLAY                            801
#define GETDTMF                         802
#define INDEXPLAY                       803
#define RECORDFILE                      804
#define EXITRECORD                      805


#define RECEIVE                         1
#define SEND                            2
#define MODEM                           3

#define STANDARD_RESOLUTION     2
struct TRUNKSTRUCT
{
	int Status;
	int FaxCh;
	int ConvCh;
	char Code;
};
struct FAXSTRUCT
{
	int Status;
	int  CurrPage;
	int TotalPage;
	char SendFaxName[32];
};
char VoicePath[100];
bool bHaveLoadDriver;
HANDLE hInst;
HINSTANCE hLib;
HWND hGWnd;
int TotalLine;
int TotalFaxLine;

TRUNKSTRUCT* pTrunk;
FAXSTRUCT* pFax;
extern HANDLE* pThreadHandle;
extern DWORD* pThreadID;
extern CONVERTSTRUCT* pConv;

int DispRegFlag = 0;


LRESULT CALLBACK  WndProc (HWND hwnd, UINT message, UINT wParam, LONG lParam);
void WINAPI OutFax(int ChannelNo,char *Str);
void WINAPI OutStatus(int ChannelNo,char *Str);
void WINAPI OutLinkFax(int ChannelNo,char *Str);
void WINAPI DispTrunkStatus(int trunkID);
void ResetTrunk(int trunkID);

void WINAPI FaxEvent(HWND hwnd);
bool WINAPI InitCard(HWND hWnd);
void WINAPI ExitCard();
void WINAPI GetVoicePath();
VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);

int SendFlag = 0;

int PASCAL WinMain(	HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdParam, int nCmdShow)
{
	static char szAppName[] = "FaxDemo";
	HWND        hwnd;
	MSG         msg;
	WNDCLASS    wndclass;
	char strSys[200];

	if (strnicmp ( lpszCmdParam, "s", 1 ) == 0)		// disp single
		DispRegFlag = 1;
	if (strnicmp ( lpszCmdParam, "a", 1 ) == 0)		// disp all
		DispRegFlag = 2;

//	Unused(lpszCmdParam);

	if (!hPrevInstance)
	{
		wndclass.style         = CS_HREDRAW | CS_VREDRAW;
		wndclass.lpfnWndProc   = (WNDPROC)WndProc;
		wndclass.cbClsExtra    = 0 ;
		wndclass.cbWndExtra    = DLGWINDOWEXTRA;
		wndclass.hInstance     = hInstance;
		wndclass.hIcon         = LoadIcon (hInstance, "IDI_FAXDEMO");
		wndclass.hCursor       = LoadCursor (NULL, IDI_APPLICATION);
		wndclass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
		wndclass.lpszMenuName  = NULL;
		wndclass.lpszClassName = szAppName;

		ATOM a=RegisterClass (&wndclass);
	}

	GetSystemDirectory(strSys,200);
	strcat(strSys,"\\comctl32.dll");
	hLib = LoadLibrary(strSys);

	hInst = hInstance;
	hwnd = CreateDialog(hInstance, "FAXDEMO", 0, NULL);
	hGWnd=hwnd;
	
	ShowWindow (hwnd, nCmdShow);
	UpdateWindow(hwnd);
	
	bHaveLoadDriver=InitCard(hwnd);
	if(!bHaveLoadDriver) PostQuitMessage(0);

	GetVoicePath();

	FARPROC lpProc;
	lpProc = MakeProcInstance((FARPROC)TimerProc, hInstance);
	SetTimer(hwnd,ID_TIME,100,(TIMERPROC)lpProc); 

	while (GetMessage(&msg, NULL, 0, 0)) 
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam ;
}
VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{ 
	if(idEvent!=ID_TIME) return;
	DJSys_PushPlay();
	FaxEvent(hwnd);

}

LRESULT CALLBACK  WndProc (HWND hwnd, UINT message, UINT wParam, LONG lParam)
{

	switch (message)
	{
	 	case WM_DESTROY :
			KillTimer(hwnd,ID_TIME);
			if(bHaveLoadDriver) ExitCard();
			PostQuitMessage (0) ;
			return 0 ;
			break;
		case WM_COMMAND:
			if(LOWORD(wParam)==ID_OK)
			{
				KillTimer(hwnd,ID_TIME);
				if(bHaveLoadDriver) ExitCard();
				PostQuitMessage(0);
			}
			return 0;
			break;
	}
	return DefWindowProc (hwnd, message, wParam, lParam) ;
}


bool WINAPI InitCard(HWND hWnd)
{
	if ( DJSys_EnableCard("","PROMPT.INI" ) ) 
	{
		MessageBox ( hWnd, "Load driver FAIL", "Message", MB_OK );
		return false;
	}
	DJSys_DisableWarn();
	TotalLine = DJTrk_GetTotalTrunkNum();


	if ( DJFax_DriverReady(2048) ) 
	{
		MessageBox ( hWnd, "Load Fax Driver Fail", "Message", MB_OK );
		DJSys_DisableCard();
		return false;
	}
			
	TotalFaxLine = DJFax_GetTotalFaxChnl();
	pTrunk=new TRUNKSTRUCT[TotalLine];
	pFax=new FAXSTRUCT[TotalFaxLine];
	for(int i = 0; i < TotalFaxLine; i++)
	{
		pFax[i].CurrPage = 0;
		pFax[i].TotalPage = 0;
		pFax[i].Status=0;
	}

	InitConvert();
	for(i = 0; i < TotalLine; i++)
	{
		pTrunk[i].Status = 0;
		pTrunk[i].FaxCh=-1;
		pTrunk[i].ConvCh=-1;
		DJTrk_SetTrunkType(i,Type_Import);
		DJTrk_InitDtmfBuf(i);
	}

	static int ColumnWidth[60] = {20, 80, 50, 70, 150, 100, 50, 150};
	LV_COLUMN lvc;
	char dig[10];
	lvc.mask =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	lvc.iSubItem = 0;
	lvc.pszText = "Ch" ;
	lvc.cx = ColumnWidth[0];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),0,&lvc);
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_FAXLIST),0,&lvc);

	lvc.iSubItem=1;
	lvc.cx=40;
	lvc.pszText="通道状态";
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),1,&lvc);
	lvc.iSubItem = 2;
	lvc.pszText = "流程状态" ;
	lvc.cx = ColumnWidth[1];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),2,&lvc);
	lvc.iSubItem=1;
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_FAXLIST),1,&lvc);
	
	lvc.iSubItem = 2;
	lvc.pszText = "连接" ;
	lvc.cx = ColumnWidth[2];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_STATELIST),3,&lvc);

	lvc.iSubItem=2;
	lvc.pszText = "Reg1" ;
	lvc.cx = ColumnWidth[3];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_FAXLIST),2,&lvc);

	lvc.iSubItem=3;
	lvc.pszText = "Reg2" ;
	lvc.cx = ColumnWidth[4];
	ListView_InsertColumn(GetDlgItem(hGWnd,IDC_FAXLIST),3,&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);
		OutStatus(i,"FREE");
	}
	for(i = 0; i < TotalFaxLine; i++)	
	{
		lvi.mask = LVIF_TEXT;
		lvi.iItem = i;
		lvi.iSubItem = 0;
		itoa( i, dig, 10 ) ; 
		lvi.pszText = dig;
		ListView_InsertItem(GetDlgItem(hGWnd,IDC_FAXLIST),&lvi);
		OutFax(i,"Free ...");
	}
			
	return true;
}
void WINAPI ExitCard()
{
	ExitConvert();
	DJSys_DisableCard();
	DJFax_DisableCard();
	delete pTrunk;
	delete pFax;
}
void WINAPI OutStatus(int ChannelNo,char *Str)
{
	char tmpstr[128];
	ListView_GetItemText(GetDlgItem(hGWnd,IDC_STATELIST), ChannelNo, 2, tmpstr, 128) ;
		if ( strcmp(Str,tmpstr )!=0) 
			ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), ChannelNo, 2, Str );
}

void WINAPI OutLinkFax(int ChannelNo,char *Str)
{
	char tmpstr[128];
	ListView_GetItemText(GetDlgItem(hGWnd,IDC_STATELIST), ChannelNo, 3, tmpstr, 128 ) ;
		if ( strcmp(Str,tmpstr )!=0) 
			ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), ChannelNo, 3, Str );
}


void WINAPI OutFax(int ChannelNo,char *Str)
{
	char tmpstr[128];
	ListView_GetItemText(GetDlgItem(hGWnd,IDC_FAXLIST), ChannelNo, 1, tmpstr, 128 ) ;
		if ( strcmp(Str,tmpstr )!=0) 
			ListView_SetItemText(GetDlgItem(hGWnd,IDC_FAXLIST), ChannelNo, 1, Str );
} 
// ---------------------- this is for good-fax, don't care --------------
void WINAPI DispTrunkStatus(int trunkID)
{
	char state[10];
	switch( DJTrk_GetTrunkStatus( trunkID ) )
	{
		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_ForeHangOff:  strcpy(state, "FHNG");break;
		case Step_BackHangOff:  strcpy(state, "BFNG");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;
	}
	char tmpstr[10];
	ListView_GetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trunkID, 1, tmpstr, 108) ;
	if ( strcmp(state,tmpstr )!=0) 
		ListView_SetItemText(GetDlgItem(hGWnd,IDC_STATELIST), trunkID, 1, state);
}
void DispVal()
{
	int i;
	char TmpStr[60],State[60];
	char s[10];
	for ( i = 0; i < TotalFaxLine; i ++ ) 
	{
		sprintf ( TmpStr, "%d ", GF_GetVal(i,GF_TYPE_CONNECT_FLAG) );
		sprintf ( s, "%d  ", GF_GetVal(i,GF_TYPE_CHANNEL_FLAG) );
		strcat(TmpStr,s);

		if ( GF_GetVal(i,GF_TYPE_CARD_VERSION) == 1 )
			sprintf ( s, "* " );
		else
			sprintf ( s, "- " );
		strcat(TmpStr,s);

		sprintf (s, "%d  ", GF_GetVal(i, GF_TYPE_RESET_COUNT) );
		strcat(TmpStr,s);

		sprintf ( s, "%d  ", GF_GetVal(i, GF_TYPE_CARD_FLAG) );
		strcat(TmpStr,s);
		ListView_GetItemText(GetDlgItem(hGWnd,IDC_FAXLIST), i, 2, State, 60 ) ;
		if ( strcmp(State,TmpStr )!=0) 
		ListView_SetItemText(GetDlgItem(hGWnd,IDC_FAXLIST), i, 2, TmpStr );
	}
}

void DispReg()
{
	int i,j;
	BYTE c;
	char TmpStr[60],State[60],sss[10];

	for ( i = 0; i < TotalFaxLine; i ++ ) 
	{
		strcpy ( TmpStr, "" );
		for ( j = 0; j < 9; j ++ ) 
		{
			DJFax_GetValue(i,&c,j,1);
			sprintf ( sss, "%02x ", c );
			strcat ( TmpStr, sss );
		}
		ListView_GetItemText(GetDlgItem(hGWnd,IDC_FAXLIST), i, 3, State, 60 ) ;
		if ( strcmp(State,TmpStr )!=0) 
		ListView_SetItemText(GetDlgItem(hGWnd,IDC_FAXLIST), i, 3, TmpStr );
	}
}

void DispSomething()
{
	SYSTEMTIME SysTime;
	static WORD wOldSec=0;
	WORD wSec;

	GetSystemTime(  &SysTime );
	wSec = SysTime.wSecond;

	if ( wOldSec != wSec ) {
		wOldSec = wSec;
		if ( DispRegFlag >= 1 )
			DispVal();
		if ( DispRegFlag >= 2 )
			DispReg();
	}
}

// ---------------------- end of good-fax  ----------------------------
void ResetTrunk(int trunkID)
{
	int userID = DJTrk_GetConnectUserID( trunkID );
	if( userID >= 0 )
		DJExg_ClearLinkTrunkAndUserByTrunk( trunkID );
	int voiceID = DJTrk_GetTrunkRecordID( trunkID );
	if( voiceID >= 0 )
	{
		DJVoc_StopPlayFile(trunkID);
	}
	else
	{
		if ( trunkID == 0 ) 
		{
			int aabb = 0;
		}
		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 )
				DJVoc_StopPlayFile(trunkID);
			DJExg_ClearLinkPlayVoiceFromTrunk( trunkID );
		}
	}

	DJTrk_BackwardHangUp( trunkID );
	pTrunk[trunkID].Status=0;
	OutStatus(trunkID,"FREE");
}

// add for new modem buffer
char ModemBuf[128][256];

⌨️ 快捷键说明

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