1 /**********************************************************************
3 FILENAME: uiuc_menu_controlSurface.cpp
5 ----------------------------------------------------------------------
7 DESCRIPTION: reads input data for specified aircraft and creates
8 approporiate data storage space
10 ----------------------------------------------------------------------
14 ----------------------------------------------------------------------
16 REFERENCES: based on "menu reader" format of Michael Selig
18 ----------------------------------------------------------------------
20 HISTORY: 04/04/2003 initial release
21 06/30/2003 (RD) replaced istrstream with istringstream
22 to get rid of the annoying warning about
23 using the strstream header
25 ----------------------------------------------------------------------
27 AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
28 Michael Selig <m-selig@uiuc.edu>
30 ----------------------------------------------------------------------
34 ----------------------------------------------------------------------
38 ----------------------------------------------------------------------
42 ----------------------------------------------------------------------
44 CALLED BY: uiuc_menu()
46 ----------------------------------------------------------------------
48 CALLS TO: check_float() if needed
54 ----------------------------------------------------------------------
56 COPYRIGHT: (C) 2003 by Michael Selig
58 This program is free software; you can redistribute it and/or
59 modify it under the terms of the GNU General Public License
60 as published by the Free Software Foundation.
62 This program is distributed in the hope that it will be useful,
63 but WITHOUT ANY WARRANTY; without even the implied warranty of
64 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
65 GNU General Public License for more details.
67 You should have received a copy of the GNU General Public License
68 along with this program; if not, write to the Free Software
69 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
71 **********************************************************************/
73 #include <simgear/compiler.h>
80 #include "uiuc_menu_controlSurface.h"
90 void parse_controlSurface( const string& linetoken2, const string& linetoken3,
91 const string& linetoken4, const string& linetoken5,
92 const string& linetoken6, const string& linetoken7,
93 const string& linetoken8, const string& linetoken9,
94 const string& linetoken10,
95 const string& aircraft_directory,
98 int token_value_convert1, token_value_convert2;
99 istringstream token3(linetoken3.c_str());
100 istringstream token4(linetoken4.c_str());
101 istringstream token5(linetoken5.c_str());
102 istringstream token6(linetoken6.c_str());
103 istringstream token7(linetoken7.c_str());
104 istringstream token8(linetoken8.c_str());
105 istringstream token9(linetoken9.c_str());
106 istringstream token10(linetoken10.c_str());
108 switch(controlSurface_map[linetoken2])
112 if (check_float(linetoken3))
113 token3 >> token_value;
115 uiuc_warnings_errors(1, *command_line);
119 if (check_float(linetoken4))
120 token4 >> token_value;
122 uiuc_warnings_errors(1, *command_line);
129 if (check_float(linetoken3))
130 token3 >> token_value;
132 uiuc_warnings_errors(1, *command_line);
136 if (check_float(linetoken4))
137 token4 >> token_value;
139 uiuc_warnings_errors(1, *command_line);
146 if (check_float(linetoken3))
147 token3 >> token_value;
149 uiuc_warnings_errors(1, *command_line);
153 if (check_float(linetoken4))
154 token4 >> token_value;
156 uiuc_warnings_errors(1, *command_line);
161 case set_Long_trim_flag:
163 if (check_float(linetoken3))
164 token3 >> token_value;
166 uiuc_warnings_errors(1, *command_line);
168 set_Long_trim = true;
169 elevator_tab = token_value;
172 case set_Long_trim_deg_flag:
174 if (check_float(linetoken3))
175 token3 >> token_value;
177 uiuc_warnings_errors(1, *command_line);
179 set_Long_trim = true;
180 elevator_tab = token_value * DEG_TO_RAD;
183 case zero_Long_trim_flag:
185 zero_Long_trim = true;
188 case elevator_step_flag:
190 // set step input flag
191 elevator_step = true;
193 // read in step angle in degrees and convert
194 if (check_float(linetoken3))
195 token3 >> token_value;
197 uiuc_warnings_errors(1, *command_line);
199 elevator_step_angle = token_value * DEG_TO_RAD;
201 // read in step start time
202 if (check_float(linetoken4))
203 token4 >> token_value;
205 uiuc_warnings_errors(1, *command_line);
207 elevator_step_startTime = token_value;
210 case elevator_singlet_flag:
212 // set singlet input flag
213 elevator_singlet = true;
215 // read in singlet angle in degrees and convert
216 if (check_float(linetoken3))
217 token3 >> token_value;
219 uiuc_warnings_errors(1, *command_line);
221 elevator_singlet_angle = token_value * DEG_TO_RAD;
223 // read in singlet start time
224 if (check_float(linetoken4))
225 token4 >> token_value;
227 uiuc_warnings_errors(1, *command_line);
229 elevator_singlet_startTime = token_value;
231 // read in singlet duration
232 if (check_float(linetoken5))
233 token5 >> token_value;
235 uiuc_warnings_errors(1, *command_line);
237 elevator_singlet_duration = token_value;
240 case elevator_doublet_flag:
242 // set doublet input flag
243 elevator_doublet = true;
245 // read in doublet angle in degrees and convert
246 if (check_float(linetoken3))
247 token3 >> token_value;
249 uiuc_warnings_errors(1, *command_line);
251 elevator_doublet_angle = token_value * DEG_TO_RAD;
253 // read in doublet start time
254 if (check_float(linetoken4))
255 token4 >> token_value;
257 uiuc_warnings_errors(1, *command_line);
259 elevator_doublet_startTime = token_value;
261 // read in doublet duration
262 if (check_float(linetoken5))
263 token5 >> token_value;
265 uiuc_warnings_errors(1, *command_line);
267 elevator_doublet_duration = token_value;
270 case elevator_input_flag:
272 elevator_input = true;
273 elevator_input_file = aircraft_directory + linetoken3;
274 token4 >> token_value_convert1;
275 token5 >> token_value_convert2;
276 convert_y = uiuc_convert(token_value_convert1);
277 convert_x = uiuc_convert(token_value_convert2);
278 uiuc_1DdataFileReader(elevator_input_file,
279 elevator_input_timeArray,
280 elevator_input_deArray,
281 elevator_input_ntime);
282 token6 >> token_value;
283 elevator_input_startTime = token_value;
286 case aileron_input_flag:
288 aileron_input = true;
289 aileron_input_file = aircraft_directory + linetoken3;
290 token4 >> token_value_convert1;
291 token5 >> token_value_convert2;
292 convert_y = uiuc_convert(token_value_convert1);
293 convert_x = uiuc_convert(token_value_convert2);
294 uiuc_1DdataFileReader(aileron_input_file,
295 aileron_input_timeArray,
296 aileron_input_daArray,
297 aileron_input_ntime);
298 token6 >> token_value;
299 aileron_input_startTime = token_value;
302 case rudder_input_flag:
305 rudder_input_file = aircraft_directory + linetoken3;
306 token4 >> token_value_convert1;
307 token5 >> token_value_convert2;
308 convert_y = uiuc_convert(token_value_convert1);
309 convert_x = uiuc_convert(token_value_convert2);
310 uiuc_1DdataFileReader(rudder_input_file,
311 rudder_input_timeArray,
312 rudder_input_drArray,
314 token6 >> token_value;
315 rudder_input_startTime = token_value;
318 case flap_pos_input_flag:
320 flap_pos_input = true;
321 flap_pos_input_file = aircraft_directory + linetoken3;
322 token4 >> token_value_convert1;
323 token5 >> token_value_convert2;
324 convert_y = uiuc_convert(token_value_convert1);
325 convert_x = uiuc_convert(token_value_convert2);
326 uiuc_1DdataFileReader(flap_pos_input_file,
327 flap_pos_input_timeArray,
328 flap_pos_input_dfArray,
329 flap_pos_input_ntime);
330 token6 >> token_value;
331 flap_pos_input_startTime = token_value;
334 case pilot_elev_no_flag:
336 pilot_elev_no_check = true;
339 case pilot_ail_no_flag:
341 pilot_ail_no_check = true;
344 case pilot_rud_no_flag:
346 pilot_rud_no_check = true;
351 if (check_float(linetoken3))
352 token3 >> token_value;
354 uiuc_warnings_errors(1, *command_line);
357 flap_max = token_value;
362 if (check_float(linetoken3))
363 token3 >> token_value;
365 uiuc_warnings_errors(1, *command_line);
368 flap_rate = token_value;
371 case spoiler_max_flag:
373 if (check_float(linetoken3))
374 token3 >> token_value;
376 uiuc_warnings_errors(1, *command_line);
379 spoiler_max = token_value;
382 case spoiler_rate_flag:
384 if (check_float(linetoken3))
385 token3 >> token_value;
387 uiuc_warnings_errors(1, *command_line);
390 spoiler_rate = token_value;
393 case aileron_sas_KP_flag:
395 if (check_float(linetoken3))
396 token3 >> token_value;
398 uiuc_warnings_errors(1, *command_line);
400 aileron_sas_KP = token_value;
403 case aileron_sas_max_flag:
405 if (check_float(linetoken3))
406 token3 >> token_value;
408 uiuc_warnings_errors(1, *command_line);
409 aileron_sas_max = token_value;
410 use_aileron_sas_max = true;
413 case aileron_stick_gain_flag:
415 if (check_float(linetoken3))
416 token3 >> token_value;
418 uiuc_warnings_errors(1, *command_line);
419 aileron_stick_gain = token_value;
420 use_aileron_stick_gain = true;
423 case elevator_sas_KQ_flag:
425 if (check_float(linetoken3))
426 token3 >> token_value;
428 uiuc_warnings_errors(1, *command_line);
429 elevator_sas_KQ = token_value;
432 case elevator_sas_max_flag:
434 if (check_float(linetoken3))
435 token3 >> token_value;
437 uiuc_warnings_errors(1, *command_line);
438 elevator_sas_max = token_value;
439 use_elevator_sas_max = true;
442 case elevator_sas_min_flag:
444 if (check_float(linetoken3))
445 token3 >> token_value;
447 uiuc_warnings_errors(1, *command_line);
448 elevator_sas_min = token_value;
449 use_elevator_sas_min = true;
452 case elevator_stick_gain_flag:
454 if (check_float(linetoken3))
455 token3 >> token_value;
457 uiuc_warnings_errors(1, *command_line);
458 elevator_stick_gain = token_value;
459 use_elevator_stick_gain = true;
462 case rudder_sas_KR_flag:
464 if (check_float(linetoken3))
465 token3 >> token_value;
467 uiuc_warnings_errors(1, *command_line);
468 rudder_sas_KR = token_value;
471 case rudder_sas_max_flag:
473 if (check_float(linetoken3))
474 token3 >> token_value;
476 uiuc_warnings_errors(1, *command_line);
477 rudder_sas_max = token_value;
478 use_rudder_sas_max = true;
481 case rudder_stick_gain_flag:
483 if (check_float(linetoken3))
484 token3 >> token_value;
486 uiuc_warnings_errors(1, *command_line);
487 rudder_stick_gain = token_value;
488 use_rudder_stick_gain = true;
491 case use_aileron_sas_type1_flag:
493 use_aileron_sas_type1 = true;
496 case use_elevator_sas_type1_flag:
498 use_elevator_sas_type1 = true;
501 case use_rudder_sas_type1_flag:
503 use_rudder_sas_type1 = true;
508 if (check_float(linetoken3))
509 token3 >> token_value;
511 uiuc_warnings_errors(1, *command_line);
513 ap_pah_start_time=token_value;
519 if (check_float(linetoken3))
520 token3 >> token_value;
522 uiuc_warnings_errors(1, *command_line);
524 ap_alh_start_time=token_value;
530 if (check_float(linetoken3))
531 token3 >> token_value;
533 uiuc_warnings_errors(1, *command_line);
535 ap_rah_start_time=token_value;
541 if (check_float(linetoken3))
542 token3 >> token_value;
544 uiuc_warnings_errors(1, *command_line);
546 ap_hh_start_time=token_value;
550 case ap_Theta_ref_flag:
552 if (check_float(linetoken3))
553 token3 >> token_value;
555 uiuc_warnings_errors(1, *command_line);
556 token4 >> token_value_convert1;
557 convert_y = uiuc_convert(token_value_convert1);
559 ap_Theta_ref_rad = token_value * convert_y;
562 case ap_alt_ref_flag:
564 if (check_float(linetoken3))
565 token3 >> token_value;
567 uiuc_warnings_errors(1, *command_line);
569 ap_alt_ref_ft = token_value;
572 case ap_Phi_ref_flag:
574 if (check_float(linetoken3))
575 token3 >> token_value;
577 uiuc_warnings_errors(1, *command_line);
578 token4 >> token_value_convert1;
579 convert_y = uiuc_convert(token_value_convert1);
581 ap_Phi_ref_rad = token_value * convert_y;
584 case ap_Psi_ref_flag:
586 if (check_float(linetoken3))
587 token3 >> token_value;
589 uiuc_warnings_errors(1, *command_line);
590 token4 >> token_value_convert1;
591 convert_y = uiuc_convert(token_value_convert1);
593 ap_Psi_ref_rad = token_value * convert_y;
598 if (ignore_unknown_keywords) {
601 // print error message
602 uiuc_warnings_errors(2, *command_line);