OmegaSim Wiki

OmegaSim Wiki – die Idee dazu stammt von Gnen54. Hier stehen die offenen Artikel von Nutzer Luuke42 unter der Lizenz CC BY-SA 4.0.

Firmware

Stand dieses Artikels: OmegaSim 1.2.9 vom 26.10.2026 · Firmware des Autos: nicht bekannt (OmegaSim liest die Firmware-Version nicht aus)
Dieser Text wurde mithilfe von KI erstellt (Claude) und ist nicht in jedem Punkt von Menschen geprüft. Fehler bitte direkt verbessern oder auf der Diskussionsseite melden, siehe Mitmachen. Die öffentliche Fassung auf luuke42.github.io/omegasim kann älter sein als der hier beschriebene Stand.

Die Firmware eines Carrera HYBRID-Autos ist das Programm, das auf dem Funkchip im Auto selbst läuft. Sie empfängt die Befehlspakete per Bluetooth Low Energy, setzt die Zielwerte für Gas und Lenkung in Motor- und Servobewegungen um, liest den Streckensensor aus, hält das Auto in einer bestimmten Betriebsart selbst auf der Bahn und meldet seinen Zustand an die App. Die Firmware stammt vom Hersteller und ist nicht offengelegt; alles in diesem Artikel ist aus Mitschnitten des Funkverkehrs der Original-App, aus Fahrversuchen mit OmegaSim und aus dem Abgleich mit einer unabhängigen Protokollbeschreibung („seVen“) erschlossen. Was belegt ist und was nicht, steht jeweils dabei.

Auf einen Blick

Punkt Stand Beleg
Firmware-Version der eigenen Autos nicht bekannt, OmegaSim liest sie nicht aus kein Code dafür vorhanden
Bezugsstand „Firmware Stand August 2026“ (Optionen → Was du brauchst) src/00-index.head.html
Update-Verfahren Nordic Secure DFU über Bluetooth (OTA) GATT-Dienste im Mitschnitt und im BLE-Explorer
Firmware-Update durch OmegaSim nein; der DFU-Kanal ist im BLE-Explorer als gefährlich markiert DANGER_UUIDS, src/10-ble-explorer.js
Fahrdynamik im Auto; die App liefert nur Zielwerte CARRERA_HYBRID.md
Selbstführung auf der Bahn im Auto, eingeschaltet über Bytes 10, 14, 15 und Vorausblick 16–18 Mitschnitte 20. und 21.08.2026
Status Verhalten teilweise belegt, Interna unbekannt –

Grundlagen

Was Firmware ist

Ein Gerät wie das HYBRID-Auto hat keinen „Computer“ im üblichen Sinn, sondern einen Mikrocontroller: einen kleinen Chip mit Prozessor, Speicher und Funkteil. Das fest gespeicherte Programm darauf heißt Firmware („feste Ware“, zwischen Hardware und Software). Sie läuft ab dem Einschalten in einer Schleife: Funkpakete annehmen, Sensor lesen, Motor und Servo stellen, Meldung senden. Vermutet wird ein Chip der Familie Nordic nRF52, weil das Auto zwei typische Nordic-Dienste anbietet (Nordic UART Service und Nordic Secure DFU); gesichert ist der Chiptyp nicht.

Zielwert und Regelung

Die App schickt keine Motorspannung, sondern einen Zielwert: „so viel Gas“, „so viel Lenkung“. Wie schnell das Auto diesen Wert erreicht, wie stark es beschleunigt und wie es Grip findet, entscheidet ein Regler in der Firmware. Ein Regler vergleicht ständig Soll und Ist und stellt nach. Deshalb sind zwei Autos mit gleicher Firmware und gleichem Befehl gleich schnell, auch wenn die App unterschiedlich ist.

OTA und DFU

OTA („over the air“) heißt: Die Firmware wird per Funk ausgetauscht, ohne Kabel. DFU (Device Firmware Update) ist das Verfahren dafür. Bei Nordic-Chips startet ein Schreibbefehl auf einen bestimmten Kanal einen Bootloader, ein kleines Startprogramm, das die neue Firmware entgegennimmt, prüft und einspielt. Ein falscher Befehl auf diesem Kanal kann das Auto in den Update-Modus versetzen.

Bytes und Bits

Die Befehle sind Folgen von Bytes, meist hexadezimal geschrieben (0x20 = 32 = 0010 0000). Ein einzelnes gesetztes Bit kann eine ganze Betriebsart umschalten; Einzelheiten in Carrera HYBRID#Grundlagen und Hexadezimalsystem.

Bedienung

