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

📄 portio.c

📁 Advantech Driver Demo : port I/O 软件修改 控制外板输出
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 ***********************************************************************
 *  Program     : PORTIO.C                                             *
 *  Description : Demo program for Port I/O                            *
 *  Revision    : 1.00                                                 *
 *  Date        : 6/3/1997                    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>              /* required for all Windows applications */
#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

char        szErrMsg[80];             // used for MESSAGEBOX function
LRESULT     ErrCde;                   // return error code

LONG        glDevNum = 0;             // device index
USHORT      gwPort = 0x200;           // device index
USHORT      gwDiState = 0;            // read port data
USHORT      gwDoState = 0;            // write port data
FARPROC     lpfnConfigDlgProc;        // config. dialog procedure
FARPROC     lpfnRunDlgProc;           // run dialog procedure


// ------------------------------------------------------------------------
// FUNCTION DECLARATION
// ------------------------------------------------------------------------
BOOL InitApplication(HANDLE hInstance);
BOOL InitInstance(HANDLE hInstance, int nCmdShow);
long FTYPE MainWndProc(HWND, UINT, WPARAM, LPARAM);
int  FTYPE WinMain(HANDLE hInstance, HANDLE hPrevInstance,
     LPSTR lpCmdLine, int nCmdShow);

static int StringToDec(char *szStr, int nBase);
static int Power(int nBase, int nPow);

/***************************************************************************
    FUNCTION: WinMain(HANDLE, HANDLE, LPSTR, int)

    PURPOSE: calls initialization function, processes message loop
****************************************************************************/

int PASCAL WinMain
(
    HANDLE      hInstance,                  // current instance
    HANDLE      hPrevInstance,              // previous instance
    LPSTR       lpCmdLine,                  // command line
    int         nCmdShow                    // show-window type (open/icon)
)
{
    MSG msg;                                // message

    if (!hPrevInstance)
        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
(
    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 : Port I/O" ,    // 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: ConfigDlgProc(HWND, unsigned, WPARAM, LPARAM)

    PURPOSE:  Processes dialog box messages for configuration
****************************************************************************/

BOOL  FTYPE ConfigDlgProc
(
    HWND        hDlg,                          // window handle
    unsigned    message,                       // type of message
    WPARAM      wParam,                        // additional information
    LPARAM      lParam                         // additional information
)
{
    char        szBuffer[40];

    switch (message)
    {
    case WM_INITDIALOG :

        // Initialize Device Number

        ltoa(glDevNum, szBuffer, 10);
        SendDlgItemMessage(hDlg, IDC_DEVNUM, EM_REPLACESEL, 0,
                        (LPARAM)((LPSTR)szBuffer));

        // Initialize Port Address

        ltoa((long)gwPort, szBuffer, 16);
        SendDlgItemMessage(hDlg, IDC_PORT, EM_REPLACESEL, 0,
                        (LPARAM)((LPSTR)szBuffer));

        return TRUE;

   case WM_COMMAND :
        switch (LOWORD(wParam))
        {
           case IDOK :

               // Get device number

               if (SendDlgItemMessage(hDlg, IDC_DEVNUM,
                        EM_GETMODIFY, 0, 0))
               {
                   SendDlgItemMessage(hDlg, IDC_DEVNUM,
                             WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                   glDevNum = StringToDec(szBuffer,16);
               }

               // Get port address

               if (SendDlgItemMessage(hDlg, IDC_PORT,
                        EM_GETMODIFY, 0, 0))
               {
                   SendDlgItemMessage(hDlg, IDC_PORT,
                             WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                   gwPort = StringToDec(szBuffer,16);
               }

                EndDialog(hDlg, 0);
                return TRUE;

           case IDCANCEL :
                EndDialog(hDlg, 0);
                return TRUE;

        }
        break;
    }
    return FALSE ;
}

/***************************************************************************
    FUNCTION: RunDlgProc(HWND, unsigned, WPARAM, LPARAM)

    PURPOSE:  Processes dialog box messages for IDD_RUN
****************************************************************************/

BOOL  FTYPE RunDlgProc
(
    HWND        hDlg,                          // window handle
    unsigned    message,                       // type of message
    WPARAM      wParam,                        // additional information
    LPARAM      lParam                         // additional information
)
{
    char        szBuffer[40];

    switch (message)
    {
    case WM_INITDIALOG :

        // Initialize Output Byte Value Check Button

        CheckDlgButton(hDlg, IDC_D0,  (gwDoState & 0x1));
        CheckDlgButton(hDlg, IDC_D1,  (gwDoState & 0x2));
        CheckDlgButton(hDlg, IDC_D2,  (gwDoState & 0x4));
        CheckDlgButton(hDlg, IDC_D3,  (gwDoState & 0x8));

⌨️ 快捷键说明

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