📄 diintdlg.cpp
字号:
m_DisableBtn2.EnableWindow( TRUE );
m_EnableBtn2.EnableWindow( FALSE );
m_DeviceSelect.EnableWindow(FALSE);
if ( m_bFlag == FALSE )
{
m_bContinue = TRUE;
ptThreadArg.m_lDriverHandle = m_DriverHandle;
ptThreadArg.m_hWnd = GetSafeHwnd();
// Using THREAD_PRIORITY_TIME_CRITICAL for interrupt event handling routine,
// you can get about 20 KHz response ratio by using PENTIUM 200 MMX PC.
pThreadObject = AfxBeginThread( CDiIntDlg::EventThread, &ptThreadArg, THREAD_PRIORITY_TIME_CRITICAL, 0, 0, NULL );
m_pThreadHandle = pThreadObject->m_hThread;
}
}
void CDiIntDlg::OnEnableBtn3()
{
PT_EnableEvent EventSetting;
CWinThread* pThreadObject;
m_bDI0Flag = TRUE;
usStartFlag = 1;
EventSetting.Enabled = TRUE;
EventSetting.EventType = ADS_EVT_INTERRUPT_DI0;
EventSetting.Count = m_uCount_DI0;
m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
if ( m_ErrCde != 0 )
{
DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
return;
}
m_DisableBtn3.EnableWindow( TRUE );
m_EnableBtn3.EnableWindow( FALSE );
m_DeviceSelect.EnableWindow(FALSE);
if ( m_bFlag == FALSE )
{
m_bContinue = TRUE;
ptThreadArg.m_lDriverHandle = m_DriverHandle;
ptThreadArg.m_hWnd = GetSafeHwnd();
// Using THREAD_PRIORITY_TIME_CRITICAL for interrupt event handling routine
pThreadObject = AfxBeginThread(
CDiIntDlg::EventThread,
&ptThreadArg,
THREAD_PRIORITY_TIME_CRITICAL,
0,
0,
NULL );
m_pThreadHandle = pThreadObject->m_hThread;
}
}
void CDiIntDlg::OnEnableBtn4()
{
PT_EnableEvent EventSetting;
CWinThread* pThreadObject;
m_bDI1Flag = TRUE;
usStartFlag = 1;
EventSetting.Enabled = TRUE;
EventSetting.Count = m_uCount_DI1;
EventSetting.EventType = ADS_EVT_INTERRUPT_DI1;
m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
if ( m_ErrCde != 0)
{
DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
return;
}
m_DisableBtn4.EnableWindow( TRUE );
m_EnableBtn4.EnableWindow( FALSE );
m_DeviceSelect.EnableWindow(FALSE);
if ( m_bFlag == FALSE )
{
m_bContinue = TRUE;
ptThreadArg.m_lDriverHandle = m_DriverHandle;
ptThreadArg.m_hWnd = GetSafeHwnd();
// Using THREAD_PRIORITY_TIME_CRITICAL for interrupt event handling routine
pThreadObject = AfxBeginThread(
CDiIntDlg::EventThread,
&ptThreadArg,
THREAD_PRIORITY_TIME_CRITICAL,
0,
0,
NULL );
m_pThreadHandle = pThreadObject->m_hThread;
}
}
void CDiIntDlg::OnDisableBtn1()
{
PT_EnableEvent EventSetting;
BOOL flag = FALSE;
m_bIDI0Flag = FALSE;
if ( !(m_bDI0Flag || m_bDI1Flag || m_bIDI0Flag || m_bIDI1Flag ))
{
KillThread();
if ( !m_StartFlag )
{
m_DeviceSelect.EnableWindow( TRUE );
}
}
usStartFlag = 0;
while ( !flag )
{
m_DisableBtn1.EnableWindow( FALSE );
m_EnableBtn1.EnableWindow( TRUE );
EventSetting.EventType = ADS_EVT_INTERRUPT_IDI0;
EventSetting.Enabled = FALSE;
m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
//Sleep(50L);
if ( m_ErrCde != 0 )
{
DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
return;
}
flag = TRUE;
}
}
void CDiIntDlg::OnDisableBtn2()
{
PT_EnableEvent EventSetting;
BOOL flag = FALSE;
m_bIDI1Flag = FALSE;
if ( !( m_bDI0Flag || m_bDI1Flag || m_bIDI1Flag || m_bIDI0Flag ))
{
KillThread();
if ( !m_StartFlag )
{
m_DeviceSelect.EnableWindow( TRUE );
}
}
usStartFlag = 0;
while ( !flag )
{
m_DisableBtn2.EnableWindow( FALSE );
m_EnableBtn2.EnableWindow( TRUE );
EventSetting.EventType = ADS_EVT_INTERRUPT_IDI1;
EventSetting.Enabled = FALSE;
m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
if ( m_ErrCde != 0 )
{
DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
return;
}
flag = TRUE;
}
}
void CDiIntDlg::OnDisableBtn3()
{
PT_EnableEvent EventSetting;
BOOL flag = FALSE;
m_bDI0Flag = FALSE;
if ( !( m_bDI0Flag || m_bDI1Flag || m_bIDI1Flag || m_bIDI0Flag ))
{
KillThread();
if ( !m_StartFlag )
{
m_DeviceSelect.EnableWindow( TRUE );
}
}
usStartFlag = 0;
while ( !flag )
{
m_DisableBtn3.EnableWindow( FALSE );
m_EnableBtn3.EnableWindow( TRUE );
EventSetting.EventType = ADS_EVT_INTERRUPT_DI0;
EventSetting.Enabled = FALSE;
m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
if ( m_ErrCde != 0 )
{
DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
return;
}
flag = TRUE;
}
}
void CDiIntDlg::OnDisableBtn4()
{
PT_EnableEvent EventSetting;
BOOL flag = FALSE;
m_bDI1Flag = FALSE;
if ( !( m_bDI0Flag || m_bDI1Flag || m_bIDI0Flag || m_bIDI1Flag ))
{
KillThread();
if ( !m_StartFlag )
{
m_DeviceSelect.EnableWindow( TRUE );
}
}
usStartFlag = 0;
while ( !flag )
{
m_DisableBtn4.EnableWindow( FALSE );
m_EnableBtn4.EnableWindow( TRUE );
EventSetting.EventType = ADS_EVT_INTERRUPT_DI1;
EventSetting.Enabled = FALSE;
m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
if ( m_ErrCde != 0 )
{
DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
return;
}
flag = TRUE;
}
}
void CDiIntDlg::OnClose()
{
// PT_EnableEvent EventSetting;
// TODO: Add your message handler code here and/or call default
m_bContinue = FALSE;
if( usStartFlag == 1 )
{
usStartFlag = 0;
if ( m_bIDI0Flag == TRUE )
{
OnDisableBtn1();
}
if ( m_bIDI1Flag == TRUE )
{
OnDisableBtn2();
}
if ( m_bDI0Flag == TRUE )
{
OnDisableBtn3();
}
if ( m_bDI1Flag == TRUE )
{
OnDisableBtn4();
}
//EventSetting.Enabled = FALSE;
//EventSetting.Count = 1;
//m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
//if ( m_ErrCde != 0) {
// DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
// MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
// return; }
}
Sleep(50L);
if ( m_DriverHandle != NULL )
DRV_DeviceClose( &m_DriverHandle );
CDialog::OnClose();
}
void CDiIntDlg::OnOK()
{
// TODO: Add extra validation here
//PT_EnableEvent EventSetting;
m_bContinue = FALSE;
if( usStartFlag == 1 )
{
usStartFlag = 0;
if ( m_bIDI0Flag == TRUE )
{
OnDisableBtn1();
}
if ( m_bIDI1Flag == TRUE )
{
OnDisableBtn2();
}
if ( m_bDI0Flag == TRUE)
{
OnDisableBtn3();
}
if ( m_bDI1Flag == TRUE )
{
OnDisableBtn4();
}
//EventSetting.Enabled = FALSE;
//EventSetting.Count = 1;
//m_ErrCde = DRV_EnableEvent( m_DriverHandle, &EventSetting );
//if ( m_ErrCde != 0)
//{
// DRV_GetErrorMessage( m_ErrCde, (LPSTR)m_szErrMsg );
// MessageBox( (LPCSTR)m_szErrMsg, "Driver Message", MB_OK );
// return;
//}
}
if ( m_DriverHandle != NULL )
DRV_DeviceClose( &m_DriverHandle );
CDialog::OnOK();
}
void CDiIntDlg::OnChangeScanTime()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function to send the EM_SETEVENTMASK message to the control
// with the ENM_CHANGE flag ORed into the lParam mask.
// TODO: Add your control notification handler code here
UpdateData(TRUE);
}
void CDiIntDlg::OnChangeCountDI0()
{
UpdateData(TRUE);
}
void CDiIntDlg::OnChangeCountDI1()
{
UpdateData(TRUE);
}
void CDiIntDlg::OnChangeCountIDI0()
{
UpdateData(TRUE);
}
void CDiIntDlg::OnChangeCountIDI1()
{
UpdateData(TRUE);
}
UINT CDiIntDlg::EventThread(LPVOID ThreadArg)
{
INT i;
DWORD dwStartTime;
DWORD dwCurrentTime;
DWORD dwTime;
float fEventCount_IDI[4];
float ratio_IDI[ 4 ];
char szBuf_IDI[4][20];
USHORT usEventType;
PT_ThreadArg *ptTArg;
ptTArg = (PT_ThreadArg *)ThreadArg;
for ( i = 0; i < 4; i++ )
{
fEventCount_IDI[ i ] = 0.0;
}
ptCheckEvent.EventType = &usEventType;
ptCheckEvent.Milliseconds = 1000;
dwStartTime = GetTickCount();
while ( m_bContinue )
{
m_bFlag = TRUE;
if ( DRV_CheckEvent( ptTArg->m_lDriverHandle, &ptCheckEvent ) == SUCCESS)
{
if ( *ptCheckEvent.EventType == ADS_EVT_INTERRUPT_IDI0 )
{
fEventCount_IDI[ 0 ]++;
}
if ( *ptCheckEvent.EventType == ADS_EVT_INTERRUPT_IDI1 )
{
fEventCount_IDI[ 1 ]++;
}
if ( *ptCheckEvent.EventType == ADS_EVT_INTERRUPT_DI0 )
{
fEventCount_IDI[ 2 ]++;
}
if ( *ptCheckEvent.EventType == ADS_EVT_INTERRUPT_DI1 )
{
fEventCount_IDI[ 3 ]++;
}
}
//m_bFlag = FALSE;
dwCurrentTime = GetTickCount();
if ( ( dwTime = dwCurrentTime - dwStartTime ) >= 1000 )
{
for ( i = 0; i < 4; i++ )
{
ratio_IDI[i] = ((fEventCount_IDI[i] / (float)dwTime) * 1000.0);
sprintf( szBuf_IDI[i], "%.3f", ratio_IDI[i] );
fEventCount_IDI[i] = 0.0;
}
::SetDlgItemText( ptTArg->m_hWnd, IDC_INTERRUPTCOUNT_IDI0, szBuf_IDI[0] );
::SetDlgItemText( ptTArg->m_hWnd, IDC_INTERRUPTCOUNT_IDI1, szBuf_IDI[1] );
::SetDlgItemText( ptTArg->m_hWnd, IDC_INTERRUPTCOUNT_DI0, szBuf_IDI[2] );
::SetDlgItemText( ptTArg->m_hWnd, IDC_INTERRUPTCOUNT_DI1, szBuf_IDI[3] );
dwStartTime = GetTickCount();
}
}
//m_bFlag = FALSE;
return 0;
}
void CDiIntDlg::OnEventPriority1()
{
// TODO: Add your control notification handler code here
m_bHiPriority = FALSE;
}
void CDiIntDlg::OnEventPriority2()
{
// TODO: Add your control notification handler code here
m_bHiPriority = TRUE;
}
void CDiIntDlg::KillThread()
{
DWORD dwExitCode;
m_bContinue = FALSE;
m_bFlag = FALSE;
GetExitCodeThread( m_pThreadHandle, &dwExitCode );
if( dwExitCode == STILL_ACTIVE )
{
TerminateThread( m_pThreadHandle, dwExitCode );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -