📄 dio_soft_dword.c
字号:
for (i = 0; i < gnNumOfSubdevices; i++)
{
SendDlgItemMessage(
hDlg,
IDC_MODULE,
CB_ADDSTRING,
0,
(LPARAM)((LPSTR)SubDeviceList[i].szDeviceName));
}
SendDlgItemMessage(
hDlg,
IDC_MODULE,
CB_SETCURSEL,
(WPARAM)gwSubDevice,
(LPARAM)0);
}
else
{
EnableWindow(GetDlgItem(hDlg, IDC_MODULE), FALSE);
SendDlgItemMessage(
hDlg,
IDC_MODULE,
CB_RESETCONTENT,
0,
(LPARAM)((LPSTR)0));
}
// -----------------------------
// Initialize Output Channel
// -----------------------------
sprintf( szBuffer, "%d", gwPort);
SendDlgItemMessage(
hDlg,
IDC_PORT,
EM_REPLACESEL,
0,
(LPARAM)((LPSTR)szBuffer));
return TRUE;
}
case WM_COMMAND :
switch (LOWORD(wParam))
{
case IDOK :
{
// get device selection
dwIndex = SendDlgItemMessage(
hDlg,
IDC_DEVICE,
CB_GETCURSEL,
0,
0);
if (dwIndex != CB_ERR)
{
gwDevice = (WORD)dwIndex;
}
// get sub-device selection
dwIndex = SendDlgItemMessage(
hDlg,
IDC_MODULE,
CB_GETCURSEL,
0,
0);
if (dwIndex != CB_ERR)
{
gwSubDevice = (WORD)dwIndex;
}
// Get channel number
if ( SendDlgItemMessage(
hDlg,
IDC_PORT,
EM_GETMODIFY,
0,
0))
{
SendDlgItemMessage(
hDlg,
IDC_PORT,
WM_GETTEXT,
10,
( LPARAM )( LPSTR )szBuffer ) ;
gwPort = atoi( szBuffer );
}
EndDialog(hDlg, 0);
return TRUE;
}
case IDCANCEL :
{
EndDialog(hDlg, 0);
return TRUE;
}
case IDC_DEVICE:
{
// When device selection is changed, it needs to
// re-initialize sub-device combobox and input range
// combobox.
if (HIWORD(wParam) == CBN_SELCHANGE)
{
dwIndex = SendDlgItemMessage(
hDlg,
IDC_DEVICE,
CB_GETCURSEL,
0,
0);
if (dwIndex != CB_ERR)
{
gwDevice = (WORD)dwIndex;
}
else
{
return TRUE;
}
// ------------------------------------------------------
// Initialize Module Combobox for COM port or CAN devices
// ------------------------------------------------------
// check any device attached on this COM port or CAN
gnNumOfSubdevices = DeviceList[gwDevice].nNumOfSubdevices;
if (gnNumOfSubdevices > MAX_DEVICES)
{
gnNumOfSubdevices = MAX_DEVICES;
}
// retrieve the information of all installed devices
if (gnNumOfSubdevices != 0)
{
ErrCde = DRV_DeviceGetSubList(
(DWORD)DeviceList[gwDevice].dwDeviceNum,
(DEVLIST far *)&SubDeviceList[0],
(SHORT)gnNumOfSubdevices,
(SHORT far *)&nOutEntries);
if (ErrCde != (LONG)SUCCESS)
{
DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
MessageBox(
hMainWnd,
(LPCSTR)szErrMsg,
"Driver Message",
MB_OK);
return TRUE;
}
// initialize the Module List Combobox with the
// retrieved information
EnableWindow(GetDlgItem(hDlg, IDC_MODULE), TRUE);
SendDlgItemMessage(
hDlg,
IDC_MODULE,
CB_RESETCONTENT,
0,
(LPARAM)((LPSTR)0));
for (i = 0; i < gnNumOfSubdevices; i++)
{
SendDlgItemMessage(
hDlg,
IDC_MODULE,
CB_ADDSTRING,
0,
(LPARAM)((LPSTR)SubDeviceList[i].szDeviceName));
}
gwSubDevice = 0;
SendDlgItemMessage(
hDlg,
IDC_MODULE,
CB_SETCURSEL,
(WPARAM)gwSubDevice,
(LPARAM)0);
}
else
{
EnableWindow(GetDlgItem(hDlg, IDC_MODULE), FALSE);
SendDlgItemMessage(
hDlg,
IDC_MODULE,
CB_RESETCONTENT,
0,
(LPARAM)((LPSTR)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];
char *pchar;
int i;
USHORT usPorts;
switch (message)
{
case WM_INITDIALOG :
{
// Initialize Output Byte Value Check Button
for (i = 0; i < 32; i++)
{
CheckDlgButton( hDlg, (IDC_D0 + i), ( glDoState & (0x1<<i)) );
}
// show write Word mask.
//_ltoa( gwWriteMask, szBuffer, 16 );
sprintf(szBuffer,"%X",gwWriteMask);
SendDlgItemMessage(
hDlg,
IDC_WRITEWORDMASK,
WM_SETTEXT,
0,
( LPARAM )( ( LPSTR )szBuffer ) );
// show write DWord mask.
//_ltoa( glWriteMask, szBuffer, 16 );
sprintf(szBuffer,"%X",glWriteMask);
SendDlgItemMessage(
hDlg,
IDC_WRITEDWORDMASK,
WM_SETTEXT,
0,
( LPARAM )( ( LPSTR )szBuffer ) );
//
// open device
if (gnNumOfSubdevices == 0)
{
ErrCde = DRV_DeviceOpen(
DeviceList[gwDevice].dwDeviceNum,
(LONG far *)&DriverHandle);
}
else
{
ErrCde = DRV_DeviceOpen(
SubDeviceList[gwSubDevice].dwDeviceNum,
(LONG far *)&DriverHandle);
}
if (ErrCde != SUCCESS)
{
strcpy(szErrMsg,"Device open error !");
MessageBox(hDlg,(LPCSTR)szErrMsg,"Notice",MB_OK);
return 0;
}
//Get device features
ptDevFeatures.buffer = (LPDEVFEATURES)&DevFeatures;
ptDevFeatures.size = sizeof(DEVFEATURES);
ErrCde = DRV_DeviceGetFeatures(
DriverHandle,
(LPT_DeviceGetFeatures)&ptDevFeatures);
if (ErrCde != SUCCESS)
{
DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
MessageBox(hDlg,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
DRV_DeviceClose((LONG far *)&DriverHandle);
}
//If the hardware does not have DI ports
//Then the DI functions is unuasable
if (ptDevFeatures.buffer->usMaxDIChl == 0)
{
EnableWindow(GetDlgItem(hDlg, IDC_READWORD), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_READDWORD), FALSE);
}
//disable unused channels according to port num
usPorts = (ptDevFeatures.buffer->usMaxDOChl)/8;
usTemp = ptDevFeatures.buffer->usMaxDOChl % 8;
if (usTemp != 0)
{
usPorts++;
for (i = (usPorts - 1) * 8 + usTemp; i < usPorts * 8; i++)
{
EnableWindow(GetDlgItem(hDlg, (IDC_D0 + i)), FALSE);
}
}
if (gwPort > (usPorts - 1))
{
for (i = 0; i < 32; i++)
{
EnableWindow(GetDlgItem(hDlg, (IDC_D0 + i)), FALSE);
}
}
if (gwPort == (usPorts - 1))
{
for (i = 8; i < 32; i++)
{
EnableWindow(GetDlgItem(hDlg, (IDC_D0 + i)), FALSE);
}
}
else if (gwPort == (usPorts - 2))
{
for (i = 16; i < 32; i++)
{
EnableWindow(GetDlgItem(hDlg, (IDC_D0 + i)), FALSE);
}
}
else if (gwPort == (usPorts - 3))
{
for (i = 24; i < 32; i++)
{
EnableWindow(GetDlgItem(hDlg, (IDC_D0 + i)), FALSE);
}
}
return TRUE;
}
case WM_COMMAND :
{
switch (LOWORD(wParam))
{
case IDCANCEL :
{
EndDialog(hDlg, 0);
if (DriverHandle != (LONG)NULL)
{
ErrCde = DRV_DeviceClose(&DriverHandle);
}
if (ErrCde != SUCCESS)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -