RP ✔️ VLT Firmwares, in DE 22Kmh⚡ mit Vanilla Firmware und vieles mehr

Hi Leute,
ich präsentiere nun meine bisher anspruchsvollste Mod. Sie ersetzt den Programmteil der Firmware, der für das blinkende Rücklicht verantwortlich ist vollständig durch eigenen Code. Dadurch, dass der Code für das blinkende Rücklicht ersetzt wird, ist also die Bremslicht Mod praktisch mitenthalten.

VooDooShamane VooDooShamane war an der Mod beteiligt: er hat mich bis spät in die Nacht mit den Offsets und möglichen Werten für den Gashebel und die Bremse unterstützt und mir auch tagsüber immer wieder mit Ideen zur Problemlösung geholfen.


ReLight Mod
Die Mod besteht aus zwei Teilen: Einem Trigger und dem Programmteil (Effekt).

1) Trigger (Hook)
Beispiel: Leicht angezogene Bremse + Halb-Gas
DRV236
Offset Vorher Nachher
0x6fe 617901291ad0a179012917d090f83410012913d0 1e4e96f878129c2904d396f879123c2914d200bf
DRV304
Offset Vorher Nachher
0x6fe 6179012916d0a179012913d090f8341001290fd0 204e96f878129c2904d396f879123c2910d200bf

2) Effekt (Payload)
Um eigenen Code einzubauen, lassen sich nun die folgenden Bytes ersetzen:
DRV236
Offset Vorher
0x73a 90f843000028fad1207e401cc0b22076142804d92576607e38b100206076607e28b1bde8704000f05ab80120f6e7bde87040fff7b6bf
DRV304
Offset Vorher
0x732 90f8430000281dd1207e401cc0b22076142804d92576607e38b100206076607e28b1bde8704000f062b80120f6e7bde87040fff7babf

Nachher (beide DRV's gleich)
Beispiel 1: LTGM AKTIVIEREN

0124a0f83a5100bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bfbde87080
Beispiel 2: DPC AKTIVIEREN
0124a0f8324100bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bfbde87080
Beispiel 3: DPC + LTGM DEAKTIVIEREN
0124a0f83a41a0f8325100bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bf00bfbde87080


Die Beispiele habe ich an meinem 1S erfolgreich getestet.


Wichtige Hinweise:
  • Meine Angaben sind für Vanilla DRV. Beim manuellen Patchen könnt ihr auch eine bereits gepatchte DRV nehmen. An den angegebenen Offsets dürfen sich einzelne Ausgangs-Bytes durchaus unterscheiden.
  • Wenn ihr nur den ersten Teil der Mod einbaut, dann wird das Rücklicht im US Modus (GM/LTGM) blinken, wenn ihr die gewählte Tastenkombination drückt (sofern nicht schon eine Bremslicht Mod drin ist). Das ist ein schöner visueller Weg, um sich an die Mod heranzutasten.
  • Wenn ihr nur den zweiten Teil der Mod einbaut, dann wird die gewählte Aktion bei Bremse / Motorbremse ausgeführt. Das ist meiner Meinung nach nicht sinnvoll. Man sollte also wenn man 2) einbaut auch 1) einbauen.
  • Das Beispiel "DPC aktivieren/deaktivieren" funktioniert natürlich nur mit VLT DPC Mod, und das Beispiel "LTGM aktivieren/deaktivieren" funktioniert nur mit VLT LTGM Mod.

Was steht da nun in den Bytes?
Es handelt sich um handgeschriebenen ARM Assemblercode. Man kann die Bytes hier rauskopieren und in den armconverter eingeben, dann sieht man den Programmcode dazu.

Erklärung zu den Beispielen oben: Beim Trigger wird zuerst die Speicheradresse von Gas + Bremse geladen. Danach wird verglichen, ob Gas + Bremse gewisse Werte überschreiten. Beim Programmteil werden die gewünschten Werte (1 oder 0) an die Adressen von LTGM + DPC geschrieben. Dort wo "00bf00bf..." steht ist übrigens noch sehr viel Platz für Code - genug für weitere Tastenkombinationen aus Gas + Bremse (Gas leicht, Bremse stark, beides leicht oder beides stark durchgezogen).


Wie geht es mit der Mod weiter?
Mir war es erstmal wichtig, gemäß der VLT Philosophie, die Informationen hier offen zu legen und eine Diskussionsgrundlage zu schaffen. Die Möglichkeiten der Mod sind sehr umfangreich. Sie kann als Grundlage für neue Mods genutzt werden. DPC/LTGM zu aktivieren oder zu deaktivieren ist lediglich ein mögliches Beispiel. Da sich selbst hierbei viele Kombinationsmöglichkeiten ergeben, bin ich mir über die Umsetzung im Web Patcher noch unsicher. Ich befürchte, dass dieser sehr schnell unübersichtlich werden könnte. Da ich gerade noch viele andere Dinge zu tun habe, werde ich für die Anpassung des Webpachters erstmal keine Zeit haben. Ihr könnt also zum Testen die Patches erstmal auf die traditionelle Art (HexEditor) einbauen - oder über mein öffentliches Patcher Skript.

