Blob Blame History Raw
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"