📄 dipattn.c
字号:
/*
***********************************************************************
* Program : DIGINEX.C *
* Description : Demo program for PCI-1760 *
* Revision : 1.00 *
* Date : 3/31/1999 Advantech Co., Ltd. *
***********************************************************************
*
* FUNCTIONS:
*
* InitApplication() - Initializes window data and registers window class
*
* InitInstance() - Saves instance handle and creates main window
*
* MainWndProc() - Process main window messages
*
* ConfigDlgProc() - Process the dialog box messages for configuration
*/
#include <windows.h>
#include <stdlib.h>
#include <dos.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include "..\..\..\include\driver.h"
#include "..\..\..\include\os.h"
#include "resource.h"
// ------------------------------------------------------------------------
// CONSTANT DEFINITION
// ------------------------------------------------------------------------
#define MAX_DEVICES 100
// ------------------------------------------------------------------------
// GLOBAL VARIABLES
// ------------------------------------------------------------------------
HANDLE hInst; // current instance
HWND hMainWnd; // main window handle
static PT_DioReadBit ptDioReadBit; //xujin 2002.4.28
//static PT_DioReadPortByte ptDioReadPortByte;//xujin 2002.4.28
static PT_EnableEventEx ptEnableEventEx; // Enable event
static PT_FAICheck ptFAICheck; // FAICheck table
static PT_CheckEvent ptCheckEvent; // Check event
static PT_FDITransfer ptFDITransfer;
static ThreadhWnd;
HANDLE hThreadHandle;
DWORD dwThreadID;
char szErrMsg[80]; // Use for MESSAGEBOX function
LRESULT ErrCde; // Return error code
//
// used for fixed memory for the installed devices
//
DEVLIST DeviceList[MAX_DEVICES];
DEVLIST SubDeviceList[MAX_DEVICES];
LONG DriverHandle = (LONG)NULL; // driver handle
BOOL bRun = FALSE; // flag for running
BOOL bThreadflag = FALSE;
USHORT m_bContinue = FALSE;
USHORT gwDevice = 0, gwSubDevice = 0; // device index
USHORT gwChannel = 0; // input channel
//USHORT gwValue; // input value//xujin 2002.5.8
USHORT gwState; //input state //xujin 2002.5.8
SHORT gnNumOfDevices, gnNumOfSubdevices; // number of installed devices
USHORT gwScanTime = 1000; // scan time
DWORD gdwStartTime; // start time
DWORD gdwElapseTime = 0; // elapse time
USHORT gwOverrunCount = 0; // overrun count
FARPROC lpfnConfigDlgProc; // config. dialog procedure
FARPROC lpfnScanDlgProc; // scan dialog procedure
FARPROC lpfnConfigCounterProc; // Counter dialog procedure
FARPROC lpfnConfigFilterProc; // Filter dialog procedure
FARPROC lpfnConfigPatternProc; // Pattern dialog procedure
FARPROC lpfnConfigStatusProc; // Status dialog procedure
USHORT usFHiValue[8]={0,0,0,0,0,0,0,0}, usFLowValue[8]={0,0,0,0,0,0,0,0}, usFEnable = 0;
USHORT usPEnable = 0, usPValue = 0;
USHORT usSEnable = 0, usSRiseEdge = 0, usSFallEdge =0;
USHORT usCPreset[8] = {0,0,0,0,0,0,0,0}, usCMatchValue[8] = {0,0,0,0,0,0,0,0};
USHORT usCEnable=0, usCMatchEnable=0, usTrigEdge=0, usCOverflow=0;
USHORT usRSCount=0,usFSCount=0,usPCount=0,usCMCount=0,usCOCount=0;
ULONG retValueP=0, retValueS=0, retValueCM=0, retValueCO=0;
// ------------------------------------------------------------------------
// FUNCTION DECLARATION
// ------------------------------------------------------------------------
BOOL InitApplication(HANDLE);
BOOL InitInstance(HANDLE, int);
long FTYPE MainWndProc(HWND, UINT, WPARAM, LPARAM);
int FTYPE WinMain(HANDLE, HANDLE, LPSTR, int);
void UserThread();
void adPatternMatchEvent();
void adCounterMatchEvent();
void adCounterOverflowEvent();
void adStatusChangeEvent();
/***************************************************************************
FUNCTION: WinMain(HANDLE, HANDLE, LPSTR, int)
PURPOSE: calls initialization function, processes message loop
****************************************************************************/
int FTYPE WinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow)
HANDLE hInstance; /* current instance */
HANDLE hPrevInstance; /* previous instance */
LPSTR lpCmdLine; /* command line */
int nCmdShow; /* show-window type (open/icon) */
{
MSG msg; /* message */
if (!hPrevInstance) /* Other instances of app running? */
if (!InitApplication(hInstance)) /* Initialize shared things */
return (FALSE); /* Exits if unable to initialize */
// Perform initializations that apply to a specific instance
if (!InitInstance(hInstance, nCmdShow))
return (FALSE);
// Acquire and dispatch messages until a WM_QUIT message is received.
while (GetMessage(&msg, /* message structure */
(HWND)NULL, /* handle of window receiving the message */
(UINT)NULL, /* lowest message to examine */
(UINT)NULL)) /* highest message to examine */
{
TranslateMessage(&msg); /* Translates virtual key codes */
DispatchMessage(&msg); /* Dispatches message to window */
}
return (msg.wParam); /* Returns the value from PostQuitMessage */
}
/****************************************************************************
FUNCTION: InitApplication(HANDLE)
PURPOSE: Initializes window data and registers window class
****************************************************************************/
BOOL InitApplication(hInstance)
HANDLE hInstance; /* current instance */
{
WNDCLASS wc;
// Fill in window class structure with parameters that describe the
// main window.
wc.style = CS_HREDRAW | CS_VREDRAW; /* Class style(s). */
wc.lpfnWndProc = (WNDPROC)MainWndProc; /* window process procedure */
wc.cbClsExtra = 0; /* No per-class extra data. */
wc.cbWndExtra = 0; /* No per-window extra data. */
wc.hInstance = hInstance; /* Application that owns the class.*/
wc.hIcon = LoadIcon(hInstance, "IDI_ICON1");
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = "MyMenu"; /* Name of menu resource in .RC file. */
wc.lpszClassName = "MyClass"; /* Name used in call to CreateWindow. */
// Register the window class and return success/failure code.
return (RegisterClass(&wc));
}
/***************************************************************************
FUNCTION: InitInstance(HANDLE, int)
PURPOSE: Saves instance handle and creates main window
****************************************************************************/
BOOL InitInstance
(
HANDLE hInstance, // Current instance identifier.
int nCmdShow // Param for first ShowWindow() call.
)
{
// Save the instance handle in static variable, which will be used in
// many subsequence calls from this application to Windows.
hInst = hInstance;
// Create a main window for this application instance.
hMainWnd = CreateWindow(
"MyClass", /* See RegisterClass() call. */
"Advantech Driver Demo : Digital Input extesion" , /* Window title bar */
WS_OVERLAPPEDWINDOW, /* Window style. */
CW_USEDEFAULT, /* Default horizontal position. */
CW_USEDEFAULT, /* Default vertical position. */
CW_USEDEFAULT, /* Default width. */
CW_USEDEFAULT, /* Default height. */
NULL, /* Overlapped windows have no parent. */
NULL, /* Use the window class menu. */
hInstance, /* This instance owns this window. */
NULL /* Pointer not needed. */
);
// If window could not be created, return "failure"
if (!hMainWnd)
return (FALSE);
// Make the window visible; update its client area; and return "success"
ShowWindow(hMainWnd, nCmdShow); // Show the window
UpdateWindow(hMainWnd); // Sends WM_PAINT message
return (TRUE); // Returns the value from PostQuitMessage
}
/***************************************************************************
FUNCTION: ConfigFilterProc(HWND, unsigned, WPARAM, LPARAM)
PURPOSE: Processes dialog box messages for scan time settings
****************************************************************************/
BOOL FTYPE ConfigFilterProc
(
HWND hDlg, // window handle
unsigned message, // type of message
WPARAM wParam, // additional information
LPARAM lParam // additional information
)
{
char szBuffer[40];
USHORT i;
switch (message)
{
case WM_INITDIALOG :
for(i=0; i<8; i++)
if(usFEnable & (0x01 << i))
{ EnableWindow(GetDlgItem(hDlg,(IDC_ED_HiFilter0 + i)),TRUE);
EnableWindow(GetDlgItem(hDlg,(IDC_ED_LowFilter0 + i)),TRUE);
CheckDlgButton(hDlg,(IDC_Filter0 + i),TRUE);
sprintf(szBuffer, "%d", usFHiValue[i]);
SendDlgItemMessage(hDlg, (IDC_ED_HiFilter0 + i), EM_REPLACESEL, 0,
(LPARAM)((LPSTR)szBuffer));
sprintf(szBuffer, "%d", usFLowValue[i]);
SendDlgItemMessage(hDlg, (IDC_ED_LowFilter0 + i), EM_REPLACESEL, 0,
(LPARAM)((LPSTR)szBuffer));
}
else
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter0 + i),FALSE);
EnableWindow(GetDlgItem(hDlg,(IDC_ED_LowFilter0 + i)),FALSE);
CheckDlgButton(hDlg,(IDC_Filter0 + i),FALSE);}
return TRUE;
case WM_COMMAND :
switch (LOWORD(wParam))
{
case IDC_Filter0:
if(IsDlgButtonChecked(hDlg, IDC_Filter0))
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter0),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter0),TRUE);
SetFocus(GetDlgItem(hDlg,IDC_ED_HiFilter0));}
else
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter0),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter0),FALSE);}
break;
case IDC_Filter1:
if(IsDlgButtonChecked(hDlg, IDC_Filter1))
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter1),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter1),TRUE);
SetFocus(GetDlgItem(hDlg,IDC_ED_HiFilter1));}
else
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter1),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter1),FALSE);}
break;
case IDC_Filter2:
if(IsDlgButtonChecked(hDlg, IDC_Filter2))
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter2),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter2),TRUE);
SetFocus(GetDlgItem(hDlg,IDC_ED_HiFilter2));}
else
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter2),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter2),FALSE);}
break;
case IDC_Filter3:
if(IsDlgButtonChecked(hDlg, IDC_Filter3))
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter3),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter3),TRUE);
SetFocus(GetDlgItem(hDlg,IDC_ED_HiFilter3));}
else
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter3),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter3),FALSE);}
break;
case IDC_Filter4:
if(IsDlgButtonChecked(hDlg, IDC_Filter4))
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter4),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter4),TRUE);
SetFocus(GetDlgItem(hDlg,IDC_ED_HiFilter4));}
else
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter4),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter4),FALSE);}
break;
case IDC_Filter5:
if(IsDlgButtonChecked(hDlg, IDC_Filter5))
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter5),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter5),TRUE);
SetFocus(GetDlgItem(hDlg,IDC_ED_HiFilter5));}
else
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter5),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter5),FALSE);}
break;
case IDC_Filter6:
if(IsDlgButtonChecked(hDlg, IDC_Filter6))
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter6),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter6),TRUE);
SetFocus(GetDlgItem(hDlg,IDC_ED_HiFilter6));}
else
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter6),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter6),FALSE);}
break;
case IDC_Filter7:
if(IsDlgButtonChecked(hDlg, IDC_Filter7))
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter7),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter7),TRUE);
SetFocus(GetDlgItem(hDlg,IDC_ED_HiFilter7));}
else
{ EnableWindow(GetDlgItem(hDlg,IDC_ED_HiFilter7),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_ED_LowFilter7),FALSE);}
break;
case IDOK :
usFEnable = 0;
for(i=0;i<8;i++)
if(IsDlgButtonChecked(hDlg, (IDC_Filter0 + i)))
{
SendDlgItemMessage(hDlg, (IDC_ED_HiFilter0 + i), EM_GETLINE, 0, (LPARAM)szBuffer) ;
usFHiValue[i] = LOWORD(atol(szBuffer));
SendDlgItemMessage(hDlg, (IDC_ED_LowFilter0 + i), EM_GETLINE, 0, (LPARAM)szBuffer) ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -