00001 // Copyright (C) 2004-2006 University of Louisiana at Lafayette 00002 // Authors: Suresh Golconda, Nitin, Arun Pratap, Christopher Mire 00003 00004 #ifndef CAJUN_CONTROL_WINDOW_H 00005 #define CAJUN_CONTROL_WINDOW_H 00006 00007 #include "data_type.H" 00008 #include "data_queue.H" 00009 #include <cstring> 00010 #include <sstream> 00011 #include "cb_time.H" 00012 #include "world_state.H" 00013 #include <glui.h> 00014 #include "interface.H" 00015 00016 namespace cajun 00017 { 00019 class control_panel_window_t 00020 { 00021 public: 00022 static control_panel_window_t *create_window (char const *conf_filename, 00023 int viz_mode, 00024 world_state_t *ws_, 00025 graphic_interface_t *interface_); 00026 void update_fps (unsigned fps_); 00027 void update_data (); 00028 void mouse_callback (int button, int state, int x, int y); 00029 void normalKey_callback (int key); 00030 void controlKey_callback (int key); 00031 void display (); 00032 00033 private: 00034 control_panel_window_t (char const *conf_filename, int viz_mode, 00035 world_state_t *ws_, graphic_interface_t *interface_); 00036 00037 void setup_glui_controls (); 00038 void read_queues (); 00039 static void update_simulation (int mode_); 00040 void write_control_data (); 00041 void write_playback_data (); 00042 void pause_control (); 00043 void find_gp_driver_conf_files (const char *conf_dir_); 00044 static void update_calibration (int which_); 00045 static void update_gpconf_files (int button_id_); 00046 00047 static control_panel_window_t *control_panel_window_instance; 00048 00050 cb_time_t m_timer; 00052 double curr_time; 00054 world_state_t *m_world_state; 00056 graphic_interface_t *m_graphics; 00058 GLUI *m_glui; 00059 00061 bool display_fps; 00063 bool display_calibration_panel; 00065 double pause_speed; // 0- when not paused, x-value when paused, 00067 int viz_mode; 00069 double m_desired_speed; 00071 std::string m_calibration_helper_script; 00072 00074 bool m_time_ok; 00076 bool m_steering_ok; 00078 bool m_control_line_ok; 00080 bool m_sog_ok; 00082 bool m_signal_line_ok; 00084 bool m_waypt_ok; 00086 bool m_nav_ok; 00087 00089 playback_control_data_t m_playback_control_data; 00091 control_data_t m_control_data; 00093 sim_time_data_t m_sim_time_data; 00095 steering_data_t m_steering_data; 00097 control_line_data_t m_control_line_data; 00099 sog_data_t m_sog_data; 00101 signal_line_data_t m_signal_line_data; 00103 waypt_data_t m_waypt_data; 00105 nav_data_t m_nav_data; 00106 00108 bool m_panels_open; 00110 int *m_safety_siren; 00112 int *m_safety_lights; 00114 int *m_engine_starter; 00116 int *m_generator_starter; 00118 int *m_brake_lights; 00120 int *m_left_blinker; 00122 int *m_right_blinker; 00124 int *m_current_gear; 00126 int *m_signal_generator; 00128 int *m_signal_engine; 00130 int *m_signal_pause; 00132 int *m_signal_kill; 00134 std::vector<std::string> m_sensor_gp_conf; 00136 int *m_sensor_gp_conf_selection; 00138 double *m_gpconf_pos[3]; 00140 double *m_gpconf_orient[3]; 00142 int *m_fps; 00143 00145 GLUI_Rollout *m_glui_time_and_steering_panel; 00147 GLUI_EditText *m_glui_sim_time; 00149 GLUI_EditText *m_glui_sim_time_ext; 00151 GLUI_EditText *m_glui_sog; 00153 GLUI_EditText *m_glui_throttle; 00155 GLUI_EditText *m_glui_steering; 00157 GLUI_Rollout *m_glui_control_line_panel; 00159 GLUI_Checkbox *m_glui_safety_siren; 00161 GLUI_Checkbox *m_glui_safety_lights; 00163 GLUI_Checkbox *m_glui_engine_starter; 00165 GLUI_Checkbox *m_glui_generator_starter; 00167 GLUI_Checkbox *m_glui_brake_lights; 00169 GLUI_Checkbox *m_glui_left_blinker; 00171 GLUI_Checkbox *m_glui_right_blinker; 00173 GLUI_Rollout *m_glui_current_gear_panel; 00175 GLUI_RadioGroup *m_glui_current_gear_radio; 00177 GLUI_Rollout *m_glui_signal_line_panel; 00179 GLUI_Checkbox *m_glui_signal_generator; 00181 GLUI_Checkbox *m_glui_signal_engine; 00183 GLUI_Checkbox *m_glui_signal_pause; 00185 GLUI_Checkbox *m_glui_signal_kill; 00187 GLUI_Rollout *m_glui_simulation_control_panel; 00189 GLUI_Button *m_glui_play; 00191 GLUI_Button *m_glui_pause; 00193 GLUI_Button *m_glui_speedup; 00195 GLUI_Button *m_glui_slowdown; 00197 GLUI_EditText *m_glui_sim_speed; 00199 GLUI_Rollout *m_glui_calibration_panel; 00201 GLUI_Listbox *m_glui_gp_driver_conf_listbox; 00203 GLUI_Spinner *m_glui_gpconf_pos[3]; 00205 GLUI_Spinner *m_glui_gpconf_orient[3]; 00207 GLUI_Button *m_glui_gpconf_commit; 00209 GLUI_Rollout *m_glui_fps_panel; 00211 GLUI_EditText *m_glui_fps; 00212 }; 00213 }; 00214 #endif