summaryrefslogtreecommitdiffstats
path: root/k8055gui/MyFrame.cpp
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 /k8055gui/MyFrame.cpp
parent876d6f498bbf358a23b47edaf8b0d967724b1b94 (diff)
downloadk8055-beaeb2c95856bb89f9aa4ac7b256d1526f60cde9.zip
k8055-beaeb2c95856bb89f9aa4ac7b256d1526f60cde9.tar.gz
add k8055gui
Diffstat (limited to 'k8055gui/MyFrame.cpp')
-rw-r--r--k8055gui/MyFrame.cpp489
1 files changed, 489 insertions, 0 deletions
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()
+
+