PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Gemeinschaftsprojekt] Opensource RP6Loader



Fabian E.
20.06.2010, 19:18
Hallo zusammen,
wie hier ja in letzter Zeit schon rege diskutiert wurde, geht es darum, einen freien und quelloffenen RP6Loader zu schreiben.

Kurz zu meiner Person: Ich bin 18 Jahre alt und programmiere seit ungefähr 5 Jahren.
Erfahrungsmäßig traue ich mir das auf jeden Fall zu und suche jetzt eigentlich nur noch ein paar Leute,
die ebenso Spaß daran hätten am Loader mitzuarbeiten.

Der derzeitige Loader von SlyD ist in Java geschrieben und leider nicht Opensource.
Das liegt daran, das man verhindern möchte, dass der Code in Raubkopien des RP6 verwendet wird.

Allerdings gefällt mir der Loader nicht wirklich gut.
Er tut zwar seinen Dienst, allerdings gibt es doch einige Verbesserungen und Kritikpunkte.

Alt: Der Loader ist schon relativ alt und wird, so wie ich das sehe, auch nicht weiter gepflegt.
Ich hatte am Anfang schon Probleme ihn auf Win 7 zum Laufen zu bringen
Langsam: Der Loader ist leider was das Starten und Verbinden betrifft echt langsam. Eine schnellere Variante wäre schön!
Unflexibel: Manchmal könnte man auch etwas komplexere Kommandozeilen-Parameter wie -Silent gebrauchen.
Dort könnte der Loader alles von alleine machen.
(Hässlich): Naja, über das Design kann man sich jetzt streiten, mir persönlich gefällt es jedenfalls nicht.
Ein klares Design, den Microsoft-Richtlinien entsprechend wäre mir lieber.

Aufgrund dieser Dinge habe ich beschlossen, einen eigenen modernen Loader zu schreiben.

Es gibt bei diesem Projekt ein paar Teilbereiche:

Die Programmierung selbst: Eigentlich hier der einfachste Teil. Es muss eine GUI erstellt und alles benutzerfreundlich dargestellt werden.
Nachforschungen und Recherchen: Da wir leider den Code des alten Loaders nicht haben,
muss das Protokoll, nach dem Loader und RP6 arbeiten, ersteinmal herausgefunden werden.
Dazu hat uns SlyD eine Debug-Ausgabe eines Verbindungslogs gegeben.
Anhand dessen kann man sehen, was der Loader sendet und was er vom RP6 empfängt.
Hier liegt der Hauptteil der Arbeit. Es gilt nicht nur herauszufinden, was der RP6 wann sendet, sondern auch warum er dies tut.

Der Loader sollte allerdings nicht so viele Features haben wie der echte.
Die Displays könnten ruhig wegfallen, da man diese nunmal nicht so oft braucht.
Prinzipiell könnte man die aber auch einbauen. Sollte aber von der Priorität eher weiter hinten liegen.

Im Moment würde die Arbeit halt darin liegen, herauszufinden, wie das Protokoll funktioniert.
Danach kann man sich Gedanken darüber machen, wie das Programm mal aussehen soll.

Zum Programm selbst: Ich würde es gerne in C# schreiben, weil das einfach meine Lieblingssprache ist.
Allerdings geht es bei diesem Projekt primär erst einmal darum das ganze zu verstehen.
Wenn später jemand einen Loader in einer anderen Sprache schreiben will, warum nicht? ;)

Gerade weil es sich hier um so ein komplexes Thema handelt, können auch Leute mitmachen, die vom Programmieren nicht so viel Ahnung haben.
Sie könnten dann durchaus auch nur das Protokoll analysieren.

Falls sich hier wirklich Leute finden, die helfen wollen, wäre es auch keine große Sache sich Webspace zu besorgen und ein kleines Forum zu eröffnen oder so.
Wie der Datenaustausch aber wirklich abläuft kann man auch später noch klären.
Sei es per Forum oder Skype oder ICQ oder so, vollkommen egal.