Liebe Grüße - D
 
Zuletzt bearbeitet von einem Moderator:
nandtek / VooDooShamane VooDooShamane

Wie geil ist das denn bitte?! 👍👍👍👍

Wenn ich das richtig verstanden habe, geht damit bis jetzt nur eine Aktion, also entweder eines der beiden einschalten oder beide ausschalten?

Wie sieht das aus, wenn man z. B. "LTGM einschalten" gepatcht hat, die Funktion ausführt und man schaltet den Scooter dann aus und wieder an- ich nehme an, LTGM ist dann erst mal nicht aktiv?
 
Olli_69 Olli_69 Korrekt.

Die Aktionen lassen sich beliebig anpassen. Das oben sind nur Beispiele. Von Codi kam schon die Frage nach einer akustischen Rückmeldung (Piep). Eine Rückmeldung, in welcher Form auch immer, ließe sich sicherlich auch im Programmteil 2) einbauen, wenn das gewünscht ist. Man könnte auch unterschiedliche Trigger setzen, jeweils zum Einschalten und Ausschalten. Dafür gestaltet man 1) so, dass dieses die grundsätzliche Kombination erkennt (z.B. Gas + Bremse) in 2) wird dann die Fallunterscheidung getroffen (Gas > 80%, Bremse > 20% etc.).
 
Olli_69 Olli_69 Korrekt.

Die Aktionen lassen sich beliebig anpassen. Das oben sind nur Beispiele. Von Codi kam schon die Frage nach einer akustischen Rückmeldung (Piep). Eine Rückmeldung, in welcher Form auch immer, ließe sich sicherlich auch im Programmteil 2) einbauen, wenn das gewünscht ist. Man könnte auch unterschiedliche Trigger setzen, jeweils zum Einschalten und Ausschalten. Dafür gestaltet man 1) so, dass dieses die grundsätzliche Kombination erkennt (z.B. Gas + Bremse) in 2) wird dann die Fallunterscheidung getroffen (Gas > 80%, Bremse > 20% etc.).

Na gut, das Piep ist Geschmackssache, meinen Pieper habe ich mechanisch still gelegt, da er mich mehr nervt als Nutzen bringt 😅 (da kannte ich die "böse X...noch nicht, wo man an, aus, einfach, zweifach, lang, kurz, wie auch immer Piep einstellen könnte..
Piepen ist für andere aber durchaus wichtig, daher bin ich da ganz bei VooDooShamane VooDooShamane: ich mag nix verpflichtendes, sondern habe gerne die Wahl 😅

Unterschiedliche Trigger sind für ein handyfreies Nutzen sicherlich sinnvoll, kämen vor allem auch den Apple-Usern sicher sehr entgegen, aber 1) oder 2) "mal eben" mit armconverter selber anpassen, übersteigt bei den meisten sicher deren Horizont (meinen sowieso 🤣)

Aber so war das glaube ich auch nicht von dir gemeint.... 😉

Wie sieht das aus, wenn man z. B. "LTGM einschalten" gepatcht hat, die Funktion ausführt und man schaltet den Scooter dann aus und wieder an- ich nehme an, LTGM ist dann erst mal nicht aktiv?

Ich weiß, ich könnte es einfach ausprobieren, aber irgendwie ist mir da grad so gar nicht nach flashen 🙃
 
  • Hilfreich!
Reaktionen: VooDooShamane
Nach einem Scooter reboot ist LTGM immer wieder deaktiviert bzw das DE Flag wird gesetzt.
Natürlich vorrausgesetzt, man hat eine DE SerienNr.
Dieser Mechanismus funktioniert weiterhin.

Ich habe Gestern die Tempomat Funktion gründlich untersucht konnte dabei vieles entdecken das wir für die VLT Patches zweckentfremden können.
Beispielsweise Habe ich die Beep() Funktion im Programmcode ausfindig machen können.
Diese wird mit Parameter 1 - 4 aufgerufen um den jeweiligen Piep ton auszugeben.
Wir haben also jetzt die volle Kontrolle über die Töne die der Scooter von sich gibt.
Jeder Ton, z.b. der beim ein/ausschalten, Bluetooth connecten, Tempomat, usw... kann nun verändert oder deaktiviert werden.
Natürlich ermöglicht das auch, Beep sounds einzufügen wo es vorher garkeine gab.

Außerdem könnte man sich den Zeit zähler zu nutze machen, (Tempomat)
um beispielsweise die Tastenkombination für eine vor definierte Zeit halten zu müssen,
um eine jeweilige Aktion auszuführen. (LTGM/DPC etc...)

