www.pudn.com > DalsaNetlink.rar > CySignalDialog.cpp


// CySignalDialog.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "CyApp.h" 
#include "CySignalDialog.h" 
#include "CyGrabber.h" 
#include "CyAcquisitionPage.h" 
#include "resource.hm" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CySignalDialog dialog 
 
 
CySignalDialog::CySignalDialog( CWnd* pParent, 
                                CyAcquisitionPage& aOwner ) 
	: CDialog(CySignalDialog::IDD, pParent) 
    , mGrabber( reinterpret_cast( AfxGetApp() )->GetGrabber() ) 
    , mOwner( aOwner ) 
{ 
	//{{AFX_DATA_INIT(CySignalDialog) 
	//}}AFX_DATA_INIT 
} 
 
 
void CySignalDialog::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CySignalDialog) 
	DDX_Control(pDX, IDC_GRANULARITY_TEXT, mGranularityText); 
	DDX_Control(pDX, IDC_GRANULARITY_SLIDER, mGranularitySlider); 
	DDX_Control(pDX, IDC_DELAY_TEXT, mDelayText); 
	DDX_Control(pDX, IDC_DELAY_SLIDER, mDelaySlider); 
	DDX_Control(pDX, IDC_WIDTH_TEXT, mWidthText); 
	DDX_Control(pDX, IDC_WIDTH_SLIDER, mWidthSlider); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CySignalDialog, CDialog) 
	//{{AFX_MSG_MAP(CySignalDialog) 
	ON_WM_HELPINFO() 
	ON_WM_CLOSE() 
	//}}AFX_MSG_MAP 
 
	ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_DELAY_SLIDER, OnReleasedcaptureSlider) 
	ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_WIDTH_SLIDER, OnReleasedcaptureSlider) 
    ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_GRANULARITY_SLIDER, OnReleasedcaptureSlider) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CySignalDialog message handlers 
 
void CySignalDialog::OnReleasedcaptureSlider(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
    unsigned long lWidth = mWidthSlider.GetPos(); 
    unsigned long lDelay = mDelaySlider.GetPos(); 
    unsigned long lGranularity = mGranularitySlider.GetPos(); 
 
    mGrabber.GetDevice().SetPulseGenerator( 0, 
                                            (unsigned short)lDelay, 
                                            (unsigned short)lWidth, 
                                            (unsigned char)( lGranularity - 1 ), 
                                            mPeriodic, 
                                            mTrigger ); 
 
    UpdateText(); 
	 
	*pResult = 0; 
} 
 
BOOL CySignalDialog::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
 
    DWORD lExStyle = GetExStyle(); 
    lExStyle &= !WS_EX_APPWINDOW;  
    ModifyStyleEx( 0, lExStyle ); 
 
    unsigned short lDelay, lWidth; 
    unsigned char lGranularity; 
    mGrabber.GetDevice().GetPulseGenerator( 0, 
                                            lDelay, 
                                            lWidth, 
                                            lGranularity, 
                                            mPeriodic, 
                                            mTrigger ); 
     
    mDelaySlider.SetRange( 1, 65535 ); 
    mDelaySlider.SetPos( lDelay ); 
 
    mWidthSlider.SetRange( 1, 65535 ); 
    mWidthSlider.SetPos( lWidth ); 
 
    mGranularitySlider.SetRange( 1, 256 ); 
    mGranularitySlider.SetPos( lGranularity + 1 ); 
 
    UpdateText(); 
    
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
static void FormatInteger( unsigned long aValue, CString& aResult ) 
{ 
    aResult = ""; 
    CString lTemp; 
 
    while ( aValue / 1000 ) 
    { 
        unsigned long aCurrent = aValue % 1000; 
         
        if ( aResult.GetLength() > 0 ) 
        { 
            lTemp.Format( "%03u,", aCurrent ); 
        } 
        else 
        { 
            lTemp.Format( "%03u", aCurrent ); 
        } 
 
        aResult.Insert( 0, lTemp ); 
 
        // go to the next level 
        aValue /= 1000; 
    } 
 
    // we are left with the last  
    if ( aResult.GetLength() > 0 ) 
    { 
        lTemp.Format( "%u,", aValue ); 
    } 
    else 
    { 
        lTemp.Format( "%u", aValue ); 
    } 
 
    aResult.Insert( 0, lTemp ); 
} 
 
 
void CySignalDialog::UpdateText() 
{ 
    CString lTemp, lValue; 
 
    unsigned short lUShort1, lUShort2; 
    unsigned char lUChar; 
    mGrabber.GetDevice().GetPulseGenerator( 0, 
                                            lUShort1, 
                                            lUShort2, 
                                            lUChar, 
                                            mPeriodic, 
                                            mTrigger ); 
 
    // Convert to nanoseconds for convenience 
    unsigned long lDelay, lWidth, lGranularity; 
    lGranularity = lUChar + 1; 
    lGranularity *= 30; 
    lDelay = lUShort1; 
    lDelay *= lGranularity; 
    lWidth = lUShort2; 
    lWidth *= lGranularity; 
 
    FormatInteger( lDelay, lValue ); 
    lTemp.Format( "%s nanoseconds", (LPCTSTR)lValue ); 
    mDelayText.SetWindowText( lTemp ); 
 
    FormatInteger( lWidth, lValue ); 
    lTemp.Format( "%s nanoseconds", lValue ); 
    mWidthText.SetWindowText( lTemp ); 
 
    FormatInteger( lGranularity, lValue ); 
    lTemp.Format( "Number of PCI clock cycles (30 ns) = %s ns", lValue ); 
    mGranularityText.SetWindowText( lTemp ); 
} 
 
static DWORD rgmapCHID[] =  
{ 
    IDC_DELAY_SLIDER, HIDC_DELAY_SLIDER, 
 
    IDC_WIDTH_SLIDER, HIDC_WIDTH_SLIDER, 
 
    IDC_GRANULARITY_SLIDER, HIDC_GRANULARITY_SLIDER, 
 
    IDC_DELAY_TEXT, HIDC_DELAY_SLIDER, 
 
    IDC_WIDTH_TEXT, HIDC_WIDTH_SLIDER, 
 
    IDC_GRANULARITY_TEXT, HIDC_GRANULARITY_SLIDER, 
 
    0,0 
}; 
 
 
BOOL CySignalDialog::OnHelpInfo(HELPINFO* pHelpInfo)  
{ 
    return  ::WinHelp( (HWND)pHelpInfo->hItemHandle, 
                       AfxGetApp()->m_pszHelpFilePath, 
                       HELP_WM_HELP, 
                       (DWORD)(LPVOID)rgmapCHID); 
} 
 
void CySignalDialog::OnClose()  
{ 
	mOwner.PostMessage( WM_COMMAND, IDC_SIGNALS_CLOSED ); 
	 
	CDialog::OnClose(); 
}