An Anforderungen gibt es eigentlich nicht soo viel was man mitbringen sollte.
Neben Teamgeist und auch der Fähigkeit im Team zu arbeiten,
sollte man vielleicht schon etwas länger mit dem RP6 zu tun haben und
auch etwas Ahnung vom PC und vom Programmieren haben.

Wenn also wer Lust hat ein kleines Team zu gründen kann er sich ja einfach mal hier melden. :)

Als Anhang noch eine etwas aufgearbeitete Fassung des genannten Debug-Logs.

-schumi-
21.06.2010, 15:27
Hallo

Ich hätte durchaus Lust an dem Projekt teilzunehmen. Leider wird es mir nicht möglich sein so ein Team zu gründen, da ich kurz vor meiner Abschlussprüfung zu mittleren Reife stehe.

Aber ich hab schon mal angefangen :cheesy:
Also, das ist der Code von meinem Programm, dass die Controller-ID im HighSpeed-Modus ausliest. Da es aber jeder verstehen soll hab ich mal nur den Ablauf selbst zusammengeschrieben:


Reset, in dem man RTS für ca. 1-2ms setzt

ComPort im ASCII-Modus öffnen (Low-Speed):
- 38400 Baud
- keine Parität
- 8 Datenbits
- 1 Stopbit
- RTS so setzen, dass RP6 nicht
resettet


Warten, bis der RP6 ein "[RP6BOOT]" gesendet hat

Die Erkennungs-ID auslesen:
- Ein ASCII-Zeichen mit dem Wert 072 senden
- Warten, bis der RP6 9 Zeichen gesendet hat
- Base-Board: 082; 080; 054; 058; 001; 001; 004; 005; 000
- M32-Board: 082; 080; 054; 058; 002; 001; 004; 003: 000

Falls Base-Board angeschlossen: Akkuspannung auslesen:
- Ein ASCII-Zeichen Wert 149 senden
- Wartet bis RP6 2 Zeichen gesendet hat
- Spannung = (ASCII-WERT1+256*ASCII-WERT2)/100

Highspeed setzen:
- Ein ASCII-Zeichen Wert 53 senden
- Warten, bis RP6 ein ASCII-Zeichen Wert 70 sendet
- Comport im ASCII-Modus öffnen (High-Speed):
- 500000 Baud
- keine Parität
- 8 Datenbits
- 1 Stopbit
- RTS so setzen, dass RP6 nicht
resettet

Prüfen, ob RP6 reagiert:
- Zeichenfolge senden:
170; 170; 170; 170; 170; 153
- Warten, bis RP6 170 und 086 sendet

Wieder die Erkennungs-ID auslesen:
- Ein ASCII-Zeichen mit dem Wert 072 senden
- Warten, bis der RP6 9 Zeichen gesendet hat
- Base-Board: 082; 080; 054; 058; 001; 001; 004; 005; 000
- M32-Board: 082; 080; 054; 058; 002; 001; 004; 003: 000


[[ HIER SOLL DER UPLOAD ERFOLGEN ]]


ComPort im ASCII-Modus öffnen (Low-Speed):
- 38400 Baud
- keine Parität
- 8 Datenbits
- 1 Stopbit
- RTS so setzen, dass RP6 nicht
resettet

Warten, bis der RP6 ein "[READY]" sendet

Das ganze ist so auch aus der DEBUG-Ausgabe zu entnehmen, aber ich bin der Meinung, dass es so viel übersichtlicher ist.

Viel Spaß damit!
MfG
-schumi-

[EDIT] NACHTRAG!!

