A rant on Garmin

I thought I am too old to write rants, but I need to get this one of my chest: we own a Garmin Drive 51 LMT-S, which currently (July 2022) is still being sold by Garmin. It is right now advertized as “Provides real-time services² such as live traffic and live parking³” with the caveat “²To access live information, you must download the free Smartphone Link app.” OK, so far so good.

Now, the problem is that Smartphone Link app! I could go on about the trackers included in the app (Facebook Analytics, Facebook Login, Facebook Places, Facebook Share, Google Analytics) or the fact that it does not work unless you are logged into your mobile with a Google Play account. Or the excessive permissions  (WRITE_EXTERNAL_STORAGE, READ_PHONE_STATE, READ_EXTERNAL_STORAGE, READ_CONTACTS, GET_ACCOUNTS, ACCESS_FINE_LOCATION) that is requests.

But let us keep all that aside for now. The important thing: IT DOES NOT WORK!

The Link app was last updated three years ago on Oct 31, 2019 which might indicate the priority Garmin assigns to the app. It works exactly once after pairing, and fails to reconnect on ALL subsequent connection attemps (mind, that the Android mobile phone automatically and successfully connects to the Garmin device, but the Smartlink app would not be able to see or establish a connection. It does not matter how often on clicks the reconnect button, it will only work for me if I remove the bluetooth pairing and restart the thing from scratch. And even than it will only work in about 40% of all cases!

Furthermore the Smartlink app likes to pop up erratically and “ding” even when there is not Garmin close by. Reviews on Google Play say that the Smartlink app easily cuts their battery life in half. So, to sum it up: THERE IS NO WAY I CAN ENJOY THE FEATURES THAT GARMIN ADVERTIZES AND PROMISES. IT NEGLECTS THE ONLY TOOL THAT ALLOWS TO GET REAL-TIME TRAFFIC INFORMATION ON A POPULAR ENTRY-LEVEL GPS NAVIGATION DEVICE. I FEEL CHEATED AND DISAPPOINTED BY GARMIN! AND I WILL NEVER BUY A GARMIN NAVIGATION DEVICE AGAIN BECAUSE OF THIS!

Without real-time information I can just use a local offline navigation app, thank you, Garmin!

There are 16.3k reviews on Google play and it receives an average rating of 2.7 (it is only that high as the ones from many years ago were mostly positive, but basically every rating from the last years is 1-2 stars). Does Garmin have a marketing department and is somebody reading these Google store reviews? They are enlightening:

“need to constantly “forget” and “pair” my Drive 5 to make it accept Smartphone Link.” (June 15, 2019)

Most of the time trying to establish a Bluetooth connection is a chore. I’ve tried three different devices this year and none can establish a link to the Garmin Navigator via this app without fumbling and retrying for at least 15 Minutes each time.” (May 1, 2022)

It won’t shut off, comes on even when you aren’t using the device or anywhere near it. Even if you force stop the app, it comes on again trying to connect to the device. (January 8, 2020)

.

A new hop(e)

Logo of Locksmith Brewing
Locksmith Brewing

When one door closes, another one opens. And so we have our own craftbeer shop and microbrewery in Volksdorf now: Locksmith brewing . And our fridge looks like this:

Our fridge full of craftbeer
A normal fridge on a normal day…

Cheers!

An open Bottle of Wiener Lager next to a full glass
Wiener Lager by Locksmith Brewing

Jazda

I recently discovered jazda, which is a hackable bike computer. Well, actually, right now, it is a smart watch with a half-finished bare-bones core app that wants to become a biking app when it is grown up. You need to compile your own rust-based operating system and flash it using an STLink 2.0 pluged into a SWD breakout board dev kit, plugged into the charging cable, attached to the watch. So what can possibly go wrong? 🙂

The devkit arrived quickly, containing the Bangle2js watch, a STLink 2.0 and the breakout board to connect the STLINK to the charging cable and a few stickers. Do NOT expect a manual yet!

In this post, I am going to describe the steps to setup jazda, based on my first experiences.

Install required things

  1. You will need tockloader to flash things to the watch.
    I just installed it as regular user (python setup.py install --user), ideally one could do this in a container or python venv to avoid polluting your local python modules. The upstream tockloader did not know the board name(?!), TODO: check out if/why upstream tockloader is not sufficient.
  2. The example app later requires python3-z3, so install that from your package manager or via pip, if you want to run the test app.
  3. You need openocd (which is used by tockloader) to do the actual flashing. The version in Debian testing/bookworm (0.11.0-1(?)) was sufficiently up to date.
  4. You need to install the stlink-tools (otherwise, openocd produced a Error: libusb_open() failed with LIBUSB_ERROR_ACCESS error message). The reason is that this adds udev rules that permit any user in the plugdev group to do flashing to the STLINK without being root.
    Note: restarting udev and re-plugging the stlink is required to make use of the added udev rules.
  5. Install rust (which is required for all the compiling)
    I first installed rust-all and rust-src on my Debian testing, in order to avoid the rustup script. (I just don’t like to cheat on my package manager).
    After failing with the rust version provided by the Debian package manager, I uninstalled everything and locally installed rust via rustup for my user. (sorry package manager, I hope you’ll forgive me!)
  6. just is a command line something (similar to make, but less powerful). Debian did not have a package ready, but cargo install just provides it to you. You need it to build the jazda Core app.

Compile and flash the tock kernel

  1. Compile the tock kernel
    The board setup is described in https://framagit.org/jazda/tock/-/tree/flashil/boards/nordic/sma_q3
  2. Just run make in the directory boards/nordic/sma_q3.
  3. This resulted in the file:
    a907d5297a74f999bb98f860151a1dea87c021b3cf9fa247f7fae299615b88c2 target/thumbv7em-none-eabi/release/sma_q3.bin
  4. I then issued make flash with the STLINK plugged in and the running watch attached.
    This flashed the file sma_q3.bin to the watch. and output a success info on the terminal.
    There was NO change of the display in the watch which continued to show the time, and the display simply froze dead. (not even 30s button pressed will cause any reset or anything) You might be forgiven if you believe that you just bricked your brand new watch. Your watch is running the tock kernel, but does not do anything useful yet. The next step is to compile and run an example app, so see if things worked out.

Compile/run an example test app

So, next I compiled the libtock-rs sample app (note: you need python3-z3 installed for it, see requirements section above!). The jazda wiki explains how:

cargo install elf2tab
EXAMPLE=leds make nrf52840

If that succeeds, flash it and run it:

tockloader install ./target/thumbv7em-none-eabi/release/examples/leds.tab --board sma_q3 --openocd
tockloader listen --board sma_q3 --openocd --rtt

This made the watch blink and vibrate until I killed the app with ctrl-c.

Once you are sure, it worked great, you need to uninstall the example app, or you’ll end up with a full memory and you’ll be unable to install anything else.

use tockloader list –board sma_q3 –openocd and tockloader uninstall –board sma_q3 –openocd to remove apps.

Compile and run the real jazda “core” app

Now on to the real application. You need two repositories checked out in the same directory: Core, yanp. libtock-rs (yes, the one from the sample app above will be automatically checked out and build as part of the Core build process, so it is not needed to keep around anymore).

Before compiling succeeded, I needed to add the thumbv7em-none-eabi target to rust. That went like this:

rustup target add thumbv7em-none-eabi

If you have just installed (see requirements section), it will be as easy as entering the “core” repository and issueing

just build_bin map

If all this goes well, you’ll end up with an app as: target/thumbv7em-none-eabi/release/map.tab

To install the app, connect your watch, and try to install the app

tockloader install target/thumbv7em-none-eabi/release/map.tab --board sma_q3 --openocd

and starting the app worked by issueing:
just listen
which is just a shorthand for:

tockloader listen --board sma_q3 --openocd --rtt

jazda running in its full beauty! I have walked 0 decameters with it yet.

once, it runs, just unplug the charger to keep the maps app running. To “stop” the app, connect it again, tockloader listen and interrupt with ctrl-c.

See the elaborate bike holder? Themal insulation for hot water pipes works extremly well

This will display a map. There is also an app called “speed”, it is compiled and installed the same way as the map app.

Je höher die Impfquote, umso niedriger die Übersterblichkeit

Da erstellen zwei Forscher eine “Notiz” mit dem schönen Titel “„Je höher die Impfquote, desto höher die Übersterblichkeit“, ein Mitglied der “Partei Bürger für Thüringen” (und vermutlich Coronaskeptikerin) macht sie publik und schon redet alle Welt davon.

Prompt kommen Faktenchecks, die allerdings wenig Details verraten oder die Ergebnisse nachvollziehen lassen. Also schnell selber die Daten runtergeladen und angeschaut. Eines vorweg, transparent in Datenquellen und Methodik ist die Originalnotiz, Bonuspunkte dafür (die statistischen Berechnungen stimmen auch). Auf der anderen Seite zeigt sich wie schnell mit dem Auswählen des richtigen Datensatzes und eines Meßwertes der für Ausreißer sehr anfällig ist, gezeigt werden kann, was gezeigt werden soll(?!). Der Kapitalfehler ist wohl sich auf lediglich einen 4 Wochenzeitraum zu beziehen und statistische Schlußfolgerungen ziehen zu wollen.

Übersterblichkeit nach Steyer und Kappler
Übersterblichkeit und Impfquoten nach Späth

Anstatt einer (nach Bevölkerung gewichteten) Korrelation von +0.31, kommt bei mir dann eine (ungewichtete) Korrelation von -0.82 heraus. Was sind die Unterschiede zwischen den Analysen?

Ich habe als Basiswert für die Sterblichkeit die Jahre 2016-2019 herangezogen und nicht die Werte von 2016-2020 wie im Original (2020 war die Sterblichkeit schon coronabedingt höher, dieses Jahr mit in den Basisvergleichswert zu ziehen ist also nicht legitim). Ausserdem habe ich die gesamten ersten 43 Kalenderwochen von 2021 als aktuellen Vergleich anstatt nur der KW 36 bis KW 40 verwendet. Und auf einmal sieht die Korrelation im Scatterplot ganz anders aus. Was auf den ersten Blick auffällt, die westlichen Bundesländer sind schön linear angeordnet, während die östlichen wesentlich weiter gestreut sind und eine deutlich höhere Übersterblichkeit zeigen. So weit, so gut. Zu bemerken ist, dass das immer noch eine ziemlich krude und simplifizierende Analyse und Darstellung ist. Was fehlt?

  1. Die jeweiligen Impfquoten zu einem bestimmten Zeitpunkt sollten (um ein paar Wochen zeitversetzt) mit den Sterberaten korreliert werden, momentan sind nur die Impfquoten am 30.11.2021 in Betracht gezogen. (Die Impfquote im November 21 kann ja sicherlich keine Auswirkung auf die Sterbefälle im Januar 2021 haben).
  2. Die offiziellen Impfquoten sind nur als untere mögliche Grenze zu sehen, und könnten leicht um 5-10% höher liegen. Dabei ist möglich dass manche Bundesländer systematisch mehr unter-reporten als andere. Eine durch Datentriangulation verifizierte Impfquote wäre also eine weitere Verbesserung.
  3. Nicht nur die Impfquoten sondern auch die Inzidenzen sollten in einer gescheiten Analyse berücksichtigt werden, denn die Sterbefälle durch Corona richtet sich nach der Anzahl Infizierter, und nicht nach der Anzahl Geimpfter.
  4. Statistische Aussenseiter könnte man gesondern betrachten, wobei es in meiner Analyse kaum Ausreißer gibt.
  5. Weniger Marktschreierei wäre schön. Diese Analysen zeigen wie empfindlich die Statistiken auf einige wenige Datenpunkte mehr oder weniger reagieren können, und statistische Aussenseiter das beinflussen.
  6. “Correlation is not Causation”! Nur weil die US Ausgaben für science, space, and technology mit Selbstmorden durch Erhängen und Erdrosseln mit einem Wert von +0,99 korrelieren, verbieten wir nicht die Raumfahrt um Menschen vor dem Sich-erdrosseln zu schützen. Eine Korrelation muss keinesfalls kausale Zusammenhänge sichtbar machen!
  7. Eine Gewichtung nach Bevölkerungsgröße wäre machbar, aber mit der deutlichen klaren negativen Korrelation nicht wirklich eine sinnvolle Ergänzung.
  8. Thüringen sollte besonders aufpassen, es hat in 2021 bisher die zweithöchste Übersterblichkeit von allen Bundesländern, Frau Dr. Berger.

Meine Rohdaten und Analyseskripte sind hier zu finden. Ich bitte um Notiz wenn Sie darauf aufbauen oder etwas verfeinern.

Diese “quick and dirty” Analyse entstand in Vorbereitung eines Seminars zur kritischen Hinterfragung von wissenschaftlichen Studien, erhebt aber selber keinen Anspruch auf wissenschaftliche Gründlichkeit und Vollständigkeit. Geäußerte Meinungen sind meine persönlichen und repräsentieren weder die Haltung der Universität Hamburg noch der Professur für Digitale Märkte.

Originalnotiz: Steyer, Rolf, und Gregor Kappler. 16. November 2021. „Je höher die Impfquote, desto höher die Übersterblichkeit“.

Balancing Traxxas LiPos

Olivers Traxxas Summit (which is a cool car, and an expensive one!) has two LiPo batteries which have a female Traxxas iD plug (TRX). And it has a balancing connection built in. Unfortunately, Traxxas chargers are horribly expensive, and we have a nice one. It just does not have a Traxxas iD plug for charging.

XH 3-poliger Stecker

Solder iron to the rescue, now we have a nicely working adapter. But all that aside, what was REALLY difficult to find out is the pin layout of the XT plug used for balancing of a S2 battery. So without further ado: This is the plug that goes into the balancing port of the charger:

Looking at the plug with the metal pins visible from the top from left to right:

  • Red cable: Minus
  • Black cable: Balancing
    (plus of 1. cell)
  • Yellow cable: Plus

(German keywords: Pinbelegung XT Balancing Stecker 2S)

Flashing the FOSS modem firmware on the Pinephone

The pinephone contains amazingly few binary blobs. One of those is the modem firmware of the Quectel EG-25G. This modem is quite capable in terms of eg. LTE bands covered, but prone to crashes and other mysterious flaws. There is a firmware upgrade available (EG25GGBR07A08M2G_01.003.01.003), but people have reported instabilities with it.

Fortunately, biktorgj has created a (kind of) FOSS firmware that can be flashed on the modem, removing one more blob and making it easier debuggable. Kind of because the modem consists of two parts, a Linux userland (yes, it runs a full-fledged linux) and a binary firmware blob for the DSP inside (which does all the actual communication part). The DSP blob will not be replacible, but the userland is. So this is what I did:

The latest release at this point in time is 0.3.6 and is here (you might want to check the latest release version on the release page).

You need adb and fastboot (sudo apt install fastboot adb) installed on your pinephone,. The installation itself was just these commands on the pinephone :

wget https://github.com/Biktorgj/pinephone_modem_sdk/releases/download/0.3.6/package.tar.gz
  # any other temporary directory name/place will do below
mkdir firmware
tar xvzf package.tar.gz -C firmware
cd firmware
sudo ./flashall
  # took less than 30 seconds: last lines output was: "Finished, if everything went well, run fastboot reboot to restart the modem."
  # Do not reboot the modem before flashing the recommended DSP upgrade though)
wget https://github.com/Biktorgj/quectel_eg25_recovery/raw/EG25GGBR07A08M2G_01.003.01.003/update/NON-HLOS.ubi
  # you only need to flash the newer DSP blob once, not on every future upgrade...
sudo fastboot flash modem NON-HLOS.ubi
fastboot reboot

This FOSS Firmware does not do some loudness gain that the original one did, so the README (useful to read!) recommends to:

Call volume: May need some tweaking to the ALSA UCM configuration file. You can do this by editing /usr/share/alsa/ucm2/PinePhone/VoiceCall.conf. These values seem to work well:

cset "name='AIF1 DA0 Playback Volume' 90%"
cset "name='AIF2 DAC Playback Volume' 90%"
A reboot is required after changing this configuration file.

That was it!

Note1: After a fastboot reboot, mobile data did not immediately work. I powered the phone off, and took the battery out. After rebooting, data worked just fine. Not sure if it was necessary or even this, but it might be in case of trouble.

Note2: And before you ask: the modem cooperates better with ModemManager, resetting itself when it notices some inconsistencies, it makes HD audio possible, it makes routing the audio through USB possible, and it has no persistent data partition (meaning you cannot corrupt the modem if you cut power to it unexpectedly). We believe it is quite stable together with current mobian unstable/bookworm, but there is no guarantee, of course.