bool test_flight(int test_num, int n_wind, const double speed_factor, const bool auto_mc) { // multipurpose flight test GlidePolar glide_polar(fixed_two); Waypoints waypoints; setup_waypoints(waypoints); if (verbose) distance_counts(); TaskEventsPrint default_events(verbose); TaskManager task_manager(default_events, waypoints); task_manager.set_glide_polar(glide_polar); task_manager.get_ordered_task_behaviour().aat_min_time = aat_min_time(test_num); TaskBehaviour task_behaviour = task_manager.get_task_behaviour(); task_behaviour.enable_trace = false; task_behaviour.auto_mc = auto_mc; task_behaviour.calc_glide_required = false; if ((test_num == 0) || (test_num == 2)) task_behaviour.optimise_targets_bearing = false; task_manager.set_task_behaviour(task_behaviour); bool goto_target = false; switch (test_num) { case 0: case 2: case 7: goto_target = true; break; }; autopilot_parms.goto_target = goto_target; test_task(task_manager, waypoints, test_num); waypoints.clear(); // clear waypoints so abort wont do anything return run_flight(task_manager, autopilot_parms, n_wind, speed_factor); }
int main(int argc, char** argv) { if (!parse_args(argc,argv)) { return 0; } plan_tests(16); Waypoints waypoints; ok(setup_waypoints(waypoints),"waypoint setup",0); unsigned size = waypoints.size(); ok(test_lookup(waypoints,3),"waypoint lookup",0); ok(!test_lookup(waypoints,5000),"waypoint bad lookup",0); ok(test_nearest(waypoints),"waypoint nearest",0); ok(test_nearest_landable(waypoints),"waypoint nearest landable",0); ok(test_location(waypoints,true),"waypoint location good",0); ok(test_location(waypoints,false),"waypoint location bad",0); ok(test_range(waypoints,100)==1,"waypoint visit range 100m",0); ok(test_radius(waypoints,100)==1,"waypoint radius 100m",0); ok(test_range(waypoints,500000)== waypoints.size(),"waypoint range 500000m",0); ok(test_radius(waypoints,25000)<= test_range(waypoints,25000),"waypoint radius<range",0); // test clear waypoints.clear(); ok(waypoints.size()==0,"waypoint clear",0); setup_waypoints(waypoints); ok(size == waypoints.size(),"waypoint setup after clear",0); ok(test_copy(waypoints),"waypoint copy",0); ok(test_erase(waypoints,3),"waypoint erase",0); ok(test_replace(waypoints,4),"waypoint replace",0); return exit_status(); }
void XCSoarInterface::Shutdown(void) { gcc_unused ScopeBusyIndicator busy; // Show progress dialog ProgressGlue::Create(_("Shutdown, please wait...")); // Log shutdown information LogStartUp(_T("Entering shutdown...")); StartupLogFreeRamAndStorage(); // Turn off all displays globalRunningEvent.reset(); // Stop logger and save igc file ProgressGlue::Create(_("Shutdown, saving logs...")); logger.guiStopLogger(Basic(), true); // Save settings to profile ProgressGlue::Create(_("Shutdown, saving profile...")); Profile::Save(); // Stop sound LogStartUp(_T("SaveSoundSettings")); Profile::SetSoundSettings(); #ifndef DISABLEAUDIOVARIO // VarioSound_EnableSound(false); // VarioSound_Close(); #endif ProgressGlue::Create(_("Shutdown, please wait...")); // Stop threads LogStartUp(_T("Stop threads")); #ifndef ENABLE_OPENGL draw_thread->stop(); #endif calculation_thread->stop(); // Wait for the calculations thread to finish LogStartUp(_T("Waiting for calculation thread")); calculation_thread->join(); delete calculation_thread; calculation_thread = NULL; // Wait for the drawing thread to finish #ifndef ENABLE_OPENGL LogStartUp(_T("Waiting for draw thread")); draw_thread->join(); delete draw_thread; #endif LogStartUp(_T("delete MapWindow")); main_window.map.reset(); // Save the task for the next time ProgressGlue::Create(_("Shutdown, saving task...")); LogStartUp(_T("Save default task")); protected_task_manager->task_save_default(); // Clear waypoint database LogStartUp(_T("Close waypoints")); way_points.clear(); ProgressGlue::Create(_("Shutdown, please wait...")); // Clear weather database LogStartUp(_T("CloseRASP")); RASP.Close(); // Clear terrain database LogStartUp(_T("CloseTerrain")); delete terrain; LogStartUp(_T("CloseTopography")); delete topography; delete marks; // Close any device connections devShutdown(); RawLoggerShutdown(); delete replay; // Save everything in the persistent memory file SaveCalculationsPersist(Basic(), Calculated(), *protected_task_manager, *glide_computer, logger); delete protected_task_manager; delete task_manager; // Kill windows LogStartUp(_T("Destroy Info Boxes")); InfoBoxManager::Destroy(); LogStartUp(_T("Destroy Button Labels")); ButtonLabel::Destroy(); // Close the progress dialog LogStartUp(_T("Close Progress Dialog")); ProgressGlue::Close(); // Clear the EGM96 database CloseGeoid(); delete glide_computer; // Clear airspace database LogStartUp(_T("Close airspace")); airspace_warnings->clear(); airspace_database.clear(); delete airspace_warnings; delete airspace_warning; // Destroy FlarmNet records FlarmNet::Destroy(); delete file_cache; LogStartUp(_T("Close Windows - main ")); main_window.reset(); CloseLanguageFile(); RestoreDisplayOrientation(); StartupLogFreeRamAndStorage(); LogStartUp(_T("Finished shutdown")); }