Named Locations on a Garmin Watch

As has been mentioned more than once on this blog; I wear a Garmin watch and I keep it out of the clouds, relying only on open software to transfer data to and from it.

I primarily use my watch to help me keeping track of my pace and distance while running, and to tell the time when not exercising. The watch also has functionality to add waypoints and navigate to them. That is of limited use though, when annoyingly not being able to name and easily distinguish them. Whenever adding a waypoint it gets a name of the current day, and there is no way to rename it on the watch. Maybe there is rename functionality in Garmin's app or via their cloud service or whatever. I have not investigated, and have no interest in doing so. A huge part of Garmin's value proposition is the possibility to perpetually use their devices independently of external services (except for passively listening to the GPS network, of course).

This promising forum post is started by someone who, already over five years ago, claimed to have written their own tool to edit location data. While there are no hints on where to find the actual tool, the post does mention that updates to waypoints can be done be placing an edited LCTNS.FIT in the NEWFILES/ folder. My very first attempt to rename a waypoint using that method worked. I do love when things are that simple and understandable.

Apart from renaming saved places, I was also wishing for the possibility to add completely new waypoints. While I found a python-tool to export the position data, as well as a few Rust crates (#fit, #garmin), nothing seemed to have write support. There might possibly be something written in java, but I didn't even bother looking into it, as anything contaminated by that language tends to be a painful path to take. Instead I found a stackexchange answer telling how the position data is encoded in LCTNS.FIT. With that knowledge it only took a couple of hours to code lctns-cli, a command line interface to editing waypoints in a LCTNS.FIT file.

Running the tool could look something like:

lctns-cli

Quality-wise this tool is very much a prototype. Robustness as well as usability could be greatly improved. Time will tell whether I ever do so, as it is already good enough to solve everything I needed. One missing feature is the ability to set altitude. I'm fairly sure to have found the right place (mentioned in the source code). Setting those two bytes to 0x00, 0x00 results in an altitude of -500 meters, which is just low enough to cover the lowest places on earth.


2022-06-12 20:18:32 +0000
Thoughts and feedback may be directed at me using the channel listed on my contact page.

Previous post Next post