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

📄 dipattn.c

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
 ***********************************************************************
 *  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 + -