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.
Script gc.sh#
To make it a little easier I created a simple shell scipt, which can take either a filename as parameter, or read from stdin:
#/bin/sh
#
# convert a geocaching format (.loc) file that comes from stdin, or from a file indicated by parm1, to your usb attached GPS unit
#
aplay /usr/share/sounds/info.wav
if [ $# == 0 ]
then
tmpfile=/tmp/gc2usb-tempfile.xml
if [ -f $tmpfile ]
then
rm $tmpfile
fi
tee $tmpfile <&0 >/tmp/gc2usb.stdout
gpsbabel -D1 -i geo -f $tmpfile -o garmin -F usb:
fi
if [ $# == 1 ]
then
gpsbabel -D1 -i geo -f $1 -o garmin -F usb:
fi
aplay /usr/share/sounds/error.wav
Man page GPSBabel#
gpsbabel-manpage.txt![]() | HTML Help![]() |
How to quickly get WP's from cache to GPS device#
First go to the cache page and scroll down to the section "Additional Waypoints", there should be all WP's in the correct format.
For eacht WP cut the coordinates and paste them into Google Earth search section "Fly To" and press enter. This should navigate you to the position. Then rename this location to the proper name, i.e. GC15YBN 03.
Repeat this for all WP's. Now you should see them all on your Google Earth, and you should get an idea of how your route will be like.
Now they have te be transferred to your GPS device, do the following:
- right click on WP and save them in My places, do this for every WP
- goto My places, and create a folder (by the name of the cache)
- drag all WP's to this Map
- right click on the Map and choose Save as, choose the kml format and choose a file name like gc15ybn.kml
- now you have an xml file that containts all wp's that can be transferred to your GPS device by :
- gpsbabel -i kml -o garmin gc10vj0.kml usb:
- all WP's should be in your GPS device now