Den - die Patcher ständig zu aktualisieren wenn man einen neuen Mod hat, ist doch etwas mehr Arbeit.
Und momentan, wo sich ständig etwas ändert bzw. neu dazu kommt einfach unvorteilhaft.
Das ist der Grund warum ich im letzten Jahr schon gesagt habe, man sollte erstmal zu einem Ergebnis kommen,
wo man die Patches und Mods so weit entwickelt hat, bis man einen Standpunkt erreicht hat,
an dem sich nicht mehr viel oder so schnell ändern wird.
Die Abstimmung die ich zu dem zeitpunkt gestartet habe, spiegelt auch das wieder.

LG
VooDooShamane
 
Zuletzt bearbeitet:
Also ich bin heute das erste Mal eine kleine Strecke gefahren und habe mich total erschrocken wo er mitten in der Fahrt gepiept hat 🤣 alles klar, der Tempomat ist angegangen.... Mega geil.... Meine Frau hat es abgenickt und ist auch begeistert. 👍
 
  • Hilfreich!
Reaktionen: VooDooShamane
Nach einem Scooter reboot ist LTGM immer wieder deaktiviert bzw das DE Flag wird gesetzt.
Natürlich vorrausgesetzt, man hat eine DE SerienNr.
Dieser Mechanismus funktioniert weiterhin.

Ich habe Gestern die Tempomat Funktion gründlich untersucht konnte dabei vieles entdecken das wir für die VLT Patches zweckentfremden können.
Beispielsweise Habe ich die Beep() Funktion im Programmcode ausfindig machen können.
Diese wird mit Parameter 1 - 4 aufgerufen um den jeweiligen Piep ton auszugeben.
Wir haben also jetzt die volle Kontrolle über die Töne die der Scooter von sich gibt.
Jeder Ton, z.b. der beim ein/ausschalten, Bluetooth connecten, Tempomat, usw... kann nun verändert oder deaktiviert werden.
Natürlich ermöglicht das auch, Beep sounds einzufügen wo es vorher garkeine gab.

Außerdem könnte man sich den Zeit zähler zu nutze machen, (Tempomat)
um beispielsweise die Tastenkombination für eine vor definierte Zeit halten zu müssen,
um eine jeweilige Aktion auszuführen. (LTGM/DPC etc...)

Den - die Patcher ständig zu aktualisieren wenn man einen neuen Mod hat, ist doch etwas mehr Arbeit.
Und momentan, wo sich ständig etwas ändert bzw. neu dazu kommt einfach unvorteilhaft.
Das ist der Grund warum ich im letzten Jahr schon gesagt habe, man sollte erstmal zu einem Ergebnis kommen,
wo man die Patches und Mods so weit entwickelt hat, bis man einen Standpunkt erreicht hat,
an dem sich nicht mehr viel oder so schnell ändern wird.
Die Abstimmung die ich zu dem zeitpunkt gestartet habe, spiegelt auch das wieder.

LG
VooDooShamane

Gefällt mir bisher alles sehr gut, von wählbaren Tönen (wenn sie denn auch abschaltbar sind) bis zu der genialen Idee, den Faktor Zeit bei den Tastenkombination mit ins Spiel zu bringen.

Bietet die SW eigentlich auch die Möglichkeit eines Triple-Klick oder ist bei doppelt Schluß? Nur so ein Gedanke, denn das taucht meines Wissens bisher nirgends auf...

Ansonsten hast du vollkommen Recht mit dem Webpatcher, das wäre ein ständiges Gefrickel. Wer nicht warten kann oder will, kann die (veröffentlichten) Patches ja selber per Hexeditor einpflegen, so hat jeder die Wahl, fair für beide Seiten 😃
Post automatically merged:

VooDooShamane VooDooShamane sagenhaft! Die Preisfrage ist jetzt, ob wir genug freie Bytes und Pieptöne haben, um eine Melodie reinzuprogrammieren :D
Bitte NICHT 🤣🤣🤣
Post automatically merged:

Starwars oder Beverly hills cop bitte :ROFLMAO:

Das Rocky-Theme, eye of the tiger 🙈
 
  • Hilfreich!
Reaktionen: VooDooShamane
Ich habe bereits heute vormittag per HEX Editor den Gas-Bremse Mod eingepflegt, nachdem ich mit nandtek kurz Kontakt aufgenommen hatte. Leider konnte ich noch nicht die neue FW auf den Roller flashen und testen, da meine Frau dann gedrängelt hat und mit mir los wollte. 😉
 
  • Hilfreich!
Reaktionen: VooDooShamane
Ansonsten hast du vollkommen Recht mit dem Webpatcher, das wäre ein ständiges Gefrickel.