Mit OmegaSim lässt sich die Firmware weder auslesen noch aktualisieren. Was man tun kann:

  1. Den Firmware-Stand in der Original-App des Herstellers prüfen und dort Updates einspielen.
  2. Nach einem Update in OmegaSim prüfen, ob Streckencodes noch ankommen: Entwickler → Doku/Monitor (Zeitleiste der Mustercodes) oder einfach eine Runde fahren und auf die Rundenzählung achten.
  3. Bei Auffälligkeiten den Selbsttest laufen lassen (Entwickler → Selbsttest) und das Ergebnis mit dem Datum des Updates melden (siehe Mitmachen).
  4. Den DFU-Kanal im BLE-Explorer (Entwickler → BLE-Werkbank) nicht beschreiben. Der Explorer fragt vor jedem Schreibzugriff dort nach.

Einstellungen

OmegaSim hat keine Einstellungen für die Firmware. Folgende Optionen wirken aber auf Firmware-Funktionen, weil sie Bytes setzen, die die Firmware auswertet:

Name in der App Bereich/Werte Standard Wirkung auf die Firmware Interner Schlüssel/ID
Leseart (FAHREN → Strecke) Auf der Bahn / Ausdruck Auf der Bahn wählt die Codetabelle des Sensors (Byte 14 Bit 5 oder Bit 7) trackMode
Leitplanken-Modus der NPCs nicht abschaltbar (Schalter entfernt) immer an NPC-Pakete mit Selbstführungsbytes und Vorausblick; ein NPC ohne ihn würde gar nicht lenken ghostCfg.railMode = true
Selbstlenkung je gesteuertem Auto (Garage) wie Optionen, aus, „hält die Spur, du lenkst mit“, „lenkt selbst“ wie Optionen schickt Selbstführungsbytes für das Spielerauto car.fahrhilfe (, aus, quer, voll)
Drosselung abseits beginnt nach (Optionen) Regler 1,0 s so lange muss das Auto durchgehend abseits melden; dieselbe Entprellung nimmt die Selbstführung zurück offtrackEinMs, setting-offtrack-delay

Funktionsweise

Was belegt ist

Verhalten der Firmware Beleg Stand
Zwei Lesearten des Sensors (Bahn und Ausdruck) mit je eigener Codetabelle, gewählt über Byte 14 (Bit 5 bzw. Bit 7) Messungen 21., 24.–26.08.2026; mit Bit 7 auf der Schiene 0 Lesungen in 551 Fahrmeldungen, mit Bit 5 1103 Lesungen in 1194 belegt
In der Leseart „Auf der Bahn“ hält sich das Auto selbst auf der Bahn; im Ausdruck-Modus nicht Kachelschritte 87 % gegen 7 % in derselben Aufnahme; Fahrversuche belegt
Die Bahn wird auch bei vollem Lenkanschlag gelesen 67 830 Meldungen mit Code, vier Abrisse, keiner am Anschlag belegt
Nach einem erkannten Muster ist der Leser etwa 1 s stumm Messung am Start/Ziel-Blatt; bestätigt den Wert PIT_DOUBLE_MIN_MS = 1000 ms belegt
Ein einzelnes Codewort von rund 54 mm genügt; der Vorlauf aus dünnen Strichen ist entbehrlich Messung mit gekürzten Blättern belegt
An der Ziellinie setzt das Auto Byte 15 Bit 3 der Meldung und hält es per Zeitglied (Median 981–1050 ms) Mitschnitt 21.08.2026, 16 Runden, 17 Blöcke belegt
Abseits der Bahn meldet Byte 12 sofort 0x00, der Kachelzähler rast Mitschnitt 20.08.2026 belegt
Das Rücklicht schaltet mit dem Scheinwerfer (Bit 1); Bit 0 ist das Bremslicht; Bit 2 lässt den Scheinwerfer blinken Mitschnitt 19.08.2026, Versuche am Auto belegt
Die Prüfsumme ist eine CRC-8 (Polynom 0x31, Start 0xFF); Pakete mit falscher Prüfsumme werden verworfen drei aufgezeichnete Prüfsummen reproduziert Rechnung belegt, Verwerfen angenommen
Ein Vollgas-Befehl bringt das Auto fast sofort auf Höchsttempo Fahrversuche belegt (qualitativ)
Tempo proportional zum Gas: 0,0119 m/s je Gasschritt Geraden der Mitschnitte 16.–21.08.2026 belegt bis Gasbyte 56; darüber hochgerechnet
Volles Rückwärts (Δ −127, Byte 0x60) fährt vorwärts, Δ −64 (0x9F) rückwärts Fahrversuch 20.08.2026 belegt

