etisserant@246: /* etisserant@246: This file is part of CanFestival, a library implementing CanOpen Stack. etisserant@246: etisserant@246: Copyright (C): Edouard TISSERANT and Francis DUPIN etisserant@246: etisserant@246: See COPYING file for copyrights details. etisserant@246: etisserant@246: This library is free software; you can redistribute it and/or etisserant@246: modify it under the terms of the GNU Lesser General Public etisserant@246: License as published by the Free Software Foundation; either etisserant@246: version 2.1 of the License, or (at your option) any later version. etisserant@246: etisserant@246: This library is distributed in the hope that it will be useful, etisserant@246: but WITHOUT ANY WARRANTY; without even the implied warranty of etisserant@246: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU etisserant@246: Lesser General Public License for more details. etisserant@246: etisserant@246: You should have received a copy of the GNU Lesser General Public etisserant@246: License along with this library; if not, write to the Free Software etisserant@246: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA etisserant@246: */ etisserant@246: etisserant@246: etisserant@246: #include etisserant@246: #include etisserant@246: #include etisserant@246: #include etisserant@246: etisserant@246: #if defined(WIN32) && !defined(__CYGWIN__) etisserant@246: #include etisserant@246: etisserant@246: extern "C" { etisserant@246: #include "getopt.h" etisserant@246: } etisserant@246: etisserant@246: void pause(void) etisserant@246: { etisserant@246: system("PAUSE"); etisserant@246: } etisserant@246: #else etisserant@246: #include etisserant@246: #include etisserant@246: #include etisserant@246: #include etisserant@246: #include etisserant@246: #endif etisserant@246: etisserant@246: //#include etisserant@246: //#include etisserant@246: extern "C" etisserant@246: { etisserant@246: #include "canfestival.h" etisserant@246: } etisserant@246: #include "CallBack.h" etisserant@246: #include "TestSlaveGui.h" etisserant@246: #include "main.h" etisserant@246: etisserant@246: extern wxTextCtrl *textLog; etisserant@246: extern int node_id_ext; etisserant@246: etisserant@246: UNS32 OnMasterMap1Update(CO_Data* d, const indextable * unsused_indextable, UNS8 unsused_bSubindex) etisserant@246: { etisserant@246: return 0; etisserant@246: } etisserant@246: etisserant@246: s_BOARD MasterBoard = {"1", "125K"}; etisserant@246: etisserant@246: #if !defined(WIN32) || defined(__CYGWIN__) etisserant@246: void catch_signal(int sig) etisserant@246: { etisserant@246: signal(SIGTERM, catch_signal); etisserant@246: signal(SIGINT, catch_signal); etisserant@246: printf("Got Signal %d\n",sig); etisserant@246: } etisserant@246: #endif etisserant@246: etisserant@246: //*************************** INIT ***************************************** etisserant@246: void InitNodes(CO_Data* d, UNS32 id) etisserant@246: { etisserant@246: //****************************** INITIALISATION SLAVE ******************************* etisserant@246: /* Defining the node Id */ etisserant@246: setNodeId(&ObjDict_Data, node_id_ext); etisserant@246: /* init */ etisserant@246: setState(&ObjDict_Data, Initialisation); etisserant@246: } etisserant@246: etisserant@246: //**************************************************************************** etisserant@246: //*************************** MAIN ***************************************** etisserant@246: //**************************************************************************** etisserant@246: int main_can(s_BOARD SlaveBoard, char* LibraryPath) etisserant@246: { etisserant@246: printf("Bus name: %s Freq: %s Driver: %s\n", SlaveBoard.busname, SlaveBoard.baudrate, LibraryPath); etisserant@246: etisserant@246: #if !defined(WIN32) || defined(__CYGWIN__) etisserant@246: signal(SIGTERM, catch_signal); etisserant@246: signal(SIGINT, catch_signal); etisserant@246: #endif etisserant@246: etisserant@246: #ifndef NOT_USE_DYNAMIC_LOADING etisserant@246: LoadCanDriver(LibraryPath); etisserant@246: #endif etisserant@246: // Open CAN devices etisserant@246: etisserant@246: ObjDict_Data.heartbeatError = Call_heartbeatError; etisserant@246: ObjDict_Data.initialisation = Call_initialisation; etisserant@246: ObjDict_Data.preOperational = Call_preOperational; etisserant@246: ObjDict_Data.operational = Call_operational; etisserant@246: ObjDict_Data.stopped = Call_stopped; etisserant@246: ObjDict_Data.post_sync = Call_post_sync; etisserant@246: ObjDict_Data.post_TPDO = Call_post_TPDO; etisserant@246: ObjDict_Data.storeODSubIndex = Call_storeODSubIndex; etisserant@246: etisserant@246: if(!canOpen(&SlaveBoard,&ObjDict_Data)) etisserant@246: { etisserant@246: printf("Cannot open Slave Board (%s,%s)\n",SlaveBoard.busname, SlaveBoard.baudrate); etisserant@246: return (1); etisserant@246: } etisserant@246: // Start timer thread etisserant@246: //printf("nodeid slave=%x\n",node_id_ext); etisserant@246: StartTimerLoop(&InitNodes); etisserant@246: return 0; etisserant@246: } etisserant@246: etisserant@246: void stop_slave() etisserant@246: { etisserant@246: StopTimerLoop(); etisserant@246: // Close CAN devices (and can threads) etisserant@246: // Stop master etisserant@246: setState(&ObjDict_Data, Stopped); etisserant@246: //canClose(&ObjDict_Data); etisserant@246: //canClose(&TestMaster_Data); etisserant@246: return; etisserant@246: }