diff -r d43ebbed895f -r d635cfc520ee examples/DS401_Slave_Gui/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/DS401_Slave_Gui/main.cpp Wed Aug 01 13:48:03 2007 +0200 @@ -0,0 +1,777 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "monicone.xpm" + +#include "main.h" +#include "tools.h" +#include "TestSlaveGui.h" +extern "C" { + #include "canfestival.h" + #include "ObjDict.h" +} +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#ifndef WX_PRECOMP + #include "wx/wx.h" +#endif + + +wxTextCtrl *textLog; +int node_id_ext; +MyFrame *frame; +s_BOARD SlaveBoard = {NULL, NULL}; +char* LibraryPath = NULL; +double Gtime = 0; +double y[28][45]; +double hdelta = 0; +double old_max = 5; +double old_min = -5; + +// Declare some IDs. These are arbitrary. +const int BOOKCTRL = 100; +const int FILE_QUIT = wxID_EXIT; +const int HELP_ABOUT = wxID_ABOUT; +const int ADD = 105; +const int REMOVE = 108; +const int QUIT = 109; +const int FREQBOX = 110; +const int START = 112; +const int TEXTBOX1 = 113; +const int STOP = 114; +const int LOAD = 115; +const int INBT1 = 118; +const int INBT2 = 119; +const int INBT3 = 120; +const int INBT4 = 121; +const int INBT5 = 122; +const int INBT6 = 123; +const int INBT7 = 124; +const int INBT8 = 125; +const int INS1 = 126; +const int INS2 = 127; +const int INS3 = 128; +const int INS4 = 129; +const int INS5 = 135; +const int INS6 = 136; +const int INS7 = 137; +const int INS8 = 138; +const int TIMER_ID = 130; +const int INST1 = 131; +const int INST2 = 132; +const int INST3 = 133; +const int INST4 = 134; +const int INST5 = 135; +const int INST6 = 136; +const int INST7 = 137; +const int INST8 = 138; + +// Attach the event handlers. Put this after MyFrame declaration. +BEGIN_EVENT_TABLE(MyFrame, wxFrame) + EVT_BUTTON(STOP, MyFrame::OnStop) + EVT_BUTTON(LOAD, MyFrame::OnLoad) + EVT_BUTTON(START, MyFrame::OnStart) + EVT_TOGGLEBUTTON(INBT1, MyFrame::OnInbt1) + EVT_TOGGLEBUTTON(INBT2, MyFrame::OnInbt2) + EVT_TOGGLEBUTTON(INBT3, MyFrame::OnInbt3) + EVT_TOGGLEBUTTON(INBT4, MyFrame::OnInbt4) + EVT_TOGGLEBUTTON(INBT5, MyFrame::OnInbt5) + EVT_TOGGLEBUTTON(INBT6, MyFrame::OnInbt6) + EVT_TOGGLEBUTTON(INBT7, MyFrame::OnInbt7) + EVT_TOGGLEBUTTON(INBT8, MyFrame::OnInbt8) + EVT_COMMAND_SCROLL(INS1, MyFrame::OnIns1) + EVT_COMMAND_SCROLL(INS2, MyFrame::OnIns2) + EVT_COMMAND_SCROLL(INS3, MyFrame::OnIns3) + EVT_COMMAND_SCROLL(INS4, MyFrame::OnIns4) + EVT_COMMAND_SCROLL(INS5, MyFrame::OnIns5) + EVT_COMMAND_SCROLL(INS6, MyFrame::OnIns6) + EVT_COMMAND_SCROLL(INS7, MyFrame::OnIns7) + EVT_COMMAND_SCROLL(INS8, MyFrame::OnIns8) + EVT_SPINCTRL(INST1, MyFrame::OnInst1) + EVT_SPINCTRL(INST2, MyFrame::OnInst2) + EVT_SPINCTRL(INST3, MyFrame::OnInst3) + EVT_SPINCTRL(INST4, MyFrame::OnInst4) + EVT_SPINCTRL(INST5, MyFrame::OnInst5) + EVT_SPINCTRL(INST6, MyFrame::OnInst6) + EVT_SPINCTRL(INST7, MyFrame::OnInst7) + EVT_SPINCTRL(INST8, MyFrame::OnInst8) + + EVT_LISTBOX(FREQBOX, MyFrame::OnFreqBoxClick) + EVT_MENU(FILE_QUIT, MyFrame::OnQuit) + EVT_BUTTON(QUIT, MyFrame::OnQuit) + EVT_MENU(HELP_ABOUT, MyFrame::OnAbout) + EVT_PAINT(MyFrame::OnPaint) + + EVT_TIMER(TIMER_ID, MyFrame::OnTimer) +END_EVENT_TABLE() + +IMPLEMENT_APP(MyApp) + +bool MyApp::OnInit() +{ + frame = new MyFrame( _T("I-O simulator")); + frame->Show(true); + return true; +} + +MyFrame::MyFrame(const wxString& title) + : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(800, 740), wxDEFAULT_FRAME_STYLE, wxT("frame")) + ,m_timer(this, TIMER_ID) +{ + wxMenu *fileMenu = new wxMenu; + wxMenu *helpMenu = new wxMenu; + wxPanel *panel; + wxButton *quit; + wxButton *load; + wxBoxSizer *mysizer; + wxBoxSizer *mysssizer; + wxBoxSizer *myhsizer; + wxBoxSizer *mybsizer; + wxBoxSizer *myentrysizer; + wxListBox *freqlist; + wxStaticBox *namebox; + wxStaticBox *freqbox; + + SetIcon(wxICON(monicone)); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)); + helpMenu->Append(HELP_ABOUT, _T("&About...\tF1"), + _T("Show about dialog")); + fileMenu->Append(FILE_QUIT, _T("E&xit\tAlt-X"), + _T("Quit this program")); + wxMenuBar *menuBar = new wxMenuBar(); + menuBar->Append(fileMenu, _T("&File")); + menuBar->Append(helpMenu, _T("&Help")); + SetMenuBar(menuBar); + CreateStatusBar(2); + SetStatusText(_T("Lolitech."), 0); + SetStatusText(_T("Welcome."), 1); + + book = new wxNotebook(this, BOOKCTRL); + + panel = new wxPanel(book); + book->AddPage(panel, _T("Configuration"), true); + mysizer = new wxBoxSizer( wxVERTICAL ); + panel->SetSizer(mysizer); + wxString choices[] = + { + _T("10K"), _T("20K"), _T("50K"), _T("100K"), + _T("125K"), _T("250K"), _T("500K"), _T("1M") + }; + + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Bus driver")), wxHORIZONTAL ); + mysizer->Add(myhsizer, 0, wxEXPAND | wxALL, 5); + load = new wxButton( panel, LOAD, _T("Load can driver")); + myhsizer->Add(load, 0, wxLEFT, 5); + drivername = new wxTextCtrl(panel, wxID_ANY, _T("No driver loaded!!")); + myhsizer->Add(drivername, 1, wxEXPAND | wxALL, 5); + myentrysizer = new wxBoxSizer( wxHORIZONTAL ); + mysizer->Add(myentrysizer, 0, wxEXPAND | wxALL, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Bus name")), wxHORIZONTAL ); + myentrysizer->Add(myhsizer, 0, wxEXPAND | wxALL, 5); + busname = new wxTextCtrl(panel, wxID_ANY, _T("0")); + myhsizer->Add(busname, 0, wxLEFT, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Node ID (Hexa)")), wxHORIZONTAL ); + myentrysizer->Add(myhsizer, 0, wxEXPAND | wxALL, 5); + node_id = new wxSpinCtrl(panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 1, 127, 1, _T("wxSpinCtrl")); + myhsizer->Add(node_id, 0, wxRIGHT, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Baudrate")), wxHORIZONTAL ); + mysizer->Add(myhsizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + freqlist = new wxListBox( panel, FREQBOX, wxDefaultPosition, wxDefaultSize, 8, choices, wxLB_SINGLE | wxLB_HSCROLL); + myhsizer->Add(freqlist, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + quit = new wxButton( panel, QUIT, _T("QUIT")); + mysizer->Add(quit, 0, wxALL, 5); + + + panel = new wxPanel(book); + book->AddPage(panel, wxT("Inputs"), true); + mysizer = new wxBoxSizer( wxVERTICAL ); + panel->SetSizer(mysizer); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Read Inputs UNSIGNED8")), wxHORIZONTAL ); + mysizer->Add(myhsizer, 0, wxEXPAND | wxALL, 30); + inbt1 = new wxToggleButton(panel, INBT1, wxT("1")); + inbt2 = new wxToggleButton(panel, INBT2, wxT("2")); + inbt3 = new wxToggleButton(panel, INBT3, wxT("3")); + inbt4 = new wxToggleButton(panel, INBT4, wxT("4")); + inbt5 = new wxToggleButton(panel, INBT5, wxT("5")); + inbt6 = new wxToggleButton(panel, INBT6, wxT("6")); + inbt7 = new wxToggleButton(panel, INBT7, wxT("7")); + inbt8 = new wxToggleButton(panel, INBT8, wxT("8")); + myhsizer->Add(inbt1, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt2, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt3, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt4, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt5, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt6, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt7, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(inbt8, wxEXPAND | wxALL, 0, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Analogue Inputs INTEGER16")), wxVERTICAL ); + mysizer->Add(myhsizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 30); + mysssizer = new wxBoxSizer( wxHORIZONTAL ); + myhsizer->Add(mysssizer, 0, wxEXPAND | wxALL, 0); + inst1 = new wxSpinCtrl(panel, INST1, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst2 = new wxSpinCtrl(panel, INST2, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst3 = new wxSpinCtrl(panel, INST3, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst4 = new wxSpinCtrl(panel, INST4, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst5 = new wxSpinCtrl(panel, INST5, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst6 = new wxSpinCtrl(panel, INST6, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst7 = new wxSpinCtrl(panel, INST7, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + inst8 = new wxSpinCtrl(panel, INST8, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, -32768, 32767, 0, _T("0")); + mysssizer->Add(inst1, wxALL, 0, 5); + mysssizer->Add(inst2, wxALL, 0, 5); + mysssizer->Add(inst3, wxALL, 0, 5); + mysssizer->Add(inst4, wxALL, 0, 5); + mysssizer->Add(inst5, wxALL, 0, 5); + mysssizer->Add(inst6, wxALL, 0, 5); + mysssizer->Add(inst7, wxALL, 0, 5); + mysssizer->Add(inst8, wxALL, 0, 5); + mysssizer = new wxBoxSizer( wxHORIZONTAL ); + myhsizer->Add(mysssizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 0); + ins1 = new wxSlider(panel, INS1, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins2 = new wxSlider(panel, INS2, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins3 = new wxSlider(panel, INS3, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins4 = new wxSlider(panel, INS4, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins5 = new wxSlider(panel, INS5, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins6 = new wxSlider(panel, INS6, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins7 = new wxSlider(panel, INS7, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + ins8 = new wxSlider(panel, INS8, 0, -32768, 32767, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("slider")); + mysssizer->Add(ins1, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins2, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins3, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins4, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins5, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins6, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins7, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(ins8, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + quit = new wxButton( panel, QUIT, _T("QUIT")); + mysizer->Add(quit, 0, wxALL, 5); + + panel = new wxPanel(book); + book->AddPage(panel, wxT("Outputs"), true); + mysizer = new wxBoxSizer( wxVERTICAL ); + panel->SetSizer(mysizer); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Write Outputs UNSIGNED8")), wxHORIZONTAL ); + mysizer->Add(myhsizer, 0, wxEXPAND | wxALL, 30); + outbt1 = new wxToggleButton(panel, wxID_ANY, wxT("1")); + outbt2 = new wxToggleButton(panel, wxID_ANY, wxT("2")); + outbt3 = new wxToggleButton(panel, wxID_ANY, wxT("3")); + outbt4 = new wxToggleButton(panel, wxID_ANY, wxT("4")); + outbt5 = new wxToggleButton(panel, wxID_ANY, wxT("5")); + outbt6 = new wxToggleButton(panel, wxID_ANY, wxT("6")); + outbt7 = new wxToggleButton(panel, wxID_ANY, wxT("7")); + outbt8 = new wxToggleButton(panel, wxID_ANY, wxT("8")); + myhsizer->Add(outbt1, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt2, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt3, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt4, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt5, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt6, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt7, wxEXPAND | wxALL, 0, 5); + myhsizer->Add(outbt8, wxEXPAND | wxALL, 0, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Analogue Output INTEGER16")), wxVERTICAL ); + mysizer->Add(myhsizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 30); + mysssizer = new wxBoxSizer( wxHORIZONTAL ); + myhsizer->Add(mysssizer, 0, wxEXPAND | wxALL, 0); + outst1 = new wxStaticText(panel, wxID_ANY, wxT("label"), wxDefaultPosition, wxDefaultSize, 0, wxT("staticText")); + outst2 = new wxStaticText(panel, wxID_ANY, wxT("label"), wxDefaultPosition, wxDefaultSize, 0, wxT("staticText")); + outst3 = new wxStaticText(panel, wxID_ANY, wxT("label"), wxDefaultPosition, wxDefaultSize, 0, wxT("staticText")); + outst4 = new wxStaticText(panel, wxID_ANY, wxT("label"), wxDefaultPosition, wxDefaultSize, 0, wxT("staticText")); + mysssizer->Add(outst1, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + mysssizer->Add(outst2, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + mysssizer->Add(outst3, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + mysssizer->Add(outst4, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + mysssizer = new wxBoxSizer( wxHORIZONTAL ); + myhsizer->Add(mysssizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 0); + outs1 = new wxGauge(panel, wxID_ANY, 65535, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("gauge")); + outs2 = new wxGauge(panel, wxID_ANY, 65535, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("gauge")); + outs3 = new wxGauge(panel, wxID_ANY, 65535, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("gauge")); + outs4 = new wxGauge(panel, wxID_ANY, 65535, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE, wxDefaultValidator, wxT("gauge")); + mysssizer->Add(outs1, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(outs2, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(outs3, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + mysssizer->Add(outs4, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + quit = new wxButton( panel, QUIT, _T("QUIT")); + mysizer->Add(quit, 0, wxALL, 5); + + wxString choice[] = + { + _T("Analogue Out 1"), _T("Analogue Out 2"), + _T("Analogue Out 3"), _T("Analogue Out 4"), + _T("Bool Out 1"), _T("Bool Out 2"), + _T("Bool Out 3"), _T("Bool Out 4"), + _T("Bool Out 5"), _T("Bool Out 6"), + _T("Bool Out 7"), _T("Bool Out 8"), + _T("Analogue Input 1"), _T("Analogue Input 2"), + _T("Analogue Input 3"), _T("Analogue Input 4"), + _T("Analogue Input 5"), _T("Analogue Input 6"), + _T("Analogue Input 7"), _T("Analogue Input 8"), + _T("Bool Input 1"), _T("Bool Input 2"), + _T("Bool Input 3"), _T("Bool Input 4"), + _T("Bool Input 5"), _T("Bool Input 6"), + _T("Bool Input 7"), _T("Bool Input 8"), }; + panel = new wxPanel(book); + book->AddPage(panel, wxT("Graphic"), true); + mysizer = new wxBoxSizer( wxVERTICAL ); + panel->SetSizer(mysizer); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Graphic")), wxVERTICAL ); + mysizer->Add(myhsizer, 0, wxEXPAND | wxALL, 10); + mygraphpan = new wxPanel(panel, wxID_ANY, wxDefaultPosition, wxSize(0, 350), wxTAB_TRAVERSAL, wxT("Graphic")); + myhsizer->Add(mygraphpan, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + echelle = new wxSlider(panel, wxID_ANY, 44, 44, 1000, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL , wxDefaultValidator, wxT("slider")); + myhsizer->Add(echelle, 0, wxEXPAND | wxALL, 0); + mybsizer = new wxBoxSizer( wxHORIZONTAL ); + mysizer->Add(mybsizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Select viewable Inputs")), wxHORIZONTAL ); + mybsizer->Add(myhsizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 10); + inlist = new wxListBox( panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, 28, choice, wxLB_EXTENDED | wxLB_HSCROLL); + myhsizer->Add(inlist, wxEXPAND | wxALL, wxEXPAND | wxALL, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Legende")), wxHORIZONTAL ); + mybsizer->Add(myhsizer, wxEXPAND | wxALL, wxEXPAND | wxALL, 10); + mylegpan = new wxPanel(panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, wxT("Legende")); + myhsizer->Add(mylegpan, wxEXPAND | wxALL, wxEXPAND | wxALL, 15); + quit = new wxButton( panel, QUIT, _T("QUIT")); + mysizer->Add(quit, 0, wxALL, 5); + + panel = new wxPanel(book); + book->InsertPage(0, panel, wxT("Control"), true); + mysizer = new wxBoxSizer( wxVERTICAL ); + panel->SetSizer(mysizer); + myhsizer = new wxBoxSizer( wxHORIZONTAL ); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Control your node")), wxHORIZONTAL ); + mysizer->Add(myhsizer, 0, wxALL, 5); + start = new wxButton( panel, START, _T("START")); + stop = new wxButton( panel, STOP, _T("STOP")); + stop->Enable(false); + myhsizer->Add(start, 0, wxRIGHT, 5); + myhsizer->Add(stop, 0, wxLEFT, 5); + myhsizer = new wxStaticBoxSizer( new wxStaticBox(panel, wxID_ANY, _T("Operation log")), wxHORIZONTAL ); + mysizer->Add(myhsizer, wxALL, wxEXPAND | wxALL, 5); + textLog = new wxTextCtrl( panel, TEXTBOX1, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE, wxDefaultValidator, wxTextCtrlNameStr); + myhsizer->Add(textLog, wxALL, wxEXPAND | wxALL, 5); + quit = new wxButton( panel, QUIT, _T("QUIT")); + mysizer->Add(quit, 0, wxALL, 5); + + for (int i= 0; i < 28; i++) + for (int j = 0; j < 44; j++) + y[i][j] = 0; + m_timer.Start(100); +} + +void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) +{ + Close(true); +} + +void MyFrame::OnStart(wxCommandEvent& WXUNUSED(event)) +{ + wxString s; + + if (LibraryPath == NULL) + { + *textLog << wxT("No driver found!! ----------------------------------Initialization [KO]\n"); + return; + } + if (SlaveBoard.baudrate == NULL) + { + *textLog << wxT("No baudrate found!! ----------------------------------Initialization [KO]\n"); + return; + } + + node_id_ext = node_id->GetValue(); + s = busname->GetValue(); + SlaveBoard.busname = wxstr_to_charbuf(s); + *textLog << wxT("-- Bus name: ------> ") << s << wxT("\n"); + *textLog << wxT("-- Node ID: -------> ") << node_id->GetValue() << wxT("\n"); + + if (main_can(SlaveBoard, LibraryPath)) + { + printf("[KO]\n"); + *textLog << wxT("----------------------------------------------------Initialization [KO]\n"); + } + else + { + printf("[OK]\n"); + *textLog << wxT("----------------------------------------------------Initialization [OK]\n"); + stop->Enable(true); + start->Enable(false); + } +} + +void MyFrame::OnStop(wxCommandEvent& WXUNUSED(event)) +{ + + *textLog << wxT("----------------------------------------------------Slave [STOPPED]") << wxT("\n"); + stop_slave(); + stop->Enable(false); + start->Enable(true); + charbuf_free(SlaveBoard.busname); +} + +void MyFrame::OnLoad(wxCommandEvent& WXUNUSED(event)) +{ + wxFileDialog fd(this, wxT("Choose a node configuration file"), wxT(""), wxT("Slave.od"), wxT("*.so")); + + if(fd.ShowModal() == wxID_OK) + { + drivername->Clear(); + drivername->AppendText(fd.GetPath()); + *textLog << wxT("LibraryPath: ") << fd.GetPath() << wxT("\n"); + if (LibraryPath != NULL) + charbuf_free(LibraryPath); + LibraryPath = wxstr_to_charbuf(fd.GetPath()); + printf("path=%s",LibraryPath); + } +} + +void MyFrame::OnInbt1(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x1; +} +void MyFrame::OnInbt2(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x2; +} +void MyFrame::OnInbt3(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x4; +} +void MyFrame::OnInbt4(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x8; +} +void MyFrame::OnInbt5(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x10; +} +void MyFrame::OnInbt6(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x20; +} +void MyFrame::OnInbt7(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x40; +} +void MyFrame::OnInbt8(wxCommandEvent& WXUNUSED(event)) +{ + Read_Inputs_8_Bit[0] = Read_Inputs_8_Bit[0] ^ 0x80; +} + + + +void MyFrame::OnIns1(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[0] = ins1->GetValue(); + inst1->SetValue(ins1->GetValue()); +} +void MyFrame::OnIns2(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[1] = ins2->GetValue(); + inst2->SetValue(ins2->GetValue()); +} +void MyFrame::OnIns3(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[2] = ins3->GetValue(); + inst3->SetValue(ins3->GetValue()); +} +void MyFrame::OnIns4(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[3] = ins4->GetValue(); + inst4->SetValue(ins4->GetValue()); +} +void MyFrame::OnIns5(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[4] = ins5->GetValue(); + inst5->SetValue(ins5->GetValue()); +} +void MyFrame::OnIns6(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[5] = ins6->GetValue(); + inst6->SetValue(ins6->GetValue()); +} +void MyFrame::OnIns7(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[6] = ins7->GetValue(); + inst7->SetValue(ins7->GetValue()); +} +void MyFrame::OnIns8(wxScrollEvent &event) +{ + Read_Analogue_Input_16_Bit[7] = ins8->GetValue(); + inst8->SetValue(ins8->GetValue()); +} + + +void MyFrame::OnInst1 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[0] = inst1->GetValue(); + ins1->SetValue(inst1->GetValue()); +} +void MyFrame::OnInst2 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[1] = inst2->GetValue(); + ins2->SetValue(inst2->GetValue()); +} +void MyFrame::OnInst3 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[2] = inst3->GetValue(); + ins3->SetValue(inst3->GetValue()); +} +void MyFrame::OnInst4 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[3] = inst4->GetValue(); + ins4->SetValue(inst4->GetValue()); +} +void MyFrame::OnInst5 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[4] = inst5->GetValue(); + ins5->SetValue(inst5->GetValue()); +} +void MyFrame::OnInst6 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[5] = inst6->GetValue(); + ins6->SetValue(inst6->GetValue()); +} +void MyFrame::OnInst7 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[6] = inst7->GetValue(); + ins7->SetValue(inst7->GetValue()); +} +void MyFrame::OnInst8 ( wxSpinEvent &ev ) +{ + Read_Analogue_Input_16_Bit[7] = inst8->GetValue(); + ins8->SetValue(inst8->GetValue()); +} + + +void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) +{ + wxString msg; + msg.Printf( _T("About.\n\n") + _T("Input-Output simulation by GRANDEMANGE Nicolas for CanFestival!!")); + + wxMessageBox(msg, _T("About !!!"), wxOK | wxICON_INFORMATION, this); +} + + +void MyFrame::OnFreqBoxClick( wxCommandEvent &event ) +{ + wxString wxstr; + + wxstr = event.GetString(); + if (SlaveBoard.baudrate != NULL) + charbuf_free(SlaveBoard.baudrate); + SlaveBoard.baudrate = wxstr_to_charbuf(wxstr); + *textLog << wxT("Baudrate:") << event.GetString() << wxT("\n"); +} + +static int is_set(int i, + wxListBox *inlist, + wxArrayInt in) +{ + inlist->GetSelections(in); + for (int j = 0; j < in.GetCount(); j++) + { + if (i == (in[j] + 1)) + { + return (i); + } + } + return (0); +} + +static int get_bit(UNS8 input, int bit) +{ + if (bit == 1) + return ((input & 0x1) ? 1 : 0); + if (bit == 2) + return ((input & 0x2) ? 1 : 0); + if (bit == 3) + return ((input & 0x4) ? 1 : 0); + if (bit == 4) + return ((input & 0x8) ? 1 : 0); + if (bit == 5) + return ((input & 0x10) ? 1 : 0); + if (bit == 6) + return ((input & 0x20) ? 1 : 0); + if (bit == 7) + return ((input & 0x40) ? 1 : 0); + if (bit == 8) + return ((input & 0x80) ? 1 : 0); + return 0; +} + +void MyFrame::Paint() +{ + double vmax = old_max; + double vmin = old_min; + double vdelta = vmax - vmin; + double vech = ((float)vdelta) / 10.0; + + double hmax = frame->echelle->GetValue(); + double hech = hdelta / 11; + + double d = 300 / vdelta; + double g = 0; + double top = 5; + double left = 50; + + double tmpi = 0; + wxString tmps; + double p = 0; + double q = 0; + int i = 0; + int j = 0; + wxColor col[8] = {wxColor("BLUE"), wxColor("RED"), wxColor("GREEN"), wxColor("GREY"), + wxColor("ORANGE"), wxColor("YELLOW"), wxColor("PINK"), wxColor("BLACK")}; + hdelta = hmax - 0; + g = (Gtime / hdelta) * 44.00; + + wxClientDC MonDc(mygraphpan); + MonDc.Clear(); + + MonDc.SetPen(wxPen(wxColour(200,200,200), 5, wxSOLID)); + MonDc.DrawRectangle((int) left, (int)top, 660, 300); + + MonDc.SetPen(wxPen(wxColor(150,200,150), 2, wxSOLID)); + MonDc.SetFont(wxFont(9, wxSWISS , wxNORMAL, wxNORMAL, false, wxT("Arial Black"))); + for (i=0; i < 11; i++) + { + tmpi = (vmin + (vech * i)); + tmps.Printf(wxT("%d"), (int)tmpi); + MonDc.DrawRotatedText(tmps, 0, (int)(293 - (30 * i) + top), 0); + } + for (i=0; i < 12; i++) + { + tmpi = (hech * i * 100); + if (tmpi < 1000) + tmps.Printf(wxT("%ims"), (int)tmpi); + if (tmpi > 1000) + tmps.Printf(wxT("%is"), (int)(tmpi / 1000)); + MonDc.DrawRotatedText(tmps, (int)((60 * i) + left) - 10, (int)(317 + top), 0); + } + for (j=1; j < 10; j++) + MonDc.DrawLine((int)left, (int)(300 - (30 * j) + top), (int)(left + 660), (int)(300 - (30 * j) + top)); + MonDc.SetPen(wxPen(wxColor(150,200,150), 2, wxSOLID)); + for (j=1; j < 22; j++) + MonDc.DrawLine((int)(30 * j + left), (int)(300 + top), (int)(30 * j + left), (int)(top)); + MonDc.SetPen(wxPen(wxColor(150,170,150), 1, wxSOLID)); + for (j=1; j < 22; j++) + MonDc.DrawLine((int)(30 * j + left - 15), (int)(300 + top), (int)(30 * j + left - 15), (int)(top)); + MonDc.DrawLine((int)(30 * 22 + left - 15), (int)(300 + top), (int)(30 * 22 + left - 15), (int)(top)); + + double m = (- vmin) * d; + MonDc.SetPen(wxPen(wxColor(170,170,150), 3, wxSOLID)); + MonDc.DrawLine((int)(left), (int)(300 + top - m), (int)(left + 660), (int)(300 + top - m)); + + wxClientDC MaLeg(mylegpan); + MaLeg.Clear(); + + MaLeg.SetPen(wxPen(wxColour(150,200,100), 2, wxSOLID)); + MaLeg.SetFont(wxFont(7, wxSWISS , wxNORMAL, wxNORMAL, false, wxT("Arial Black"))); + for (int k=1, tmpi = 0; k < 30; k++) + { + if ((tmpi < 8) && is_set(k, inlist, in)) + { + if (k <= 4) + tmps.Printf(wxT("Analogue Output %d"), k); + if ((k > 4) && (k <= 12)) + tmps.Printf(wxT("Bool Output %d"), k - 4); + if ((k > 12) && (k <= 20)) + tmps.Printf(wxT("Analogue Input %d"), k - 12); + if ((k > 20) && (k <= 28)) + tmps.Printf(wxT("Bool Input %d"), k - 20); + + MaLeg.DrawRotatedText(tmps, 0, 10 * tmpi , 0); + MaLeg.SetPen(wxPen(col[tmpi], 4, wxSOLID)); + MaLeg.DrawLine(100, 10 * tmpi + 6, 115, 10 * tmpi + 6); + //////////////////////////////////////////DAW//////////////////////////////////////// + MonDc.SetPen(wxPen(col[tmpi], 4, wxSOLID)); + if (k <= 4) + y[k - 1][(int)g] = Write_Analogue_Output_16_Bit[k - 1]; + if ((k > 4) && (k <= 12)) + y[k - 1][(int)g] = get_bit(Write_Outputs_8_Bit[0] ,k - 4); + if ((k > 12) && (k <= 20)) + y[k - 1][(int)g] = Read_Analogue_Input_16_Bit[k - 1 -12]; + if ((k > 20) && (k <= 28)) + y[k - 1][(int)g] = get_bit(Read_Inputs_8_Bit[0] ,k - 20); + + if (y[k - 1][(int)g] > old_max) + old_max = y[k - 1][(int)g]; + if (y[k - 1][(int)g] < old_min) + old_min = y[k - 1][(int)g]; + for (j=1; j < (g + 1) ; j++) + { + p = (y[k - 1][j - 1] - vmin) * d; + q = (y[k - 1][j ] - vmin) * d; + MonDc.DrawLine((int)(15 * (j - 1) + left), (int)(300 + top - p), (int)(15 * j + left), (int)(300 + top - q)); + } + ///////////////////////////////////////////////////////////////////////////////////// + tmpi++; + } + } +} + +void actu_output(void) +{ + wxString tmp; + + frame->outbt1->SetValue(get_bit(Write_Outputs_8_Bit[0], 1)); + frame->outbt2->SetValue(get_bit(Write_Outputs_8_Bit[0], 2)); + frame->outbt3->SetValue(get_bit(Write_Outputs_8_Bit[0], 3)); + frame->outbt4->SetValue(get_bit(Write_Outputs_8_Bit[0], 4)); + frame->outbt5->SetValue(get_bit(Write_Outputs_8_Bit[0], 5)); + frame->outbt6->SetValue(get_bit(Write_Outputs_8_Bit[0], 6)); + frame->outbt7->SetValue(get_bit(Write_Outputs_8_Bit[0], 7)); + frame->outbt8->SetValue(get_bit(Write_Outputs_8_Bit[0], 8)); + + frame->outs1->SetValue(Write_Analogue_Output_16_Bit[0] + 32768); + frame->outs2->SetValue(Write_Analogue_Output_16_Bit[1] + 32768); + frame->outs3->SetValue(Write_Analogue_Output_16_Bit[2] + 32768); + frame->outs4->SetValue(Write_Analogue_Output_16_Bit[3] + 32768); + tmp.Printf(wxT(" %i"), Write_Analogue_Output_16_Bit[0]); + frame->outst1->SetLabel(tmp); + tmp.Printf(wxT(" %i"), Write_Analogue_Output_16_Bit[1]); + frame->outst2->SetLabel(tmp); + tmp.Printf(wxT(" %i"), Write_Analogue_Output_16_Bit[2]); + frame->outst3->SetLabel(tmp); + tmp.Printf(wxT(" %i"), Write_Analogue_Output_16_Bit[3]); + frame->outst4->SetLabel(tmp); +} + +void actu(void) +{ + actu_output(); + + Gtime++; + if (Gtime > hdelta) + { + old_max = 5; + old_min = -5; + Gtime = 0; + } + frame->Paint(); +} + +void MyFrame::OnTimer(wxTimerEvent& event) +{ + actu();// do whatever you want to do every second here +} + +void MyFrame::OnPaint( wxPaintEvent &event ) +{ + //Paint(); +}