Was nicht belegt ist

Die interne Dokumentation hält fest, dass sich die Firmware während der Untersuchung schon einmal geändert hat, mit unbekannter Auswirkung; Messungen zu Strichcodes tragen deshalb ein Datum.

Fahrphysik im Auto

Die App sendet zwei Werte: Gas um 0xDF und Lenkung −127 … +127 (Byte 6 und 7). Alles Weitere entscheidet die Firmware. Daraus folgt für OmegaSim:

Updates über Bluetooth (OTA)

Das Auto bietet den Dienst Nordic Secure DFU an (0000fe59-0000-1000-8000-00805f9b34fb). Im Mitschnitt vom 13.08.2026 erscheint darunter das Merkmal 8ec90003-f315-4f60-9fb8-838830daea50 mit dem Eigenschaftsbyte 0x28 (schreiben und Indication), der „Bootloader-Trigger“ des Nordic-Verfahrens. Über ihn kann der Hersteller mit seiner App neue Firmware aufspielen.

OmegaSim spielt keine Firmware auf. Die vier DFU-UUIDs stehen in DANGER_UUIDS; der BLE-Explorer färbt sie rot und fragt vor jedem Schreiben ausdrücklich nach[1]:

// src/10-ble-explorer.js, Merkmalsliste des BLE-Explorers
if (isDanger && !confirm(
  'Das ist der Nordic Secure DFU / Bootloader-Kanal für Firmware-Updates, ...\n' +
  'Ein falscher Schreibzugriff kann das Auto in den Update-Modus versetzen ' +
  'oder die Firmware beschädigen.\n\nWirklich trotzdem schreiben?'
)) return;

Der normale Fahrbetrieb berührt den DFU-Dienst nie: Die Garage fordert beim Verbinden nur den Nordic UART Service an (optionalServices: [NUS_SERVICE]).

Wann das Auto selbst fährt

„Selbst fahren“ hat zwei Bedeutungen, und beide treffen sich in der Firmware.

1. Selbstführung in der Firmware

In der Leseart „Auf der Bahn“ hält sich das Auto selbst auf der Bahn. Die Original-App schaltete im Leitplanken-Modus zusätzlich einen Vorausblick ein. Aus den Mitschnitten ergeben sich folgende Paketfelder für die Selbstführung[2]:

Byte Wert Herkunft
10 0x20 Original-App an ihre selbst gefahrenen Gegner, konstant über 2496 und 2457 Pakete (Spielerauto: 0x60; Leitplanken-Modus von Hand: 0x30)
14 Bit 5 (0x20) Leseart Bahn; im Leitplanken-Mitschnitt ging Byte 14 bei 37,8 s von 0x02 auf 0x22
15 0x0C (Bit 3 gesetzt) Gegner der Original-App (0x0C/0x0E; Bit 1 folgt dem Gas, deshalb nicht übernommen); Spielerauto 0x04
16–18 Typen der nächsten drei Teile Leitplanken-Mitschnitt, 552 Pakete, Fenster rückt an jeder Teilegrenze weiter

Die Querregelung geschieht im Auto: Das Protokoll enthält keine Meldung der Querlage, und bei einem Meldetakt von rund 69 ms (14,6 Hz) könnte die App ohnehin nicht schnell genug nachregeln. Byte 10 ist nach den Mitschnitten nicht das, was das Lesen von Codes freischaltet: In einer Aufnahme vom 21.08. sendete die Original-App 0x60 und bekam 463 Codes.

OmegaSim setzt diese Bytes (car.modeBytes) in drei Lagen: für NPCs (der Leitplanken-Modus ist bei ihnen fest eingeschaltet), für das Spielerauto unter Autopilot oder Fahrhilfe, und beim Streckenscan. Es nimmt sie zurück, sobald das Auto die Bahn nicht mehr liest (entprellt über abseitsJetzt(), ab Werk 1 s): Dann deutet das Auto den Lenkwert wieder als Radstellung, und der Fahrer kann selbst zurück auf die Bahn lenken.

Noch nicht gesichert ist, wie die Firmware den Lenkwert im Selbstführungsmodus genau deutet. Der Code von OmegaSim nimmt an, dass er dort eine gewünschte Querlage bedeutet; CARRERA_HYBRID.md weist darauf hin, dass das nie gemessen wurde. Der „Querlage-Prüfstand“ in den NPC-Optionen schickt deshalb einen festen Wert direkt auf Byte 7, damit sich am Auto prüfen lässt, ob es neben der Mitte bleibt.

