summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2011-02-20 00:46:17 +0100
committerJérémy Zurcher <jeremy@asynk.ch>2011-02-20 00:46:17 +0100
commitbeaeb2c95856bb89f9aa4ac7b256d1526f60cde9 (patch)
tree62b173e64ef266d8952bc8f454cca1597a723134
parent876d6f498bbf358a23b47edaf8b0d967724b1b94 (diff)
downloadk8055-beaeb2c95856bb89f9aa4ac7b256d1526f60cde9.zip
k8055-beaeb2c95856bb89f9aa4ac7b256d1526f60cde9.tar.gz
add k8055gui
-rw-r--r--CMakeLists.txt36
-rw-r--r--k8055gui/CMakeLists.txt19
-rw-r--r--k8055gui/MyApp.cpp21
-rw-r--r--k8055gui/MyApp.h14
-rw-r--r--k8055gui/MyFrame.cpp489
-rw-r--r--k8055gui/MyFrame.h151
6 files changed, 729 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d64eeca..d2e3eb5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -24,6 +24,18 @@ SET(CMAKE_CXX_FLAGS "-O2 -fno-implement-inlines")
SET(CMAKE_CXX_FLAGS_RELEASE "")
SET(CMAKE_CXX_FLAGS_DEBUG "-g ")
#
+# COLOR MESSAGES
+#
+string( ASCII 27 _escape)
+function(COLOR_MESSAGE TEXT)
+ if(CMAKE_COLOR_MAKEFILE)
+ MESSAGE(${TEXT})
+ else()
+ string(REGEX REPLACE "${_escape}.[0123456789;]*m" "" __TEXT ${TEXT})
+ MESSAGE(${__TEXT})
+ endif()
+endfunction()
+#
# HEADER LIBRARY FUNCTIONS
#
INCLUDE(CheckIncludeFiles)
@@ -33,5 +45,27 @@ CHECK_INCLUDE_FILES(string.h HAVE_STRING_H)
CHECK_INCLUDE_FILES(stdio.h HAVE_STDIO_H)
CHECK_INCLUDE_FILES(assert.h HAVE_ASSERT_H)
CHECK_INCLUDE_FILES(math.h HAVE_MATH_H)
-ADD_SUBDIRECTORY(libk8055)
+IF (HAVE_USB_H)
+ ADD_SUBDIRECTORY(libk8055)
+ENDIF()
+#
+FIND_PACKAGE(wxWidgets COMPONENTS core base)
+IF(wxWidgets_FOUND)
+ ADD_SUBDIRECTORY(k8055gui)
+ENDIF()
#
+# BUILD SUMMARY
+#
+COLOR_MESSAGE("\n${_escape}[1;36mBuild Summary${_escape}[0m\n--------------------")
+IF (HAVE_USB_H)
+ COLOR_MESSAGE("* ${_escape}[1;35mlibusb${_escape}[0m : ${_escape}[1;32mfound${_escape}[0m build libk8055")
+ELSE()
+ COLOR_MESSAGE("* ${_escape}[1;35mlibusb${_escape}[0m : ${_escape}[1;31mmissing${_escape}[0m unable to build libk8055")
+ MESSAGE( FATAL_ERROR "Abort" )
+ENDIF()
+IF(wxWidgets_FOUND)
+ COLOR_MESSAGE("* ${_escape}[1;35mwxwidget${_escape}[0m : ${_escape}[1;32mfound${_escape}[0m build k8055gui")
+ELSE()
+ COLOR_MESSAGE("* ${_escape}[1;35mwxwidget${_escape}[0m : ${_escape}[1;31mmissing${_escape}[0m unable to build k8055gui")
+ENDIF()
+MESSAGE("")
diff --git a/k8055gui/CMakeLists.txt b/k8055gui/CMakeLists.txt
new file mode 100644
index 0000000..e641518
--- /dev/null
+++ b/k8055gui/CMakeLists.txt
@@ -0,0 +1,19 @@
+
+ADD_EXECUTABLE(k8055gui WIN32 MACOSX_BUNDLE MyApp.cpp MyFrame.cpp )
+
+TARGET_LINK_LIBRARIES(k8055gui
+ k8055-${VERSION}
+ ${wxWidgets_LIBRARIES}
+)
+
+INCLUDE(${wxWidgets_USE_FILE})
+
+INCLUDE_DIRECTORIES(
+ ${CMAKE_SOURCE_DIR}
+ # ${wxWidgets_INCLUDE_DIRS}
+)
+
+ADD_DEPENDENCIES(k8055gui k8055-${VERSION})
+
+INSTALL(TARGETS k8055gui RUNTIME DESTINATION bin BUNDLE DESTINATION bin )
+
diff --git a/k8055gui/MyApp.cpp b/k8055gui/MyApp.cpp
new file mode 100644
index 0000000..296738a
--- /dev/null
+++ b/k8055gui/MyApp.cpp
@@ -0,0 +1,21 @@
+//#include "MyApp.h"
+
+#include <wx/wx.h>
+#include "MyFrame.h"
+class MyApp: public wxApp
+{
+ virtual bool OnInit();
+};
+
+DECLARE_APP(MyApp)
+
+
+IMPLEMENT_APP(MyApp)
+
+bool MyApp::OnInit()
+{
+ MyFrame *frame = new MyFrame( _T("K8055 USB Experiment Interface Board"), wxPoint(50,50), wxSize(635,340) );
+ frame->Show(TRUE);
+ SetTopWindow(frame);
+ return TRUE;
+}
diff --git a/k8055gui/MyApp.h b/k8055gui/MyApp.h
new file mode 100644
index 0000000..a1abf91
--- /dev/null
+++ b/k8055gui/MyApp.h
@@ -0,0 +1,14 @@
+#ifndef _MYAPP_
+#define _MYAPP_
+
+#include <wx/wx.h>
+#include "MyFrame.h"
+
+class MyApp: public wxApp
+{
+ virtual bool OnInit();
+};
+
+DECLARE_APP(MyApp)
+
+#endif
diff --git a/k8055gui/MyFrame.cpp b/k8055gui/MyFrame.cpp
new file mode 100644
index 0000000..e5b4a78
--- /dev/null
+++ b/k8055gui/MyFrame.cpp
@@ -0,0 +1,489 @@
+/* This file is part of k8055gui.
+
+ k8055gui is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ k8055gui is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Foobar; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Copyleft (C) 2008 by Etienne Mouragnon
+ echienne@gmail.com
+*/
+
+#include "MyFrame.h"
+#include "k8055.h"
+#include <iostream>
+
+using namespace std;
+
+/* set debug to 0 to not print excess info */
+static int DEBUG = 0;
+
+/* constructor, build the graphical interface */
+MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
+: wxFrame((wxFrame *)NULL, -1, title, pos, size)
+{
+
+ panel= new wxPanel(this);
+
+ //Card Address
+ new wxStaticBox(panel,-1,_("Card Address"), wxPoint(5,6),wxSize(112,45));
+ SK5=new wxCheckBox(panel,IDC_SK5,_("SK5"), wxPoint(10,20));
+ SK5->SetValue(1);
+ SK6=new wxCheckBox(panel,IDC_SK6,_("SK6"), wxPoint(62,20));
+ SK6->SetValue(1);
+
+ Connect=new wxButton(panel,IDC_CONNECT,_("Connect"),wxPoint(5,60),wxSize(112,30));
+
+ //Connection status
+ ConnectionStatus=new wxTextCtrl(panel,-1,_("..."),wxPoint(8,95),wxSize(112,40),wxNO_BORDER|wxTE_LEFT|wxTE_MULTILINE);
+ ConnectionStatus->SetEditable(false);
+ ConnectionStatus->SetBackgroundColour(panel->GetBackgroundColour());
+
+ //Test buttons
+ SetAllDigit=new wxButton(panel,IDC_SETALLDIGITAL,_("Set All Digital"),wxPoint(5,160),wxSize(112,30));
+ ClearAllDigit=new wxButton(panel,IDC_CLEARALLDIGITAL,_("Clear All Digital"),wxPoint(5,190),wxSize(112,30));
+
+ SetAllAnalg=new wxButton(panel,IDC_SETALLANALOG,_("Set All Analog"),wxPoint(5,230),wxSize(112,30));
+ ClearAllAnalg=new wxButton(panel,IDC_CLEARALLANALOG,_("Clear All Analog"),wxPoint(5,260),wxSize(112,30));
+
+ OutputTest=new wxToggleButton(panel,IDC_OUTPUTTEST,_("Output Test"),wxPoint(5,306),wxSize(112,30));
+
+ //Sliders
+ new wxStaticBox(panel,-1,_("DA1"), wxPoint(130,6),wxSize(50,330));
+ AnalgOutput1=new wxSlider(panel,IDC_DA1, 0 , 0, 255, wxPoint(140,30), wxSize(30,295),wxSL_VERTICAL|wxSL_INVERSE|wxSL_LABELS);
+
+ new wxStaticBox(panel,-1,_("DA2"), wxPoint(190,6),wxSize(50,330));
+ AnalgOutput2=new wxSlider(panel,IDC_DA2, 0 , 0, 255, wxPoint(200,30), wxSize(30,295),wxSL_VERTICAL|wxSL_INVERSE|wxSL_LABELS);
+
+ //Gauges
+ new wxStaticBox(panel,-1,_("AD1"), wxPoint(250,6),wxSize(50,330));
+ AnalgInput1=new wxGauge(panel,-1,255, wxPoint(265,30), wxSize(20,270),wxGA_VERTICAL);
+
+ AnalgInput1Text=new wxTextCtrl(panel,-1,_("0"),wxPoint(255,310),wxSize(40,20),wxNO_BORDER|wxTE_CENTRE);
+ AnalgInput1Text->SetEditable(false);
+ AnalgInput1Text->SetBackgroundColour(panel->GetBackgroundColour());
+
+ new wxStaticBox(panel,-1,_("AD2"), wxPoint(310,6),wxSize(50,330));
+ AnalgInput2=new wxGauge(panel,-1,255, wxPoint(325,30), wxSize(20,270),wxGA_VERTICAL);
+
+ AnalgInput2Text=new wxTextCtrl(panel,-1,_("0"),wxPoint(315,310),wxSize(40,20),wxNO_BORDER|wxTE_CENTRE);
+ AnalgInput2Text->SetEditable(false);
+ AnalgInput2Text->SetBackgroundColour(panel->GetBackgroundColour());
+
+
+ //Inputs
+ new wxStaticBox(panel,-1,_("Inputs"), wxPoint(370,6),wxSize(170,45));
+ I1=new wxCheckBox(panel,IDC_DIN1,_("1"), wxPoint(380,20));
+ I2=new wxCheckBox(panel,IDC_DIN2,_("2"), wxPoint(410,20));
+ I3=new wxCheckBox(panel,IDC_DIN3,_("3"), wxPoint(440,20));
+ I4=new wxCheckBox(panel,IDC_DIN4,_("4"), wxPoint(470,20));
+ I5=new wxCheckBox(panel,IDC_DIN5,_("5"), wxPoint(500,20));
+
+ //Outputs
+ new wxStaticBox(panel,-1,_("Outputs"), wxPoint(370,54),wxSize(260,45));
+ O1=new wxCheckBox(panel,IDC_DOUT1,_("1"), wxPoint(380,70));
+ O2=new wxCheckBox(panel,IDC_DOUT2,_("2"), wxPoint(410,70));
+ O3=new wxCheckBox(panel,IDC_DOUT3,_("3"), wxPoint(440,70));
+ O4=new wxCheckBox(panel,IDC_DOUT4,_("4"), wxPoint(470,70));
+ O5=new wxCheckBox(panel,IDC_DOUT5,_("5"), wxPoint(500,70));
+ O6=new wxCheckBox(panel,IDC_DOUT6,_("6"), wxPoint(530,70));
+ O7=new wxCheckBox(panel,IDC_DOUT7,_("7"), wxPoint(560,70));
+ O8=new wxCheckBox(panel,IDC_DOUT8,_("8"), wxPoint(590,70));
+
+ //Counters
+ new wxStaticBox(panel,-1,_("Counter1"), wxPoint(370,110),wxSize(125,226));
+ Counter1Text=new wxTextCtrl(panel,-1,_("0"),wxPoint(385,140),wxSize(90,20));
+ Counter1Text->SetEditable(false);
+
+ Counter1ResetButton=new wxButton(panel,IDC_RSTC1,_("Reset"),wxPoint(385,165),wxSize(90,30));
+
+ wxString choix[4]={_("0ms"), _("2ms"), _("10ms") , _("1000ms")};
+ Counter1Debounce=new wxRadioBox(panel,IDC_DBCT1,_("Debounce Time"),wxPoint(375,215),wxSize(115,115),4, choix);
+ Counter1Debounce->SetSelection(1);
+
+
+ new wxStaticBox(panel,-1,_("Counter2"), wxPoint(505,110),wxSize(125,226));
+ Counter2Text=new wxTextCtrl(panel,-1,_("0"),wxPoint(520,140),wxSize(90,20));
+ Counter2Text->SetEditable(false);
+
+ Counter2ResetButton=new wxButton(panel,IDC_RSTC2,_("Reset"),wxPoint(520,165),wxSize(90,30));
+
+ Counter2Debounce=new wxRadioBox(panel,IDC_DBCT2,_("Debounce Time"),wxPoint(510,215),wxSize(115,115),4, choix);
+ Counter2Debounce->SetSelection(1);
+
+ address=0;//default address
+ connected=0;//start not connected
+}
+
+/* ********************************************************************** */
+/* associated functions to events */
+
+void MyFrame::OnBnClickedSK5(wxCommandEvent& WXUNUSED(event))
+{
+ if (!connected)
+ {
+ address=3-SK5->GetValue()-2*SK6->GetValue();
+ }
+ if (DEBUG) cout<<"SK5 value is "<<SK5->GetValue()<<endl<<"Board Address is "<<address<<endl;
+}
+
+void MyFrame::OnBnClickedSK6(wxCommandEvent& WXUNUSED(event))
+{
+ if (!connected)
+ {
+ address=3-SK5->GetValue()-2*SK6->GetValue();
+ }
+ if (DEBUG) cout<<"SK6 value is "<<SK6->GetValue()<<endl<<"Board Address is "<<address<<endl;
+}
+
+void MyFrame::OnBnClickedConnect(wxCommandEvent& WXUNUSED(event))
+{
+ address=3-SK5->GetValue()-2*SK6->GetValue();
+ if (OpenDevice(address)==-1)
+ {
+ connected=0;
+ ConnectionStatus->Clear();
+ *ConnectionStatus<<_("Not connected");
+ wxMessageBox(_T("OpenDevice failed!\nCheck Connection and Card Address"), _T("Error"), wxOK | wxICON_ERROR, this);
+ }
+ else
+ {
+ connected=1;
+ WriteAll();
+ ConnectionStatus->Clear();
+ *ConnectionStatus<<_("Connected at address ")<<address;
+ wxMessageBox(_T("Connection with device OK"), _T("USB Board status"), wxOK | wxICON_INFORMATION, this);
+ }
+}
+
+void MyFrame::OnBnClickedSetalldigital(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"SetAllDigital clicked!"<<endl;
+ O1->SetValue(1);
+ O2->SetValue(1);
+ O3->SetValue(1);
+ O4->SetValue(1);
+ O5->SetValue(1);
+ O6->SetValue(1);
+ O7->SetValue(1);
+ O8->SetValue(1);
+ WriteDigital();
+
+}
+
+void MyFrame::OnBnClickedClearalldigital(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"ClearAllDigital clicked!"<<endl;
+ O1->SetValue(0);
+ O2->SetValue(0);
+ O3->SetValue(0);
+ O4->SetValue(0);
+ O5->SetValue(0);
+ O6->SetValue(0);
+ O7->SetValue(0);
+ O8->SetValue(0);
+ WriteDigital();
+}
+
+void MyFrame::OnBnClickedSetallanalog(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"SetAllAnalog clicked!"<<endl;
+ AnalgOutput1->SetValue(255);
+ AnalgOutput2->SetValue(255);
+ WriteAnalog();
+}
+
+void MyFrame::OnBnClickedClearallanalog(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"ClearAllAnalog clicked!"<<endl;
+ AnalgOutput1->SetValue(0);
+ AnalgOutput2->SetValue(0);
+ WriteAnalog();
+}
+
+void MyFrame::OnBnClickedOutputtest(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"OutputTest clicked!"<<endl;
+ cout<<"Not yet implemented!"<<endl;
+// O1->SetValue(1);
+// O2->SetValue(0);
+// O3->SetValue(0);
+// O4->SetValue(0);
+// O5->SetValue(0);
+// O6->SetValue(0);
+// O7->SetValue(0);
+// O8->SetValue(0);
+// WriteDigital();
+}
+
+void MyFrame::OnNMCustomdrawDa1(wxScrollEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Da1 scrolled!"<<endl;
+ WriteAnalog();
+}
+void MyFrame::OnNMCustomdrawDa2(wxScrollEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Da2 scrolled!"<<endl;
+ WriteAnalog();
+}
+
+void MyFrame::OnBnClickedDin1(wxCommandEvent& WXUNUSED(event))
+{
+ I1->SetValue(!(I1->GetValue()));
+ if (DEBUG) cout<<"Din1 clicked!"<<endl;
+}
+
+void MyFrame::OnBnClickedDin2(wxCommandEvent& WXUNUSED(event))
+{
+ I2->SetValue(!(I2->GetValue()));
+ if (DEBUG) cout<<"Din2 clicked!"<<endl;
+}
+
+void MyFrame::OnBnClickedDin3(wxCommandEvent& WXUNUSED(event))
+{
+ I3->SetValue(!(I3->GetValue()));
+ if (DEBUG) cout<<"Din3 clicked!"<<endl;
+}
+
+void MyFrame::OnBnClickedDin4(wxCommandEvent& WXUNUSED(event))
+{
+ I4->SetValue(!(I4->GetValue()));
+ if (DEBUG) cout<<"Din4 clicked!"<<endl;
+}
+
+void MyFrame::OnBnClickedDin5(wxCommandEvent& WXUNUSED(event))
+{
+ I5->SetValue(!(I5->GetValue()));
+ if (DEBUG) cout<<"Din5 clicked!"<<endl;
+}
+
+void MyFrame::OnBnClickedDout1(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Dout1 clicked!"<<endl;
+ WriteDigital();
+
+}
+void MyFrame::OnBnClickedDout2(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Dout2 clicked!"<<endl;
+ WriteDigital();
+}
+void MyFrame::OnBnClickedDout3(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Dout3 clicked!"<<endl;
+ WriteDigital();
+}
+void MyFrame::OnBnClickedDout4(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Dout4 clicked!"<<endl;
+ WriteDigital();
+}
+void MyFrame::OnBnClickedDout5(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Dout5 clicked!"<<endl;
+ WriteDigital();
+}
+void MyFrame::OnBnClickedDout6(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Dout6 clicked!"<<endl;
+ WriteDigital();
+}
+void MyFrame::OnBnClickedDout7(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Dout7 clicked!"<<endl;
+ WriteDigital();
+}
+void MyFrame::OnBnClickedDout8(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Dout8 clicked!"<<endl;
+ WriteDigital();
+}
+
+void MyFrame::OnBnClickedResct1(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Resct1 clicked!"<<endl;
+ if (connected)
+ {
+ ResetCounter(1);
+ }
+}
+
+void MyFrame::OnBnClickedDbcc1(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Resct1 clicked!"<<endl;
+ WriteDebounce1();
+}
+
+void MyFrame::OnBnClickedResct2(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Resct2 clicked!"<<endl;
+ if (connected)
+ {
+ ResetCounter(2);
+ }
+}
+
+void MyFrame::OnBnClickedDbcc2(wxCommandEvent& WXUNUSED(event))
+{
+ if (DEBUG) cout<<"Resct2 clicked!"<<endl;
+ WriteDebounce2();
+}
+
+//*************************************************************
+/* when idle
+ read and print values */
+void MyFrame::OnIdle(wxIdleEvent& event)
+{
+
+ if (DEBUG) cout<<"doing nothing!"<<endl;
+ if (connected)
+ {
+ //read data
+ long int data1, data2, data3, data4, data5;
+ ReadAllValues(&data1, &data2, &data3, &data4, &data5);
+
+ //print data on interface
+ I1->SetValue(data1 & 0x01);
+ I2->SetValue(data1 & 0x02);
+ I3->SetValue(data1 & 0x04);
+ I4->SetValue(data1 & 0x08);
+ I5->SetValue(data1 & 0x10);
+ AnalgInput1->SetValue(data2);
+ AnalgInput1Text->Clear();
+ *AnalgInput1Text<<data2;
+ AnalgInput2->SetValue(data3);
+ AnalgInput2Text->Clear();
+ *AnalgInput2Text<<data3;
+ Counter1Text->Clear();
+ *Counter1Text<<data4;
+ Counter2Text->Clear();
+ *Counter2Text<<data5;
+ }
+
+}
+//*************************************************************
+
+
+
+/***************************************************************/
+/* write panel values to the board */
+
+/* digital values */
+void MyFrame::WriteDigital()
+{
+ if (connected)
+ {
+ long word=O1->GetValue()+2*O2->GetValue()+4*O3->GetValue()+8*O4->GetValue()+
+ 16*O5->GetValue()+32*O6->GetValue()+64*O7->GetValue()+128*O8->GetValue();
+ WriteAllDigital(word);
+ }
+}
+
+/* analog values */
+void MyFrame::WriteAnalog()
+{
+ if (connected)
+ {
+ //OutputAnalogChannel(1, (long) AnalgOutput1->GetValue());
+ //OutputAnalogChannel(2, (long) AnalgOutput2->GetValue());
+ OutputAllAnalog((long) AnalgOutput1->GetValue(), (long) AnalgOutput2->GetValue());
+ }
+}
+
+/* debounce1 value */
+void MyFrame::WriteDebounce1()
+{
+ if (connected)
+ {
+ int choice=Counter1Debounce->GetSelection();
+ long DebounceTime;
+ switch (choice)
+ {
+ case 0 : DebounceTime=1; break;
+ case 1 : DebounceTime=2; break;
+ case 2 : DebounceTime=10; break;
+ case 3 : DebounceTime=1000;
+ }
+ SetCounterDebounceTime(1, DebounceTime);
+ }
+}
+
+/* debounce2 value */
+void MyFrame::WriteDebounce2()
+{
+ if (connected)
+ {
+ int choice=Counter2Debounce->GetSelection();
+ long DebounceTime;
+ switch (choice)
+ {
+ case 0 : DebounceTime=1; break;
+ case 1 : DebounceTime=2; break;
+ case 2 : DebounceTime=10; break;
+ case 3 : DebounceTime=1000;
+ }
+ SetCounterDebounceTime(2, DebounceTime);
+ }
+}
+
+/* all values */
+void MyFrame::WriteAll()
+{
+ if (connected)
+ {
+ long word=O1->GetValue()+2*O2->GetValue()+4*O3->GetValue()+8*O4->GetValue()+
+ 16*O5->GetValue()+32*O6->GetValue()+64*O7->GetValue()+128*O8->GetValue();
+ WriteAllDigital(word);
+ OutputAllAnalog((long) AnalgOutput1->GetValue(), (long) AnalgOutput2->GetValue());
+ WriteDebounce1();
+ WriteDebounce2();
+ }
+
+}
+
+
+BEGIN_EVENT_TABLE(MyFrame, wxFrame)
+ EVT_BUTTON(IDC_CONNECT,MyFrame::OnBnClickedConnect)
+ EVT_CHECKBOX(IDC_SK5,MyFrame::OnBnClickedSK5)
+ EVT_CHECKBOX(IDC_SK6,MyFrame::OnBnClickedSK6)
+ EVT_BUTTON(IDC_SETALLDIGITAL,MyFrame::OnBnClickedSetalldigital)
+ EVT_BUTTON(IDC_CLEARALLDIGITAL,MyFrame::OnBnClickedClearalldigital)
+ EVT_BUTTON(IDC_SETALLANALOG,MyFrame::OnBnClickedSetallanalog)
+ EVT_BUTTON(IDC_CLEARALLANALOG,MyFrame::OnBnClickedClearallanalog)
+ EVT_TOGGLEBUTTON(IDC_OUTPUTTEST,MyFrame::OnBnClickedOutputtest)
+ EVT_COMMAND_SCROLL(IDC_DA1,MyFrame::OnNMCustomdrawDa1)
+ EVT_COMMAND_SCROLL(IDC_DA2,MyFrame::OnNMCustomdrawDa2)
+ EVT_CHECKBOX(IDC_DIN1,MyFrame::OnBnClickedDin1)
+ EVT_CHECKBOX(IDC_DIN2,MyFrame::OnBnClickedDin2)
+ EVT_CHECKBOX(IDC_DIN3,MyFrame::OnBnClickedDin3)
+ EVT_CHECKBOX(IDC_DIN4,MyFrame::OnBnClickedDin4)
+ EVT_CHECKBOX(IDC_DIN5,MyFrame::OnBnClickedDin5)
+ EVT_CHECKBOX(IDC_DOUT1,MyFrame::OnBnClickedDout1)
+ EVT_CHECKBOX(IDC_DOUT2,MyFrame::OnBnClickedDout2)
+ EVT_CHECKBOX(IDC_DOUT3,MyFrame::OnBnClickedDout3)
+ EVT_CHECKBOX(IDC_DOUT4,MyFrame::OnBnClickedDout4)
+ EVT_CHECKBOX(IDC_DOUT5,MyFrame::OnBnClickedDout5)
+ EVT_CHECKBOX(IDC_DOUT6,MyFrame::OnBnClickedDout6)
+ EVT_CHECKBOX(IDC_DOUT7,MyFrame::OnBnClickedDout7)
+ EVT_CHECKBOX(IDC_DOUT8,MyFrame::OnBnClickedDout8)
+
+ EVT_BUTTON(IDC_RSTC1,MyFrame::OnBnClickedResct1)
+ EVT_BUTTON(IDC_RSTC2,MyFrame::OnBnClickedResct2)
+
+ EVT_RADIOBOX(IDC_DBCT1,MyFrame::OnBnClickedDbcc1)
+ EVT_RADIOBOX(IDC_DBCT2,MyFrame::OnBnClickedDbcc2)
+
+ EVT_IDLE(MyFrame::OnIdle)
+
+END_EVENT_TABLE()
+
+
diff --git a/k8055gui/MyFrame.h b/k8055gui/MyFrame.h
new file mode 100644
index 0000000..3b22424
--- /dev/null
+++ b/k8055gui/MyFrame.h
@@ -0,0 +1,151 @@
+/* This file is part of k8055gui.
+
+ k8055gui is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ k8055gui is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Foobar; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Copyleft (C) 2008 by Etienne Mouragnon
+ echienne@gmail.com
+*/
+
+#ifndef _MYFRAME_
+#define _MYFRAME_
+
+#include <wx/wx.h>
+#include <wx/tglbtn.h>
+
+enum
+{
+ IDC_SK5=1,
+ IDC_SK6,
+ IDC_CONNECT,
+ IDC_SETALLDIGITAL,
+ IDC_CLEARALLDIGITAL,
+ IDC_SETALLANALOG,
+ IDC_CLEARALLANALOG,
+ IDC_OUTPUTTEST,
+ IDC_DA1,
+ IDC_DA2,
+ //IDC_AD1,/*read-only so generates no events*/
+ //IDC_AD2,
+ IDC_DIN1,
+ IDC_DIN2,
+ IDC_DIN3,
+ IDC_DIN4,
+ IDC_DIN5,
+ IDC_DOUT1,
+ IDC_DOUT2,
+ IDC_DOUT3,
+ IDC_DOUT4,
+ IDC_DOUT5,
+ IDC_DOUT6,
+ IDC_DOUT7,
+ IDC_DOUT8,
+ IDC_CMPT1,
+ IDC_RSTC1,
+ IDC_DBCT1,
+ IDC_CMPT2,
+ IDC_RSTC2,
+ IDC_DBCT2
+};
+
+
+
+
+class MyFrame: public wxFrame
+{
+protected:
+ long address; // board address 0 -> 3
+ bool connected;// true if connected
+public:
+
+ //constructor
+ MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
+
+ //associated functions to events
+ void OnBnClickedSK5(wxCommandEvent& event);
+ void OnBnClickedSK6(wxCommandEvent& event);
+ void OnBnClickedConnect(wxCommandEvent& event);
+ void OnBnClickedSetalldigital(wxCommandEvent& event);
+ void OnBnClickedClearalldigital(wxCommandEvent& event);
+ void OnBnClickedSetallanalog(wxCommandEvent& event);
+ void OnBnClickedClearallanalog(wxCommandEvent& event);
+ void OnBnClickedOutputtest(wxCommandEvent& event);
+ void OnNMCustomdrawDa1(wxScrollEvent& event);
+ void OnNMCustomdrawDa2(wxScrollEvent& event);
+ //void OnNMCustomdrawAd1(wxScrollEvent& event);
+ //void OnNMCustomdrawAd2(wxScrollEvent& event);
+ void OnBnClickedDin1(wxCommandEvent& event);
+ void OnBnClickedDin2(wxCommandEvent& event);
+ void OnBnClickedDin3(wxCommandEvent& event);
+ void OnBnClickedDin4(wxCommandEvent& event);
+ void OnBnClickedDin5(wxCommandEvent& event);
+ void OnBnClickedDout1(wxCommandEvent& event);
+ void OnBnClickedDout2(wxCommandEvent& event);
+ void OnBnClickedDout3(wxCommandEvent& event);
+ void OnBnClickedDout4(wxCommandEvent& event);
+ void OnBnClickedDout5(wxCommandEvent& event);
+ void OnBnClickedDout6(wxCommandEvent& event);
+ void OnBnClickedDout7(wxCommandEvent& event);
+ void OnBnClickedDout8(wxCommandEvent& event);
+ //void OnBnClickedCmpt1(wxCommandEvent& event);
+ void OnBnClickedResct1(wxCommandEvent& event);
+ void OnBnClickedDbcc1(wxCommandEvent& event);
+ //void OnBnClickedCmpt2(wxCommandEvent& event);
+ void OnBnClickedResct2(wxCommandEvent& event);
+ void OnBnClickedDbcc2(wxCommandEvent& event);
+
+ void OnIdle(wxIdleEvent& event);
+
+ void WriteDigital();
+ void WriteAnalog();
+ void WriteDebounce1();
+ void WriteDebounce2();
+ void WriteAll();
+
+ //main panel
+ wxPanel * panel;
+
+ //Card Address
+ wxCheckBox *SK5,*SK6;
+ wxButton *Connect;
+
+ //Connection status
+ wxTextCtrl *ConnectionStatus;
+
+ //Test buttons
+ wxButton *SetAllDigit,*ClearAllDigit,*SetAllAnalg,*ClearAllAnalg;
+ wxToggleButton *OutputTest;
+
+ //Sliders
+ wxSlider *AnalgOutput1,*AnalgOutput2;
+
+ //Gauges
+ wxGauge *AnalgInput1,*AnalgInput2;
+ wxTextCtrl *AnalgInput1Text,*AnalgInput2Text;
+
+ //Inputs
+ wxCheckBox *I1,*I2,*I3,*I4,*I5;
+
+ //Outputs
+ wxCheckBox *O1,*O2,*O3,*O4,*O5,*O6,*O7,*O8;
+
+ //Counters
+ wxTextCtrl *Counter1Text,*Counter2Text;
+ wxButton *Counter1ResetButton,*Counter2ResetButton;
+ wxRadioBox *Counter1Debounce,*Counter2Debounce;
+
+ DECLARE_EVENT_TABLE()
+};
+
+#endif