Ich habe da eine gute Idee wie wir das Verwirklichen können.
Ich könnte uns ein Script basteln das man mit config files für den jeweiligen Mod erweitern kann.
So müsseten Nandtek und ich nur zu einem neuen Mod eine config file machen mit der sich der Mod dann anwenden lässt.

Config könnte z.b. so aussehen:

22Kmh.ini
name: 22Kmh Mod;
offset: 0x00005EFA;
mod: 16 21;

VLT-Zipper2 kann da natürlich integriert werden.
So das man dann am Ende ein flash ready file bekommt.
 
Zuletzt bearbeitet:
alles klar, der Tempomat ist angegangen.... Mega geil.... Meine Frau hat es abgenickt und ist auch begeistert.
Das habe ich so nicht explizit in den Patchnotes erwähnt: Meine App schaltet nun standardmäßig den Tempomat frei (lässt sich in den Einstellungen der App ändern). Somit kann man, wenn man LTGM macht, den Tempomat direkt nutzen.

Den könnte ich auch einpflegen und testen.?!?
Worauf bezieht sich diese Frage?
 
Was steht da nun in den Bytes?

Sorry, aber ich Blicks gerade nicht:
Code:
0124a0f83a41a0f8325100bf

movs r4, #1
strh.w r4, [r0, #0x13a]
strh.w r5, [r0, #0x132]
nop

0124a0f83a5100bf
movs r4, #1
strh.w r5, [r0, #0x13a]
nop
nop

0124a0f8324100bf
movs r4, #1
strh.w r4, [r0, #0x132]
nop

movs r4, #1
strh.w r5, [r0, #0x13a]

Warum lädst Du r4 und storest dann r5 ?

Muss das nicht so ?

movs r4, #1
strh.w r4, [r0, #0x13a]
movs r4, #0
strh.w r4, [r0, #0x132]

Sorry fürs ggf. dumme Nachfragen - Ich interpretiere den Code vielleicht falsch ?
 
  • Hilfreich!
Reaktionen: VooDooShamane
K KiWi Haha, geil, sehr gute Frage!!

Das movs r4, #1 mache ich damit ich in allen kommenden Zeilen Zugriff auf den Wert 1 habe. Um LTGM zu deaktivieren, muss man eine 1 reinschieben, um DPC zu deaktivieren eine 0. Die 0 findet man bereits in r5. Es ist also r5=0 und r4=1, die kann ich dann je nachdem welche Mod ausgewählt wird verwenden.

Bei
movs r4, #1
strh.w r5, [r0, #0x13a]

könnte man sich das movs r4, #1 sparen - dieses wird ja nicht verwendet. Damit es einheitlich ist und man einen Referenzpunkt in Hexcode hat, habe ich es aber auch für diesen Fall drin gelassen.
 
Danke für die Aufklärung, ich bin ja ein fauler Sack und habe natürlich nicht den ganzen Code durch den Disassembler gejagt ...

Dann noch eine Frage:

movs r4, #1
eor r4, [r0, #0x13a]
eor r4, [r0, #0x132]

Beim 1. Mal Gas/Hebel geht es an - beim zweiten mal aus ? Sozusagen ein Toogle möglich ?
 
  • Hilfreich!
Reaktionen: VooDooShamane
K KiWi Nicht ohne zeitliche Entkopplung. Man kann eine Variable hochzählen lassen und wenn die einen Wert überschreitet kommt der Toggel. Ohne das wirst du immer in einem zufälligen Endzustand landen.

Alternativ kann man zum Toggeln z.B. verschiedene Stellungen der Bremse abfragen.

Im Programmteil dann nach diesem Prinzip:
cmp r1,#0xcc
bcs LABEL1
strh.w r5,[r0,#0x13a]
b LABEL2
:LABEL1
...
:LABEL2
...

Der Bremshebelwert steckt in r1. Der geht von 0x30 (kaum gedrückt) bis 0xf0 (durchgedrückt). In dem Beispiel frage ich nach 0xcc, also etwas fester gedrückt. Um den Teil genauer zu verstehen, musst du dir auch den Trigger / Hook Assembler Code anschauen und evtl. anpassen.
 
Ja, sowas in der Art wäre schon nice.

Ich hab iOS und kann / und will auch nicht via App da rum fummeln. Eigene Geheimcombi zum GM würde mir schon vollkommen reichen.
Vielleicht könnte man auf dem Display dann noch ein frei wählbares Symbol an/ausschalten um den Modus zu visualisieren.
Ich kann leider nicht so gut ARM Asm - bin Retro Coder 650x&Co - sonst würde ich da selber gerne mal dran fummeln. bzw. mir mal das ganze disasm dazu ansehen.

So kann ich aktuell nur schlaue Kommentare und dumme Fragen beisteuern :ROFLMAO:
 
  • Hilfreich!
Reaktionen: VooDooShamane