2009-10-11 11:37:13 +00:00
|
|
|
// Written by James Turner, started 2009.
|
|
|
|
//
|
|
|
|
// Copyright (C) 2009 Curtis L. Olson
|
|
|
|
//
|
|
|
|
// This program is free software; you can redistribute it and/or
|
|
|
|
// modify it under the terms of the GNU General Public License as
|
|
|
|
// published by the Free Software Foundation; either version 2 of the
|
|
|
|
// License, or (at your option) any later version.
|
|
|
|
//
|
|
|
|
// This program is distributed in the hope that it will be useful, but
|
|
|
|
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
// General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
|
|
// along with this program; if not, write to the Free Software
|
|
|
|
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
2018-06-14 19:19:00 +00:00
|
|
|
#include <iostream>
|
|
|
|
|
2001-03-25 14:20:12 +00:00
|
|
|
#include <simgear/misc/sg_path.hxx>
|
2000-04-21 04:19:22 +00:00
|
|
|
|
2018-06-14 19:19:00 +00:00
|
|
|
#include <Navaids/fixlist.hxx>
|
|
|
|
//#include "ilslist.hxx"
|
|
|
|
#include <Navaids/navlist.hxx>
|
|
|
|
//#include "mkrbeacons.hxx"
|
|
|
|
|
|
|
|
#include "test_suite/dataStore.hxx"
|
|
|
|
|
|
|
|
#include "testnavs.hxx"
|
2002-06-07 21:03:27 +00:00
|
|
|
|
2000-04-21 04:19:22 +00:00
|
|
|
|
2018-06-14 19:19:00 +00:00
|
|
|
void NavaidsTests::testNavs()
|
|
|
|
{
|
2000-04-21 18:00:47 +00:00
|
|
|
double heading, dist;
|
2000-04-21 05:26:24 +00:00
|
|
|
|
2018-06-14 19:19:00 +00:00
|
|
|
DataStore &data = DataStore::get();
|
|
|
|
|
2004-05-26 18:15:19 +00:00
|
|
|
FGNavList *current_navlist = new FGNavList;
|
2018-06-14 19:19:00 +00:00
|
|
|
SGPath p_nav = data.getFGRoot() / "/Navaids/default.nav";
|
2002-06-07 21:03:27 +00:00
|
|
|
|
2000-04-24 23:51:56 +00:00
|
|
|
current_navlist->init( p_nav );
|
2018-06-14 19:19:00 +00:00
|
|
|
|
2005-11-27 23:48:04 +00:00
|
|
|
FGNavRecord *n;
|
2003-01-25 20:45:39 +00:00
|
|
|
if ( (n = current_navlist->findByFreq( -93.2 * SG_DEGREES_TO_RADIANS,
|
|
|
|
45.14 * SG_DEGREES_TO_RADIANS,
|
|
|
|
3000, 117.30)) != NULL )
|
2001-11-07 17:55:28 +00:00
|
|
|
{
|
2018-06-14 19:19:00 +00:00
|
|
|
std::cout << "Found a vor station in range" << std::endl;
|
|
|
|
std::cout << " id = " << n->get_ident() << std::endl;
|
2000-04-21 05:26:24 +00:00
|
|
|
} else {
|
2018-06-14 19:19:00 +00:00
|
|
|
std::cout << "not picking up vor. :-(" << std::endl;
|
2000-04-21 18:00:47 +00:00
|
|
|
}
|
|
|
|
|
2005-11-27 23:48:04 +00:00
|
|
|
FGNavRecord *dcs;
|
2003-01-25 20:45:39 +00:00
|
|
|
if ( (dcs = current_navlist->findByIdent( "DCS",
|
|
|
|
-3.3 * SG_DEGREES_TO_RADIANS,
|
|
|
|
55.9 * SG_DEGREES_TO_RADIANS))
|
|
|
|
!= NULL ) {
|
2018-06-14 19:19:00 +00:00
|
|
|
|
|
|
|
std::cout << "Found DCS by ident" << std::endl;
|
2003-01-25 20:45:39 +00:00
|
|
|
if (dcs->get_freq() != 11520)
|
2018-06-14 19:19:00 +00:00
|
|
|
std::cout << "Frequency for DCS VOR is wrong (should be 115.20), it's "
|
|
|
|
<< dcs->get_freq() << std::endl;
|
2002-06-07 21:03:27 +00:00
|
|
|
} else {
|
2018-06-14 19:19:00 +00:00
|
|
|
std::cout << "couldn't locate DCS (Dean-Cross) VOR" << std::endl;
|
2002-06-07 21:03:27 +00:00
|
|
|
}
|
2018-06-14 19:19:00 +00:00
|
|
|
|
2002-06-07 21:03:27 +00:00
|
|
|
// we have to init the marker beacon storage before we parse the ILS file
|
2004-05-26 18:15:19 +00:00
|
|
|
FGMarkerBeacons *current_beacons = new FGMarkerBeacons;
|
2002-06-07 21:03:27 +00:00
|
|
|
current_beacons->init();
|
|
|
|
|
2004-05-26 18:15:19 +00:00
|
|
|
FGILSList *current_ilslist = new FGILSList;
|
2018-06-14 19:19:00 +00:00
|
|
|
SGPath p_ils = data.getFGRoot() / "/Navaids/default.ils";
|
2000-04-24 23:51:56 +00:00
|
|
|
current_ilslist->init( p_ils );
|
2003-02-03 20:05:27 +00:00
|
|
|
FGILS *i = current_ilslist->findByFreq( -93.1 * SG_DEGREES_TO_RADIANS,
|
|
|
|
45.24 * SG_DEGREES_TO_RADIANS,
|
|
|
|
3000, 110.30);
|
|
|
|
if ( i != NULL ) {
|
2018-06-14 19:19:00 +00:00
|
|
|
std::cout << "Found an ils station in range" << std::endl;
|
|
|
|
std::cout << " apt = " << i->get_aptcode() << std::endl;
|
|
|
|
std::cout << " rwy = " << i->get_rwyno() << std::endl;
|
2000-04-21 18:00:47 +00:00
|
|
|
} else {
|
2018-06-14 19:19:00 +00:00
|
|
|
std::cout << "not picking up ils. :-(" << std::endl;
|
2000-04-21 05:26:24 +00:00
|
|
|
}
|
2000-04-21 18:30:59 +00:00
|
|
|
|
2004-05-26 18:15:19 +00:00
|
|
|
FGFixList *current_fixlist = new FGFixList;
|
2018-06-14 19:19:00 +00:00
|
|
|
SGPath p_fix = data.getFGRoot() / "/Navaids/default.fix";
|
2000-04-24 23:51:56 +00:00
|
|
|
current_fixlist->init( p_fix );
|
2000-04-21 18:30:59 +00:00
|
|
|
FGFix fix;
|
2002-06-07 21:03:27 +00:00
|
|
|
|
|
|
|
// attempting to get the position relative to the OTR VOR; heading
|
|
|
|
// should be 108 degrees, distance 74nm (according to my SimCharts
|
|
|
|
// v1.5)
|
2003-01-05 00:10:36 +00:00
|
|
|
if ( current_fixlist->query_and_offset( "DOGGA",
|
|
|
|
-0.103 * SG_DEGREES_TO_RADIANS,
|
|
|
|
53.698 * SG_DEGREES_TO_RADIANS,
|
|
|
|
3000, &fix, &heading, &dist) )
|
2001-11-07 17:55:28 +00:00
|
|
|
{
|
2018-06-14 19:19:00 +00:00
|
|
|
std::cout << "Found a matching fix" << std::endl;
|
|
|
|
std::cout << " id = " << fix.get_ident() << std::endl;
|
|
|
|
std::cout << " heading = " << heading << " dist = " << dist * SG_METER_TO_NM
|
|
|
|
<< std::endl;
|
2000-04-21 18:30:59 +00:00
|
|
|
} else {
|
2018-06-14 19:19:00 +00:00
|
|
|
CPPUNIT_FAIL("did not find fix. :-(");
|
2000-04-21 18:30:59 +00:00
|
|
|
}
|
2000-04-21 04:19:22 +00:00
|
|
|
}
|