// DspSetup.cpp : implementation file // #include "stdafx.h" #include "daq.h" #include "DspSetup.h" #include "FlagDlg.h" #include "Ok.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // DspSetup property page IMPLEMENT_DYNCREATE(DspSetup, CPropertyPage) DspSetup::DspSetup() : CPropertyPage(DspSetup::IDD) { //{{AFX_DATA_INIT(DspSetup) m_dac_type = 0; m_dac_chan = 0; m_dac_val = 0.0; m_ctrl0 = _T(""); m_ctrl1 = _T(""); m_ctrl2 = _T(""); m_ctrl3 = _T(""); m_ctrl_rep = 100; m_ctrl_sel_chan = 0; m_counter_mode = 0; m_val_misc = 0; //}}AFX_DATA_INIT _daq = _daq->Instance (); _config = _daq->readoutConfig (); _dsp = _config->get_dspCard (0); if ( _dsp == 0 ) m_dac_val = -1.0; else { m_ctrl0 = _dsp->ctrlBlk.name (0); m_ctrl1 = _dsp->ctrlBlk.name (1); m_ctrl2 = _dsp->ctrlBlk.name (2); m_ctrl3 = _dsp->ctrlBlk.name (3); } } DspSetup::~DspSetup() { } void DspSetup::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(DspSetup) DDX_CBIndex(pDX, IDC_DSP_DAC_TYPE, m_dac_type); DDX_CBIndex(pDX, IDC_DSP_CHAN_SEL, m_dac_chan); DDX_Text(pDX, IDC_DSP_DAC_VAL, m_dac_val); DDX_Text(pDX, IDC_DSP_CTRL0, m_ctrl0); DDX_Text(pDX, IDC_DSP_CTRL1, m_ctrl1); DDX_Text(pDX, IDC_DSP_CTRL2, m_ctrl2); DDX_Text(pDX, IDC_DSP_CTRL3, m_ctrl3); DDX_Text(pDX, IDC_DSP_CTRL_REP, m_ctrl_rep); DDX_CBIndex(pDX, IDC_DSP_CRTL_SEL, m_ctrl_sel_chan); DDX_CBIndex(pDX, IDC_DSP_COUNTER_MODE, m_counter_mode); DDX_Text(pDX, IDC_DSP_VAL_MISC, m_val_misc); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(DspSetup, CPropertyPage) //{{AFX_MSG_MAP(DspSetup) ON_BN_CLICKED(IDC_DSP_SET_DAC, OnDspSetDac) ON_BN_CLICKED(IDC_DSP_CTRL_LOAD, OnDspCtrlLoad) ON_BN_CLICKED(IDC_DSP_CTRL_EXE, OnDspCtrlExe) ON_BN_CLICKED(IDC_DSP_COUNTER_SET, OnDspCounterSet) ON_BN_CLICKED(IDC_DSP_FLAGS, OnDspFlags) ON_CBN_SELCHANGE(IDC_DSP_COUNTER_MODE, OnSelchangeDspCounterMode) ON_CBN_SELCHANGE(IDC_DSP_DAC_TYPE, OnSelchangeDspDacType) ON_CBN_SELCHANGE(IDC_DSP_CHAN_SEL, OnSelchangeDspDacType) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // DspSetup message handlers // ================================================================== // set Dac values // ================================================================== void DspSetup::OnDspSetDac() { UpdateData (TRUE); if ( m_dac_type == 0 ) { if ( m_dac_chan < 4 ) { _dsp->set_ll_dac (m_dac_chan, m_dac_val); } else { for ( int i = 0; i < 4; i++ ) _dsp->set_ll_dac (i, m_dac_val); } } else if ( m_dac_type == 1 ) { if ( m_dac_chan < 4 ) { _dsp->set_sys_dac (m_dac_chan, m_dac_val); } else { for ( int i = 0; i < 4; i++ ) _dsp->set_sys_dac (i, m_dac_val); } } else { m_dac_chan = 0; m_dac_val = 0.0; } UpdateData (FALSE); } // ================================================================== // update dac value // ================================================================== void DspSetup::OnSelchangeDspDacType() { UpdateData (TRUE); if ( m_dac_type == 0 ) { if ( m_dac_chan < 4 ) { m_dac_val = _dsp->get_ll_dac (m_dac_chan); } } else if ( m_dac_type == 1 ) { if ( m_dac_chan < 4 ) { m_dac_val = _dsp->get_sys_dac (m_dac_chan); } } else { m_dac_chan = 0; m_dac_val = 0.0; } UpdateData (FALSE); } // ================================================================== // // ================================================================== void DspSetup::OnDspCtrlLoad() { UpdateData (TRUE); switch (m_ctrl_sel_chan) { case 0 : _dsp->ctrlBlk.load (0, (char *) (LPCTSTR) m_ctrl0); m_ctrl0 = _dsp->ctrlBlk.name (0); break; case 1 : _dsp->ctrlBlk.load (1, (char *) (LPCTSTR) m_ctrl1); m_ctrl1 = _dsp->ctrlBlk.name (1); break; case 2 : _dsp->ctrlBlk.load (2, (char *) (LPCTSTR) m_ctrl2); m_ctrl2 = _dsp->ctrlBlk.name (2); break; case 3 : _dsp->ctrlBlk.load (3, (char *) (LPCTSTR) m_ctrl3); m_ctrl3 = _dsp->ctrlBlk.name (3); break; } UpdateData (FALSE); } // ================================================================ // // ================================================================ void DspSetup::OnDspCtrlExe() { DspSetup::Update(); UpdateData (TRUE); _dsp->ctrlBlk.execute (m_ctrl_sel_chan, m_ctrl_rep); if ( m_ctrl_rep < 0 ) { COk ok_dlg; ok_dlg.m_text = _T("Abort control Block"); if ( ok_dlg.DoModal () == IDOK ) { _dsp->setFlag (5, 1); Sleep ( 100 ); _dsp->setFlag (5, 0); } } UpdateData (FALSE); } // ========================================================== // set counter value // ========================================================== void DspSetup::Update() { m_ctrl0 = _dsp->ctrlBlk.name (0); m_ctrl1 = _dsp->ctrlBlk.name (1); m_ctrl2 = _dsp->ctrlBlk.name (2); m_ctrl3 = _dsp->ctrlBlk.name (3); } void DspSetup::OnDspCounterSet() { UpdateData (TRUE); switch ( m_counter_mode ) { case 0 : _dsp->set_counterValue (m_val_misc); m_val_misc = _dsp->get_counterValue (); break; case 1: _dsp->set_strobe_delay (m_val_misc); m_val_misc = _dsp->get_strobe_delay (); break; } UpdateData (FALSE); } // ======================================================= // // ======================================================= void DspSetup::OnDspFlags() { UpdateData (TRUE); CFlagDlg flag (_dsp); if ( flag.DoModal () == IDOK ) { } UpdateData (FALSE); } void DspSetup::OnSelchangeDspCounterMode() { UpdateData (TRUE); switch ( m_counter_mode ) { case 0 : m_val_misc = _dsp->get_counterValue (); break; case 1: m_val_misc = _dsp->get_strobe_delay (); break; } UpdateData (FALSE); }