diff options
-rw-r--r-- | gpsd.h-tail | 1 | ||||
-rw-r--r-- | libgpsd_core.c | 3 | ||||
-rw-r--r-- | serial.c | 10 |
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 @@ -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 |