Mir ist auch noch was eingefallen was wir impletieren könnten. (Easy zu realieren und sehr praktisch):
Die *.Hex liegt ja normalerweise im selben ordner wie der Code als *.c
Man könnte ja jetzt den Code Zeile für Zeile einlesen und dann checken ob entweder ein
#include "RP6RobotBaseLib.h"
oder ein
#include "RP6ControlLib.h"
enthalten ist. Und da der RP6/M32 beim Verbinden auch seine ID preisgibt könnte man dann kontrollieren, ob der Code auch für dieses Board geschrieben ist. Das verhindert dann das Laden von Code in den falschen Controller, was beim starten des Programms zu beschädigungen führen könnte...

Magelan1979
21.06.2010, 17:11
Auch wenn ich abends nur 1-2 Stunden Zeit habe, bin ich gerne dabei. So muss ich wenigstens noch C# lernen. Aber das sollte nicht so das Problem sein. Funktionales und OO-Programmieren sind mir geläufig. Und kennt man eine Sprache kennt man alle.

Gruß Magelan

Mc Delta
21.06.2010, 17:39
Ich bin auch dabei!
Ich habe schon Erfahrung in Visual-Basic und Visual C# sowie in C++.
Wir könnten ja mal Skype oder ICQ Kontakte austauschen.

Fabian E.
21.06.2010, 18:39
Hey, na das klingt doch super :) Abends 1-2 Stunden sind doch vollkommen ausreichend,
ich hab ja auch nicht mehr Zeit ;)

Vielen Dank auch an Schumi =)

Also ich habe meinen Code jetzt soweit, dass er die verbindung herstellt, den Speed wechselt und den RP6 aufs Flashen vorbereitet.
Zum Schluss schließt er die Verbindung wieder.
Jetzt fehlt nur noch der Teil mit dem eigentlichen Flashen.

Ich würde sagen, dass ich den Code schonmal auf Sourceforge stelle, dann kann man mit allen Mann daran arbeiten und Einsicht darin nehmen.

Magelan1979
21.06.2010, 19:57
Mit welcher Umgebung arbeitest Du denn? Vielleicht macht es dann sinn, die ganzen Projektdateien mit anzubieten.

P.S. Bis jetzt habe ich auf der Sourceforge.Net noch nichts gefunden

Fabian E.
21.06.2010, 20:06
So, ich habe das ganze dann mal schnell auf Sourceforge geladen.
Hier (https://sourceforge.net/projects/rp6flashwriter/) gehts zur Seite.

Außerdem habe ich dort ein Forum erstellt, welches bald freigeschaltet werden sollte.
Da kann man sich dann weiter unterhalten :)

Der Code, der dort hochgeladen ist, kann genau das was ich eben gesagt habe.
Es fehlt jetzt der Teil, bei dem die Daten geladen werden,
die Checksummen berechnet werden und das ganze an
den RP6 gesendet wird.

EDIT: Ich persönlich arbeite mit Visual Studio 2008 Pro, aber der Verwendung von VS 2008 Express sollte auch nichts im Wege stehen.
2010 verwende ich nicht, da ich dort einen dummen Bug habe, den ich nicht wegbekomme.

Magelan1979
21.06.2010, 20:23
OK, dann mal schauen in wie weit es abwärtskompatibel ist. Ich habe vom Studium noch die Version 2005.

P.S. Ich habe noch nie mit Sourceforge gearbeitet. Wie komme ich an die Dateien. Obwohl ich einen Acc habe, finde ich da nichts

Fabian E.
21.06.2010, 20:33
Die Solution-Datei ist nicht kompatibel. Wenn du allerdings eine neue LEERE Solution erstellst und dann meine Projekte hinzufügst müsste es klappen.

Also du kannst wenn bei dem Projekt bist einmal auf "Code" und dann "SVN Browse" gehen.
Dort kannst du dir bei dem Punkt "Download GNU Tarball" alles runterladen.

Außerdem könntest du das SVN auch richtig verwenden.
SVN ist ja eine Codeverwaltung. Wenn du das willst,
sollten wir uns aber mal zusammen hinsetzen, dann kann ich dir das erklären.

