diff options
| -rw-r--r-- | CMakeLists.txt | 36 | ||||
| -rw-r--r-- | k8055gui/CMakeLists.txt | 19 | ||||
| -rw-r--r-- | k8055gui/MyApp.cpp | 21 | ||||
| -rw-r--r-- | k8055gui/MyApp.h | 14 | ||||
| -rw-r--r-- | k8055gui/MyFrame.cpp | 489 | ||||
| -rw-r--r-- | k8055gui/MyFrame.h | 151 | 
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 | 
