📄 wdadmabm.c
字号:
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 + -