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

📄 wdadmabm.c

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 C
📖 第 1 页 / 共 4 页
字号:
                                  WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                           sWaveCh1.fOffset = (float)atof(szBuffer);
                           SendDlgItemMessage(hDlg, IDC_OFFSET_CH1,
                                  EM_SETMODIFY, FALSE, 0) ;
                        }
                     }
                     return TRUE;

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

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

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

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

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

                case IDC_PERIOD_CH3:
                     if (HIWORD(wParam) == EN_KILLFOCUS)
                     {
                        if(SendDlgItemMessage(hDlg, IDC_PERIOD_CH3,
                                  EM_GETMODIFY, 0, 0))
                        {
                           SendDlgItemMessage(hDlg, IDC_PERIOD_CH3,
                                  WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                           sWaveCh3.wPeriod = atoi(szBuffer);
                           SendDlgItemMessage(hDlg, IDC_PERIOD_CH3,
                                  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          */
{
    TEXTMETRIC tm;
    HDC     hdc;
    static  int cxChar, cyChar;
    char    szBuffer[120];
    RECT    rect;
	int		i;
	BOOL	bflag = TRUE;



    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);

            EnableWindow(hwndStopButton, FALSE);

            return 0 ;

       case WM_CLOSE:

		   MyFreeBuffer();
		   DestroyWindow( hWnd ); 
 

		   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 buffer and set data to buffer
				// Process 4 channel 				
				usChannelCount = 0;    // reset channel count
				usEnabledChannel = 0;
				for(i=0; i<4; i++)
				{

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

					// Allocate memory for real voltage
					if((hVoltageBuf[i]=(FLOAT far *)GlobalAlloc(GPTR,
						sizeof(FLOAT) * gulConvNum)) == 0)
					{
						MessageBox(hWnd,"Not enough memory for buffer ",
							"High Speed",MB_OK);
						DRV_DeviceClose((LONG far *)&DriverHandle);
						return 0;
					}


					lpBuf[i] = (USHORT far *)hBuf[i];
					lpVoltageBuf[i] = (FLOAT far  *)hVoltageBuf[i];

					switch(i)
					{
					case 0 : 
							 if(sWaveCh0.wWaveform != 4)  // 4 --> No Waveform
							 {
								 usEnabledChannel |= ADV_CHANNEL0;
								 // set real voltage to hVoltageBuf
								 SetRealBuffer(lpVoltageBuf[0], gulConvNum, &sWaveCh0);
								 usChannelCount++;
							 }
							 else
								 continue;

							 break;
					case 1 : 
							 if(sWaveCh1.wWaveform != 4)  
							 {
								 usEnabledChannel |= ADV_CHANNEL1;
								 SetRealBuffer(lpVoltageBuf[1], gulConvNum, &sWaveCh1);
								 usChannelCount++;
							 }
							 else
								 continue;

							 break;
					case 2 : 
							 if(sWaveCh2.wWaveform != 4) 
							 {
								 usEnabledChannel |= ADV_CHANNEL2;
								 SetRealBuffer(lpVoltageBuf[2], gulConvNum, &sWaveCh2);
								 usChannelCount++;
							 }
							 else
								 continue;

							 break;
					case 3 : 
							 if(sWaveCh3.wWaveform != 4) 
							 {
								 usEnabledChannel |= ADV_CHANNEL3;
								 SetRealBuffer(lpVoltageBuf[3], gulConvNum, &sWaveCh3);
								 usChannelCount++;
							 }
							 else
								 continue;

							 break;
					}
				
					// call FAOScale for transfer voltage to binary data
					ptFAOScale.VoltArray = lpVoltageBuf[i];
					ptFAOScale.BinArray  = lpBuf[i];
					ptFAOScale.chan      = i;
					ptFAOScale.count     = gulConvNum;
					if ((ErrCde = DRV_FAOScale(DriverHandle,
						(LPT_FAOScale)&ptFAOScale)) != 0)
					{
						DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
						MessageBox(hWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
						MyFreeBuffer();
						DRV_DeviceClose((LONG far *)&DriverHandle);
						return 0;
					}
				}

				// Allocate memory for common buffer of 4 channel
				if((hCommonBuf=(USHORT far *)GlobalAlloc(GHND, 
						sizeof(USHORT) * gulConvNum * usChannelCount)) == 0)
				{
					MessageBox(hWnd,"Not enough memory for buffer ",
						"High Speed",MB_OK);
					MyFreeBuffer();
					DRV_DeviceClose((LONG far *)&DriverHandle);
					return 0;
				}

			    // Lock down buffer
			    if((lpCommonBuf = (USHORT far *)GlobalLock(hCommonBuf)) == 0)
				{
					MessageBox(hWnd,"Not enough memory for buffer ",
						"High Speed",MB_OK);
					MyFreeBuffer();
					GlobalFree(hCommonBuf);
					DRV_DeviceClose((LONG far *)&DriverHandle);
					return 0;
				}

				// set 4 buffer to 1 common buffer
				SetMultiToOneBuffer(usEnabledChannel,gulConvNum);


                // Step 3: Enable event feature
                ptEnableEvent.EventType = ADS_EVT_INTERRUPT  |
                    ADS_EVT_BUFCHANGE  |
                    ADS_EVT_TERMINATED |
                    ADS_EVT_OVERRUN;
                ptEnableEvent.Enabled = gwEvtFlag;
                ptEnableEvent.Count   = 1;
                if ((ErrCde = DRV_EnableEvent(DriverHandle,
                    (LPT_EnableEvent)&ptEnableEvent)) != 0)
                {
                    DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                    MessageBox(hWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
					MyFreeBuffer(); 
					DRV_DeviceClose((LONG far *)&DriverHandle);
                    return 0;
                }

                // Step 4: call FAOWaveFormStart for start action
                // Default steting - 
				// conversion number = 2048 * 4
                // Enabled Channel = 0,1,2,3
				// pacer rate = 1000 Hz
				// output waveform number = 30

		        ptFAOWaveFormStart.TrigSrc    = gwExtTrig;					// triggering
			    ptFAOWaveFormStart.SampleRate = gdwPacerRate;				// pacer rate = 1K
				ptFAOWaveFormStart.Count      = gulConvNum * usChannelCount;// DA conversion number
				ptFAOWaveFormStart.WaveCount  = gwWaveFormCount;			// Waveform number

⌨️ 快捷键说明

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