void stop_slave () { StopTimerLoop (&Exit); TimerCleanup(); return; }
QCan::~QCan() { if (mPort) { // Stop timer thread StopTimerLoop(Exit); TimerCleanup(); } pthread_mutex_destroy(&mMutex); pthread_cond_destroy(&mOperationFinish); }
void TestMasterSlave_stop (void) { eprintf("Finishing.\n"); // Stop timer thread StopTimerLoop(&Exit); // Close CAN devices (and can threads) if(strcmp(SlaveBoard.baudrate, "none")) canClose(&TestSlave_Data); if(strcmp(MasterBoard.baudrate, "none")) canClose(&TestMaster_Data); TimerCleanup(); eprintf("End.\n"); }
int main(int argc, char** argv) { extern char *optarg; char command[200]; char* res; int ret=0; int sysret=0; int i=0; /* Print help and exit immediatly*/ if(argc < 2) { help_menu(); exit(1); } /* Init stack timer */ TimerInit(); /* Strip command-line*/ for(i=1 ; i<argc ; i++) { if(ProcessCommand(argv[i]) == INIT_ERR) goto init_fail; } /* Enter in a loop to read stdin command until "quit" is called */ while(ret != QUIT) { // wait on stdin for string command res = fgets(command, sizeof(command), stdin); sysret = system(CLEARSCREEN); ret = ProcessCommand(command); fflush(stdout); } printf("Finishing.\n"); // Stop timer thread StopTimerLoop(&Exit); /* Close CAN board */ canClose(CANOpenShellOD_Data); init_fail: TimerCleanup(); return 0; }
INTEGER8 InitCANdevice( UNS8 bus, UNS32 baudrate, UNS8 node ) { char busName[2]; char baudRate[7]; s_BOARD board; sprintf(busName, "%u", bus); sprintf(baudRate, "%u", baudrate); board.busname = busName; board.baudrate = baudRate; slaveNode = node; SillySlave_Data.heartbeatError = SillySlave_heartbeatError; SillySlave_Data.initialisation = SillySlave_initialisation; SillySlave_Data.preOperational = SillySlave_preOperational; SillySlave_Data.operational = SillySlave_operational; SillySlave_Data.stopped = SillySlave_stopped; SillySlave_Data.post_sync = SillySlave_post_sync; SillySlave_Data.post_TPDO = SillySlave_post_TPDO; SillySlave_Data.storeODSubIndex = SillySlave_storeODSubIndex; SillySlave_Data.post_emcy = SillySlave_post_emcy; if(!canOpen(&board, &SillySlave_Data)) { printf("\n\aInitCANdevice() CAN bus %s opening error, baudrate=%s\n",board.busname, board.baudrate); return -1; } printf("\nInitCANdevice(), canOpen() OK, starting timer loop...\n"); /* Start timer thread */ StartTimerLoop(&InitNode); /* wait Ctrl-C */ pause(); printf("\nFinishing.\n"); /* Stop timer thread */ StopTimerLoop(&Exit); return 0; }
int main(int argc,char **argv) { int c; extern char *optarg; char* LibraryPath="libcanfestival_can_virtual.so"; char *snodeid; while ((c = getopt(argc, argv, "-m:s:M:S:l:i:")) != EOF) { switch(c) { case 'm' : if (optarg[0] == 0) { help(); exit(1); } MasterBoard.busname = optarg; break; case 'M' : if (optarg[0] == 0) { help(); exit(1); } MasterBoard.baudrate = optarg; break; case 'l' : if (optarg[0] == 0) { help(); exit(1); } LibraryPath = optarg; break; case 'i' : if (optarg[0] == 0) { help(); exit(1); } snodeid = optarg; sscanf(snodeid,"%x",&slavenodeid); break; default: help(); exit(1); } } #if !defined(WIN32) || defined(__CYGWIN__) /* install signal handler for manual break */ signal(SIGTERM, catch_signal); signal(SIGINT, catch_signal); TimerInit(); #endif #ifndef NOT_USE_DYNAMIC_LOADING LoadCanDriver(LibraryPath); #endif TestMaster_Data.heartbeatError = TestMaster_heartbeatError; TestMaster_Data.initialisation = TestMaster_initialisation; TestMaster_Data.preOperational = TestMaster_preOperational; TestMaster_Data.operational = TestMaster_operational; TestMaster_Data.stopped = TestMaster_stopped; TestMaster_Data.post_sync = TestMaster_post_sync; TestMaster_Data.post_TPDO = TestMaster_post_TPDO; if(!canOpen(&MasterBoard,&TestMaster_Data)){ eprintf("Cannot open Master Board\n"); goto fail_master; } // Start timer thread StartTimerLoop(&InitNodes); // wait Ctrl-C pause(); eprintf("Finishing.\n"); // Reset the slave node for next use (will stop emitting heartbeat) masterSendNMTstateChange (&TestMaster_Data, slavenodeid, NMT_Reset_Node); // Stop master setState(&TestMaster_Data, Stopped); // Stop timer thread StopTimerLoop(&Exit); fail_master: if(MasterBoard.baudrate) canClose(&TestMaster_Data); TimerCleanup(); return 0; }
void CANUi::CANopenStop(){ if(m_CANopenState){ m_CANopenState = false; StopTimerLoop(&Exit); } }
int main(int argc, char** argv) { extern char *optarg; char command[200]; char* res; int ret=0; int sysret=0; int i=0; if (sem_init(&Write_sem, 0, 0) == -1) handle_error("Writesem_init"); if (sem_init(&Read_sem, 0, 0) == -1) handle_error("Readsem_init"); /* Defaults */ strcpy(LibraryPath,"/usr/lib/libcanfestival_can_peak_linux.so"); strcpy(BoardBusName,"0"); strcpy(BoardBaudRate,"1M"); /* Init stack timer */ TimerInit(); if (argc > 1){ printf("ok\n"); /* Strip command-line*/ for(i=1 ; i<argc ; i++) { if(ProcessCommand(argv[i]) == INIT_ERR) goto init_fail; } } NodeInit(0,1); RegisterSetODentryCallBack(CANOpenShellOD_Data, 0x2003, 0, &OnStatus3Update); help_menu(); CurrentNode = 3; sleep(1); //setState(CANOpenShellOD_Data, Operational); // Put the master in operational mode stopSYNC(CANOpenShellOD_Data); /* Enter in a loop to read stdin command until "quit" is called */ while(ret != QUIT) { // wait on stdin for string command rl_on_new_line (); res = rl_gets(); //sysret = system(CLEARSCREEN); if(res[0]=='.'){ ret = ProcessCommand(res+1); } else if(res[0]==','){ ret = ProcessFocusedCommand(res+1); } else if (res[0]=='\n'){ } else { EnterMutex(); SDO_write(CANOpenShellOD_Data,CurrentNode,0x1023,0x01,strlen(res),visible_string, res, 0); EnterMutex(); SDO_read(CANOpenShellOD_Data,CurrentNode,0x1023,0x03,visible_string,0); printf("%s\n",SDO_read_data); } fflush(stdout); usleep(500000); } printf("Finishing.\n"); // Stop timer thread StopTimerLoop(&Exit); /* Close CAN board */ canClose(CANOpenShellOD_Data); init_fail: TimerCleanup(); return 0; }
int main(int argc,char **argv) { struct sigaction act; uint8_t nodeid = 2; // register handler on SIGINT signal act.sa_handler=sortie; sigemptyset(&act.sa_mask); act.sa_flags=0; sigaction(SIGINT,&act,0); // Check that we have the right command line parameters if(argc != 3){ display_usage(argv[0]); exit(1); } // get command line parameters nodeid = strtoul(argv[2], NULL, 10); SlaveBoard0.busname = argv[1]; printf("Starting on %s with node id = %u\n", SlaveBoard0.busname, nodeid); // register the callbacks we use RegisterSetODentryCallBack(&slavedic_Data, 0x2001, 0, callback_on_position); slavedic_Data.initialisation=state_change; slavedic_Data.preOperational=state_change; slavedic_Data.operational=state_change; slavedic_Data.stopped=state_change; // Init Canfestival if (LoadCanDriver("./libcanfestival_can_socket.so") == NULL){ printf("Unable to load driver library\n"); printf("please put file libcanfestival_can_socket.so in the current directory\n"); exit(1); } if(!canOpen(&SlaveBoard0,&slavedic_Data)){ printf("Cannot open can interface %s\n",SlaveBoard0.busname); exit(1); } TimerInit(); setNodeId(&slavedic_Data, nodeid); setState(&slavedic_Data, Initialisation); printf("Canfestival initialisation done\n"); Run = 1; while(Run) { sleep(1); EnterMutex(); counter += nodeid; LeaveMutex(); } // Stop timer thread StopTimerLoop(&Exit); // Close CAN devices (and can threads) canClose(&slavedic_Data); return 0; }