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

📄 dadma.c

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 C
📖 第 1 页 / 共 3 页
字号:
                        if(SendDlgItemMessage(hDlg, IDC_ESTOP,
                                  EM_GETMODIFY, 0, 0))
                        {
                           SendDlgItemMessage(hDlg, IDC_ESTOP,
                                  WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                           gwStopChl = atoi(szBuffer);
                           SendDlgItemMessage(hDlg, IDC_ESTOP,
                                  EM_SETMODIFY, FALSE, 0) ;
                        }
                     }
                     return TRUE;

                case IDC_INTTRIG :
                     EnableWindow(GetDlgItem(hDlg, IDC_PACER), TRUE);
                     gwExtTrig = 0;
                     break;;
                case IDC_EXTTRIG :
                     EnableWindow(GetDlgItem(hDlg, IDC_PACER), FALSE);
                     gwExtTrig = 1;
                     break;
                case IDC_CYCLIC :
                     gwCyclicMode = 1;
                     break;
                case IDC_NONCYCLIC :
                     gwCyclicMode = 0;
                     break;
                case IDC_EVTENABLE :
                    gwEvtFlag = 1;
                    break;
                case IDC_EVTDISABLE :
                    gwEvtFlag = 0;
                    break;
             }
             break;
    }
    return FALSE ;
}

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

    PURPOSE:  Processes dialog box messages for waveform setting
****************************************************************************/

