update to 3.11
This commit is contained in:
parent
fcaaed9b58
commit
1c437f3e86
1
.gitignore
vendored
1
.gitignore
vendored
@ -8,3 +8,4 @@
|
|||||||
/gpsd-3.10.tar.gz
|
/gpsd-3.10.tar.gz
|
||||||
/gpsd-20140127gitf2753b.tar.gz
|
/gpsd-20140127gitf2753b.tar.gz
|
||||||
/gpsd-20140524gitd6b65b.tar.gz
|
/gpsd-20140524gitd6b65b.tar.gz
|
||||||
|
/gpsd-3.11.tar.gz
|
||||||
|
@ -1,140 +0,0 @@
|
|||||||
commit f2357b3fbf3b242f3998d2ce6b5e1ecce1f65125
|
|
||||||
Author: Miroslav Lichvar <mlichvar@redhat.com>
|
|
||||||
Date: Tue May 27 18:08:19 2014 +0200
|
|
||||||
|
|
||||||
Fix PPS with large offsets.
|
|
||||||
|
|
||||||
This was broken by commit 575444. The check if the PPS time isn't
|
|
||||||
referenced with an old message time used PPS offset instead of the
|
|
||||||
difference between local PPS time and local time of the last message.
|
|
||||||
The PPS sample was reported via SHM or chrony socket only if the offset
|
|
||||||
was between -1 and 1000001 seconds.
|
|
||||||
|
|
||||||
Keep the local timestamp of the last fix in struct gps_device_t in
|
|
||||||
addition to the real timestamp and use it to check the PPS delay.
|
|
||||||
Rename the l_offset variable to delay to avoid further confusion.
|
|
||||||
|
|
||||||
diff --git a/gpsd.c b/gpsd.c
|
|
||||||
index 53d68d1..ffaf680 100644
|
|
||||||
--- a/gpsd.c
|
|
||||||
+++ b/gpsd.c
|
|
||||||
@@ -1557,7 +1557,7 @@ static void all_reports(struct gps_device_t *device, gps_mask_t changed)
|
|
||||||
//gpsd_report(context.debug, LOG_PROG, "NTP: No time this packet\n");
|
|
||||||
} else if (isnan(device->newdata.time)) {
|
|
||||||
//gpsd_report(context.debug, LOG_PROG, "NTP: bad new time\n");
|
|
||||||
- } else if (device->newdata.time == device->last_fixtime) {
|
|
||||||
+ } else if (device->newdata.time == device->last_fixtime.real) {
|
|
||||||
//gpsd_report(context.debug, LOG_PROG, "NTP: Not a new time\n");
|
|
||||||
} else if (!device->ship_to_ntpd) {
|
|
||||||
//gpsd_report(context.debug, LOG_PROG, "NTP: No precision time report\n");
|
|
||||||
@@ -1588,7 +1588,8 @@ static void all_reports(struct gps_device_t *device, gps_mask_t changed)
|
|
||||||
/*@-compdef@*/
|
|
||||||
(void)ntpshm_put(device, device->shmIndex, &td);
|
|
||||||
/*@+compdef@*/
|
|
||||||
- device->last_fixtime = device->newdata.time;
|
|
||||||
+ device->last_fixtime.real = device->newdata.time;
|
|
||||||
+ device->last_fixtime.clock = td.clock.tv_sec + td.clock.tv_nsec / 1e9;
|
|
||||||
}
|
|
||||||
#endif /* NTPSHM_ENABLE */
|
|
||||||
|
|
||||||
diff --git a/gpsd.h-tail b/gpsd.h-tail
|
|
||||||
index 8040094..08e0d59 100644
|
|
||||||
--- a/gpsd.h-tail
|
|
||||||
+++ b/gpsd.h-tail
|
|
||||||
@@ -475,7 +475,10 @@ struct gps_device_t {
|
|
||||||
int shmIndexPPS;
|
|
||||||
# endif /* PPS_ENABLE */
|
|
||||||
#endif /* NTPSHM_ENABLE */
|
|
||||||
- volatile timestamp_t last_fixtime; /* so updates happen once */
|
|
||||||
+ volatile struct {
|
|
||||||
+ timestamp_t real;
|
|
||||||
+ timestamp_t clock;
|
|
||||||
+ } last_fixtime; /* so updates happen once */
|
|
||||||
#ifdef PPS_ENABLE
|
|
||||||
#if defined(HAVE_SYS_TIMEPPS_H)
|
|
||||||
pps_handle_t kernelpps_handle;
|
|
||||||
diff --git a/gpsmon.c b/gpsmon.c
|
|
||||||
index b030979..77b6558 100644
|
|
||||||
--- a/gpsmon.c
|
|
||||||
+++ b/gpsmon.c
|
|
||||||
@@ -770,7 +770,7 @@ static void gpsmon_hook(struct gps_device_t *device, gps_mask_t changed UNUSED)
|
|
||||||
report_unlock();
|
|
||||||
|
|
||||||
/* Update the last fix time seen for PPS. FIXME: do this here? */
|
|
||||||
- device->last_fixtime = device->newdata.time;
|
|
||||||
+ device->last_fixtime.real = device->newdata.time;
|
|
||||||
}
|
|
||||||
/*@+observertrans +nullpass +globstate +compdef +uniondef@*/
|
|
||||||
|
|
||||||
diff --git a/ppsthread.c b/ppsthread.c
|
|
||||||
index d9e431e..ed5c7ef 100644
|
|
||||||
--- a/ppsthread.c
|
|
||||||
+++ b/ppsthread.c
|
|
||||||
@@ -238,7 +238,7 @@ static int init_kernel_pps(struct gps_device_t *session)
|
|
||||||
static /*@null@*/ void *gpsd_ppsmonitor(void *arg)
|
|
||||||
{
|
|
||||||
struct gps_device_t *session = (struct gps_device_t *)arg;
|
|
||||||
- double last_fixtime = 0;
|
|
||||||
+ double last_fixtime_real = 0, last_fixtime_clock = 0;
|
|
||||||
#ifndef HAVE_CLOCK_GETTIME
|
|
||||||
struct timeval clock_tv = {0, 0};
|
|
||||||
#endif /* HAVE_CLOCK_GETTIME */
|
|
||||||
@@ -299,7 +299,8 @@ static /*@null@*/ void *gpsd_ppsmonitor(void *arg)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* quick, grab a copy of last_fixtime before it changes */
|
|
||||||
- last_fixtime = session->last_fixtime;
|
|
||||||
+ last_fixtime_real = session->last_fixtime.real;
|
|
||||||
+ last_fixtime_clock = session->last_fixtime.clock;
|
|
||||||
|
|
||||||
/*@-noeffect@*/
|
|
||||||
/* get the time after we just woke up */
|
|
||||||
@@ -541,7 +542,7 @@ static /*@null@*/ void *gpsd_ppsmonitor(void *arg)
|
|
||||||
log = "Too long for 0.5Hz\n";
|
|
||||||
}
|
|
||||||
#endif /* TIOCMIWAIT */
|
|
||||||
- if ( ok && last_second_used >= last_fixtime ) {
|
|
||||||
+ if ( ok && last_second_used >= last_fixtime_real ) {
|
|
||||||
/* uh, oh, this second already handled */
|
|
||||||
ok = 0;
|
|
||||||
log = "this second already handled\n";
|
|
||||||
@@ -550,7 +551,8 @@ static /*@null@*/ void *gpsd_ppsmonitor(void *arg)
|
|
||||||
if (ok) {
|
|
||||||
/* offset is the skew from expected to observed pulse time */
|
|
||||||
double offset;
|
|
||||||
- long l_offset;
|
|
||||||
+ /* delay after last fix */
|
|
||||||
+ double delay;
|
|
||||||
char *log1 = NULL;
|
|
||||||
/* drift.real is the time we think the pulse represents */
|
|
||||||
struct timedrift_t drift;
|
|
||||||
@@ -580,7 +582,7 @@ static /*@null@*/ void *gpsd_ppsmonitor(void *arg)
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*@+relaxtypes@*/
|
|
||||||
- drift.real.tv_sec = last_fixtime + 1;
|
|
||||||
+ drift.real.tv_sec = last_fixtime_real + 1;
|
|
||||||
drift.real.tv_nsec = 0; /* need to be fixed for 5Hz */
|
|
||||||
drift.clock = clock_ts;
|
|
||||||
/*@-relaxtypes@*/
|
|
||||||
@@ -589,15 +591,15 @@ static /*@null@*/ void *gpsd_ppsmonitor(void *arg)
|
|
||||||
* GPS serial input then use that */
|
|
||||||
offset = (drift.real.tv_sec - drift.clock.tv_sec);
|
|
||||||
offset += ((drift.real.tv_nsec - drift.clock.tv_nsec) / 1e9);
|
|
||||||
- l_offset = (long) offset;
|
|
||||||
- if (0 > l_offset || 1000000 < l_offset) {
|
|
||||||
+ delay = (drift.clock.tv_sec + drift.clock.tv_nsec / 1e9) - last_fixtime_clock;
|
|
||||||
+ if (0.0 > delay || 1.0 < delay) {
|
|
||||||
gpsd_report(session->context->debug, LOG_RAW,
|
|
||||||
- "PPS: no current GPS seconds: %ld\n",
|
|
||||||
- (long)l_offset);
|
|
||||||
+ "PPS: no current GPS seconds: %f\n",
|
|
||||||
+ delay);
|
|
||||||
log1 = "timestamp out of range";
|
|
||||||
} else {
|
|
||||||
/*@-compdef@*/
|
|
||||||
- last_second_used = last_fixtime;
|
|
||||||
+ last_second_used = last_fixtime_real;
|
|
||||||
if (session->thread_report_hook != NULL)
|
|
||||||
log1 = session->thread_report_hook(session, &drift);
|
|
||||||
else
|
|
50
gpsd-systemd.patch
Normal file
50
gpsd-systemd.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From 86a8f7ecbb7040236602ffb08711ef87bcdb74f7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Miroslav Lichvar <mlichvar@redhat.com>
|
||||||
|
Date: Mon, 25 Aug 2014 11:52:59 +0200
|
||||||
|
Subject: [PATCH] Update systemd files.
|
||||||
|
|
||||||
|
- use $OPTIONS and include /etc/sysconfig/gpsd to make it compatible
|
||||||
|
with current Fedora packaging
|
||||||
|
- start gpsd after chronyd service to allow connecting to SOCK
|
||||||
|
- allow enabling gpsd as a normal service not requiring socket
|
||||||
|
activation
|
||||||
|
---
|
||||||
|
systemd/gpsd.service | 5 ++++-
|
||||||
|
systemd/gpsdctl@.service | 1 +
|
||||||
|
2 files changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/systemd/gpsd.service b/systemd/gpsd.service
|
||||||
|
index ef760a1..ad4be79 100644
|
||||||
|
--- a/systemd/gpsd.service
|
||||||
|
+++ b/systemd/gpsd.service
|
||||||
|
@@ -1,11 +1,14 @@
|
||||||
|
[Unit]
|
||||||
|
Description=GPS (Global Positioning System) Daemon
|
||||||
|
Requires=gpsd.socket
|
||||||
|
+# Needed with chrony SOCK refclock
|
||||||
|
+After=chronyd.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=-/etc/default/gpsd
|
||||||
|
EnvironmentFile=-/etc/sysconfig/gpsd
|
||||||
|
-ExecStart=/usr/sbin/gpsd -N $GPSD_OPTIONS $DEVICES
|
||||||
|
+ExecStart=/usr/sbin/gpsd -N $GPSD_OPTIONS $OPTIONS $DEVICES
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
+WantedBy=multi-user.target
|
||||||
|
Also=gpsd.socket
|
||||||
|
diff --git a/systemd/gpsdctl@.service b/systemd/gpsdctl@.service
|
||||||
|
index 58c5176..26e49a2 100644
|
||||||
|
--- a/systemd/gpsdctl@.service
|
||||||
|
+++ b/systemd/gpsdctl@.service
|
||||||
|
@@ -8,6 +8,7 @@ After=dev-%i.device
|
||||||
|
Type=oneshot
|
||||||
|
Environment="GPSD_SOCKET=/var/run/gpsd.sock"
|
||||||
|
EnvironmentFile=-/etc/default/gpsd
|
||||||
|
+EnvironmentFile=-/etc/sysconfig/gpsd
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=/bin/sh -c "[ \"$USBAUTO\" = true ] && /usr/sbin/gpsdctl add /dev/%I || :"
|
||||||
|
ExecStop=/bin/sh -c "[ \"$USBAUTO\" = true ] && /usr/sbin/gpsdctl remove /dev/%I || :"
|
||||||
|
--
|
||||||
|
1.9.3
|
||||||
|
|
47
gpsd.spec
47
gpsd.spec
@ -1,22 +1,18 @@
|
|||||||
%global _hardened_build 1
|
%global _hardened_build 1
|
||||||
%global gitrev 20140524gitd6b65b
|
|
||||||
|
|
||||||
Name: gpsd
|
Name: gpsd
|
||||||
Version: 3.10
|
Version: 3.11
|
||||||
Release: 6.%{gitrev}%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Service daemon for mediating access to a GPS
|
Summary: Service daemon for mediating access to a GPS
|
||||||
|
|
||||||
Group: System Environment/Daemons
|
Group: System Environment/Daemons
|
||||||
License: BSD
|
License: BSD
|
||||||
URL: http://catb.org/gpsd/
|
URL: http://catb.org/gpsd/
|
||||||
#Source0: http://download.savannah.gnu.org/releases/gpsd/%{name}-%{version}.tar.gz
|
Source0: http://download.savannah.gnu.org/releases/gpsd/%{name}-%{version}.tar.gz
|
||||||
Source0: gpsd-%{gitrev}.tar.gz
|
|
||||||
Source10: gpsd.service
|
|
||||||
Source11: gpsd.sysconfig
|
Source11: gpsd.sysconfig
|
||||||
Source12: gpsdctl.service
|
|
||||||
|
|
||||||
# Fix PPS with large offsets
|
# Update systemd files
|
||||||
Patch1: gpsd-ppsoffset.patch
|
Patch1: gpsd-systemd.patch
|
||||||
|
|
||||||
BuildRequires: dbus-devel dbus-glib-devel ncurses-devel xmlto python-devel
|
BuildRequires: dbus-devel dbus-glib-devel ncurses-devel xmlto python-devel
|
||||||
BuildRequires: scons desktop-file-utils bluez-libs-devel pps-tools-devel
|
BuildRequires: scons desktop-file-utils bluez-libs-devel pps-tools-devel
|
||||||
@ -77,15 +73,18 @@ can run on a serial terminal or terminal emulator.
|
|||||||
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n %{name}
|
%setup -q
|
||||||
%patch1 -p1 -b .ppsoffset
|
%patch1 -p1 -b .systemd
|
||||||
|
|
||||||
# set gpsd revision string to include package revision
|
# set gpsd revision string to include package revision
|
||||||
sed -i 's|^revision=.*REVISION.*$|revision='\'\
|
sed -i 's|^revision=.*REVISION.*$|revision='\'\
|
||||||
'#define REVISION "%{version}-%{release}'\"\'\| SConstruct
|
'#define REVISION "%{version}-%{release}'\"\'\| SConstruct
|
||||||
|
|
||||||
# fix RPATH
|
# fix systemd path
|
||||||
sed -i 's|sysrpath =.*|sysrpath = ["%{_libdir}"]|' SConstruct
|
sed -i 's|systemd_dir =.*|systemd_dir = '\'%{_unitdir}\''|' SConstruct
|
||||||
|
|
||||||
|
# don't set RPATH
|
||||||
|
sed -i 's|env.Prepend.*RPATH.*|pass #\0|' SConstruct
|
||||||
|
|
||||||
%build
|
%build
|
||||||
export CCFLAGS="%{optflags}"
|
export CCFLAGS="%{optflags}"
|
||||||
@ -106,6 +105,7 @@ scons \
|
|||||||
mandir=%{_mandir} \
|
mandir=%{_mandir} \
|
||||||
docdir=%{_docdir} \
|
docdir=%{_docdir} \
|
||||||
pkgconfigdir=%{_libdir}/pkgconfig \
|
pkgconfigdir=%{_libdir}/pkgconfig \
|
||||||
|
udevdir=$(dirname %{_udevrulesdir}) \
|
||||||
build
|
build
|
||||||
|
|
||||||
|
|
||||||
@ -113,30 +113,15 @@ scons \
|
|||||||
# avoid rebuilding
|
# avoid rebuilding
|
||||||
export CCFLAGS="%{optflags}"
|
export CCFLAGS="%{optflags}"
|
||||||
export LINKFLAGS="%{__global_ldflags}"
|
export LINKFLAGS="%{__global_ldflags}"
|
||||||
DESTDIR=%{buildroot} scons install
|
DESTDIR=%{buildroot} scons install systemd_install udev-install
|
||||||
|
|
||||||
# service files
|
# use the old name for udev rules
|
||||||
%{__install} -d -m 0755 %{buildroot}%{_unitdir}
|
mv %{buildroot}%{_udevrulesdir}/{25,99}-gpsd.rules
|
||||||
%{__install} -p -m 0644 %{SOURCE10} \
|
|
||||||
%{buildroot}%{_unitdir}/gpsd.service
|
|
||||||
%{__install} -p -m 0644 %{SOURCE12} \
|
|
||||||
%{buildroot}%{_unitdir}/gpsdctl@.service
|
|
||||||
%{__install} -p -m 0644 systemd/gpsd.socket \
|
|
||||||
%{buildroot}%{_unitdir}/gpsd.socket
|
|
||||||
|
|
||||||
%{__install} -d -m 0755 %{buildroot}%{_sysconfdir}/sysconfig
|
%{__install} -d -m 0755 %{buildroot}%{_sysconfdir}/sysconfig
|
||||||
%{__install} -p -m 0644 %{SOURCE11} \
|
%{__install} -p -m 0644 %{SOURCE11} \
|
||||||
%{buildroot}%{_sysconfdir}/sysconfig/gpsd
|
%{buildroot}%{_sysconfdir}/sysconfig/gpsd
|
||||||
|
|
||||||
# udev rules
|
|
||||||
%{__install} -d -m 0755 %{buildroot}%{_udevrulesdir}
|
|
||||||
%{__install} -p -m 0644 gpsd.rules \
|
|
||||||
%{buildroot}%{_udevrulesdir}/99-gpsd.rules
|
|
||||||
|
|
||||||
# Use gpsdctl service instead of hotplug script
|
|
||||||
sed -i 's|RUN+="/lib/udev/gpsd.hotplug"|TAG+="systemd", ENV{SYSTEMD_WANTS}="gpsdctl@%k.service"|' \
|
|
||||||
%{buildroot}%{_udevrulesdir}/99-gpsd.rules
|
|
||||||
|
|
||||||
# Install the .desktop files
|
# Install the .desktop files
|
||||||
desktop-file-install \
|
desktop-file-install \
|
||||||
--dir %{buildroot}%{_datadir}/applications \
|
--dir %{buildroot}%{_datadir}/applications \
|
||||||
|
Loading…
Reference in New Issue
Block a user