Fabian E.
22.06.2010, 00:34
So, ich habe hier (https://sourceforge.net/apps/phpbb/rp6flashwriter/index.php) dann mal ein kleines Forum eingerichtet, bei dem ihr euch anmelden könnt.
Dort können wir dann in aller Ruhe weiterreden! =)

Fabian E.
23.06.2010, 10:57
Im Forum stehts auch schon, ich habe mit SlyD geredet und wir haben absolut keine Chance an den echten Code ranzukommen!
Auch kann der aktuelle Loader eine solche Debug-Ausgabe gar nicht erzeugen.
Allerdings kommt laut SlyD nächste oder übernächste Woche eine neue Version des Loaders raus, der das kann.
Ab da können wir dann also auch eine Hexdatei mit den gesendeten Daten vergleichen! :)
Wie gesagt, wenn ihr euch bei Sourceforge einen Account macht, könnt ihr auch voll auf das Forum zugreifen!
Ich habe dort schon einige Threads mit Informationen erstellt.
Schaut einfach mal vorbei

Magelan1979
23.06.2010, 18:41
Yepp, mache ich. Zur Info, ich arbeite mich gerade erneut in die CRC Geschichte rein. Allerdings muss man da Aufpassen. Aus der Vorlesung Rechennetze weiß ich noch, dass damals im guten Tannenbaum die Grafik falsch war.

Magelan1979
23.06.2010, 19:22
Ach ja, zwei wichtige Sachen müssen wir dann natürlich wissen:

1. Wie groß sind die Datenpakete aus denen die Prüfziffer erstellt wird.
2. Wie sieht das Generatorpolynon aus? Für CRC-16 gibt es mehrere Varianten.

IBM-CRC-16 x16 + x15 + x2 + 1
CRC-DNP (CRC-16) x16 + x13 + x12 + x11 + x10 + x8 + x6 + x5 + x2 + 1
CRC-CCITT (CRC-16) x16 + x12 + x5 + 1

Frage 1 und 2 ist quasi eine Gleichung mit zwei Unbekannten

EDIT: Hätte ich vorher mal im Forum reingeschaut hätte es sich erübrigt gehabt

Fabian E.
23.06.2010, 22:48
Ja, ich glaube da steht schon alles, oder?
256 Byte, davon die Checksumme. Wir nehmen die CCITT-Variante.

Fabian E.
20.07.2010, 12:46
Also, wie SlyD schon angekündigt hat, gibt es nun eine neue Version des Loaders.
Zu finden hier:http://www.arexx.com/forum/zeigebeitrag.php?f=19&t=1114&p=4776

Diese Version unterstützt nun auch den Debugmodus. Damit ist es nun möglich, eigene Debuglogs zu erstellen und mit den Dateien zu vergleichen.
Ich werde dann heute mal die Logs mit den Dateien vergleichen und sehen was ich machen kann.

Fabian E.
30.12.2010, 19:25
Hey Leute wie siehts denn aus?
Der neue Loader ist da und eigentlich würde ich gerne den Flasher nach Fertigstellung in mein Remotrol einbetten.
Im neuen Jahr hätte ich durchaus Zeit und Lust einiges an Energie in dieses Projekt zu stecken.
Ihr auch noch? Falls ja dann könnt ihr euch ja einfach mal bei mir melden! =)

-schumi-
01.01.2011, 17:11
Hey Leute wie siehts denn aus?

Leider hab ich das ganze aus den Augen verlohren...

Bin inzwischen auch auf Linux umgestiegen -> kein VB

Aber da ich ja schon mal in FreeBASIC angefangen hab, hab ich mir den Code gekrallt (zumindest das was ich hier gepostet hatte - der Rest is leider verlohren) und geschaut wie weit ich komm.

Resultat bis jetz:

- Serielle Verbindungen werden angezeigt und man kann sich eine aussuchen
- Erkennung vom Board
- Bei Base-Board: Akku auslesen
- Beim umstellen auf 500KBaud haperts noch...
- Upload noch gar nicht angefangen, muss mir die Materie erst noch zu Gemüte führen...

