PulseDlg.cpp

// PulseDlg.cpp : implementation file

//

 

#include "stdafx.h"

#include "Pulse.h"

#include "PulseDlg.h"

 

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

 

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About

 

class CAboutDlg : public CDialog

{

public:

              CAboutDlg();

 

// Dialog Data

              //{{AFX_DATA(CAboutDlg)

              enum { IDD = IDD_ABOUTBOX };

              //}}AFX_DATA

 

              // ClassWizard generated virtual function overrides

              //{{AFX_VIRTUAL(CAboutDlg)

              protected:

              virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

              //}}AFX_VIRTUAL

 

// Implementation

protected:

              //{{AFX_MSG(CAboutDlg)

              //}}AFX_MSG

              DECLARE_MESSAGE_MAP()

};

 

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

              //{{AFX_DATA_INIT(CAboutDlg)

              //}}AFX_DATA_INIT

}

 

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

              CDialog::DoDataExchange(pDX);

              //{{AFX_DATA_MAP(CAboutDlg)

              //}}AFX_DATA_MAP

}

 

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

              //{{AFX_MSG_MAP(CAboutDlg)

                             // No message handlers

              //}}AFX_MSG_MAP

END_MESSAGE_MAP()

 

/////////////////////////////////////////////////////////////////////////////

// CPulseDlg dialog

 

CPulseDlg::CPulseDlg(CWnd* pParent /*=NULL*/)

              : CDialog(CPulseDlg::IDD, pParent)

{

              //{{AFX_DATA_INIT(CPulseDlg)

                             // NOTE: the ClassWizard will add member initialization here

              //}}AFX_DATA_INIT

              // Note that LoadIcon does not require a subsequent DestroyIcon in Win32

              m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

 

void CPulseDlg::DoDataExchange(CDataExchange* pDX)

{

              CDialog::DoDataExchange(pDX);

              //{{AFX_DATA_MAP(CPulseDlg)

              DDX_Control(pDX, IDC_CWKNOB1, m_hz);

              DDX_Control(pDX, IDC_CWKNOB2, m_duty);

              DDX_Control(pDX, IDC_CWNUMEDIT1, m_ihz);

              DDX_Control(pDX, IDC_CWNUMEDIT2, m_iduty);

              //}}AFX_DATA_MAP

}

 

BEGIN_MESSAGE_MAP(CPulseDlg, CDialog)

              //{{AFX_MSG_MAP(CPulseDlg)

              ON_WM_SYSCOMMAND()

              ON_WM_PAINT()

              ON_WM_QUERYDRAGICON()

              //}}AFX_MSG_MAP

END_MESSAGE_MAP()

 

/////////////////////////////////////////////////////////////////////////////

// CPulseDlg message handlers

 

BOOL CPulseDlg::OnInitDialog()

{

              CDialog::OnInitDialog();

 

              // Add "About..." menu item to system menu.

 

              // IDM_ABOUTBOX must be in the system command range.

              ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

              ASSERT(IDM_ABOUTBOX < 0xF000);

 

              CMenu* pSysMenu = GetSystemMenu(FALSE);

              if (pSysMenu != NULL)

              {

                             CString strAboutMenu;

                             strAboutMenu.LoadString(IDS_ABOUTBOX);

                             if (!strAboutMenu.IsEmpty())

                             {

                                           pSysMenu->AppendMenu(MF_SEPARATOR);

                                           pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

                             }

              }

 

              // Set the icon for this dialog.  The framework does this automatically

              //  when the application's main window is not a dialog

              SetIcon(m_hIcon, TRUE);                                   // Set big icon

              SetIcon(m_hIcon, FALSE);                   // Set small icon

             

              // TODO: Add extra initialization here

              // 초기 값을 정한다.

              iDevice = 1;

        ulGpctrNum = ND_COUNTER_0;

        ulGpctrOutput = ND_GPCTR0_OUTPUT;

        ulLOWcount = 50;

        ulHIGHcount = 50;

              // 느브를 위의 값으로 한다.

              m_duty.Value=50;

              m_hz.Value=100;

              m_iduty.Value=50;

              m_ihz.Value=100;

              UpdateData(FALSE);

              // 함수를 내보낸다.

              GeneratePulse();

              return TRUE;  // return TRUE  unless you set the focus to a control

}

 

void CPulseDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

              if ((nID & 0xFFF0) == IDM_ABOUTBOX)

              {

                             CAboutDlg dlgAbout;

                             dlgAbout.DoModal();

              }

              else

              {

                             CDialog::OnSysCommand(nID, lParam);

              }

}

 

