gpsd-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gpsd-dev] [PATCH] gpsd: Don't gratuitously switch drivers, if we alread


From: Andy Walls
Subject: [gpsd-dev] [PATCH] gpsd: Don't gratuitously switch drivers, if we already have a driver that matches the packet type
Date: Wed, 07 Aug 2013 18:09:34 -0400

Don't gratuitously switch drivers if we already have a driver that
matches the packet type.

Without this patch gpsd switches away driver that supports the NMEA
packet type and switches to the "Generic NMEA" driver.  

I have tested this patch with my device only.

I discovered this problem while integrating a Trimble Condor (MT-3329?)
based device into the MT-3301 driver.

See also:
http://savannah.nongnu.org/bugs/?38454

There is also another list posting that I can't find right now, with
someone with a similar problem.

Regards,
Andy

diff --git a/libgpsd_core.c b/libgpsd_core.c
index e806328..b0254ed 100644
--- a/libgpsd_core.c
+++ b/libgpsd_core.c
@@ -954,11 +954,18 @@ gps_mask_t gpsd_poll(struct gps_device_t *session)
            /* FALL THROUGH */
        } else if (session->packet.type > COMMENT_PACKET) {
            first_sync = (session->device_type == NULL);
-           for (dp = gpsd_drivers; *dp; dp++)
-               if (session->packet.type == (*dp)->packet_type) {
-                   (void)gpsd_switch_driver(session, (*dp)->type_name);
-                   break;
-               }
+           /*
+            * Only switch drivers, if we don't already have one with the
+            * matching packet type.
+            */
+           if (first_sync ||
+               session->packet.type != session->device_type->packet_type) {
+               for (dp = gpsd_drivers; *dp; dp++)
+                   if (session->packet.type == (*dp)->packet_type) {
+                       (void)gpsd_switch_driver(session, (*dp)->type_name);
+                       break;
+                   }
+           }
            /* FALL THROUGH */
        } else if (session->getcount++>1 && !gpsd_next_hunt_setting(session)) {
            gpsd_run_device_hook(session->gpsdata.dev.path, "DEACTIVATE");





reply via email to

[Prev in Thread] Current Thread [Next in Thread]