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: #if defined(WIN32) && !defined(__CYGWIN__) etisserant@382: #include Christian@641: #include "getopt.h" etisserant@246: #else etisserant@382: #include etisserant@382: #include etisserant@382: #include etisserant@382: #include etisserant@382: #include etisserant@246: #endif etisserant@246: Christian@641: Christian@641: #include Christian@641: #include Christian@641: #include Christian@641: #include Christian@641: Christian@641: Christian@641: etisserant@246: //#include etisserant@246: //#include etisserant@382: extern "C" etisserant@382: { etisserant@382: #include "canfestival.h" etisserant@382: } etisserant@246: #include "CallBack.h" etisserant@246: #include "TestSlaveGui.h" etisserant@246: #include "main.h" etisserant@246: etisserant@382: extern wxTextCtrl *textLog; etisserant@382: extern int node_id_ext; etisserant@246: etisserant@246: //*************************** INIT ***************************************** etisserant@382: void etisserant@382: InitNodes (CO_Data * d, UNS32 id) etisserant@246: { etisserant@382: //****************************** INITIALISATION SLAVE ******************************* etisserant@382: /* Defining the node Id */ etisserant@382: setNodeId (&ObjDict_Data, node_id_ext); etisserant@382: /* init */ etisserant@382: setState (&ObjDict_Data, Initialisation); etisserant@246: } etisserant@246: greg@454: /*************************** EXIT *****************************************/ greg@454: void Exit(CO_Data* d, UNS32 id) greg@454: { greg@454: setState (&ObjDict_Data, Stopped); greg@454: canClose (&ObjDict_Data); greg@454: } etisserant@246: //**************************************************************************** etisserant@246: //*************************** MAIN ***************************************** etisserant@246: //**************************************************************************** etisserant@382: int etisserant@382: main_can (s_BOARD SlaveBoard, char *LibraryPath) etisserant@246: { greg@458: #if !defined(WIN32) && !defined(__CYGWIN__) Christian@641: //TimerInit(); Christian@641: #endif greg@458: TimerInit(); greg@458: printf ("Bus name: %s Freq: %s Driver: %s\n", etisserant@382: SlaveBoard.busname, SlaveBoard.baudrate, LibraryPath); etisserant@246: etisserant@382: #ifndef NOT_USE_DYNAMIC_LOADING etisserant@382: if (LoadCanDriver (LibraryPath) == NULL) etisserant@382: *textLog << wxT ("Unable to load library\n"); etisserant@382: #endif etisserant@382: // Open CAN devices etisserant@246: etisserant@382: ObjDict_Data.heartbeatError = Call_heartbeatError; etisserant@382: ObjDict_Data.initialisation = Call_initialisation; etisserant@382: ObjDict_Data.preOperational = Call_preOperational; etisserant@382: ObjDict_Data.operational = Call_operational; etisserant@382: ObjDict_Data.stopped = Call_stopped; etisserant@382: ObjDict_Data.post_sync = Call_post_sync; etisserant@382: ObjDict_Data.post_TPDO = Call_post_TPDO; etisserant@382: ObjDict_Data.storeODSubIndex = Call_storeODSubIndex; etisserant@246: etisserant@382: if (!canOpen (&SlaveBoard, &ObjDict_Data)) etisserant@382: { etisserant@382: printf ("Cannot open Slave Board (%s,%s)\n", SlaveBoard.busname, etisserant@382: SlaveBoard.baudrate); etisserant@382: return (1); etisserant@382: } etisserant@295: etisserant@382: StartTimerLoop (&InitNodes); etisserant@295: etisserant@382: return 0; etisserant@246: } etisserant@246: etisserant@382: void etisserant@382: stop_slave () etisserant@382: { greg@454: StopTimerLoop (&Exit); greg@454: TimerCleanup(); etisserant@382: return; etisserant@246: }