// If you add a minimize button to your dialog, you will need the code below

//  to draw the icon.  For MFC applications using the document/view model,

//  this is automatically done for you by the framework.

 

void CPulseDlg::OnPaint()

{

              if (IsIconic())

              {

                             CPaintDC dc(this); // device context for painting

 

                             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();

              }

}

 

// The system calls this to obtain the cursor to display while the user drags

//  the minimized window.

HCURSOR CPulseDlg::OnQueryDragIcon()

{

              return (HCURSOR) m_hIcon;

}

 

BEGIN_EVENTSINK_MAP(CPulseDlg, CDialog)

    //{{AFX_EVENTSINK_MAP(CPulseDlg)

              ON_EVENT(CPulseDlg, IDC_CWKNOB1, 1 /* PointerValueChanged */, OnPointerValueChangedCwknob1, VTS_I4 VTS_PVARIANT)

              ON_EVENT(CPulseDlg, IDC_CWKNOB2, 1 /* PointerValueChanged */, OnPointerValueChangedCwknob2, VTS_I4 VTS_PVARIANT)

              ON_EVENT(CPulseDlg, IDC_CWNUMEDIT1, 1 /* ValueChanged */, OnValueChangedCwnumedit1, VTS_PVARIANT VTS_PVARIANT VTS_BOOL)

              ON_EVENT(CPulseDlg, IDC_CWNUMEDIT2, 1 /* ValueChanged */, OnValueChangedCwnumedit2, VTS_PVARIANT VTS_PVARIANT VTS_BOOL)

              //}}AFX_EVENTSINK_MAP

END_EVENTSINK_MAP()

 

void CPulseDlg::OnPointerValueChangedCwknob1(long Pointer, VARIANT FAR* Value)

{

              // TODO: Add your control notification handler code here

              UpdateData(TRUE);

              m_ihz.Value = m_hz.Value;

              m_iduty.Value = m_duty.Value;

              UpdateData(FALSE);    

              InValueChanged();          

}

 

void CPulseDlg::OnPointerValueChangedCwknob2(long Pointer, VARIANT FAR* Value)

{

              // TODO: Add your control notification handler code here

             

              UpdateData(TRUE);

              m_ihz.Value = m_hz.Value;

              m_iduty.Value = m_duty.Value;

              UpdateData(FALSE);    

              InValueChanged();

}

 

// 펄스를 만드는 함수

void CPulseDlg::GeneratePulse()

{

GPCTR_Control(iDevice, ulGpctrNum, ND_RESET);

    GPCTR_Set_Application(iDevice, ulGpctrNum, ND_PULSE_TRAIN_GNR);

    GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_SOURCE, ND_INTERNAL_100_KHZ);

    GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_COUNT_1, ulLOWcount);

    GPCTR_Change_Parameter(iDevice, ulGpctrNum, ND_COUNT_2, ulHIGHcount);

Select_Signal(iDevice, ulGpctrOutput, ulGpctrOutput, ND_LOW_TO_HIGH);

    GPCTR_Control(iDevice, ulGpctrNum, ND_PROGRAM);

}

 

void CPulseDlg::OnValueChangedCwnumedit1(VARIANT FAR* Value, VARIANT FAR* PreviousValue, BOOL OutOfRange)

{

              // TODO: Add your control notification handler code here

              UpdateData(TRUE);

              m_hz.Value = m_ihz.Value;

              m_duty.Value = m_iduty.Value;

              UpdateData(FALSE);    

              InValueChanged();

}

 

void CPulseDlg::OnValueChangedCwnumedit2(VARIANT FAR* Value, VARIANT FAR* PreviousValue, BOOL OutOfRange)

{

              // TODO: Add your control notification handler code here

              UpdateData(TRUE);

              m_hz.Value = m_ihz.Value;

              m_duty.Value = m_iduty.Value;

              UpdateData(FALSE);    

              InValueChanged();

}

 

void CPulseDlg::InValueChanged()

{

              int totalCount;

 

              totalCount = (int)(100000/m_hz.Value);

              ulHIGHcount=(int)(totalCount*m_duty.Value/100);

              ulLOWcount = totalCount - ulHIGHcount;

              GeneratePulse();

}