Aber du hast ja erst vor 3 Monaten wieder Code auf SourceForce hochgeladen

Tue Sep 7 16:09:50 2010 UTC (3 months, 3 weeks ago)
Bist ja schon beachtlich weit, aber die Uploadfunktion geht noch nicht so wies aussieht...
Hat des was jetz als Komentar deklariert ist so funktioniert?


MfG
-schumi-

[EDIT]
Weis jemand wie man jetz so eine Debugausgabe macht? Das Log kann man speichern und angucken, dafür gibts im Menü nen Unterpunkt... Aber das alleine ist zu ungenau

Fabian E.
01.01.2011, 17:22
Ja, das weiß ich. Werd ich morgen wenn ich zu Hause bin hier mal posten, ist ganz einfach über einen Parameter.
Ich hänge im Moment an der Erstellung der CRC-Checksumme und generell der Übertragung.
Wie viel wird wovon wann mit welcher Checksumme übertragen...
Da könnten wir ja auf jeden Fall zusammen arbeiten.

Mit den Debug-Logs klappt das ganz gut, so wie ich das bis jetzt gesehen hab.

Fabian E.
01.01.2011, 17:30
Aber du hast ja erst vor 3 Monaten wieder Code auf SourceForce hochgeladen

Tue Sep 7 16:09:50 2010 UTC (3 months, 3 weeks ago)
Bist ja schon beachtlich weit, aber die Uploadfunktion geht noch nicht so wies aussieht...
Hat des was jetz als Komentar deklariert ist so funktioniert?


Ja, hatte mich auf Remotrol konzentriert. ;) Würde aber aus den beiden Projekten gerne eines machen. Dafür müsste das aber erst mal klappen! =)

Das auskommentierte erstellt nur ein bisschen Checksummen...
Da muss ich dann halt mal sehen, ob das die gleichen wie im Log sind.
Geht aber erst ab morgen.
Habe gerade noch etwas Code mit Kommentaren hochgeladen.

-schumi-
01.01.2011, 17:46
Das ging ja schnell! :-D


Habe gerade noch etwas Code mit Kommentaren hochgeladen.
Den werd ich mir gleich mal zu Gemüte führen :-D

und eine Frage zu deinem code hätte ich noch:

float bat = ((bathigh << 8) + batlow) / 102.4f
Wie bist du auf die 102.4 gekommen?
(ich nehme an dass das "f" für Float steht und die Zahl an sich so nicht beeinflusst, oder?)

Hier mal ein kleiner Screenshot im Anhang. Das ganze läuft bis jetz nur auf Konsole, und da soll es auch vorerst bleiben. Parameter nimmt er bis jetz noch keine, aber das ist sehr einfach einzubauen...

Warum er eine Falsche ID sendet weis ich nicht...

und auf das 5x 170 und dann noch 153 Reagiert er garnicht - bzw. er schreibt "HS" (= HighSpeed ??) aufs Display und hängt sich auf

Ich hab irgendwie den Verdacht das der PC die Baudrate nicht richtig umstellt - hoffentlich liegts nur daran...

MfG
-schumi-

Fabian E.
01.01.2011, 18:54
Die 102,4 hab ich hier irgendwo aus dem Forum für die Umrechung des ADC-Werts in Volt.

Ich werde ja auch erst mal eine Programmbibliothek erstellen, die dann später irgendwo Verwendung finden wird.
Ich denke, um das Ganze zum Laufen zu bringen können wir ganz gut zusammen arbeiten.
Meinst du ich soll uns ein Forum einrichten?

-schumi-
01.01.2011, 19:15
Forum hast du ja schon eins gemacht:
http://sourceforge.net/apps/phpbb/rp6flashwriter/index.php

Nur da hat sonst noch keiner was reingeschrieben^^
[EDIT] Stimmt ab jetz nicht mehr :-D


