diff -ur vfrnav/src/geomavx.cc vfrnav/src/geomavx.cc
--- vfrnav/src/geomavx.cc 2016-03-21 22:27:17.000000000 +0100
+++ vfrnav/src/geomavx.cc 2016-03-22 02:19:20.836678670 +0100
@@ -24,10 +24,6 @@
#include <boost/multiprecision/cpp_int.hpp>
#endif
-#ifdef __AVX__
-#include <immintrin.h>
-#endif
-
#include <sstream>
#include <iomanip>
diff -ur vfrnav/src/geom.h vfrnav/src/geom.h
--- vfrnav/src/geom.h 2016-03-21 22:27:17.000000000 +0100
+++ vfrnav/src/geom.h 2016-03-22 02:19:23.956632290 +0100
@@ -21,6 +21,10 @@
#include <glibmm.h>
#include <interval.hh>
+#ifdef __AVX__
+#include <immintrin.h>
+#endif
+
#include "sysdeps.h"
#include "alignedalloc.h"
diff -ur vfrnav/src/Navigate.cc vfrnav/src/Navigate.cc
--- vfrnav/src/Navigate.cc 2016-03-21 22:27:17.000000000 +0100
+++ vfrnav/src/Navigate.cc 2016-03-22 02:19:27.748575921 +0100
@@ -4,7 +4,7 @@
// Description: Navigation Mode Windows
//
//
-// Author: Thomas Sailer <t.sailer@alumni.ethz.ch>, (C) 2007, 2009, 2011, 2012
+// Author: Thomas Sailer <t.sailer@alumni.ethz.ch>, (C) 2007, 2009, 2011, 2012, 2016
//
// Copyright: See COPYING file that comes with this distribution
//
@@ -181,7 +181,7 @@
return SVVector();
}
-#ifdef HAVE_LIBLOCATION
+#if defined(HAVE_LIBLOCATION)
class Navigate::GPSCommGPSD : public Navigate::GPSComm {
private:
@@ -946,9 +946,13 @@
#elif defined(HAVE_LIBGPS)
+#if GPSD_API_MAJOR_VERSION >= 5
+#define gps_open_r gps_open
+#endif
+
class Navigate::GPSCommGPSD : public Navigate::GPSComm {
private:
- GPSCommGPSD(struct gps_data_t *gd);
+ GPSCommGPSD(struct gps_data_t& gd);
virtual ~GPSCommGPSD();
public:
@@ -978,23 +982,27 @@
virtual SVVector get_svvector(void) const;
private:
- struct gps_data_t *m_gpsdata;
+ struct gps_data_t m_gpsdata;
+ sigc::connection m_gpssigioconn;
+#if GPSD_API_MAJOR_VERSION < 5
typedef std::map<struct gps_data_t *, GPSCommGPSD *> gpsmap_t;
static gpsmap_t m_gpsmap;
- sigc::connection m_gpssigioconn;
static void gps_hook(struct gps_data_t *, char *, size_t, int);
+#endif
bool gps_poll(Glib::IOCondition iocond);
void update_gps(void);
void gps_send(const std::string& s);
};
+#if GPSD_API_MAJOR_VERSION < 5
Navigate::GPSCommGPSD::gpsmap_t Navigate::GPSCommGPSD::m_gpsmap;
+#endif
Navigate::GPSCommGPSD *Navigate::GPSCommGPSD::create( const Glib::ustring & server, const Glib::ustring & port )
{
- struct gps_data_t *gpsdata = gps_open(server.c_str(), port.c_str());
- if (!gpsdata) {
+ struct gps_data_t gpsdata;
+ if (gps_open_r(server.c_str(), port.c_str(), &gpsdata)) {
std::cerr << "open_gps: error opening GPS" << std::endl;
return 0;
}
@@ -1002,32 +1010,36 @@
return ngps;
}
-Navigate::GPSCommGPSD::GPSCommGPSD( struct gps_data_t * gd )
+Navigate::GPSCommGPSD::GPSCommGPSD(struct gps_data_t& gd)
: m_gpsdata(gd)
{
- m_gpsmap[m_gpsdata] = this;
+#if GPSD_API_MAJOR_VERSION < 5
+ m_gpsmap[&m_gpsdata] = this;
gps_set_raw_hook(m_gpsdata, gps_hook);
- m_gpssigioconn = Glib::signal_io().connect(sigc::mem_fun(*this, &Navigate::GPSCommGPSD::gps_poll), m_gpsdata->gps_fd, Glib::IO_IN);
+#endif
+ m_gpssigioconn = Glib::signal_io().connect(sigc::mem_fun(*this, &Navigate::GPSCommGPSD::gps_poll), m_gpsdata.gps_fd, Glib::IO_IN);
gps_send("w1\n");
}
Navigate::GPSCommGPSD::~GPSCommGPSD( )
{
m_gpssigioconn.disconnect();
- gpsmap_t::iterator i(m_gpsmap.find(m_gpsdata));
+ #if GPSD_API_MAJOR_VERSION < 5
+ gpsmap_t::iterator i(m_gpsmap.find(m_gpsdata));
if (i != m_gpsmap.end())
m_gpsmap.erase(i);
- gps_close(m_gpsdata);
- m_gpsdata = 0;
+#endif
+ gps_close(&m_gpsdata);
}
void Navigate::GPSCommGPSD::gps_send(const std::string& s)
{
- int r = write(m_gpsdata->gps_fd, s.c_str(), s.size());
+ int r = write(m_gpsdata.gps_fd, s.c_str(), s.size());
if (r != s.size())
std::cerr << "gps_send: error " << r << std::endl;
}
+#if GPSD_API_MAJOR_VERSION < 5
void Navigate::GPSCommGPSD::gps_hook( struct gps_data_t *p, char *, size_t, int )
{
gpsmap_t::iterator i(m_gpsmap.find(p));
@@ -1036,13 +1048,19 @@
return;
}
}
+#endif
bool Navigate::GPSCommGPSD::gps_poll(Glib::IOCondition iocond)
{
if (!(iocond & Glib::IO_IN))
return true;
+#if GPSD_API_MAJOR_VERSION >= 5
+ if (gps_read(&m_gpsdata) >= 0)
+ update_gps();
+#else
::gps_poll(m_gpsdata);
- std::cerr << "status " << m_gpsdata->status << " fixtype " << m_gpsdata->fix.mode << std::endl;
+#endif
+ std::cerr << "status " << m_gpsdata.status << " fixtype " << m_gpsdata.fix.mode << std::endl;
return true;
}
@@ -1053,7 +1071,7 @@
Navigate::GPSCommGPSD::fixtype_t Navigate::GPSCommGPSD::get_fixtype(void) const
{
- switch (m_gpsdata->fix.mode) {
+ switch (m_gpsdata.fix.mode) {
default:
case MODE_NOT_SEEN:
return fixtype_noconn;
@@ -1071,7 +1089,7 @@
Navigate::GPSCommGPSD::fixstatus_t Navigate::GPSCommGPSD::get_fixstatus(void) const
{
- switch (m_gpsdata->status) {
+ switch (m_gpsdata.status) {
default:
case STATUS_NO_FIX:
return fixstatus_nofix;
@@ -1079,119 +1097,170 @@
case STATUS_FIX:
return fixstatus_fix;
+#if GPSD_API_MAJOR_VERSION < 6
case STATUS_DGPS_FIX:
return fixstatus_dgpsfix;
+#endif
}
}
double Navigate::GPSCommGPSD::get_fixtime(void) const
{
- return m_gpsdata->fix.time;
+ return m_gpsdata.fix.time;
}
Point Navigate::GPSCommGPSD::get_coord(void) const
{
- return Point((int32_t)(m_gpsdata->fix.longitude * Point::from_deg),
- (int32_t)(m_gpsdata->fix.latitude * Point::from_deg));
+ return Point((int32_t)(m_gpsdata.fix.longitude * Point::from_deg),
+ (int32_t)(m_gpsdata.fix.latitude * Point::from_deg));
}
float Navigate::GPSCommGPSD::get_coord_uncertainty(void) const
{
- return m_gpsdata->fix.ept;
+ return m_gpsdata.fix.ept;
}
bool Navigate::GPSCommGPSD::is_coord_valid(void) const
{
- return Navigate::GPSComm::is_coord_valid() && (!std::isnan(m_gpsdata->fix.longitude)) && (!std::isnan(m_gpsdata->fix.latitude));
+ return Navigate::GPSComm::is_coord_valid() && (!std::isnan(m_gpsdata.fix.longitude)) && (!std::isnan(m_gpsdata.fix.latitude));
}
float Navigate::GPSCommGPSD::get_altitude(void) const
{
- return m_gpsdata->fix.altitude;
+ return m_gpsdata.fix.altitude;
}
float Navigate::GPSCommGPSD::get_altitude_uncertainty(void) const
{
- return m_gpsdata->fix.epv;
+ return m_gpsdata.fix.epv;
}
bool Navigate::GPSCommGPSD::is_altitude_valid(void) const
{
- return Navigate::GPSComm::is_altitude_valid() && !std::isnan(m_gpsdata->fix.altitude);
+ return Navigate::GPSComm::is_altitude_valid() && !std::isnan(m_gpsdata.fix.altitude);
}
float Navigate::GPSCommGPSD::get_track(void) const
{
- return m_gpsdata->fix.track;
+ return m_gpsdata.fix.track;
}
float Navigate::GPSCommGPSD::get_track_uncertainty(void) const
{
- return m_gpsdata->fix.epd;
+ return m_gpsdata.fix.epd;
}
float Navigate::GPSCommGPSD::get_velocity(void) const
{
- return m_gpsdata->fix.speed;
+ return m_gpsdata.fix.speed;
}
float Navigate::GPSCommGPSD::get_velocity_uncertainty(void) const
{
- return m_gpsdata->fix.eps;
+ return m_gpsdata.fix.eps;
}
float Navigate::GPSCommGPSD::get_verticalvelocity(void) const
{
- return m_gpsdata->fix.climb;
+ return m_gpsdata.fix.climb;
}
float Navigate::GPSCommGPSD::get_verticalvelocity_uncertainty(void) const
{
- return m_gpsdata->fix.epc;
+ return m_gpsdata.fix.epc;
}
float Navigate::GPSCommGPSD::get_pdop(void) const
{
- return m_gpsdata->pdop;
+#if GPSD_API_MAJOR_VERSION < 6
+ return m_gpsdata.pdop;
+#else
+ return m_gpsdata.dop.pdop;
+#endif
}
float Navigate::GPSCommGPSD::get_hdop(void) const
{
- return m_gpsdata->hdop;
+#if GPSD_API_MAJOR_VERSION < 6
+ return m_gpsdata.hdop;
+#else
+ return m_gpsdata.dop.pdop;
+#endif
}
float Navigate::GPSCommGPSD::get_vdop(void) const
{
- return m_gpsdata->vdop;
+#if GPSD_API_MAJOR_VERSION < 6
+ return m_gpsdata.vdop;
+#else
+ return m_gpsdata.dop.vdop;
+#endif
}
float Navigate::GPSCommGPSD::get_tdop(void) const
{
- return m_gpsdata->tdop;
+#if GPSD_API_MAJOR_VERSION < 6
+ return m_gpsdata.tdop;
+#else
+ return m_gpsdata.dop.tdop;
+#endif
}
float Navigate::GPSCommGPSD::get_gdop(void) const
{
- return m_gpsdata->gdop;
+#if GPSD_API_MAJOR_VERSION < 6
+ return m_gpsdata.gdop;
+#else
+ return m_gpsdata.dop.gdop;
+#endif
}
unsigned int Navigate::GPSCommGPSD::get_nrsv(void) const
{
- return m_gpsdata->satellites;
+ if (!(m_gpsdata.set & SATELLITE_SET))
+ return 0;
+ return m_gpsdata.satellites_visible;
}
Navigate::GPSCommGPSD::SV Navigate::GPSCommGPSD::get_sv( unsigned int idx ) const
{
- if (idx >= (unsigned int)m_gpsdata->satellites)
- return SV();
- return SV(m_gpsdata->PRN[idx], m_gpsdata->azimuth[idx], m_gpsdata->elevation[idx], m_gpsdata->ss[idx], !!m_gpsdata->used[idx]);
+ if (!(m_gpsdata.set & SATELLITE_SET))
+ return SV();
+ if (idx >= (unsigned int)m_gpsdata.satellites_visible)
+ return SV();
+#if GPSD_API_MAJOR_VERSION >= 6
+ std::set<int> satused;
+ for (int i = 0; i < m_gpsdata.satellites_used; ++i)
+ satused.insert(m_gpsdata.skyview[i].used);
+ return SV(m_gpsdata.skyview[idx].PRN, m_gpsdata.skyview[idx].azimuth, m_gpsdata.skyview[idx].elevation,
+ m_gpsdata.skyview[idx].ss, satused.find(m_gpsdata.skyview[idx].PRN) != satused.end());
+#else
+ std::set<int> satused;
+ for (int i = 0; i < m_gpsdata.satellites_used; ++i)
+ satused.insert(m_gpsdata.used[i]);
+ return SV(m_gpsdata.PRN[idx], m_gpsdata.azimuth[idx], m_gpsdata.elevation[idx],
+ m_gpsdata.ss[idx], satused.find(m_gpsdata.PRN[idx]) != satused.end());
+#endif
}
Navigate::GPSCommGPSD::SVVector Navigate::GPSCommGPSD::get_svvector(void) const
{
SVVector v;
- for (int i = 0; i < m_gpsdata->satellites; i++)
- v.push_back(SV(m_gpsdata->PRN[i], m_gpsdata->azimuth[i], m_gpsdata->elevation[i], m_gpsdata->ss[i], !!m_gpsdata->used[i]));
+#if GPSD_API_MAJOR_VERSION >= 6
+ std::set<int> satused;
+ for (int i = 0; i < m_gpsdata.satellites_used; ++i)
+ satused.insert(m_gpsdata.skyview[i].used);
+ for (int i = 0; i < m_gpsdata.satellites_visible; ++i)
+ v.push_back(SV(m_gpsdata.skyview[i].PRN, m_gpsdata.skyview[i].azimuth, m_gpsdata.skyview[i].elevation,
+ m_gpsdata.skyview[i].ss, satused.find(m_gpsdata.skyview[i].PRN) != satused.end()));
+#else
+ std::set<int> satused;
+ for (int i = 0; i < m_gpsdata.satellites_used; ++i)
+ satused.insert(m_gpsdata.used[i]);
+ for (int i = 0; i < m_gpsdata.satellites_visible; ++i)
+ v.push_back(SV(m_gpsdata.PRN[i], m_gpsdata.azimuth[i], m_gpsdata.elevation[i],
+ m_gpsdata.ss[i], satused.find(m_gpsdata.PRN[idx]) != satused.end()));
+#endif
return v;
}
diff -ur vfrnav/src/ssetest.cc vfrnav/src/ssetest.cc
--- vfrnav/src/ssetest.cc 2016-03-21 22:27:17.000000000 +0100
+++ vfrnav/src/ssetest.cc 2016-03-22 02:19:15.836752996 +0100
@@ -29,10 +29,6 @@
#include <sys/time.h>
#include <stdlib.h>
-#ifdef __AVX__
-#include <immintrin.h>
-#endif
-
typedef std::pair<int64_t,int64_t> tpoint_t;
static tpoint_t transform1(const Point& pt, const Point& porigin, const Point& pvec)
diff -ur vfrnav/vfrnav.spec.in vfrnav/vfrnav.spec.in
--- vfrnav/vfrnav.spec.in 2016-03-21 23:20:49.000000000 +0100
+++ vfrnav/vfrnav.spec.in 2016-03-21 23:27:35.547023953 +0100
@@ -282,7 +282,8 @@
%files
%defattr(-,root,root,-)
-%doc AUTHORS ChangeLog COPYING INSTALL NEWS README TODO doc/flightdeck.pdf
+%license COPYING
+%doc AUTHORS ChangeLog INSTALL NEWS README TODO doc/flightdeck.pdf
%{_datadir}/applications/vfrnav.desktop
%{_datadir}/applications/flightdeck.desktop
%{_datadir}/applications/vfrairporteditor.desktop
Index: flightdeck/sensgeoclue2.cc
===================================================================
--- vfrnav/flightdeck/sensgeoclue2.cc (revision 244)
+++ vfrnav/flightdeck/sensgeoclue2.cc (working copy)
@@ -12,7 +12,6 @@
#include <limits>
#include <iomanip>
-#include <geoclue/geoclue-master.h>
#include <glibmm/datetime.h>
#include "sensgeoclue2.h"