aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2018-12-17 18:22:18 +0100
committerPau Espin Pedrol <pespin@sysmocom.de>2018-12-18 21:40:00 +0100
commit8564ececa58741d9117c175d5b4324403e9579b6 (patch)
treea080b2ad9263c5ba12ea63ea99e8a6b3b4a15d97
parent17ffb08de03bdea7183671c503620d19022be638 (diff)
sysmobts_mgr: Add support for gpsd < 2.96
This allows running sysmobts-mgr on systems with old gpsd releases (which may have other software depending on such old release). GPSD_API_MAJOR_VERSION define was first added in gpsd 2.39, before that it didn't exist (but this code is known to work against 2.38). GPSD_API_MAJOR_VERSION == 5 was set in version 2.96. Related gpsd commits: 3771dba081bd1175adab6096d7b6270d3822aaa1 e69bcb6b01af6b25c6a525fb1961b92ac04f5213 Related: SYS#4290 Change-Id: If3c35021a020a61d5fa3cde5eebcd09908db822b
-rw-r--r--src/osmo-bts-sysmo/misc/sysmobts_mgr.h6
-rw-r--r--src/osmo-bts-sysmo/misc/sysmobts_mgr_calib.c17
2 files changed, 21 insertions, 2 deletions
diff --git a/src/osmo-bts-sysmo/misc/sysmobts_mgr.h b/src/osmo-bts-sysmo/misc/sysmobts_mgr.h
index b62707c8..668263d9 100644
--- a/src/osmo-bts-sysmo/misc/sysmobts_mgr.h
+++ b/src/osmo-bts-sysmo/misc/sysmobts_mgr.h
@@ -9,6 +9,10 @@
#include <gps.h>
+#if !defined(GPSD_API_MAJOR_VERSION) || GPSD_API_MAJOR_VERSION < 5
+#define USE_GPSD2_API 1
+#endif
+
#include <stdint.h>
enum {
@@ -97,7 +101,9 @@ struct sysmobts_mgr_instance {
int gps_open;
struct osmo_fd gpsfd;
struct gps_data_t *gpsdata;
+#if !USE_GPSD2_API
struct gps_data_t gpsdata_buf;
+#endif
struct osmo_timer_list fix_timeout;
/* Loop/Re-try control */
diff --git a/src/osmo-bts-sysmo/misc/sysmobts_mgr_calib.c b/src/osmo-bts-sysmo/misc/sysmobts_mgr_calib.c
index c3e821e6..a0ba6493 100644
--- a/src/osmo-bts-sysmo/misc/sysmobts_mgr_calib.c
+++ b/src/osmo-bts-sysmo/misc/sysmobts_mgr_calib.c
@@ -59,8 +59,10 @@ enum calib_result {
static inline int compat_gps_read(struct gps_data_t *data)
{
+#if USE_GPSD2_API
+ return gps_poll(data);
/* API break in gpsd 6bba8b329fc7687b15863d30471d5af402467802 */
-#if GPSD_API_MAJOR_VERSION >= 7 && GPSD_API_MINOR_VERSION >= 0
+#elif GPSD_API_MAJOR_VERSION >= 7 && GPSD_API_MINOR_VERSION >= 0
return gps_read(data, NULL, 0);
#else
return gps_read(data);
@@ -87,7 +89,9 @@ static void mgr_gps_close(struct sysmobts_mgr_instance *mgr)
osmo_fd_unregister(&mgr->calib.gpsfd);
gps_close(mgr->calib.gpsdata);
+#if !USE_GPSD2_API
memset(mgr->calib.gpsdata, 0, sizeof(*(mgr->calib.gpsdata)));
+#endif
mgr->calib.gps_open = 0;
}
@@ -143,8 +147,13 @@ static void mgr_gps_open(struct sysmobts_mgr_instance *mgr)
{
int rc;
+#if USE_GPSD2_API
+ mgr->calib.gpsdata = gps_open("localhost", DEFAULT_GPSD_PORT);
+ rc = mgr->calib.gpsdata ? 0 : -1;
+#else
mgr->calib.gpsdata = &mgr->calib.gpsdata_buf;
rc = gps_open("localhost", DEFAULT_GPSD_PORT, mgr->calib.gpsdata);
+#endif
if (rc != 0) {
LOGP(DCALIB, LOGL_ERROR, "Failed to connect to GPS %d\n", rc);
calib_state_reset(mgr, CALIB_FAIL_GPS);
@@ -152,8 +161,12 @@ static void mgr_gps_open(struct sysmobts_mgr_instance *mgr)
}
mgr->calib.gps_open = 1;
- gps_stream(mgr->calib.gpsdata, WATCH_ENABLE, NULL);
+#if USE_GPSD2_API
+ gps_query(mgr->calib.gpsdata, "w+x");
+#else
+ gps_stream(mgr->calib.gpsdata, WATCH_ENABLE, NULL);
+#endif
mgr->calib.gpsfd.data = mgr;
mgr->calib.gpsfd.cb = mgr_gps_read;
mgr->calib.gpsfd.when = BSC_FD_READ | BSC_FD_EXCEPT;