Zum Inhalt springen
>_marc-oltersdorf.de

Garmin Edge: Connect-IQ-Datenfeld stürzt mit „Unexpected Type Error – Failed invoking <symbol>“ ab

Marc Oltersdorf 2 Min. Lesezeit

Zwei eigene Datenfelder liefen auf meinem Edge 1050 problemlos, bis der Edge einmal abstürzte. Danach brach immer das zweite Feld beim Anmelden für Handy-Nachrichten ab, und die Felder meldeten „Handy nicht erreichbar“. Mit Protokolldateien direkt auf dem Gerät ließ es sich eingrenzen. Geholfen haben eine saubere Neuinstallation und ein Neustart von Garmin Connect.

$ git log --graph Der Weg zur Lösung

  1. Problem IQ! nach dem Absturz

    Nach einem Absturz des Edge bricht ein Datenfeld mit „Failed invoking “ in der Anmeldezeile für Handy-Nachrichten ab.

  2. Irrweg try/catch und Verschieben

    Der Fehler wanderte nur ins andere Feld und ließ sich nicht abfangen.

  3. Irrweg err_log.txt gedeutet

    Die Einträge stammten vom Anstecken per USB, nicht vom Absturz.

  4. Erkenntnis Eigene Protokolle

    println-Dateien zeigen: Das zweite Feld scheitert bei der Anmeldung, der Speicher ist unauffällig.

  5. Irrweg Kopien aus Apps\Media

    Der Edge lehnte sie mit „Signature check failed“ ab.

  6. Lösung Sauber neu installieren

    Original-Builds neu aufgespielt und Garmin Connect neu gestartet: Die Anmeldung klappt, die Werte kommen an.

Umgebung: Garmin Edge 1050 (Firmware 33.17, Connect IQ 6.0.4), zwei selbst geschriebene Datenfelder, die per Communications.registerForPhoneAppMessages Werte von einer Android-App bekommen (Garmin Connect 5.30.1). Beide Felder liefen stundenlang gleichzeitig. Nach einem Absturz des Edge zeigte eines der Felder nur noch das IQ!-Symbol, das andere „Handy nicht erreichbar“.

Das Problem

In Garmin\Apps\LOGS\CIQ_LOG.BAK stand:

Error: Unexpected Type Error
Details: 'Failed invoking <symbol>'
Stack:
  - File: '...\FeldApp.mc'
    Line: 35
    Function: getInitialView

Zeile 35 war Communications.registerForPhoneAppMessages(...). Nachdem ich die Anmeldung in compute() verschoben hatte, stürzte dasselbe im anderen Feld ab, wieder in der Anmeldezeile. Ein try/catch half nicht: Dieser Fehler beendet das Feld sofort.

Eingrenzen: Protokoll direkt auf dem Gerät

System.println landet auf dem Edge in einer Textdatei, aber nur, wenn sie existiert. Also legt man per USB eine leere Datei mit dem Namen der PRG-Datei an:

Garmin\Apps\LOGS\APPNAME.TXT
function dbg(t as String) as Void {
    var s = System.getSystemStats();
    System.println(_secs + " " + t + " mem=" + s.usedMemory + "/" + s.totalMemory);
}
// ...
dbg("registriere");
Communications.registerForPhoneAppMessages(method(:onPhone));
dbg("registriert");

Das Ergebnis nach dem nächsten Absturz:

ENERGIE.TXT:  1 registriere mem=11168/127592
              1 registriert mem=11288/127592
FELD.TXT:     1 registriere mem=13656/127592     <- danach Absturz

Damit war klar: kein Speicherproblem (rund 10 % belegt), keine Nachricht vom Handy beteiligt. Das zweite Feld scheiterte schon an der Anmeldung.

Die Lösung

  1. Beide Datenfelder sauber entfernen. Der Edge verschiebt aufgespielte PRG-Dateien nach der Installation von Garmin\Apps nach Garmin\Apps\Media. Dort entfernen oder auf dem Gerät deinstallieren, dann den Edge neu starten.
  2. Die Original-Builds neu aufspielen, nicht die Kopien aus Media. Die verändert der Edge bei der Installation. Spielt man sie zurück, lehnt er sie ab, ohne etwas anzuzeigen. Im Protokoll steht dann nur 'Signature check failed on file: ...'.
  3. Garmin Connect auf dem Handy beenden und neu öffnen. Obwohl Bluetooth verbunden war, meldete das Mobile SDK der Begleit-App das Gerät als NOT_CONNECTED, Nachrichten scheiterten mit FAILURE_DURING_TRANSFER, und die Felder zeigten „Handy nicht erreichbar“. Nach dem Neustart von Garmin Connect lief der Austausch sofort.

Danach meldeten sich die Felder wieder an, und die Werte kamen an.

Warum das funktioniert

Die genaue Ursache kenne ich nicht. Am Code der Anmeldung hatte sich nichts geändert, die Garmin-Apps auf dem Handy und die Firmware des Edge auch nicht. Am ehesten ist beim Absturz des Edge ein Zustand hängen geblieben, auf dem Edge und in Garmin Connect, der einen normalen Neustart des Edge übersteht. Meine erste Vermutung, dass sich grundsätzlich nur ein Feld anmelden darf, war falsch: Nach der Neuinstallation meldeten sich beide an.

Stolperfallen

  • Garmin\Debug\err_log.txt bekommt bei jedem Anstecken per USB neue Einträge (Bluetooth, Energieverwaltung, ANT). Die haben mit dem eigentlichen Absturz nichts zu tun. Auf die Uhrzeit achten.
  • CIQ_LOG hielt nicht jeden Absturz fest. Eigene Protokollzeilen waren aussagekräftiger.
  • FAILURE_DURING_TRANSFER bedeutet oft nur, dass das Datenfeld gerade nicht läuft. Datenfelder laufen nur bei geöffnetem Aktivitätsprofil, nicht auf dem Startbildschirm.
  • Werte selbst aufgespielter Apps stehen zwar in der FIT-Datei, Garmin Connect zeigte sie bei mir aber nicht an, anders als die Werte aus Garmins Radar-Funktion.

Hat dir das geholfen?

RSS abonnieren

$ ls ../ Passt dazu