I have just checked in a set of code I've been experimenting with for a while. 

Garmin has a basket full of products like Nuvi, StreetPilot C5xx, and Colorado that don't show up as a Garmin protocol device, but rather as a mass storage device that you copy GPX files to and from.  The number of people that get "-o garmin -F usb:" vs. "-o gpx -F /Volumes/Garmin/GPX/magicfilename.gpx" isn't really high enough, so I started wondering "what if we fondled the attached devices, groped for the XML file that Garmin uses to describe where everything else is, and then just read/wrote a GPX file in the right place?"

There's some OS-specific voodoo that I haven't fully figured out yet in the "find the mounted USB drives" component of that, but I think I have the rest in hand.   Garmin.c now falls back to "is there a GPX drive" mode before failing.

As a practical matter, it doesn't work yet as there are some pieces still missing from what I've checked in and OS specific cases for at least four cases: Mac, Linux, Windows, and "I give up, do nothing".  But it has been demonstrated to basically work in the lab.

If you have strong OS mojo and can help with the "how can I find all attached USB mounted devices" for any OS, please contact me.

The other big change I have brewing is a replacement for kml.c that uses Google's new libkml.  It exposes several weird problems such as mixing C++ and C and the collision of KML and the world of "simple" data, but ultimately it'll give us lots of nice features like support for KMZ, better styling support, and so on.

I have this code in late prototype stage and will probably check it in soon.