GPS Support#

I have a Garmin GPSMap 60 CSX that I use for both Geocaching and as a Car navigation system.
Unfortunately, Garmin is reluctant to supply proper software for the linux platform, and now Garmin MapSource is the only reason for me to keep a Windows environment at hand.

I also needed a more convenient way to transfer waypoints to my Garmin device with Linux. Here a log of actions done in order to achieve that :

Install software#

GPSBabel#

This comes standard in the Ubuntu distribution and can be installed the usual way.

Garmin USB driver#

Some more info on http://www.gpsbabel.org/os/Linux_Hotplug.html

To allow the USB devices to be read and written by a non-privileged user, create a file called /etc/udev/rules.d/51-garmin.rules with the following contents:

SYSFS{idVendor}=="091e", SYSFS{idProduct}=="0003", MODE="666"

This driver (garmin_gps) is also included in the kernel, but in order for GPSBabel to work properly, it must be uninstalled: sudo rmmod garmin_gps
To make sure it doesn't get loaded after the next reboot, add the following to /etc/modprobe.d/blacklist:

# this driver is in the way for GPSBabel
blacklist garmin_gps

After plugging in my USB-connector, the following is displayed by lsusb:
root@bismarck:~/gc# lsusb
Bus 005 Device 003: ID 05e1:0501 Syntek Semiconductor Co., Ltd 
Bus 005 Device 001: ID 0000:0000  
Bus 003 Device 001: ID 0000:0000  
Bus 001 Device 001: ID 0000:0000  
Bus 002 Device 004: ID 091e:0003 Garmin International GPSmap (various models)
Bus 002 Device 003: ID 046d:c03e Logitech, Inc. Premium Optical Wheel Mouse
Bus 002 Device 001: ID 0000:0000  
Bus 004 Device 001: ID 0000:0000  

Now I can transfer waypoints, for example : gpsbabel -i garmin -f usb: -o geo -F test.loc copies all the waypoints from the Garmin device to the file test.loc. Nice !
However, only when you're root, if you're not root, you get :

metskem@bismarck:~/gc$ gpsbabel -i garmin -f usb: -o geo -F waypoints.loc
usb_set_configuration failed, probably because kernel driver ''
 is blocking our access to the USB device.
For more information see http://www.gpsbabel.org/os/Linux_Hotplug.html

So I first rebooted, to make sure that the garmin_gps driver is not loaded, and that the permissions for the usb device files are correct. After that I can also transfer waypoints to/from my Garmin device without the need to use root privileges.

A few examples:#

  • Send (just downloaded .loc file to usb device gpsbabel -i geo -o garmin gcjpq0.loc usb:
  • Download (backup) all WP's from usb device to local file gpsbabel -i garmin -o geo usb: allwaypoints.loc
  • Download (backup) all WP's, tracks and routes from usb device to local file (with some debugging) gpsbabel -r -t -D1 -i garmin -o geo usb: allstuff.loc
metskem@bismarck:~/gc$ gpsbabel -r -t -D1 -i garmin -o geo usb: allstuff.loc
GPSBabel Version: 1.3.3 
Unit:   GPSMap60CSX Software Version 3.30
ID:     292
Version:        3.30
Capability A10:
Capability A100: D110
Capability A201: D202 D110 D210
Capability A301: D312 D302
Capability A400: D110
Capability A500: D501
Capability A600: D600
Capability A601: D601
Capability A700: D700
Capability A800: D800
Capability A801: D801
Capability A900:
Capability A902:
Capability A903:
Capability A904:
Capability A907: D907 D908 D909 D910
Capability A908: D911
Capability A914:
Capability A916:
Capability A917: D917
Capability A918: D918
Capability A1010:
Capability A1011:
Link_type 1  Device_command 0
Waypoint: Transfer 100 Type 110
Route:    Transfer 201 Header 202 Type 110
Track:    Transfer 301 Type 302
Waypoint type: 110
Chosen waypoint length 14
cet_util: Converting from "CP1252" to "UTF-8", done.