/* * $RCSfile: sample0Dlg.cpp,v $ * $Date: 2009/10/09 17:24:35 $ * $Revision: 1.6 $ * jEdit:collapseFolds=1:tabSize=4: * * class CSample0Dlg implementation */ #include "stdafx.h" #include "sample0.h" #include "sample0Dlg.h" #include "DetectDialog.h" #include "AIOUSB.h" BEGIN_MESSAGE_MAP(CSample0Dlg, CDialog) //{{AFX_MSG_MAP(CSample0Dlg) ON_BN_CLICKED(IDC_AUT0_UPDATE_CHECK, OnAutoUpdateCheck) ON_BN_CLICKED(IDC_UPDATE_BUTTON, OnUpdateButton) ON_CBN_SELCHANGE(IDC_RANGE_COMBO, OnSelchangeRangeCombo) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER0, OnReleasedcaptureSlider0) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER1, OnReleasedcaptureSlider1) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER2, OnReleasedcaptureSlider2) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER3, OnReleasedcaptureSlider3) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER4, OnReleasedcaptureSlider4) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER5, OnReleasedcaptureSlider5) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER6, OnReleasedcaptureSlider6) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER7, OnReleasedcaptureSlider7) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER8, OnReleasedcaptureSlider8) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER9, OnReleasedcaptureSlider9) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER10, OnReleasedcaptureSlider10) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER11, OnReleasedcaptureSlider11) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER12, OnReleasedcaptureSlider12) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER13, OnReleasedcaptureSlider13) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER14, OnReleasedcaptureSlider14) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER15, OnReleasedcaptureSlider15) ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP END_MESSAGE_MAP() CSample0Dlg::CSample0Dlg( unsigned long deviceIndex, unsigned productID, CWnd *pParent /* = NULL */ ) : CDialog( CSample0Dlg::IDD, pParent ) { this->deviceIndex = deviceIndex; this->productID = productID; //{{AFX_DATA_INIT(CSample0Dlg) m_label0 = _T(""); m_label1 = _T(""); m_label2 = _T(""); m_label3 = _T(""); m_label4 = _T(""); m_label5 = _T(""); m_label6 = _T(""); m_label7 = _T(""); m_label8 = _T(""); m_label9 = _T(""); m_label10 = _T(""); m_label11 = _T(""); m_label12 = _T(""); m_label13 = _T(""); m_label14 = _T(""); m_label15 = _T(""); m_autoUpdate = FALSE; //}}AFX_DATA_INIT m_hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME ); /* * device properties depend on the product ID */ switch( productID ) { // case CSample0App::USB_AO16_16A: default: numDACBits = 16; numDACs = 16; numADCs = 2; break; case CSample0App::USB_AO16_16: numDACBits = 16; numDACs = 16; numADCs = 0; break; case CSample0App::USB_AO16_12A: numDACBits = 16; numDACs = 12; numADCs = 2; break; case CSample0App::USB_AO16_12: numDACBits = 16; numDACs = 12; numADCs = 0; break; case CSample0App::USB_AO16_8A: numDACBits = 16; numDACs = 8; numADCs = 2; break; case CSample0App::USB_AO16_8: numDACBits = 16; numDACs = 8; numADCs = 0; break; case CSample0App::USB_AO16_4A: numDACBits = 16; numDACs = 4; numADCs = 2; break; case CSample0App::USB_AO16_4: numDACBits = 16; numDACs = 4; numADCs = 0; break; case CSample0App::USB_AO12_16A: numDACBits = 12; numDACs = 16; numADCs = 2; break; case CSample0App::USB_AO12_16: numDACBits = 12; numDACs = 16; numADCs = 0; break; case CSample0App::USB_AO12_12A: numDACBits = 12; numDACs = 12; numADCs = 2; break; case CSample0App::USB_AO12_12: numDACBits = 12; numDACs = 12; numADCs = 0; break; case CSample0App::USB_AO12_8A: numDACBits = 12; numDACs = 8; numADCs = 2; break; case CSample0App::USB_AO12_8: numDACBits = 12; numDACs = 8; numADCs = 0; break; case CSample0App::USB_AO12_4A: numDACBits = 12; numDACs = 4; numADCs = 2; break; case CSample0App::USB_AO12_4: numDACBits = 12; numDACs = 4; numADCs = 0; break; } // switch( productID ) } // CSample0Dlg::CSample0Dlg() void CSample0Dlg::DoDataExchange( CDataExchange *pDX ) { CDialog::DoDataExchange( pDX ); //{{AFX_DATA_MAP(CSample0Dlg) DDX_Check(pDX, IDC_AUT0_UPDATE_CHECK, m_autoUpdate); DDX_Control(pDX, IDC_RANGE_COMBO, daRangeComboBox); DDX_Control(pDX, IDC_SLIDER0, m_slider0); DDX_Control(pDX, IDC_SLIDER1, m_slider1); DDX_Control(pDX, IDC_SLIDER2, m_slider2); DDX_Control(pDX, IDC_SLIDER3, m_slider3); DDX_Control(pDX, IDC_SLIDER4, m_slider4); DDX_Control(pDX, IDC_SLIDER5, m_slider5); DDX_Control(pDX, IDC_SLIDER6, m_slider6); DDX_Control(pDX, IDC_SLIDER7, m_slider7); DDX_Control(pDX, IDC_SLIDER8, m_slider8); DDX_Control(pDX, IDC_SLIDER9, m_slider9); DDX_Control(pDX, IDC_SLIDER10, m_slider10); DDX_Control(pDX, IDC_SLIDER11, m_slider11); DDX_Control(pDX, IDC_SLIDER12, m_slider12); DDX_Control(pDX, IDC_SLIDER13, m_slider13); DDX_Control(pDX, IDC_SLIDER14, m_slider14); DDX_Control(pDX, IDC_SLIDER15, m_slider15); DDX_Control(pDX, IDC_UPDATE_BUTTON, m_UpdateButton); DDX_Text(pDX, IDC_LABEL0, m_label0); DDX_Text(pDX, IDC_LABEL1, m_label1); DDX_Text(pDX, IDC_LABEL2, m_label2); DDX_Text(pDX, IDC_LABEL3, m_label3); DDX_Text(pDX, IDC_LABEL4, m_label4); DDX_Text(pDX, IDC_LABEL5, m_label5); DDX_Text(pDX, IDC_LABEL6, m_label6); DDX_Text(pDX, IDC_LABEL7, m_label7); DDX_Text(pDX, IDC_LABEL8, m_label8); DDX_Text(pDX, IDC_LABEL9, m_label9); DDX_Text(pDX, IDC_LABEL10, m_label10); DDX_Text(pDX, IDC_LABEL11, m_label11); DDX_Text(pDX, IDC_LABEL12, m_label12); DDX_Text(pDX, IDC_LABEL13, m_label13); DDX_Text(pDX, IDC_LABEL14, m_label14); DDX_Text(pDX, IDC_LABEL15, m_label15); //}}AFX_DATA_MAP } // CSample0Dlg::DoDataExchange() BOOL CSample0Dlg::OnInitDialog() { CDialog::OnInitDialog(); SetIcon( m_hIcon, TRUE ); SetIcon( m_hIcon, FALSE ); sliders[0] = &m_slider0; sliders[1] = &m_slider1; sliders[2] = &m_slider2; sliders[3] = &m_slider3; sliders[4] = &m_slider4; sliders[5] = &m_slider5; sliders[6] = &m_slider6; sliders[7] = &m_slider7; sliders[8] = &m_slider8; sliders[9] = &m_slider9; sliders[10] = &m_slider10; sliders[11] = &m_slider11; sliders[12] = &m_slider12; sliders[13] = &m_slider13; sliders[14] = &m_slider14; sliders[15] = &m_slider15; labels[0] = &m_label0; labels[1] = &m_label1; labels[2] = &m_label2; labels[3] = &m_label3; labels[4] = &m_label4; labels[5] = &m_label5; labels[6] = &m_label6; labels[7] = &m_label7; labels[8] = &m_label8; labels[9] = &m_label9; labels[10] = &m_label10; labels[11] = &m_label11; labels[12] = &m_label12; labels[13] = &m_label13; labels[14] = &m_label14; labels[15] = &m_label15; m_autoUpdate = TRUE; daRangeComboBox.SetCurSel( 0 ); UpdateRange( 0 ); /* * we use the same D/A count range for both the 12-bit and 16-bit D/As; * the reason we can do so is that the 12-bit D/As automatically truncate * the LS 4 bits from the count value; so the count range for the 16-bit * D/As is 0-0xffff, while that for the 12-bit D/As is 0-0xfff0 */ const unsigned INITIAL_COUNTS = 0; const unsigned MAX_COUNTS = 0xffff; bool dacError = false; for( int channel = 0; channel < MAX_CHANNELS; channel++ ) { sliders[ channel ]->SetRange( 0, MAX_COUNTS, FALSE ); sliders[ channel ]->SetPos( INITIAL_COUNTS ); sliders[ channel ]->EnableWindow( channel < numDACs ); labels[ channel ]->Format( "%04X", INITIAL_COUNTS ); if( channel < numDACs ) if( DACDirect( deviceIndex, channel, INITIAL_COUNTS ) != ERROR_SUCCESS ) dacError = true; } // for( int channel ... if( dacError ) MessageBox( "Error initializing DACs", "Error", MB_ICONERROR ); UpdateData( FALSE ); UpdateControls(); /* * get the device name and update dialog title to reflect actual device name */ const int MAX_NAME_SIZE = 256; char name[ MAX_NAME_SIZE + 2 ]; unsigned long nameSize = MAX_NAME_SIZE; const unsigned long result = QueryDeviceInfo( deviceIndex, NULL, &nameSize, name, NULL, NULL ); if( result == ERROR_SUCCESS ) { name[ nameSize ] = 0; CString dialogTitle; dialogTitle.Format( "%s Sample Program - %d %d-bit D/A Channels", name, numDACs, numDACBits ); SetWindowText( dialogTitle ); } else MessageBox( "Error querying device information", "Error", MB_ICONERROR ); return TRUE; } // CSample0Dlg::OnInitDialog() void CSample0Dlg::UpdateControls() { m_UpdateButton.EnableWindow( ! m_autoUpdate ); } // CSample0Dlg::UpdateControls() void CSample0Dlg::OnPaint() { if( IsIconic() ) { CPaintDC dc( this ); SendMessage( WM_ICONERASEBKGND, ( WPARAM ) dc.GetSafeHdc(), 0 ); // center icon in client rectangle int cxIcon = GetSystemMetrics( SM_CXICON ); int cyIcon = GetSystemMetrics( SM_CYICON ); CRect rect; GetClientRect( &rect ); int x = ( rect.Width() - cxIcon + 1 ) / 2; int y = ( rect.Height() - cyIcon + 1 ) / 2; // draw the icon dc.DrawIcon( x, y, m_hIcon ); } else { CDialog::OnPaint(); } // if( IsIconic() ) } // CSample0Dlg::OnPaint() HCURSOR CSample0Dlg::OnQueryDragIcon() { return ( HCURSOR ) m_hIcon; } // CSample0Dlg::OnQueryDragIcon() void CSample0Dlg::UpdateRange( int range ) { if( range >= 0 && range <= 3 ) { if( DACSetBoardRange( deviceIndex, range ) != ERROR_SUCCESS ) MessageBox( "Error setting DAC range", "Error", MB_ICONERROR ); } // if( range ... } // CSample0Dlg::UpdateRange() void CSample0Dlg::UpdateSlider( int channel ) { if( channel < numDACs ) { const unsigned counts = sliders[ channel ]->GetPos(); labels[ channel ]->Format( "%04X", counts ); UpdateData( FALSE ); if( m_autoUpdate ) { if( DACDirect( deviceIndex, channel, counts ) != ERROR_SUCCESS ) MessageBox( "Error setting DACs", "Error", MB_ICONERROR ); } // if( m_autoUpdate ) } // if( channel ... } // CSample0Dlg::UpdateSlider() void CSample0Dlg::OnReleasedcaptureSlider0( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 0 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider0() void CSample0Dlg::OnReleasedcaptureSlider1( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 1 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider1() void CSample0Dlg::OnReleasedcaptureSlider2( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 2 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider2() void CSample0Dlg::OnReleasedcaptureSlider3( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 3 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider3() void CSample0Dlg::OnReleasedcaptureSlider4( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 4 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider4() void CSample0Dlg::OnReleasedcaptureSlider5( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 5 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider5() void CSample0Dlg::OnReleasedcaptureSlider6( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 6 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider6() void CSample0Dlg::OnReleasedcaptureSlider7( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 7 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider7() void CSample0Dlg::OnReleasedcaptureSlider8( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 8 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider8() void CSample0Dlg::OnReleasedcaptureSlider9( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 9 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider9() void CSample0Dlg::OnReleasedcaptureSlider10( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 10 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider10() void CSample0Dlg::OnReleasedcaptureSlider11( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 11 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider11() void CSample0Dlg::OnReleasedcaptureSlider12( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 12 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider12() void CSample0Dlg::OnReleasedcaptureSlider13( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 13 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider13() void CSample0Dlg::OnReleasedcaptureSlider14( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 14 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider14() void CSample0Dlg::OnReleasedcaptureSlider15( NMHDR *pNMHDR, LRESULT *pResult ) { UpdateSlider( 15 ); *pResult = 0; } // CSample0Dlg::OnReleasedcaptureSlider15() void CSample0Dlg::OnAutoUpdateCheck() { UpdateData( TRUE ); UpdateControls(); } // CSample0Dlg::OnAutoUpdateCheck() void CSample0Dlg::OnUpdateButton() { /* * demonstrate DACMultiDirect() function */ unsigned short dacData[ MAX_CHANNELS * 2 ]; // channel/count pairs for( int channel = 0; channel < numDACs; channel++ ) { dacData[ channel * 2 ] = channel; // channel dacData[ channel * 2 + 1 ] = sliders[ channel ]->GetPos(); // counts } // for( int channel ... if( DACMultiDirect( deviceIndex, dacData, numDACs ) != ERROR_SUCCESS ) MessageBox( "Error updating all DACs", "Error", MB_ICONERROR ); } // CSample0Dlg::OnUpdateButton() void CSample0Dlg::OnSelchangeRangeCombo() { if( UpdateData( TRUE ) ) { const int index = daRangeComboBox.GetCurSel(); if( index != CB_ERR ) UpdateRange( index ); } // if( UpdateData( ... } // CSample0Dlg::OnSelchangeRangeCombo() /* end of file */