Difference between revisions of "U23 2005/Scripteditor"

From C4 Wiki
Jump to: navigation, search
(GUI: Bild)
(Releases: Das Zeug was bei mir lag war so was von veraltet! --Blase16 aka kalkin-)
 
(80 intermediate revisions by 34 users not shown)
Line 1: Line 1:
 
== Beschreibung ==
 
== Beschreibung ==
  
Ein Editor, mit dem man sich ganz einfach Scripts für das Fnordlicht zusammenklicken kann. Dabei soll es einen Simple-Mode und einen Expert-Mode geben: Im Simple-Mode gibt man eine Farbe als Hex-Wert an (oder wählt sie mit einem Color-Picker aus), dann bestimmt man, wie lange diese Farbe angezeigt werden soll und ob es einen Fade zu dieser Farbe geben soll (und wie lange dieser dauern soll). Danach fügt man die nächste Farbe ein, etc.
+
Ein Editor, mit dem man sich ganz einfach Scripts für das Fnordlicht zusammenklicken kann. Dabei kann man für jeden
 +
Farbkanal (RGB) getrennt so genannte ''Frames'' einfügen. In einem Frame wird gespeichert, wie lange eine bestimmte Helligkeit
 +
gehalten werden soll, ob es einen Fade zu dieser Helligkeit geben soll und wie lange dieser Fade dauern soll.
 +
Die drei Farbkanäle kann man dann in einem XML-Dateiformat abspeichern, damit man sie auch später noch bearbeiten kann.
  
Ein Beispiel:
+
Aus dem Programm heraus können dann die Assembler-Makros generiert werden, die (mit der modifizierten Makefile) ganz einfach
1: Zeige mir 10 sec lang Rot an (ohne Fade)
+
in die Fnordlicht-Firmware einkompiliert werden können.
2: Fade innerhalb von 5 sec zu Lila und zeige mir dann 30 sec lang Lila an.
 
3: Fade innerhalb von 10 sec zu Gelb und zeige mir dann 20 sec lang Gelb an.
 
4: ...
 
  
Der Expert-Mode hat im Grunde dieselben Funktionen, aber man kann die drei Threads (also Farbkanäle) getrennt steuern.
+
== Noch nicht implementierte Funktionen ==
  
Ein Beispiel:
+
* Durchsichtige Blöcke (bzw. in der Farbe des Hintergrundes), wenn Brightness = 0
1: Der rote Kanal soll innerhalb von 15 sec auf volle Helligkeit und dann wieder innerhalb von 15 sec auf                                 
+
* Zeitleise (in sec)
    Helligkeit 0 blenden.
 
2: Der blaue Kanal soll (gleichzeitig) in 5 sec auf volle Helligkeit und dann wieder innerhalb von 5 sec auf       
 
    Helligkeit 0 blenden.
 
3: Währenddessen soll der grüne Kanal mit einer Frequenz von 2 Hz (d.h. 2 mal pro Sekunde) blinken.
 
  
  
So hab ich das zumindest verstanden --Diozaka
+
== Interfaces ==
: Ich auch... --[[User:Pylon|Pylon]] 13:43, 4 Nov 2005 (CET)
+
''Zu finden im Quellcode.''
: Ich auch... --Nico
 
:: Na dann wird's ja stimmen :) --Diozaka
 
:: Klingt gut.. - Felix
 
  
== Funktionen ==
 
  
* Die Scriptdateien per Parameter beim Kompilieren nachladen wie z.B. '''make install-fnordlicht meinTollesScript.inc'''
+
== Quellcode ==
* Speichern der Script-Entwürfe in einem eigenen Dateiformat (z.B. '''.fs''' = fnordlicht Script)
+
Hier kommt der Quellcode von den einzelnen Modulen hin.
* ...
 
  
== Arbeitsschritte ==
+
'''ACHTUNG:''' VERALTET
  
