]> rtime.felk.cvut.cz Git - CanFestival-3.git/blobdiff - examples/TestMasterSlave/TestMasterSlave.c
- add RTAI support
[CanFestival-3.git] / examples / TestMasterSlave / TestMasterSlave.c
index 0a9a6900515aa046c81a373ab0f0d2e09c97d7d3..021e39a328c8dae7d5a0955ae2aa964c434603ce 100644 (file)
@@ -61,7 +61,7 @@ void catch_signal(int sig)
 }
 #endif
 
-void help()
+void help(void)
 {
   printf("**************************************************************\n");
   printf("*  TestMasterSlave                                           *\n");
@@ -94,8 +94,8 @@ void InitNodes(CO_Data* d, UNS32 id)
 {
        /****************************** INITIALISATION SLAVE *******************************/
        if(strcmp(SlaveBoard.baudrate, "none")) {
-               /* Defining the node Id */
                setNodeId(&TestSlave_Data, 0x02);
+
                /* init */
                setState(&TestSlave_Data, Initialisation);
        }
@@ -113,6 +113,15 @@ void InitNodes(CO_Data* d, UNS32 id)
        }
 }
 
+/***************************  EXIT  *****************************************/
+void Exit(CO_Data* d, UNS32 id)
+{
+       masterSendNMTstateChange(&TestMaster_Data, 0x02, NMT_Reset_Node);    
+    
+    //Stop master
+       setState(&TestMaster_Data, Stopped);
+}
+
 /****************************************************************************/
 /***************************  MAIN  *****************************************/
 /****************************************************************************/
@@ -121,7 +130,7 @@ int main(int argc,char **argv)
 
   int c;
   extern char *optarg;
-  char* LibraryPath="libcanfestival_can_virtual.so";
+  char* LibraryPath="../../drivers/can_virtual/libcanfestival_can_virtual.so";
 
   while ((c = getopt(argc, argv, "-m:s:M:S:l:")) != EOF)
   {
@@ -177,10 +186,12 @@ int main(int argc,char **argv)
   /* install signal handler for manual break */
        signal(SIGTERM, catch_signal);
        signal(SIGINT, catch_signal);
+       TimerInit();
 #endif
 
 #ifndef NOT_USE_DYNAMIC_LOADING
-       LoadCanDriver(LibraryPath);
+       if (LoadCanDriver(LibraryPath) == NULL)
+           printf("Unable to load library: %s\n",LibraryPath);
 #endif         
        // Open CAN devices
 
@@ -193,7 +204,8 @@ int main(int argc,char **argv)
                TestSlave_Data.stopped = TestSlave_stopped;
                TestSlave_Data.post_sync = TestSlave_post_sync;
                TestSlave_Data.post_TPDO = TestSlave_post_TPDO;
-               TestSlave_Data.storeODSubIndex = TestSlave_storeODSubIndex;             
+               TestSlave_Data.storeODSubIndex = TestSlave_storeODSubIndex;
+               TestSlave_Data.post_emcy = TestSlave_post_emcy;
 
                if(!canOpen(&SlaveBoard,&TestSlave_Data)){
                        eprintf("Cannot open Slave Board (%s,%s)\n",SlaveBoard.busname, SlaveBoard.baudrate);
@@ -209,33 +221,29 @@ int main(int argc,char **argv)
                TestMaster_Data.stopped = TestMaster_stopped;
                TestMaster_Data.post_sync = TestMaster_post_sync;
                TestMaster_Data.post_TPDO = TestMaster_post_TPDO;
+               TestMaster_Data.post_emcy = TestMaster_post_emcy;
+               TestMaster_Data.post_SlaveBootup=TestMaster_post_SlaveBootup;
                
                if(!canOpen(&MasterBoard,&TestMaster_Data)){
                        eprintf("Cannot open Master Board (%s,%s)\n",MasterBoard.busname, MasterBoard.baudrate);
                        goto fail_master;
                }
        }
-       sleep(2);
+
        // Start timer thread
        StartTimerLoop(&InitNodes);
 
        // wait Ctrl-C
-       
        pause();
-       eprintf("Finishing.\n");
-       
-       masterSendNMTstateChange (&TestMaster_Data, 0x02, NMT_Reset_Node);
-       eprintf("reset\n");
-       // Stop master
-       setState(&TestMaster_Data, Stopped);
-       
+
        // Stop timer thread
-       StopTimerLoop();
+       StopTimerLoop(&Exit);
        
        // Close CAN devices (and can threads)
-       if(strcmp(SlaveBoard.baudrate, "none")) canClose(&TestSlave_Data);
-fail_master:
        if(strcmp(MasterBoard.baudrate, "none")) canClose(&TestMaster_Data);    
+fail_master:
+       if(strcmp(SlaveBoard.baudrate, "none")) canClose(&TestSlave_Data);
 fail_slave:
+       TimerCleanup();
        return 0;
 }