32 #include <sys/types.h> 37 #endif // HAVE_CONFIG_H 63 sigjmp_buf ctrlc_capture;
65 jmp_buf ctrlc_capture;
66 #endif // HAVE_SIGLONGJMP 68 #if defined(__MINGW32__) 69 BOOL WINAPI win32_ctrlc_handler(DWORD type)
71 fprintf(stderr,
"\n");
87 fprintf(stderr,
"\n");
89 siglongjmp(ctrlc_capture, 1);
91 longjmp(ctrlc_capture, 1);
104 #endif // HAVE_SIGLONGJMP 106 #endif // defined(__MINGW32__) 110 #if defined(__MINGW32__) 113 if (!SetConsoleCtrlHandler(win32_ctrlc_handler, TRUE))
120 if (!SetConsoleCtrlHandler(NULL, FALSE))
132 signal(SIGINT, SIG_DFL);
134 #endif // defined(__MINGW32__) 138 int main(
int argc,
char *argv[])
140 pthread_t command_thread;
141 pthread_t control_thread;
142 pthread_t update_thread;
143 int command_thread_en;
144 int control_thread_en;
145 int update_thread_en;
177 close(STDOUT_FILENO);
178 close(STDERR_FILENO);
201 fprintf(stderr,
"YamabicoProject-Spur\n");
202 fprintf(stderr,
" Ver. %s\n", PROJECT_VERSION);
229 command_thread_en = 0;
230 command_thread_en = 0;
233 FILE *temp_paramfile = NULL;
249 int device_current, device_age;
250 sscanf(YP_PROTOCOL_NAME,
"YPP:%d:%d", ¤t, &age);
253 for (i = 0; i < 3; i++)
265 sscanf(version.
protocol,
"YPP:%d:%d", &device_current, &device_age);
268 if (device_current - device_age > current ||
269 device_current < current - age)
284 yprintf(
OUTPUT_LV_ERROR,
"Error: Device doesn't have available YP protocol version.\n(Device: %s, coordinator: %s)\n",
285 version.
protocol, YP_PROTOCOL_NAME);
293 if (device_current != current)
295 if (device_current < current)
350 if (strcmp(driver_param.
robot_name,
"embedded") == 0)
355 temp_paramfile = tmpfile();
371 fprintf(temp_paramfile,
"%s", param);
372 fseek(temp_paramfile, 0L, SEEK_SET);
375 else if (strlen(driver_param.
robot_name) > 0 && strcmp(driver_param.
robot_name,
"unknown") != 0)
487 command_thread_en = 1;
492 control_thread_en = 1;
496 control_thread_en = 0;
506 update_thread_en = 1;
510 update_thread_en = 0;
515 if (sigsetjmp(ctrlc_capture, 1) != 0)
521 if (setjmp(ctrlc_capture) != 0)
526 #endif // HAVE_SIGLONGJMP 543 if (update_thread_en)
545 pthread_cancel(update_thread);
546 pthread_join(update_thread, NULL);
547 update_thread_en = 0;
549 if (control_thread_en)
551 pthread_cancel(control_thread);
552 pthread_join(control_thread, NULL);
553 control_thread_en = 0;
555 if (command_thread_en)
557 pthread_cancel(command_thread);
558 pthread_join(command_thread, NULL);
559 command_thread_en = 0;
593 return (quit ? EXIT_SUCCESS : EXIT_FAILURE);
int set_baudrate(int baud)
MotorControlMode wheel_mode_prev[YP_PARAM_MAX_MOTOR_NUM]
int serial_tryconnect(char *device_name)
double * pp(YPSpur_param id, enum motor_id motor)
void init_command_thread(pthread_t *thread)
int main(int argc, char *argv[])
double p(YPSpur_param id, enum motor_id motor)
void arg_longhelp(int argc, char *argv[])
int odometry_receive_loop(void)
MotorControlMode wheel_mode[YP_PARAM_MAX_MOTOR_NUM]
void init_control_thread(pthread_t *thread)
int apply_robot_params(void)
void init_spur_command(void)
void hook_pre_global(void)
int get_embedded_param(char *param)
char parameter_filename[132]
void escape_road(const int enable)
SpurUserParamsPtr get_spur_user_param_ptr()
int set_paramptr(FILE *paramfile)
#define YP_PARAM_MAX_MOTOR_NUM
void yprintf(ParamOutputLv level, const char *format,...)
int get_version(Ver_t *apVer)
Get version info.
int get_parameter(Param_t *apParam)
Get version info.
void ansi_clear_line(ParamOutputLv level)
void init_coordinate_systems(void)
int option(ParamOptions option)
int set_param(char *filename, char *concrete_path)
int serial_connect(char *device_name)
void init_ypspurSSM(int ssm_id)
int arg_analyze(int argc, char *argv[])
ParametersPtr get_param_ptr()
void init_param_update_thread(pthread_t *thread, char *filename)
void arg_help(int argc, char *argv[])