Ich hab irgendwie den Verdacht das der PC die Baudrate nicht richtig umstellt - hoffentlich liegts nur daran...
Inzwischen kann ich sagen, dass es nicht am PC liegt... Irgendwie will der RP6 einfach nicht auf 500KBaud umschalten - obwohl er bestätigt...

MfG
-schumi-

Fabian E.
01.01.2011, 19:31
Ich mache ein neues Forum auf, dann hab ich das alles zentral auf meinem Server.
Die Beiträge migriere ich gerade.

www.support.diamondback-development.de

Fabian E.
01.01.2011, 23:55
Forum hast du ja schon eins gemacht:
http://sourceforge.net/apps/phpbb/rp6flashwriter/index.php

Nur da hat sonst noch keiner was reingeschrieben^^
[EDIT] Stimmt ab jetz nicht mehr :-D


Ich hab irgendwie den Verdacht das der PC die Baudrate nicht richtig umstellt - hoffentlich liegts nur daran...
Inzwischen kann ich sagen, dass es nicht am PC liegt... Irgendwie will der RP6 einfach nicht auf 500KBaud umschalten - obwohl er bestätigt...

MfG
-schumi-

Dann zeig doch mal deine Anbfolge an gesendeten und empfangenen Befehlen.

-schumi-
02.01.2011, 15:22
Hier hab ich mal die jeweiligen Teile des Sourcecodes zusammengehängt:
http://schuhumi.lima-city.de/rn-bilder/RP6_Flashwriter_01.html
In dieser Reihenfolge werden sie ausgeführt

Warum es nicht geht ist mir nach wie vor Schleierhaft...

MfG
-schumi-

Fabian E.
04.01.2011, 00:08
Also du hälst dich ja genau an das Protokoll... Ich hab es genauso...
Vielleicht ist es doch der PC der nicht richtig umschaltet?

-schumi-
04.01.2011, 01:35
Ja, inzwischen hab ich rausgefunden dass der PC beim umschalten doch RTS kurz toggelt -> Reset -> Highspeedanforderung futsch

Aber wie ich im Forum schon gesagt hab flash ich jetzt erst mal mit Low-Speed, denn eine Lösung für das Problem fällt mir jetzt im Moment nicht ein...

Also noch der Aufruf an alle Roboternetzler die sich ein wenig mit Linux auskennen:

Kennt ihr eine Möglichkeit die Baudrate einer seriellen Schnittstelle zu verändern, ohne dass andere Einstellungen des Ports beeinflusst werden? (RTS soll High bleiben)

Währe für Hilfe sehr dankbar
-schumi-

Fabian E.
05.01.2011, 03:14
So, hier ein erster Zwischenbericht:
Wir haben es geschafft, das Protokoll zu entschlüsseln, ich habe meinen RP6 schon erfolgereich geflasht.

Daher hier ein kurzer Ausblick auf das, was euch erwartet.
Der RP6 FlashWriter wird in mehreren Versionen erscheinen:
GUI-Version: Eine Version, die ganz normal in einem Fenster bedient werden kann (Ähnlich dem jetzigen RobotLoader) Konsolen-Version: Diese Version wird über die Kommandozeile bedient und lässt sich daher auch gut z.B. in ProgrammersNotepad verwenden.
Die Konsolenversion wird vorraussichtlich für Windows und für Linux erscheinen.

In nächster Zeit werden wir wohl eine Beta der Konsolenversion veröffentlichen, um möglichst viele Tester zu haben.

Ein besonderer Dank gilt SlyD, der sich sehr viel Mühe mit uns gegeben hat und ohne den das Ganze definitiv nicht möglich gewesen wäre! =)

Fabian E.
09.01.2011, 18:49
Eine erste Beta haben wir gerade hier (https://www.roboternetz.de/phpBB2/viewtopic.php?t=57635) veröffentlicht.