2. Autopilot in OmegaSim

In zwei Rennlagen ersetzt OmegaSim die Eingabe des Fahrers, statt sie nur zu formen. Entschieden wird das in autopilotGrund()[3]:

Zustand Bedingung Ergebnis
Leseart Ausdruck trackMode !== 'on' kein Autopilot (ohne Selbstführung führe das Auto geradeaus in die Bande)
Aufstellung Spielerauto hat ein Aufstellungsziel und kein Rennen läuft 'aufstellen'
Einführungsrunde raceFormationLap 'formation', oder 'yellow', wenn Gelb langsamer ist als das Formationstempo
Gelbe Flagge oder Neustart flagState ist 'yellow' oder 'restart' 'yellow'
sonst – kein Autopilot
Lage Ziel Lenkung
Gelbe Flagge Gelb-Tempo (Gerade Δ 51, Kurve Δ 47, Haarnadel Δ 44), mittig null, damit die Spur vorhersagbar bleibt
Einführungsrunde Formationstempo (Gerade und Kurve Δ 44, Haarnadel Δ 42) Schlängeln plus Seite des Startplatzes; die Bremse des Fahrers gewinnt
dabei neben der Bahn unverändert beim Fahrer

Der Autopilot fährt über synthetische Eingaben in physicsStep(), nicht über einen zweiten Sender: Zwei Sender auf demselben Merkmal würden sich um den 45-ms-Takt streiten. Unter Autopilot gehen Fahrgefühl-Faktor und Akku-Ausgleich nicht ins Gas ein, damit das Spielerauto genau so schnell fährt wie die NPCs.

Abgleich mit seVen

seVen hat eine byteweise Beschreibung des HYBRID-Protokolls geteilt. In den tragenden Teilen stimmt sie mit den eigenen Messungen überein: Rahmenlänge, Rahmenkennung 0xAF, Byte 6 Tempo um 0xDF, Byte 7 Servo, Byte 11 Zähler, Byte 12 Kachelcode. Die sieben Abweichungen aus CARRERA_HYBRID.md[4]:

Nr. Punkt seVen OmegaSim / eigene Messung Stand und Folgerung
1 Rückwärtsgrenze vorwärts 0xE0–0xFF, 0x00–0x6F (144 Stufen); rückwärts 0x80–0xDE (95 Stufen) MIN_THROTTLE_DELTA = −64, weil Δ −127 (0x60) vorwärts fuhr seVen erklärt die Beobachtung: 0x60 liegt im Vorwärtsbereich. Vorschlag Δ −95 (48 % mehr Rückwärtsweg), am Auto noch nicht nachgefahren
2 Befehlsbytes 8, 10, 12 Byte 8 Fahrstil (0x64 Arcade, 0x78 Realistisch); Byte 10 Fahrassistent (0x22 hoch, 0x42 mittel, 0x52 niedrig, 0x62 aus); Byte 12 Hersteller (0x01 Porsche, 0x02 BMW, 0x03 Ford) fest 0x80, 0x60 (NPC 0x20/0x30), 0x01 aus Mitschnitten der Original-App kein Widerspruch, vermutlich weitere gültige Werte oder andere Firmware-Fassung; nicht erprobt. Am risikoärmsten wäre Byte 12
3 Byte 14 der Meldung speedFeedBack, gemessenes Tempo, Kodierung wie Befehl nicht gelesen; OmegaSim liest Byte 3, 10, 11, 12 (und 1, 15) offen; wäre die größte Einzelverbesserung (echte Tempo-Regelung der NPCs)
4 Kachelcodes zusätzlich 0x07 Boxengasse, 0x08/0x09 große 30°-Kurve, 0x0A Engstelle, 0x0B/0x0C kleine 30°-Kurve übernommen; 0x0A war vorher als Start/Ziel geführt seVen bestätigte auf Rückfrage: seine Tabelle gilt im Bahn-Modus. Damit ist 0x01 Start/Ziel auf der Schiene, 0x0A Start/Ziel nur auf Papier
5 Akkuskala 131 bis 155 damals 111 bis 155, heute 138 bis 155 beide geschätzt; bei Rohwert 131 zeigte die alte Skala 45 %, seVen 0 %. Nachmessen durch Leerfahren
6 Prüfsumme und Ziellinie Prüfsumme „XOR über Bytes 0…18“; Ziellinie als Flanke 0x00 → 0x08 in Byte 15 CRC-8, Polynom 0x31, Start 0xFF, reproduziert 0xA4, 0x33, 0x83; Ziellinie deckt sich mit ZIEL_SPERRE_BIT Prüfsumme: eigene Messung stärker (XOR ergibt für das Leerlaufpaket 0x17 statt 0x33). Ziellinie: unabhängige Bestätigung in beide Richtungen
7 Bytes 16–18 im manuellen Profil werden trackPosition, currentTile, previousTile ans Auto zurückgespiegelt Nullen, nur bei Selbstführung der Vorausblick offen, ob das Auto die Rückspiegelung braucht; sie wäre die einfachste Erklärung, falls der Bahn-Modus ohne sie schlechter liest

