summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gpsd.h-tail1
-rw-r--r--libgpsd_core.c3
-rw-r--r--serial.c10
3 files changed, 14 insertions, 0 deletions
diff --git a/gpsd.h-tail b/gpsd.h-tail
index ceb2707f..c7b3054c 100644
--- a/gpsd.h-tail
+++ b/gpsd.h-tail
@@ -824,6 +824,7 @@ extern void ntrip_report(struct gps_context_t *,
extern void gpsd_tty_init(struct gps_device_t *);
extern int gpsd_serial_open(struct gps_device_t *);
+extern void gpsd_optimize_io(struct gps_device_t *, const int, const bool);
extern bool gpsd_set_raw(struct gps_device_t *);
extern ssize_t gpsd_serial_write(struct gps_device_t *,
const char *, const size_t);
diff --git a/libgpsd_core.c b/libgpsd_core.c
index ac558bef..5da839e7 100644
--- a/libgpsd_core.c
+++ b/libgpsd_core.c
@@ -227,6 +227,9 @@ int gpsd_switch_driver(struct gps_device_t *session, char *type_name)
"selecting %s driver...\n",
(*dp)->type_name);
gpsd_assert_sync(session);
+ gpsd_optimize_io(session,
+ (*dp)->minlength,
+ TEXTUAL_PACKET_TYPE((*dp)->packet_type));
/*@i@*/ session->device_type = *dp;
session->driver_index = i;
#ifdef RECONFIGURE_ENABLE
diff --git a/serial.c b/serial.c
index af6b5ec7..e511b324 100644
--- a/serial.c
+++ b/serial.c
@@ -609,6 +609,16 @@ ssize_t gpsd_serial_write(struct gps_device_t * session,
return status;
}
+void gpsd_optimize_io(struct gps_device_t *session,
+ const int minlength, const bool textual)
+/* optimize I/O mode depending on the minimum packet size */
+{
+ gpsd_report(&session->context->errout, LOG_SHOUT,
+ "tty params optimized for min length %d of %s packets\n",
+ minlength, textual ? "textual" : "binary");
+}
+
+
/*
* This constant controls how long the packet sniffer will spend looking
* for a packet leader before it gives up. It *must* be larger than