BOOL FTYPE WaveDlgProc(hDlg, message, wParam, lParam)
HWND hDlg;                              /* window handle                   */
unsigned message;                       /* type of message                 */
WPARAM wParam;                          /* additional information          */
LPARAM lParam;                          /* additional information          */
{
    int  i;

    switch (message)
    {
        case WM_INITDIALOG :

             if (gwBufferMode)
             {
                EnableWindow(GetDlgItem(hDlg, IDC_WAVE_B), TRUE);
                EnableWindow(GetDlgItem(hDlg, IDC_MAGNITUDE_B), TRUE);
                EnableWindow(GetDlgItem(hDlg, IDC_OFFSET_B), TRUE);
                EnableWindow(GetDlgItem(hDlg, IDC_PERIOD_B), TRUE);
             }
             else
             {
                EnableWindow(GetDlgItem(hDlg, IDC_WAVE_B), FALSE);
                EnableWindow(GetDlgItem(hDlg, IDC_MAGNITUDE_B), FALSE);
                EnableWindow(GetDlgItem(hDlg, IDC_OFFSET_B), FALSE);
                EnableWindow(GetDlgItem(hDlg, IDC_PERIOD_B), FALSE);
             }

             // Initialize Output Waveform's Selection
             for (i = 0; i < 3; i ++)
             {
                 SendDlgItemMessage(hDlg, IDC_WAVE_A, CB_ADDSTRING, 0,
                       (LPARAM)((LPSTR)szWaveform[i]));
                 SendDlgItemMessage(hDlg, IDC_WAVE_B, CB_ADDSTRING, 0,
                       (LPARAM)((LPSTR)szWaveform[i]));
             }

             SendDlgItemMessage(hDlg, IDC_WAVE_A, CB_SELECTSTRING, (WPARAM)(-1),
                    (LPARAM)((LPSTR)szWaveform[sWaveA.wWaveform]));
             SendDlgItemMessage(hDlg, IDC_WAVE_B, CB_SELECTSTRING,
                    (WPARAM)(-1), (LPARAM)((LPSTR)szWaveform[sWaveB.wWaveform]));

             // Initialize Magnitude
             sprintf(szBuffer, "%6.2f", sWaveA.fMagnitude);
             SendDlgItemMessage(hDlg, IDC_MAGNITUDE_A, EM_REPLACESEL, 0,
                             (LPARAM)((LPSTR)szBuffer));
             sprintf(szBuffer, "%6.2f", sWaveB.fMagnitude);
             SendDlgItemMessage(hDlg, IDC_MAGNITUDE_B, EM_REPLACESEL, 0,
                             (LPARAM)((LPSTR)szBuffer));

             // Initialize Offset
             sprintf(szBuffer, "%6.2f", sWaveA.fOffset);
             SendDlgItemMessage(hDlg, IDC_OFFSET_A, EM_REPLACESEL, 0,
                             (LPARAM)((LPSTR)szBuffer));
             sprintf(szBuffer, "%6.2f", sWaveB.fOffset);
             SendDlgItemMessage(hDlg, IDC_OFFSET_B, EM_REPLACESEL, 0,
                             (LPARAM)((LPSTR)szBuffer));

             // Initialize Period
             itoa(sWaveA.wPeriod, szBuffer, 10);
             SendDlgItemMessage(hDlg, IDC_PERIOD_A, EM_REPLACESEL, 0,
                             (LPARAM)((LPSTR)szBuffer));
             itoa(sWaveB.wPeriod, szBuffer, 10);
             SendDlgItemMessage(hDlg, IDC_PERIOD_B, EM_REPLACESEL, 0,
                             (LPARAM)((LPSTR)szBuffer));

             return TRUE;

        case WM_COMMAND :
             switch (LOWORD(wParam))
             {
                case IDOK :
                case IDCANCEL :
                     EndDialog(hDlg, 0);
                     return TRUE;

                case IDC_WAVE_A :
                     if (HIWORD(wParam) == CBN_KILLFOCUS)
                     {
                        i = (int)SendDlgItemMessage(hDlg, IDC_WAVE_A,
                                  CB_GETCURSEL, 0, 0) ;
                        if (i != CB_ERR)
                           sWaveA.wWaveform = i;
                     }
                     return TRUE;

                case IDC_WAVE_B :
                     if (HIWORD(wParam) == CBN_KILLFOCUS)
                     {
                        i = (int)SendDlgItemMessage(hDlg, IDC_WAVE_B,
                                  CB_GETCURSEL, 0, 0) ;
                        if (i != CB_ERR)
                           sWaveB.wWaveform = i;
                     }
                     return TRUE;

                case IDC_MAGNITUDE_A :
                     if (HIWORD(wParam) == EN_KILLFOCUS)
                     {
                        if(SendDlgItemMessage(hDlg, IDC_MAGNITUDE_A,
                                  EM_GETMODIFY, 0, 0))
                        {
                           SendDlgItemMessage(hDlg, IDC_MAGNITUDE_A,
                                  WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                           sWaveA.fMagnitude = (float)atof(szBuffer);
                           SendDlgItemMessage(hDlg, IDC_MAGNITUDE_A,
                                  EM_SETMODIFY, FALSE, 0) ;
                        }
                     }
                     return TRUE;

                case IDC_MAGNITUDE_B :
                     if (HIWORD(wParam) == EN_KILLFOCUS)
                     {
                        if(SendDlgItemMessage(hDlg, IDC_MAGNITUDE_B,
                                  EM_GETMODIFY, 0, 0))
                        {
                           SendDlgItemMessage(hDlg, IDC_MAGNITUDE_B,
                                  WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                           sWaveB.fMagnitude = (float)atof(szBuffer);
                           SendDlgItemMessage(hDlg, IDC_MAGNITUDE_B,
                                  EM_SETMODIFY, FALSE, 0) ;
                        }
                     }
                     return TRUE;

                case IDC_OFFSET_A :
                     if (HIWORD(wParam) == EN_KILLFOCUS)
                     {
                        if(SendDlgItemMessage(hDlg, IDC_OFFSET_A,
                                  EM_GETMODIFY, 0, 0))
                        {
                           SendDlgItemMessage(hDlg, IDC_OFFSET_A,
                                  WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                           sWaveA.fOffset = (float)atof(szBuffer);
                           SendDlgItemMessage(hDlg, IDC_OFFSET_A,
                                  EM_SETMODIFY, FALSE, 0) ;
                        }
                     }
                     return TRUE;

                case IDC_OFFSET_B :
                     if (HIWORD(wParam) == EN_KILLFOCUS)
                     {
                        if(SendDlgItemMessage(hDlg, IDC_OFFSET_B,
                                  EM_GETMODIFY, 0, 0))
                        {
                           SendDlgItemMessage(hDlg, IDC_OFFSET_B,
                                  WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                           sWaveB.fOffset = (float)atof(szBuffer);
                           SendDlgItemMessage(hDlg, IDC_OFFSET_B,
                                  EM_SETMODIFY, FALSE, 0) ;
                        }
                     }
                     return TRUE;

                case IDC_PERIOD_A :
                     if (HIWORD(wParam) == EN_KILLFOCUS)
                     {
                        if(SendDlgItemMessage(hDlg, IDC_PERIOD_A,
                                  EM_GETMODIFY, 0, 0))
                        {
                           SendDlgItemMessage(hDlg, IDC_PERIOD_A,
                                  WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                           sWaveA.wPeriod = atoi(szBuffer);
                           SendDlgItemMessage(hDlg, IDC_PERIOD_A,
                                  EM_SETMODIFY, FALSE, 0) ;
                        }
                     }
                     return TRUE;

                case IDC_PERIOD_B:
                     if (HIWORD(wParam) == EN_KILLFOCUS)
                     {
                        if(SendDlgItemMessage(hDlg, IDC_PERIOD_B,
                                  EM_GETMODIFY, 0, 0))
                        {
                           SendDlgItemMessage(hDlg, IDC_PERIOD_B,
                                  WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                           sWaveB.wPeriod = atoi(szBuffer);
                           SendDlgItemMessage(hDlg, IDC_PERIOD_B,
                                  EM_SETMODIFY, FALSE, 0) ;
                        }
                     }
                     return TRUE;
             }
             break;
    }
    return FALSE ;
}

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

    PURPOSE:  Processes messages

    MESSAGES:

        WM_CREATE     - create window
        WM_COMMAND    - application menu (About dialog box)
        WM_DESTROY    - destroy window
****************************************************************************/

long FTYPE MainWndProc(hWnd, message, wParam, lParam)
HWND hWnd;                              /* window handle                   */
unsigned message;                       /* type of message                 */
WPARAM wParam;                            /* additional information          */
LPARAM lParam;                            /* additional information          */
{
    int     dec, sign;
    TEXTMETRIC tm;
    HDC     hdc;
    static  int cxChar, cyChar;
    char    *szStr, szDest[100], szTemp[50];
    double  ratio;
    DWORD   dwExitCode;
    BOOL    bThreadStatus;

    switch (message)
      {
       case WM_CREATE:

            hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;

            lpfnConfigDlgProc = MakeProcInstance (ConfigDlgProc, hInstance) ;

            lpfnWaveDlgProc = MakeProcInstance (WaveDlgProc, hInstance) ;

            hdc = GetDC(hWnd);
            SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));
            GetTextMetrics(hdc, &tm);
            cxChar = tm.tmAveCharWidth;
            cyChar = tm.tmHeight + tm.tmExternalLeading;
            ReleaseDC(hWnd, hdc);

            //Create stop button and status button
			        //Create stop button and status button
            hwndStopButton = CreateWindow("button", "Stop",
                (DWORD)(WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON),
                0, 0, 8*cxChar, 3*cyChar/2, hWnd,
                (HMENU)IDC_STOPBUTTON,
                (HANDLE)hInstance, (LPVOID)NULL);

            hwndStatusButton = CreateWindow("button", "Status",
                (DWORD)(WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON),
                8*cxChar, 0, 8*cxChar, 3*cyChar/2, hWnd,
                (HMENU)IDC_STATUSBUTTON,
                (HANDLE)hInstance, (LPVOID)NULL);

            EnableWindow(hwndStopButton, FALSE);
            EnableWindow(hwndStatusButton, FALSE);

            return 0 ;

       case WM_COMMAND:     /* message: from application menu */

         hMenu = GetMenu(hWnd);

         switch(LOWORD(wParam))
          {
            // Show the dialog box of the input parameter
            case IDM_SETTING :

                DialogBox (hInstance, MAKEINTRESOURCE(IDD_SETTING),
                         hWnd, lpfnConfigDlgProc) ;
                return 0;

            case IDM_WAVEFORM :

                DialogBox (hInstance, MAKEINTRESOURCE(IDD_WAVEFORM),
                         hWnd, lpfnWaveDlgProc) ;
                return 0;

           case IDM_RUN :

                // Step 1: Device open
                ErrCde = DRV_DeviceOpen(dwDeviceNum,
                    (LONG far *)&DriverHandle);
                if (ErrCde != SUCCESS)
                {
                    DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                    MessageBox(hWnd,(LPCSTR)szErrMsg,"Device Open",MB_OK);
                    return 0;
                }

                // Step 2: Allocate memory used by driver
                if((hBuf=(USHORT far *)GlobalAlloc(GHND,
                    sizeof(USHORT) * gulConvNum)) == 0)
                {
                    MessageBox(hWnd,"Not enough memory for buffer ",
                        "High Speed",MB_OK);
                    DRV_DeviceClose((LONG far *)&DriverHandle);
                    return 0;
                }

                // Step 3: Allocate memory for real voltage
                if((hVoltageBuf=(FLOAT far *)GlobalAlloc(GHND,
                    sizeof(FLOAT) * gulConvNum)) == 0)
                {
                    MessageBox(hWnd,"Not enough memory for buffer ",
                        "High Speed",MB_OK);
                    GlobalFree(hBuf);
                    DRV_DeviceClose((LONG far *)&DriverHandle);
                    return 0;
                }

                // Step 4: Allocate memory for binary data
                if((hBinaryBuf=(USHORT far *)GlobalAlloc(GHND,
                    sizeof(USHORT) * gulConvNum)) == 0)
                {
                    MessageBox(hWnd,"Not enough memory for buffer ",
                        "High Speed",MB_OK);
                    GlobalFree(hBuf);
                    GlobalFree(hVoltageBuf);
                    DRV_DeviceClose((LONG far *)&DriverHandle);
                    return 0;
                }

                // Step 5: Allocate DMA buffer for DMA transfer
                ptAllocateDMABuffer.CyclicMode = gwCyclicMode;
                ptAllocateDMABuffer.RequestBufSize = gulConvNum * 2;
                ptAllocateDMABuffer.ActualBufSize = &gwActualBufSize;
                ptAllocateDMABuffer.buffer = &pBuffer;
                if ((ErrCde = DRV_AllocateDMABuffer(DriverHandle,
                    (LPT_AllocateDMABuffer)&ptAllocateDMABuffer)) != SUCCESS)
                {
                    DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                    MessageBox(hWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
                    GlobalUnlock(hBuf); GlobalFree(hBuf);
                    GlobalUnlock(hVoltageBuf); GlobalFree(hVoltageBuf);
                    GlobalUnlock(hBinaryBuf); GlobalFree(hBinaryBuf);
                    DRV_DeviceClose((LONG far *)&DriverHandle);
                    return 0;
                }

⌨️ 快捷键说明

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