diff -r 854c43cdc24a -r 860e858685d3 examples/DS401_Slave_Gui/main.cpp --- a/examples/DS401_Slave_Gui/main.cpp Mon Feb 04 16:40:44 2008 +0100 +++ b/examples/DS401_Slave_Gui/main.cpp Tue Feb 05 10:17:36 2008 +0100 @@ -18,44 +18,47 @@ #if defined(WIN32) && !defined(__CYGWIN__) #include -extern "C" { - #include "getopt.h" +extern "C" +{ +#include "getopt.h" } #endif #include "main.h" #include "TestSlaveGui.h" -extern "C" { - #include "canfestival.h" - #include "ObjDict.h" +extern "C" +{ +#include "canfestival.h" +#include "ObjDict.h" } #include "wx/wxprec.h" #ifdef __BORLANDC__ - #pragma hdrstop +#pragma hdrstop #endif #ifndef WX_PRECOMP - #include "wx/wx.h" +#include "wx/wx.h" #endif -wxTextCtrl *textLog; -int node_id_ext; +wxTextCtrl *textLog; +int node_id_ext; int to_start = 0; -MyFrame *frame; +MyFrame *frame; #define MAXLENGTH_BUSNAME 32 #define MAXLENGTH_BAUDRATE 8 -char _busname[MAXLENGTH_BUSNAME] = "vcan0"; -char _baudrate[MAXLENGTH_BAUDRATE] = "500K"; -s_BOARD SlaveBoard = {_busname, _baudrate}; +char _busname[MAXLENGTH_BUSNAME] = "vcan0"; +char _baudrate[MAXLENGTH_BAUDRATE] = "500K"; +s_BOARD SlaveBoard = { _busname, _baudrate }; + #define MAXLENGTH_LIBPATH 1024 -char LibraryPath[MAXLENGTH_LIBPATH] = "libcanfestival_can_virtual.so"; -double Gtime = 0; -double y[28][45]; -double hdelta = 0; -double old_max = 5; -double old_min = -5; +char LibraryPath[MAXLENGTH_LIBPATH] = "libcanfestival_can_virtual.so"; +double Gtime = 0; +double y[28][45]; +double hdelta = 0; +double old_max = 5; +double old_min = -5; #if defined(WIN32) #define LIB_EXTENT wxT("*.dll") @@ -102,751 +105,979 @@ 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_NO_MAIN(MyApp); +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_NO_MAIN (MyApp); IMPLEMENT_WX_THEME_SUPPORT; -void help() -{ - printf("**************************************************************\n"); - printf("* DS-401 Slave GUI *\n"); - printf("* *\n"); - printf("* Usage: *\n"); - printf("* ./DS401_Slave_Gui [OPTIONS] *\n"); - printf("* *\n"); - printf("* OPTIONS: *\n"); - printf("* -l : Can library [\"libcanfestival_can_virtual.so\"] *\n"); - printf("* *\n"); - printf("* Slave: *\n"); - printf("* -i : Node id format [0x01 , 0x7F] *\n"); - printf("* *\n"); - printf("* CAN bus: *\n"); - printf("* -b : bus name [\"1\"] *\n"); - printf("* -B : 1M,500K,250K,125K,100K,50K,20K,10K *\n"); - printf("* *\n"); - printf("**************************************************************\n"); -} - - -int main(int argc,char **argv) + void + help () +{ + printf ("**************************************************************\n"); + printf ("* DS-401 Slave GUI *\n"); + printf ("* *\n"); + printf ("* Usage: *\n"); + printf ("* ./DS401_Slave_Gui [OPTIONS] *\n"); + printf ("* *\n"); + printf ("* OPTIONS: *\n"); + printf + ("* -l : Can library [\"libcanfestival_can_virtual.so\"] *\n"); + printf ("* *\n"); + printf ("* Slave: *\n"); + printf ("* -i : Node id format [0x01 , 0x7F] *\n"); + printf ("* *\n"); + printf ("* CAN bus: *\n"); + printf + ("* -b : bus name [\"1\"] *\n"); + printf ("* -B : 1M,500K,250K,125K,100K,50K,20K,10K *\n"); + printf ("* *\n"); + printf ("**************************************************************\n"); +} + + +int +main (int argc, char **argv) { int c; extern char *optarg; char *snodeid; - while ((c = getopt(argc, argv, "-b:B:l:i:s")) != EOF) - { - switch(c) + while ((c = getopt (argc, argv, "-b:B:l:i:s")) != EOF) { - case 'b' : - if (optarg[0] == 0) - { - help(); - exit(1); - } - SlaveBoard.busname = optarg; - break; - case 'B' : - if (optarg[0] == 0) - { - help(); - exit(1); - } - SlaveBoard.baudrate = optarg; - break; - case 'l' : - if (optarg[0] == 0) - { - help(); - exit(1); - } - strncpy(LibraryPath, optarg, MAXLENGTH_LIBPATH); - break; - case 'i' : - if (optarg[0] == 0) - { - help(); - exit(1); - } - snodeid = optarg; - sscanf(snodeid,"%x",&node_id_ext); - break; - case 's' : - to_start = 1; - break; - default: - help(); - exit(1); + switch (c) + { + case 'b': + if (optarg[0] == 0) + { + help (); + exit (1); + } + SlaveBoard.busname = optarg; + break; + case 'B': + if (optarg[0] == 0) + { + help (); + exit (1); + } + SlaveBoard.baudrate = optarg; + break; + case 'l': + if (optarg[0] == 0) + { + help (); + exit (1); + } + strncpy (LibraryPath, optarg, MAXLENGTH_LIBPATH); + break; + case 'i': + if (optarg[0] == 0) + { + help (); + exit (1); + } + snodeid = optarg; + sscanf (snodeid, "%x", &node_id_ext); + break; + case 's': + to_start = 1; + break; + default: + help (); + exit (1); + } } - } - wxEntry(argc,argv); -} - - -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; + wxEntry (argc, argv); +} + + +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, wxString((const char*)LibraryPath,wxConvLocal)); - 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, wxString((const char*)SlaveBoard.busname, wxConvLocal)); - 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, node_id_ext, _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); - panel->Hide(); - 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); - if(to_start) - { - Start(); - } -} - -void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) -{ - Close(true); -} - -void MyFrame::Start() -{ - 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::OnStart(wxCommandEvent& WXUNUSED(event)) -{ - wxString s; - - node_id_ext = node_id->GetValue(); - s = busname->GetValue(); - strncpy(SlaveBoard.busname, s.mb_str(), MAXLENGTH_BUSNAME); - *textLog << wxT("-- Bus name: ------> ") << s << wxT("\n"); - *textLog << wxT("-- Node ID: -------> ") << node_id->GetValue() << wxT("\n"); - Start(); -} - - -void MyFrame::OnStop(wxCommandEvent& WXUNUSED(event)) -{ - - *textLog << wxT("----------------------------------------------------Slave [STOPPED]") << wxT("\n"); - stop_slave(); - stop->Enable(false); - start->Enable(true); -} - -void MyFrame::OnLoad(wxCommandEvent& WXUNUSED(event)) -{ - wxFileDialog fd(this, wxT("Choose a can driver library"), wxT(""), wxT(""), LIB_EXTENT); - - if(fd.ShowModal() == wxID_OK) + 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, + wxString ((const char *) LibraryPath, wxConvLocal)); + 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, + wxString ((const char *) SlaveBoard.busname, + wxConvLocal)); + 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, node_id_ext, + _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); + //panel->Hide (); + 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); + if (to_start) { - drivername->Clear(); - drivername->AppendText(fd.GetPath()); - *textLog << wxT("LibraryPath: ") << fd.GetPath() << wxT("\n"); - strncpy(LibraryPath, fd.GetPath().mb_str(), MAXLENGTH_LIBPATH); - printf("path=%s",LibraryPath); + Start (); } } -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(); - strncpy(SlaveBoard.baudrate, wxstr.mb_str(),MAXLENGTH_BAUDRATE); - *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) -{ - return input & (((UNS8)1) << bit-1) ? 1 : 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(wxT("BLUE")), wxColor(wxT("RED")), wxColor(wxT("GREEN")), wxColor(wxT("GREY")), - wxColor(wxT("ORANGE")), wxColor(wxT("YELLOW")), wxColor(wxT("PINK")), wxColor(wxT("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++) +void +MyFrame::OnQuit (wxCommandEvent & WXUNUSED (event)) +{ + Close (true); +} + +void +MyFrame::Start () +{ + if (main_can (SlaveBoard, LibraryPath)) { - 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++; - } + printf ("[KO]\n"); + *textLog << + wxT + ("----------------------------------------------------Initialization [KO]\n"); } -} - -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) + else + { + printf ("[OK]\n"); + *textLog << + wxT + ("----------------------------------------------------Initialization [OK]\n"); + stop->Enable (true); + start->Enable (false); + } +} + +void +MyFrame::OnStart (wxCommandEvent & WXUNUSED (event)) +{ + wxString s; + + node_id_ext = node_id->GetValue (); + s = busname->GetValue (); + strncpy (SlaveBoard.busname, s.mb_str (), MAXLENGTH_BUSNAME); + *textLog << wxT ("-- Bus name: ------> ") << s << wxT ("\n"); + *textLog << wxT ("-- Node ID: -------> ") << node_id-> + GetValue () << wxT ("\n"); + Start (); +} + + +void +MyFrame::OnStop (wxCommandEvent & WXUNUSED (event)) +{ + + *textLog << + wxT + ("----------------------------------------------------Slave [STOPPED]") << + wxT ("\n"); + stop_slave (); + stop->Enable (false); + start->Enable (true); +} + +void +MyFrame::OnLoad (wxCommandEvent & WXUNUSED (event)) +{ + wxFileDialog fd (this, wxT ("Choose a can driver library"), wxT (""), + wxT (""), LIB_EXTENT); + + if (fd.ShowModal () == wxID_OK) + { + drivername->Clear (); + drivername->AppendText (fd.GetPath ()); + *textLog << wxT ("LibraryPath: ") << fd.GetPath () << wxT ("\n"); + strncpy (LibraryPath, fd.GetPath ().mb_str (), MAXLENGTH_LIBPATH); + 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 (); + strncpy (SlaveBoard.baudrate, wxstr.mb_str (), MAXLENGTH_BAUDRATE); + *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)) { - old_max = 5; - old_min = -5; - Gtime = 0; + return (i); } - frame->Paint(); -} - -void MyFrame::OnTimer(wxTimerEvent& event) -{ - actu();// do whatever you want to do every second here -} - -void MyFrame::OnPaint( wxPaintEvent &event ) -{ - //Paint(); -} + } + return (0); +} + +static int +get_bit (UNS8 input, int bit) +{ + return input & (((UNS8) 1) << bit - 1) ? 1 : 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 (wxT ("BLUE")), wxColor (wxT ("RED")), wxColor (wxT ("GREEN")), +wxColor (wxT ("GREY")), + wxColor (wxT ("ORANGE")), wxColor (wxT ("YELLOW")), + wxColor (wxT ("PINK")), wxColor (wxT ("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(); +}