examples/TestMasterSlave/TestMasterSlave.c
changeset 145 e747d2e26af0
parent 40 ddeeb217ed71
child 149 fe50ada8020b
--- a/examples/TestMasterSlave/TestMasterSlave.c	Tue Apr 03 20:20:27 2007 +0200
+++ b/examples/TestMasterSlave/TestMasterSlave.c	Wed Apr 04 13:04:31 2007 +0200
@@ -20,12 +20,21 @@
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
+#if defined(WIN32) && !defined(__CYGWIN__)
+#include <windows.h>
+#include "getopt.h"
+void pause(void)
+{
+	system("PAUSE");
+}
+#else
 #include <stdio.h>
 #include <string.h>
-#include <sys/time.h>
-#include <unistd.h>
+//#include <sys/time.h>
+//#include <unistd.h>
 #include <stdlib.h>
 #include <signal.h>
+#endif
 
 #include <applicfg.h>
 #include <can_driver.h>
@@ -69,54 +78,20 @@
 	return 0;
 }
 
-CAN_HANDLE SlaveCanHandle;
-CAN_HANDLE MasterCanHandle;
-
-// Baudrate values for Peak board :
-// CAN_BAUD_1M CAN_BAUD_500K CAN_BAUD_250K CAN_BAUD_125K CAN_BAUD_100K CAN_BAUD_50K
-// CAN_BAUD_20K CAN_BAUD_10K CAN_BAUD_5K
-
-#ifdef CAN_BAUD_500K
-int TranslateBaudeRate(char* optarg){
-	if(!strcmp( optarg, "1M")) return CAN_BAUD_1M;
-	if(!strcmp( optarg, "500K")) return CAN_BAUD_500K;
-	if(!strcmp( optarg, "250K")) return CAN_BAUD_250K;
-	if(!strcmp( optarg, "125K")) return CAN_BAUD_125K;
-	if(!strcmp( optarg, "100K")) return CAN_BAUD_100K;
-	if(!strcmp( optarg, "50K")) return CAN_BAUD_50K;
-	if(!strcmp( optarg, "20K")) return CAN_BAUD_20K;
-	if(!strcmp( optarg, "10K")) return CAN_BAUD_10K;
-	if(!strcmp( optarg, "5K")) return CAN_BAUD_5K;
-	if(!strcmp( optarg, "none")) return 0;
-	return 0x0000;
-}
-s_BOARD SlaveBoard = {"0", CAN_BAUD_500K, &TestSlave_Data};
-s_BOARD MasterBoard = {"1", CAN_BAUD_500K, &TestMaster_Data};
-#else
-int TranslateBaudeRate(char* optarg){
-	if(!strcmp( optarg, "1M")) return 1000;
-	if(!strcmp( optarg, "500K")) return 500;
-	if(!strcmp( optarg, "250K")) return 250;
-	if(!strcmp( optarg, "125K")) return 125;
-	if(!strcmp( optarg, "100K")) return 100;
-	if(!strcmp( optarg, "50K")) return 50;
-	if(!strcmp( optarg, "20K")) return 20;
-	if(!strcmp( optarg, "10K")) return 10;
-	if(!strcmp( optarg, "5K")) return 5;
-	if(!strcmp( optarg, "none")) return 0;
-	return 0;
-}
-s_BOARD SlaveBoard = {"0", 500, &TestSlave_Data};
-s_BOARD MasterBoard = {"1", 500, &TestMaster_Data};
-#endif
-
-
+CAN_PORT SlaveCanHandle;
+CAN_PORT MasterCanHandle;
+
+s_BOARD SlaveBoard = {"0", "500K"};
+s_BOARD MasterBoard = {"1", "500K"};
+
+#if !defined(WIN32) || defined(__CYGWIN__)
 void catch_signal(int sig)
 {
   signal(SIGTERM, catch_signal);
   signal(SIGINT, catch_signal);
   eprintf("Got Signal %d\n",sig);
 }
+#endif
 
 void help()
 {
@@ -132,6 +107,8 @@
   printf("*   ./TestMasterSlave  [OPTIONS]                             *\n");
   printf("*                                                            *\n");
   printf("*   OPTIONS:                                                 *\n");
+  printf("*     -l : Can library [\"libcanfestival_can_virtual.so\"]     *\n");
+  printf("*                                                            *\n");
   printf("*    Slave:                                                  *\n");
   printf("*     -s : bus name [\"0\"]                                    *\n");
   printf("*     -S : 1M,500K,250K,125K,100K,50K,20K,10K,none(disable)  *\n");
@@ -181,8 +158,9 @@
 
   char c;
   extern char *optarg;
-
-  while ((c = getopt(argc, argv, "-m:s:M:S:")) != EOF)
+  char* LibraryPath="libcanfestival_can_virtual.so";
+
+  while ((c = getopt(argc, argv, "-m:s:M:S:l:")) != EOF)
   {
     switch(c)
     {
@@ -208,7 +186,7 @@
           help();
           exit(1);
         }
-        SlaveBoard.baudrate = TranslateBaudeRate(optarg);
+        SlaveBoard.baudrate = optarg;
         break;
       case 'M' :
         if (optarg[0] == 0)
@@ -216,7 +194,15 @@
           help();
           exit(1);
         }
-        MasterBoard.baudrate = TranslateBaudeRate(optarg);
+        MasterBoard.baudrate = optarg;
+        break;
+      case 'l' :
+        if (optarg[0] == 0)
+        {
+          help();
+          exit(1);
+        }
+        LibraryPath = optarg;
         break;
       default:
         help();
@@ -224,16 +210,31 @@
     }
   }
 
-	/* install signal handler for manual break */
+#if !defined(WIN32) || defined(__CYGWIN__)
+  /* install signal handler for manual break */
 	signal(SIGTERM, catch_signal);
 	signal(SIGINT, catch_signal);
-	
+#endif
+
+#ifndef NOT_USE_DYNAMIC_LOADING
+	LoadCanDriver(LibraryPath);
+#endif		
 	// Open CAN devices
-	if(SlaveBoard.baudrate)
-		if((SlaveCanHandle = canOpen(&SlaveBoard))==NULL) goto fail_slave;
-
-	if(MasterBoard.baudrate)
-		if((MasterCanHandle = canOpen(&MasterBoard))==NULL) goto fail_master;
+	if(SlaveBoard.baudrate){
+		SlaveCanHandle = canOpen(&SlaveBoard,&TestSlave_Data);
+		if(SlaveCanHandle == NULL){
+			eprintf("Cannot open Slave Board (%s,%s)\n",SlaveBoard.busname, SlaveBoard.baudrate);
+			goto fail_slave;
+		}
+	}
+
+	if(MasterBoard.baudrate){
+		MasterCanHandle = canOpen(&MasterBoard,&TestMaster_Data);
+		if(MasterCanHandle == NULL){
+			eprintf("Cannot open Master Board (%s,%s)\n",SlaveBoard.busname, SlaveBoard.baudrate);
+			goto fail_master;
+		}
+	}
 	
 	// Start timer thread
 	StartTimerLoop(&InitNodes);