Giter Club home page Giter Club logo

ttblue's Introduction

Table of Contents

Requirements

You need to be running a recent Linux kernel, with a Bluetooth 4.0 adapter supporting Bluetooth Low Energy. Many newer PCs include built in Bluetooth 4.0 adapters; if you need one, I've had good success with this $6 dongle, which works out-of-the-box with the btusb driver from recent Linux kernels.

The libbluetooth (BlueZ), libcurl, and popt libraries are required. On Debian/Ubuntu-based systems, these can be installed with:

$ sudo apt-get install libbluetooth-dev libcurl4-gnutls-dev libpopt-dev

Building

Compilation with gcc should be straightforward:

$ make
$ make setcap # requires sudo/root access

To fix the issue with very slow file transfers, the most secure solution I've been able to come up with so far is to give the binary elevated capabilities as discussed on StackExchange: make setcap will do this automatically or you can do it manually as follows:

sudo setcap 'cap_net_raw,cap_net_admin+eip' ttblue

Run it

./ttblue -a -d <bluetooth-address> [-c <pairing-code>] [-s <activity-store>]

Where bluetooth-address is the twelve-digit MAC address of your TomTom GPS watch (E4:04:39:__:__:__) and pairing-code is a previously-used pairing code (can be from one of the "official" TomTom mobile apps), or left blank to create a new pairing. The -a/--auto option tells ttblue to download all activities and update QuickFixGPS, while -s specifies a location for .ttbin activity files to be output (current directory is the default).

For the time being, you can use sudo hcitool lescan to find your device's BLE MAC address.

  • For initial pairing, you'll need to go to the Phone|Pair New menu on the watch.
  • For subsequent reconnection, ensure that Phone|Sync is enabled, and you may need to "wake up" the device's BLE radio by fiddling with a few buttons.

ttblue will download your activity files (saved as 0091000n_YYYYMMDD_HHmmSS.ttbin), and attempt to download the QuickGPSFix update and send it to the watch. (You can then use ttbincnv to convert the TTBIN files to GPX/TCX format.)

$ ./ttblue -a -d E4:04:39:17:62:B1 -c 123456
Opening L2CAP LE connection on ATT channel:
	 src: 00:00:00:00:00:00
	dest: E4:04:39:17:62:B1
Connected to HC4354G00150.
  maker     : TomTom Fitness
  serial    : HC4354G00150
  user_name : Lenski
  model_name: Runner
  model_num : 1001
  firmware  : 1.8.42
  rssi      : -90 dB
Setting PHONE menu to 'dlenski-ultra-0'.
Found 1 activity files on watch.
  Reading activity file 00910000 ...
11: read 55000 bytes from watch (1807/sec)
    Saved 55000 bytes to ./00910000_20150801_123616.ttbin
    Deleting activity file 00910000 ...
Updating QuickFixGPS...
  Last update was at at Sat Aug 1 04:11:03 2015.
  Downloading http://gpsquickfix.services.tomtom.com/fitness/sifgps.f2p3enc.ee?timestamp=1439172006
  Sending update to watch (32150 bytes)...
7: wrote 32150 bytes to watch (1891/sec)

There's also a fairly rudimentary "daemon" mode wherein ttblue just loops over and over (by default it waits an hour to retry after a successful connection, but only 10 seconds after a failed one), and a -p/--post option to specify a command to be run on each successfully downloaded .ttbin file (see ttbin2strava.sh) for an example):

$ ./ttblue -a --daemon -d e4:04:39:17:62:b1 -c 123456 -s ~/ttbin -p ttbin2strava.sh

Why so slow?

By default, Linux (as of 3.19.0) specifies a very intermittent connection interval for BLE devices. This makes sense for things like beacons and thermometers, but it is bad for devices that use BLE to transfer large files because the transfer rate is directly limited by the BLE connection interval.

If you run as root or if you give the ttblue binary elevated capabilities, it will attempt to set the minimum connection interval (7.5 ms) and activity file downloads will proceed much faster (about 1800 B/s vs. 500 B/s for me).

Unfortunately, elevated permissions are required to configure this feature of a BLE connection. For gory details, see this thread on the BlueZ mailing list.

TODO

  • More command line options?
  • Real config file?
  • Better daemon mode that actually puts itself in the background and writes output to a log file?
  • Integrate with ttwatch which already does all these things, but over USB?

Protocol documentation

See tt_bluetooth.md for reverse-engineered protocol documentation.

Credits

@ryanbinns did a lot of the heavy lifting by writing his excellent ttwatch utility to sync with TomTom GPS watches over USB, and in the process documenting the ttbin binary format of the activity files, as well as many of the internal data structures of the units.

License

I'd like to license it as GPLv3 or later, but it uses snippets from the BlueZ source which are GPLv2 so... let's call it GPLv2 or later?

By Dan Lenski <[email protected]> © 2015

ttblue's People

Contributors

dlenski avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.