diff -r d5493fe07e79 -r 25ff2fadff89 examples/DS401_Slave_Gui/main.cpp --- a/examples/DS401_Slave_Gui/main.cpp Sun Sep 30 22:38:58 2007 +0200 +++ b/examples/DS401_Slave_Gui/main.cpp Sun Sep 30 22:41:12 2007 +0200 @@ -7,16 +7,16 @@ #include #include #include +#include #include #include #include #include #include -#include "monicone.xpm" +//#include "monicone.xpm" #include "main.h" -#include "tools.h" #include "TestSlaveGui.h" extern "C" { #include "canfestival.h" @@ -35,9 +35,15 @@ wxTextCtrl *textLog; int node_id_ext; +int to_start = 0; MyFrame *frame; -s_BOARD SlaveBoard = {NULL, NULL}; -char* LibraryPath = NULL; +#define MAXLENGTH_BUSNAME 32 +#define MAXLENGTH_BAUDRATE 8 +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; @@ -121,7 +127,85 @@ EVT_TIMER(TIMER_ID, MyFrame::OnTimer) END_EVENT_TABLE() -IMPLEMENT_APP(MyApp) +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) +{ + + int c; + extern char *optarg; + char *snodeid; + while ((c = getopt(argc, argv, "-b:B:l:i:s")) != EOF) + { + 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() { @@ -148,7 +232,7 @@ wxStaticBox *namebox; wxStaticBox *freqbox; - SetIcon(wxICON(monicone)); +// SetIcon(wxICON(monicone)); SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)); helpMenu->Append(HELP_ABOUT, _T("&About...\tF1"), _T("Show about dialog")); @@ -178,17 +262,17 @@ 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!!")); + 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, _T("0")); + 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, 1, _T("wxSpinCtrl")); + 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); @@ -370,6 +454,10 @@ 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)) @@ -377,40 +465,34 @@ 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; - 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); + strncpy(SlaveBoard.busname, s.mb_str(), MAXLENGTH_BUSNAME); *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); - } -} + Start(); +} + void MyFrame::OnStop(wxCommandEvent& WXUNUSED(event)) { @@ -419,7 +501,6 @@ stop_slave(); stop->Enable(false); start->Enable(true); - charbuf_free(SlaveBoard.busname); } void MyFrame::OnLoad(wxCommandEvent& WXUNUSED(event)) @@ -431,9 +512,7 @@ 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()); + strncpy(LibraryPath, fd.GetPath().mb_str(), MAXLENGTH_LIBPATH); printf("path=%s",LibraryPath); } } @@ -572,9 +651,7 @@ wxString wxstr; wxstr = event.GetString(); - if (SlaveBoard.baudrate != NULL) - charbuf_free(SlaveBoard.baudrate); - SlaveBoard.baudrate = wxstr_to_charbuf(wxstr); + strncpy(SlaveBoard.baudrate, wxstr.mb_str(),MAXLENGTH_BAUDRATE); *textLog << wxT("Baudrate:") << event.GetString() << wxT("\n"); } @@ -595,23 +672,7 @@ 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; + return input & (((UNS8)1) << bit) ? 1 : 0; } void MyFrame::Paint()