Umgekehrt fehlte in seVens Beschreibung, dass der Sensor zwei Codetabellen hat, je eine pro Leseart.

Zur dritten aufgezeichneten Prüfsumme nennen die Quellen zwei Werte: CARRERA_HYBRID.md schreibt 0x83, der Kommentar in src/20-protocol.js 0xE0. Welcher Wert zu welchem Paket gehört, ist hier nicht nachgeprüft.

Beispiele

Das Leerlaufpaket und seine Prüfsumme

Leerlaufpaket der Original-App: AF 00 00 00 00 00 DF 00 80 00 60 00 01 00 82 04 00 00 00.

  1. CRC-8 nach OmegaSim: Startwert 0xFF, über 19 Byte gerechnet → 0x33. Das ist die aufgezeichnete Prüfsumme; die Firmware nimmt das Paket an.
  2. XOR über dieselben 19 Byte (seVen): 0xAF ⊕ 0xDF ⊕ 0x80 ⊕ 0x60 ⊕ 0x01 ⊕ 0x82 ⊕ 0x04 = 0x17. Das passt nicht zur Aufzeichnung.
  3. Byte 14 = 0x82 = 1000 0010: Bit 7 (Ausdruck) und Bit 1 (Scheinwerfer). Diese Aufzeichnung stammte also aus der Stellung „Ohne Bahn“; auf der Schiene hätte das Auto damit nichts gelesen.

Selbstführung einschalten

Ein NPC im Leitplanken-Modus, Gas 0,55 (Δ 70), Lenkung 0, Licht an, nächste drei Teile Gerade, Rechtskurve, Rechtskurve:

  1. Byte 6 = (0xDF + 70) mod 256 = 293 − 256 = 37 = 0x25.
  2. Byte 10 = 0x20, Byte 15 = 0x0C (statt 0x60/0x04).
  3. Byte 14 = Bahn 0x20 | Scheinwerfer 0x02 = 0x22.
  4. Bytes 16–18 = 02 04 04.
  5. Der Rest wie beim Spielerpaket, dann CRC-8.

Fährt dieser NPC von der Bahn (Byte 12 0x00 länger als die Entprellzeit), setzt OmegaSim modeBytes auf null, und das nächste Paket hat wieder 0x60/0x04 und Nullen in 16–18.

Was eine Rückwärtsgrenze von −95 bedeuten würde

Heute: Δ min −64 → Byte 0x9F. Vorschlag: Δ −95 → 223 − 95 = 128 = 0x80, genau der Bereichsanfang nach seVen. Der Rückwärtsweg wüchse von 64 auf 95 Stufen, also um (95 − 64) / 64 = 48 %. Δ −96 ergäbe 0x7F und läge schon außerhalb des beschriebenen Rückwärtsbereichs.

Grenzen und bekannte Probleme

Versionsgeschichte

Version (OmegaSim) Änderung mit Bezug zur Firmware
August 2026 Mitschnitte der Original-App, Entschlüsselung von Rahmen, CRC-8 und Lesearten
0.4.54 Autopilot auch für die Einführungsrunde (vorher nur Gelb)
0.6.14 Codetabellen je Leseart; 0x0A auf der Schiene ist keine Ziellinie mehr
0.6.28 Autopilot gibt neben der Bahn die Lenkung an den Fahrer zurück
0.9.37 Ziellinien-Bit der Firmware (Byte 15) als Rundenmarke
0.9.51 Selbstführungsbytes auch ohne Vorausblick
1.1.40 Tempo-Grenzen als Gasschritte dokumentiert

Einzelnachweise

  1. ↑ Rückfrage mit confirm() in der Merkmalsliste, src/10-ble-explorer.js.
  2. ↑ AUTO_MODE, RAIL_MODE und Kommentare, src/60-track.js.
  3. ↑ autopilotGrund(), src/50-drive.js.
  4. ↑ CARRERA_HYBRID.md, Abschnitt „Abgleich mit der Protokollbeschreibung von seVen“, Punkte 1–7.

Siehe auch

Quellen im Code