// demo2Dlg.cpp : implementation file // #include "stdafx.h" #include "demo2.h" #include "demo2Dlg.h" #include "..\lib\I87123.h" #include #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDemo2Dlg dialog CDemo2Dlg::CDemo2Dlg(CWnd* pParent /*=NULL*/) : CDialog(CDemo2Dlg::IDD, pParent) { //{{AFX_DATA_INIT(CDemo2Dlg) //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CDemo2Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDemo2Dlg) DDX_Control(pDX, IDC_EDIT_AI, m_edit_ai); DDX_Control(pDX, IDC_SLIDER_AI, m_slider_ai); DDX_Control(pDX, IDC_EDIT_AO, m_edit_ao); DDX_Control(pDX, IDC_STATIC_ON, m_pic_on); DDX_Control(pDX, IDC_STATIC_OFF, m_pic_off); DDX_Control(pDX, IDC_STATIC_NODE, m_pic_node); DDX_Control(pDX, IDC_SLIDER_AO, m_slider_ao); DDX_Control(pDX, IDC_COMBO_SLOT, m_comb_slot); DDX_Control(pDX, IDC_COMBO_NODE, m_comb_node); DDX_Control(pDX, IDC_COMBO_BAUDRATE, m_comb_baudrate); DDX_Control(pDX, IDC_BUTTON_SHUTDOWN, m_button_shutdown); DDX_Control(pDX, IDC_BUTTON_REMOVENODE, m_button_removenode); DDX_Control(pDX, IDC_BUTTON_CONFIGURE, m_button_config); DDX_Control(pDX, IDC_BUTTON_ADDNODE, m_button_addnode); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDemo2Dlg, CDialog) //{{AFX_MSG_MAP(CDemo2Dlg) ON_WM_DESTROY() ON_BN_CLICKED(IDC_BUTTON_CONFIGURE, OnButtonConfigure) ON_BN_CLICKED(IDC_BUTTON_SHUTDOWN, OnButtonShutdown) ON_BN_CLICKED(IDC_BUTTON_ADDNODE, OnButtonAddnode) ON_BN_CLICKED(IDC_BUTTON_REMOVENODE, OnButtonRemovenode) ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_AO, OnCustomdrawSliderAo) ON_WM_TIMER() ON_EN_KILLFOCUS(IDC_EDIT_AO, OnKillfocusEditAo) ON_EN_SETFOCUS(IDC_EDIT_AO, OnSetfocusEditAo) ON_CBN_SELCHANGE(IDC_COMBO_NODE, OnSelchangeComboNode) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDemo2Dlg message handlers CString strText; BYTE AddNode[127]; // To remeber which node had been added BYTE IsConfig = 0; unsigned short AO_data = 0; unsigned short AO_temp = 0; unsigned short AI_data = 0; BYTE ChangeEdit = 0; BYTE Focus = 0; BOOL CDemo2Dlg::OnInitDialog() { CDialog::OnInitDialog(); // 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 CenterWindow(GetDesktopWindow()); // center to the hpc screen // TODO: Add extra initialization here memset(AddNode,0,127); m_pic_on.ShowWindow(SW_HIDE); m_pic_off.ShowWindow(SW_HIDE); m_button_config.ShowWindow(SW_SHOW); m_button_shutdown.ShowWindow(SW_HIDE); m_button_addnode.ShowWindow(SW_SHOW); m_button_removenode.ShowWindow(SW_HIDE); m_button_addnode.EnableWindow(FALSE); m_button_removenode.EnableWindow(FALSE); m_comb_node.EnableWindow(FALSE); m_edit_ao.EnableWindow(FALSE); m_slider_ao.EnableWindow(FALSE); m_comb_slot.SetCurSel(0); m_comb_baudrate.SetCurSel(3); m_comb_node.SetCurSel(0); m_edit_ao.LimitText(4); m_slider_ao.SetRange(0,65535,TRUE); m_slider_ao.SetTicFreq(4096); m_edit_ai.LimitText(4); m_slider_ai.SetRange(0,65535,TRUE); m_slider_ai.SetTicFreq(4096); SetTimer(123,20,NULL); return TRUE; // return TRUE unless you set the focus to a control } void CDemo2Dlg::OnDestroy() { int ret; CDialog::OnDestroy(); // TODO: Add your message handler code here if(IsConfig){ ret = I87123_ShutdownMaster(); if(ret){ strText.Format(_T("Shutdown Error Code = %d"),ret); MessageBox(strText,_T("Error"),MB_ICONERROR | MB_OK); } KillTimer(123); } } void CDemo2Dlg::OnButtonConfigure() { int ret; // TODO: Add your control notification handler code here ChangeSlotTo87K(m_comb_slot.GetCurSel()); ret = I87123_Configure(m_comb_baudrate.GetCurSel()); // Configure I-87123 Baudrate if(ret){ strText.Format(_T("Configure Error Code = %d"),ret); MessageBox(strText,_T("Error"),MB_ICONERROR | MB_OK); } else{ IsConfig = 1; m_button_config.ShowWindow(SW_HIDE); m_button_shutdown.ShowWindow(SW_SHOW); m_button_addnode.EnableWindow(TRUE); m_button_removenode.EnableWindow(TRUE); m_comb_node.EnableWindow(TRUE); m_comb_slot.EnableWindow(FALSE); m_comb_baudrate.EnableWindow(FALSE); m_edit_ao.EnableWindow(FALSE); m_slider_ao.EnableWindow(FALSE); SetTimer(123,50,NULL); } } void CDemo2Dlg::OnButtonShutdown() { int ret; // TODO: Add your control notification handler code here ret = I87123_ShutdownMaster(); if(ret){ strText.Format(_T("ShutdownMaster Error Code = %d"),ret); MessageBox(strText,_T("Error"),MB_ICONERROR | MB_OK); } else{ IsConfig = 0; m_button_config.ShowWindow(SW_SHOW); m_button_shutdown.ShowWindow(SW_HIDE); m_button_addnode.EnableWindow(FALSE); m_button_removenode.EnableWindow(FALSE); m_comb_node.EnableWindow(FALSE); memset(AddNode,0,127); OnSelchangeComboNode(); m_comb_slot.EnableWindow(TRUE); m_comb_baudrate.EnableWindow(TRUE); m_edit_ao.EnableWindow(FALSE); m_slider_ao.EnableWindow(FALSE); KillTimer(123); } } void CDemo2Dlg::OnButtonAddnode() { int ret; // TODO: Add your control notification handler code here ret = I87123_AddNode(m_comb_node.GetCurSel()+1); if(ret){ strText.Format(_T("AddNode Error Code = %d"),ret); MessageBox(strText,_T("Error"),MB_ICONERROR | MB_OK); } else{ AddNode[m_comb_node.GetCurSel()] = 1; // The node hab been added OnSelchangeComboNode(); } } void CDemo2Dlg::OnButtonRemovenode() { int ret; // TODO: Add your control notification handler code here ret = I87123_RemoveNode(m_comb_node.GetCurSel()+1); if(ret){ strText.Format(_T("RemoveNode Error Code = %d"),ret); MessageBox(strText,_T("Error"),MB_ICONERROR | MB_OK); } else{ AddNode[m_comb_node.GetCurSel()] = 0; // The node hab been removed OnSelchangeComboNode(); } } void CDemo2Dlg::OnSelchangeComboNode() { // TODO: Add your control notification handler code here if(AddNode[m_comb_node.GetCurSel()]){ // The node hab been added m_pic_node.SetBitmap(m_pic_on.GetBitmap()); m_button_addnode.ShowWindow(SW_HIDE); m_button_removenode.ShowWindow(SW_SHOW); m_edit_ao.EnableWindow(TRUE); m_slider_ao.EnableWindow(TRUE); } else{ // The node hab not been added m_pic_node.SetBitmap(m_pic_off.GetBitmap()); m_button_addnode.ShowWindow(SW_SHOW); m_button_removenode.ShowWindow(SW_HIDE); m_edit_ao.EnableWindow(FALSE); m_slider_ao.EnableWindow(FALSE); } } void CDemo2Dlg::OnCustomdrawSliderAo(NMHDR* pNMHDR, LRESULT* pResult) { CString Str; // TODO: Add your control notification handler code here if(!Focus){ AO_temp = (unsigned short)m_slider_ao.GetPos(); Str.Format(_T("%X"),m_slider_ao.GetPos()); m_edit_ao.SetWindowText(Str); *pResult = 0; } *pResult = 0; } void CDemo2Dlg::OnKillfocusEditAo() { // TODO: Add your control notification handler code here Focus = 0; } void CDemo2Dlg::OnSetfocusEditAo() { // TODO: Add your control notification handler code here Focus = 1; } void CDemo2Dlg::OnTimer(UINT nIDEvent) { wchar_t Str[10]; CString ai_str; char aostr[10],*endptr; int ret; int static RET=0; // TODO: Add your message handler code here and/or call default if(Focus){ m_edit_ao.GetWindowText(Str,5); wcstombs(aostr,Str,6); AO_temp = (unsigned short)strtol(aostr,&endptr,16); m_slider_ao.SetPos(AO_temp); } if(AO_data != AO_temp){ // Is AO data changed AO_data = AO_temp; if(AddNode[m_comb_node.GetCurSel()]){ // Check the node if had been added ret = I87123_WriteAO(m_comb_node.GetCurSel()+1, 0, AO_data); if(ret){ strText.Format(_T("Write AO Error Code = %d"),ret); MessageBox(strText,_T("Error"),MB_ICONERROR | MB_OK); } } } if(AddNode[m_comb_node.GetCurSel()]){ // Check the node if had been added ret = I87123_ReadAI(m_comb_node.GetCurSel()+1, 0, &AI_data); if(ret){ if(!RET){ // To avoid the error loop RET = ret; strText.Format(_T("Read AI Error Code = %d"),ret); MessageBox(strText,_T("Error"),MB_ICONERROR | MB_OK); m_slider_ai.SetPos(0); // If read AI error, to set AI error } } else{ RET = ret; ai_str.Format(_T("%X"),AI_data); m_slider_ai.SetPos(AI_data); m_edit_ai.SetWindowText(ai_str); } } CDialog::OnTimer(nIDEvent); }