diff -r 6efc85c5493e -r 1c1e3599d66a doc/doxygen/html/TestMasterSlave_8c-source.html --- a/doc/doxygen/html/TestMasterSlave_8c-source.html Mon Feb 11 11:00:12 2008 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,267 +0,0 @@ - -
-00001 /* -00002 This file is part of CanFestival, a library implementing CanOpen Stack. -00003 -00004 Copyright (C): Edouard TISSERANT and Francis DUPIN -00005 -00006 See COPYING file for copyrights details. -00007 -00008 This library is free software; you can redistribute it and/or -00009 modify it under the terms of the GNU Lesser General Public -00010 License as published by the Free Software Foundation; either -00011 version 2.1 of the License, or (at your option) any later version. -00012 -00013 This library is distributed in the hope that it will be useful, -00014 but WITHOUT ANY WARRANTY; without even the implied warranty of -00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -00016 Lesser General Public License for more details. -00017 -00018 You should have received a copy of the GNU Lesser General Public -00019 License along with this library; if not, write to the Free Software -00020 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -00021 */ -00022 -00023 #if defined(WIN32) && !defined(__CYGWIN__) -00024 #include <windows.h> -00025 #include "getopt.h" -00026 void pause(void) -00027 { -00028 system("PAUSE"); -00029 } -00030 #else -00031 #include <stdio.h> -00032 #include <string.h> -00033 #include <unistd.h> -00034 #include <stdlib.h> -00035 #include <signal.h> -00036 #endif -00037 -00038 #include "canfestival.h" -00039 //#include <can_driver.h> -00040 //#include <timers_driver.h> -00041 -00042 #include "Master.h" -00043 #include "Slave.h" -00044 #include "TestMasterSlave.h" -00045 -00046 UNS32 OnMasterMap1Update(CO_Data* d, const indextable * unsused_indextable, UNS8 unsused_bSubindex) -00047 { -00048 eprintf("OnSlaveMap1Update:%d\n", SlaveMap1); -00049 return 0; -00050 } -00051 -00052 s_BOARD SlaveBoard = {"0", "125K"}; -00053 s_BOARD MasterBoard = {"1", "125K"}; -00054 -00055 #if !defined(WIN32) || defined(__CYGWIN__) -00056 void catch_signal(int sig) -00057 { -00058 signal(SIGTERM, catch_signal); -00059 signal(SIGINT, catch_signal); -00060 eprintf("Got Signal %d\n",sig); -00061 } -00062 #endif -00063 -00064 void help() -00065 { -00066 printf("**************************************************************\n"); -00067 printf("* TestMasterSlave *\n"); -00068 printf("* *\n"); -00069 printf("* A simple example for PC. It does implement 2 CanOpen *\n"); -00070 printf("* nodes in the same process. A master and a slave. Both *\n"); -00071 printf("* communicate together, exchanging periodically NMT, SYNC, *\n"); -00072 printf("* SDO and PDO. Master configure heartbeat producer time *\n"); -00073 printf("* at 1000 ms for slave node-id 0x02 by concise DCF. *\n"); -00074 printf("* *\n"); -00075 printf("* Usage: *\n"); -00076 printf("* ./TestMasterSlave [OPTIONS] *\n"); -00077 printf("* *\n"); -00078 printf("* OPTIONS: *\n"); -00079 printf("* -l : Can library [\"libcanfestival_can_virtual.so\"] *\n"); -00080 printf("* *\n"); -00081 printf("* Slave: *\n"); -00082 printf("* -s : bus name [\"0\"] *\n"); -00083 printf("* -S : 1M,500K,250K,125K,100K,50K,20K,10K,none(disable) *\n"); -00084 printf("* *\n"); -00085 printf("* Master: *\n"); -00086 printf("* -m : bus name [\"1\"] *\n"); -00087 printf("* -M : 1M,500K,250K,125K,100K,50K,20K,10K,none(disable) *\n"); -00088 printf("* *\n"); -00089 printf("**************************************************************\n"); -00090 } -00091 -00092 /*************************** INIT *****************************************/ -00093 void InitNodes(CO_Data* d, UNS32 id) -00094 { -00095 /****************************** INITIALISATION SLAVE *******************************/ -00096 if(strcmp(SlaveBoard.baudrate, "none")) { -00097 /* Defining the node Id */ -00098 setNodeId(&TestSlave_Data, 0x02); -00099 /* init */ -00100 setState(&TestSlave_Data, Initialisation); -00101 } -00102 -00103 /****************************** INITIALISATION MASTER *******************************/ -00104 if(strcmp(MasterBoard.baudrate, "none")){ -00105 RegisterSetODentryCallBack(&TestMaster_Data, 0x2000, 0, &OnMasterMap1Update); -00106 -00107 /* Defining the node Id */ -00108 setNodeId(&TestMaster_Data, 0x01); -00109 -00110 /* init */ -00111 setState(&TestMaster_Data, Initialisation); -00112 -00113 } -00114 } -00115 -00116 /****************************************************************************/ -00117 /*************************** MAIN *****************************************/ -00118 /****************************************************************************/ -00119 int main(int argc,char **argv) -00120 { -00121 -00122 int c; -00123 extern char *optarg; -00124 char* LibraryPath="libcanfestival_can_virtual.so"; -00125 -00126 while ((c = getopt(argc, argv, "-m:s:M:S:l:")) != EOF) -00127 { -00128 switch(c) -00129 { -00130 case 's' : -00131 if (optarg[0] == 0) -00132 { -00133 help(); -00134 exit(1); -00135 } -00136 SlaveBoard.busname = optarg; -00137 break; -00138 case 'm' : -00139 if (optarg[0] == 0) -00140 { -00141 help(); -00142 exit(1); -00143 } -00144 MasterBoard.busname = optarg; -00145 break; -00146 case 'S' : -00147 if (optarg[0] == 0) -00148 { -00149 help(); -00150 exit(1); -00151 } -00152 SlaveBoard.baudrate = optarg; -00153 break; -00154 case 'M' : -00155 if (optarg[0] == 0) -00156 { -00157 help(); -00158 exit(1); -00159 } -00160 MasterBoard.baudrate = optarg; -00161 break; -00162 case 'l' : -00163 if (optarg[0] == 0) -00164 { -00165 help(); -00166 exit(1); -00167 } -00168 LibraryPath = optarg; -00169 break; -00170 default: -00171 help(); -00172 exit(1); -00173 } -00174 } -00175 -00176 #if !defined(WIN32) || defined(__CYGWIN__) -00177 /* install signal handler for manual break */ -00178 signal(SIGTERM, catch_signal); -00179 signal(SIGINT, catch_signal); -00180 #endif -00181 -00182 #ifndef NOT_USE_DYNAMIC_LOADING -00183 LoadCanDriver(LibraryPath); -00184 #endif -00185 // Open CAN devices -00186 -00187 if(strcmp(SlaveBoard.baudrate, "none")){ -00188 -00189 TestSlave_Data.heartbeatError = TestSlave_heartbeatError; -00190 TestSlave_Data.initialisation = TestSlave_initialisation; -00191 TestSlave_Data.preOperational = TestSlave_preOperational; -00192 TestSlave_Data.operational = TestSlave_operational; -00193 TestSlave_Data.stopped = TestSlave_stopped; -00194 TestSlave_Data.post_sync = TestSlave_post_sync; -00195 TestSlave_Data.post_TPDO = TestSlave_post_TPDO; -00196 TestSlave_Data.storeODSubIndex = TestSlave_storeODSubIndex; -00197 -00198 if(!canOpen(&SlaveBoard,&TestSlave_Data)){ -00199 eprintf("Cannot open Slave Board (%s,%s)\n",SlaveBoard.busname, SlaveBoard.baudrate); -00200 goto fail_slave; -00201 } -00202 } -00203 if(strcmp(MasterBoard.baudrate, "none")){ -00204 -00205 TestMaster_Data.heartbeatError = TestMaster_heartbeatError; -00206 TestMaster_Data.initialisation = TestMaster_initialisation; -00207 TestMaster_Data.preOperational = TestMaster_preOperational; -00208 TestMaster_Data.operational = TestMaster_operational; -00209 TestMaster_Data.stopped = TestMaster_stopped; -00210 TestMaster_Data.post_sync = TestMaster_post_sync; -00211 TestMaster_Data.post_TPDO = TestMaster_post_TPDO; -00212 -00213 if(!canOpen(&MasterBoard,&TestMaster_Data)){ -00214 eprintf("Cannot open Master Board (%s,%s)\n",MasterBoard.busname, MasterBoard.baudrate); -00215 goto fail_master; -00216 } -00217 } -00218 -00219 // Start timer thread -00220 StartTimerLoop(&InitNodes); -00221 -00222 // wait Ctrl-C -00223 -00224 pause(); -00225 eprintf("Finishing.\n"); -00226 -00227 masterSendNMTstateChange (&TestMaster_Data, 0x02, NMT_Reset_Node); -00228 eprintf("reset\n"); -00229 // Stop master -00230 setState(&TestMaster_Data, Stopped); -00231 -00232 // Stop timer thread -00233 StopTimerLoop(); -00234 -00235 // Close CAN devices (and can threads) -00236 if(strcmp(SlaveBoard.baudrate, "none")) canClose(&TestSlave_Data); -00237 fail_master: -00238 if(strcmp(MasterBoard.baudrate, "none")) canClose(&TestMaster_Data); -00239 fail_slave: -00240 return 0; -00241 } -