* Doku zu den [[U23 2005/Firmware Makros|Firmware Makros]] die für die Scripts benötigt werden. Machen: diozaka, manuke. (fertig)
+
* [http://manuke.gmxhome.de/scripteditor/Simulator.java Simulator.java] (Signatur folgt)
* GUI entwerfen. (fertig, siehe unten)
+
* [http://manuke.gmxhome.de/scripteditor/SimWindow.java SimWindow.java] (Signatur folgt)
* GUI schreiben.
 
* Dateiformat für Script-Entwürfe ('''.fs''') definieren. (Erster Vorschlag, siehe unten)
 
* Parser schreiben: Script-Entwurf -> Assembler-Macros
 
* Makefile anpassen. (siehe oben)
 
  
== GUI ==
+
* [http://www.mene.biz/CMDEditor.java CMDEditor.java] (Text-Interface) -- mene
Unser erster Entwurf für den Simple-Mode
 
  
http://w8n.koeln.ccc.de/media/images/U23-ScriptGUI-Simple.png
+
* [http://files.gultsch.de/scripteditor/XMLParser.java XMLParser.java]
 +
* [http://files.gultsch.de/scripteditor/XMLHandler.java XMLHandler.java] Wird für die Komunikation mit SAX gebraucht.
 +
* [http://files.gultsch.de/scripteditor/just4testing.java just4testing.java] Nur zum testen ;-)
  
== Koordination ==
+
== Releases ==
  
Ich hab mir nochmal überlegt, wie wir das Programm strukturieren könnten. Meiner Meinung nach, wenn wir schon Java benutzen, dann auch richtig. Daher würde ich sagen für jedes der 8 Makros, bzw. je nach Gebrauch auch weniger, gibt es eine Klasse. Diese Klasse bekommt einen einfachen Namen und bekommt vernünftige Werte als Argumente. Intern rechnet dann jede Klasse die Argumente in die Script Makro Argumente um und liefert durch eine Funktion getCode() oder sonst wie den fertigen Makroteil als String.
+
* <strike>'''Stable''': [http://files.blase16.de/src/fnordlichtScripteditor_0.1.jar fnordlichtScripteditor 0.1] (2005-12-02)</strike>
 +
* '''Stable''' von Diozaka: [http://diozaka.org/downloads/fse-20061223.tar.gz Version 2006-12-23] ([http://diozaka.org/modules/fnordlicht.html Changelog])
  
Diese Objekte können wir dann zB in einen 2-dimensionalen Array schreiben der die Zeitleiste repräsentiert. 1 Element ist das Befehlsobjekt und das andere Element ist der Button oder das Feld oder was auch immer dann diesen Befehl auf der Zeitleiste darstellt. So könnte man dann nachher beim Generieren einfach den Array durchlaufen und von jedem Objekt den entsprechenden Makrocode anfordern und zusammensetzen.
+
== GUI ==
 +
http://diozaka.org/images/fse.jpg
  
: ''Alternativ kann man den Button auch als einen Parameter des Objektes abspeichern, dann reicht ein 1-dimensionales Array. Die innere Struktur der Klassen hängt dann vor allem auch vom Fnordlicht-Script-Dateiformat ab, damit es nicht zu kompliziert wird, die Sachen abzuspeichern und zu laden. Ein erster Entwurf ist unten...
+
== Koordination ==
: ''Mir kommt grad noch eine Idee: Es wäre vielleicht vorteilhaft, eine Klasse zu schreiben, die dann ein ganzes Fnordlicht-Script beinhaltet. Da könnte man dann außer dem Array noch ein paar Meta-Informationen speichern, wie z.B. ob das Script nach dem Ablauf stehen bleiben soll oder ob es wieder von anfang an laufen soll, etc. --Diozaka''
 
  
Evtl. würd ich auch wirlich erstmal den Simple Mode nach hinten schieben und mit 3 Leisten arbeiten, weil das erstmal schneller und einfacher ist und wir alle nicht viel Zeit haben.
+
* Klasse ''GUI'' übergibt die Daten bei jedem Klick auf ''Add'' an die Klasse ''Linker''
 +
* Klasse ''Linker'' erstellt für die Daten ein einzelnes Objekt von der Klasse ''Frame'' und schiebt es in ein Array (für jede Farbe getrennt).
  
Daher auch jetzt hier ein bisschen Koordination, weil wenn jeder ohne gemeinsame Struktur irgendwas zusammencoded ham wir alle nicht viel davon.
+
Menü:
  
Also ich würde mich bereit erklären, die Wrapperklassen für die Makros zu schreiben, evtl mit Diozaka zusammen.
+
* GUI ruft über ''Save'' die Methode parseToXML der Klasse ''Linker'' auf - diese wiederum den XMLParser
: ''Bin dabei. :D --Diozaka''
+
* GUI ruft über ''Open'' die Methode loadFrame der Klasse ''Linker'' auf - diese dann die Methoden parseFromXML und getFrameMemory
 +
* GUI ruft über ''Export'' die Methode parseToMacro der Klasse ''Linker'' auf - diese den MacroParser.
  
Soweit von mir, awaiting feedback..
 
  
Timo aka manuke
+
== Dateiformat, in XML ==
 
 
== Dateiformat, tabellenartig (deprecated) ==
 
 
 
''Blase16 hat den Vorschlag gemacht, XML zu benutzen. Find ich gut, also ist das hier erstmal deprecated. --Diozaka''
 
 
 
Hier also eine erste Idee für das Dateiformat, Verbesserungen sind natürlich höchst willkommen.
 
 
 
 
 
=== Definition ===
 
 
 
Das Dateiformat basiert auf fünf Spalten:
 
 
 
* '''channel:''' 0, 1 oder 2 (rot, grün oder blau)
 
* '''time:''' Der Startzeitpunkt der Aktion
 
* '''fade:''' Die Länge des Fades (muss kleiner oder gleich $duration sein, 0 bedeuted kein Fade)
 
* '''duration:''' Die Dauer der Aktion (in Sekunden)
 
* '''brightness:''' Die Helligkeit der Farbe
 
 
 
Zeilen, die mit # anfangen, sind Kommentare.
 
 
 
Am besten versteht man das wohl mit einem Beispiel:
 
 
 
=== Beispiel-Datei ===
 
# channel  time  fade  duration  brightness
 
# -------------------------------------------
 
 
# the red thread:
 
    0      0    20      20        255
 
    0      20    20      20          0
 
# stops after 40 secs
 
 
# the green thread:
 
    1      0      5      10        255
 
    1      10    10      10          0
 
    1      0      5      10        255
 
    1      10    10      10          0
 
# stops after 40 secs
 
 
# the blue thread:
 
    2      0      0      40        128
 
# stops after 40 secs
 
 
 
=== Erklärungen zum Beispiel ===
 
Am besten erstmal selber versuchen, die Sache zu verstehen, dann weiterlesen. ;)
 
 
 
Der rote Kanal fadet innerhalb von 20 sec zu Helligkeit 255 und
 
fadet dann direkt wieder zu Helligkeit 0, auch innerhalb von 20 sec.
 
 
 
Der grüne Kanal fadet innerhalb von 5 sec zu Helligkeit 255, hält
 
diese Helligkeit dann weitere 5 sec und fadet dann innerhalb von 10
 
sec wieder zurück zu Helligkeit 0. Das Ganze zweimal nacheinander.
 
 
 
Der blaue Kanal wird direkt (ohne Fade) auf Helligkeit 128 gesetzt und bleibt
 
dann 40 sec lang auf dieser Helligkeitsstufe.
 
  
--Diozaka
+
Hier unser Dateiformat für die Scripts.
  
== Dateiformat, in XML ==
+
=== Elemente ===
  
XML ist sehr wahrscheinlich einfacher zu lesen und zu parsen, also hier eine Idee in XML.
+
* '''<fnordlicht>'''
 +
: ''Attribute:'' (keine)
 +
: ''Erläuterung:'' Ist das Wurzelement.
  
=== Ein XML Beispiel (Blase16) ===
+
* '''<channel>'''
 +
: ''Attribute:'' color
 +
:: color: Gibt den Farbkanal an, kann entweder ''red'', ''green'' oder ''blue'' sein.
 +
: ''Erläuterung:'' Muss (Kann nur?) insgesamt dreimal vorkommen, enthält die einzelnen Frames für einen Farbkanal.
  
Das obige Script hier als XML.
+
*'''<frame />'''
 +
: ''Attribute:'' fade, duration, brightness
 +
:: fade: Die Länge des Fades (muss kleiner oder gleich ''duration'' sein, 0 bedeuted kein Fade, Angabe in Sekunden).
 +
:: duration: Die Gesamtdauer des Frames (in Sekunden).
 +
:: brightness: Die Helligkeit der Farbe (0-255).
 +
: ''Erläuterung:'' Repräsentiert eine Farb-Aktion.
  
<? xml version="1.0" ?>
+
--Blase16 & Diozaka
<fnordlicht>
 
<channel>
 
<red time="0" fade="20" duration="20" brightness="255" />
 
<red time="20" fade="20" duration="20" brightness="0" />
 
</channel>
 
<channel>
 
<green time="0" fade="5" duration="10" brightness="255" />
 
<green time="10" fade="10" duration="10" brightness="0" />
 
<green time="0" fade="5" duration="10" brightness="255" />
 
<green time="10" fade="10" duration="10" brightness="0" />
 
</channel>
 
<channel>
 
<blue time="0" fade="0" duration="40" brightness="128"/>
 
</channel>
 
  <fnordlicht>
 
  
=== Erläuterungen ===
+
=== DTD ===
  
* '''<fnordlicht>''' Ist das Wurzelement
+
Das hier müsste die passende DTD zur Beschreibung sein:
* '''<channel>''' Das <channel> Element muss drei mal innerhalb des Wurzelelements vorkommen.
 
*'''<red />''' ('''<green /> <blue />''') Besitzt die Atributte '''time''', '''fade''', '''duration''' und '''brightness'''.
 
**'''time:''' Der Startzeitpunkt der Aktion
 
** '''fade:''' Die Länge des Fades (muss kleiner oder gleich $duration sein, 0 bedeuted kein Fade)
 
** '''duration:''' Die Dauer der Aktion (in Sekunden)
 
** '''brightness:''' Die Helligkeit der Farbe
 
  
--Blase16
+
<pre>
 +
<!ELEMENT fnordlicht    (channel+)>
 +
<!ELEMENT channel      (frame+)>
 +
<!ATTLIST channel      color  (red|green|blue)+      #REQUIRED>
 +
<!ELEMENT frame        EMPTY>
 +
<!ATTLIST frame        fade            CDATA  #REQUIRED
 +
                        duration        CDATA  #REQUIRED
 +
                        brightness      CDATA  #REQUIRED>
 +
</pre>
  
=== Noch ein XML-Beispiel (Diozaka) ===
+
=== Beispiel ===
  
 
  <?xml version="1.0" ?>
 
  <?xml version="1.0" ?>
Line 175: Line 108:
 
  <frame fade="0"  duration="40" brightness="128"/>
 
  <frame fade="0"  duration="40" brightness="128"/>
 
  </channel>
 
  </channel>
   <fnordlicht>
+
   </fnordlicht>
 +
 
 +
 
 +
== Makefile ==
 +
 
 +
Diese drei Zeilen zum Makefile hinzufügen:
 +
 
 +
script-%:
 +
        sed -i '$$D' fnordlicht.asm   
 +
        echo ".include \"$@\"" | sed -e 's/script-//' >> fnordlicht.asm                               
 +
 
 +
Hierdurch wird die letzte Zeile in fnordlicht.asm (das static script) gelöscht und das Script eingefügt, das hinter script- angegeben wird.
 +
 
 +
 
 +
== Known Bugs ==
 +
 
 +
Keine. :)
  
''Time-Attribut entfernt, die Frames werden einfach chronologisch abgearbeitet.''
 
  
Ohne Erläuterung...
+
[[Category:U23 2005]]

Latest revision as of 22:05, 23 July 2007

Beschreibung

Ein Editor, mit dem man sich ganz einfach Scripts für das Fnordlicht zusammenklicken kann. Dabei kann man für jeden Farbkanal (RGB) getrennt so genannte Frames einfügen. In einem Frame wird gespeichert, wie lange eine bestimmte Helligkeit gehalten werden soll, ob es einen Fade zu dieser Helligkeit geben soll und wie lange dieser Fade dauern soll. Die drei Farbkanäle kann man dann in einem XML-Dateiformat abspeichern, damit man sie auch später noch bearbeiten kann.

Aus dem Programm heraus können dann die Assembler-Makros generiert werden, die (mit der modifizierten Makefile) ganz einfach in die Fnordlicht-Firmware einkompiliert werden können.

Noch nicht implementierte Funktionen

  • Durchsichtige Blöcke (bzw. in der Farbe des Hintergrundes), wenn Brightness = 0
  • Zeitleise (in sec)


Interfaces

Zu finden im Quellcode.


Quellcode

Hier kommt der Quellcode von den einzelnen Modulen hin.

ACHTUNG: VERALTET

Releases

GUI

http://diozaka.org/images/fse.jpg

Koordination

  • Klasse GUI übergibt die Daten bei jedem Klick auf Add an die Klasse Linker
  • Klasse Linker erstellt für die Daten ein einzelnes Objekt von der Klasse Frame und schiebt es in ein Array (für jede Farbe getrennt).

Menü:

  • GUI ruft über Save die Methode parseToXML der Klasse Linker auf - diese wiederum den XMLParser
  • GUI ruft über Open die Methode loadFrame der Klasse Linker auf - diese dann die Methoden parseFromXML und getFrameMemory
  • GUI ruft über Export die Methode parseToMacro der Klasse Linker auf - diese den MacroParser.


Dateiformat, in XML

Hier unser Dateiformat für die Scripts.

Elemente

  • <fnordlicht>
Attribute: (keine)
Erläuterung: Ist das Wurzelement.
  • <channel>
Attribute: color
color: Gibt den Farbkanal an, kann entweder red, green oder blue sein.
Erläuterung: Muss (Kann nur?) insgesamt dreimal vorkommen, enthält die einzelnen Frames für einen Farbkanal.
  • <frame />
Attribute: fade, duration, brightness
fade: Die Länge des Fades (muss kleiner oder gleich duration sein, 0 bedeuted kein Fade, Angabe in Sekunden).
duration: Die Gesamtdauer des Frames (in Sekunden).
brightness: Die Helligkeit der Farbe (0-255).
Erläuterung: Repräsentiert eine Farb-Aktion.

--Blase16 & Diozaka

DTD

Das hier müsste die passende DTD zur Beschreibung sein:

<!ELEMENT fnordlicht    (channel+)>
<!ELEMENT channel       (frame+)>
<!ATTLIST channel       color   (red|green|blue)+       #REQUIRED>
<!ELEMENT frame         EMPTY>
<!ATTLIST frame         fade            CDATA   #REQUIRED
                        duration        CDATA   #REQUIRED
                        brightness      CDATA   #REQUIRED>

Beispiel

<?xml version="1.0" ?>
<fnordlicht>
	<channel color="red">
		<frame fade="20" duration="20" brightness="255" />
		<frame fade="20" duration="20" brightness="0" />
	</channel>
	<channel color="green">
		<frame fade="5"  duration="10" brightness="255" />
		<frame fade="10" duration="10" brightness="0" />
		<frame fade="5"  duration="10" brightness="255" />
		<frame fade="10" duration="10" brightness="0" />
	</channel>
	<channel color="blue">
		<frame fade="0"  duration="40" brightness="128"/>
	</channel>
 </fnordlicht>


Makefile

Diese drei Zeilen zum Makefile hinzufügen:

script-%:
       sed -i '$$D' fnordlicht.asm    
       echo ".include \"$@\"" | sed -e 's/script-//' >> fnordlicht.asm                                

Hierdurch wird die letzte Zeile in fnordlicht.asm (das static script) gelöscht und das Script eingefügt, das hinter script- angegeben wird.


Known Bugs

Keine. :)