examples/TestMasterSlave/TestMasterSlave.c
changeset 454 bc000083297a
parent 381 854c43cdc24a
child 465 2ef560acfa86
equal deleted inserted replaced
453:c74a73474cce 454:bc000083297a
    59   signal(SIGINT, catch_signal);
    59   signal(SIGINT, catch_signal);
    60   eprintf("Got Signal %d\n",sig);
    60   eprintf("Got Signal %d\n",sig);
    61 }
    61 }
    62 #endif
    62 #endif
    63 
    63 
    64 void help()
    64 void help(void)
    65 {
    65 {
    66   printf("**************************************************************\n");
    66   printf("**************************************************************\n");
    67   printf("*  TestMasterSlave                                           *\n");
    67   printf("*  TestMasterSlave                                           *\n");
    68   printf("*                                                            *\n");
    68   printf("*                                                            *\n");
    69   printf("*  A simple example for PC. It does implement 2 CanOpen      *\n");
    69   printf("*  A simple example for PC. It does implement 2 CanOpen      *\n");
   111 		setState(&TestMaster_Data, Initialisation);
   111 		setState(&TestMaster_Data, Initialisation);
   112 			
   112 			
   113 	}
   113 	}
   114 }
   114 }
   115 
   115 
       
   116 /***************************  EXIT  *****************************************/
       
   117 void Exit(CO_Data* d, UNS32 id)
       
   118 {
       
   119 	masterSendNMTstateChange(&TestMaster_Data, 0x02, NMT_Reset_Node);    
       
   120     
       
   121     //Stop master
       
   122 	setState(&TestMaster_Data, Stopped);
       
   123 }
       
   124 
   116 /****************************************************************************/
   125 /****************************************************************************/
   117 /***************************  MAIN  *****************************************/
   126 /***************************  MAIN  *****************************************/
   118 /****************************************************************************/
   127 /****************************************************************************/
   119 int main(int argc,char **argv)
   128 int main(int argc,char **argv)
   120 {
   129 {
   175 
   184 
   176 #if !defined(WIN32) || defined(__CYGWIN__)
   185 #if !defined(WIN32) || defined(__CYGWIN__)
   177   /* install signal handler for manual break */
   186   /* install signal handler for manual break */
   178 	signal(SIGTERM, catch_signal);
   187 	signal(SIGTERM, catch_signal);
   179 	signal(SIGINT, catch_signal);
   188 	signal(SIGINT, catch_signal);
       
   189 	TimerInit();
   180 #endif
   190 #endif
   181 
   191 
   182 #ifndef NOT_USE_DYNAMIC_LOADING
   192 #ifndef NOT_USE_DYNAMIC_LOADING
   183 	if (LoadCanDriver(LibraryPath) == NULL)
   193 	if (LoadCanDriver(LibraryPath) == NULL)
   184 	    printf("Unable to load library: %s\n",LibraryPath);
   194 	    printf("Unable to load library: %s\n",LibraryPath);
   222 
   232 
   223 	// Start timer thread
   233 	// Start timer thread
   224 	StartTimerLoop(&InitNodes);
   234 	StartTimerLoop(&InitNodes);
   225 
   235 
   226 	// wait Ctrl-C
   236 	// wait Ctrl-C
   227 	
       
   228 	pause();
   237 	pause();
   229 
   238 
   230 	eprintf("Finishing.\n");
       
   231     EnterMutex();
       
   232 	masterSendNMTstateChange (&TestMaster_Data, 0x02, NMT_Reset_Node);
       
   233     LeaveMutex();
       
   234 
       
   235 	eprintf("reset\n");
       
   236 	// Stop master
       
   237     EnterMutex();
       
   238 	setState(&TestMaster_Data, Stopped);
       
   239     LeaveMutex();
       
   240 	
       
   241 	// Stop timer thread
   239 	// Stop timer thread
   242 	StopTimerLoop();
   240 	StopTimerLoop(&Exit);
   243 	
   241 	
   244 	// Close CAN devices (and can threads)
   242 	// Close CAN devices (and can threads)
       
   243 	if(strcmp(MasterBoard.baudrate, "none")) canClose(&TestMaster_Data);	
       
   244 fail_master:
   245 	if(strcmp(SlaveBoard.baudrate, "none")) canClose(&TestSlave_Data);
   245 	if(strcmp(SlaveBoard.baudrate, "none")) canClose(&TestSlave_Data);
   246 fail_master:
       
   247 	if(strcmp(MasterBoard.baudrate, "none")) canClose(&TestMaster_Data);	
       
   248 fail_slave:
   246 fail_slave:
       
   247 	TimerCleanup();
   249 	return 0;
   248 	return 0;
   250 }
   249 }