Difference between revisions of "U23 2005/Scripteditor"

From C4 Wiki
Jump to: navigation, search
(Interfaces)
(Releases: Das Zeug was bei mir lag war so was von veraltet! --Blase16 aka kalkin-)
 
(50 intermediate revisions by 28 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
 
: Ich auch... --[[User:Pylon|Pylon]] 13:43, 4 Nov 2005 (CET)
 
: 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'''
 
* Speichern der Script-Entwürfe in einem eigenen Dateiformat (z.B. '''.fs''' = fnordlicht Script)
 
* ...
 
 
== Arbeitsschritte ==
 
 
* Doku zu den [[U23 2005/Firmware Makros|Firmware Makros]] die für die Scripts benötigt werden: ''Diozaka, manuke.'' (fertig)
 
* GUI entwerfen. (fertig, siehe unten)
 
* GUI schreiben: ''Blase16''
 
* Linker (Interface siehe unten): ''Blase16''
 
* Macro-Parser: Script-Entwurf -> Assembler-Macros. ''Diozaka, manuke.'' (fertig)
 
* Dateiformat für Script-Entwürfe ('''.fs''') definieren. ''Diozaka, Blase16'' (fertig)
 
* XML-Parser: ''tux.ICBlood''
 
* Frame-Klasse. ''Blase16, Diozaka & manuke''
 
* DelfiGui: ''jabbawox''
 
* TextClient: ''mene''
 
* Makefile anpassen. (siehe oben) Macht: ??
 
* NEU: Fnordlicht-Simulator-Klasse. Interface siehe Unten... ''manuke'' (fertig)
 
  
 
== Interfaces ==
 
== Interfaces ==
* LinkerI
+
''Zu finden im Quellcode.''
<pre>
 
interface LinkerI {
 
/*
 
* Globale Variable:
 
* ArrayList[] Framememory Als ArrayList 0=Red, 1=Green, 2=Blue
 
*
 
*/
 
 
 
        // Erstellt ein Frame und schreibt es in ein Array
 
public boolean createFrame(char c, int fade, int duration, int brightness);
 
 
 
// Ruft den XMLParser mit dem Frame-Array auf. (Frame[] Framememory => XML)
 
        public boolean parseToXML(String FileName);
 
 
 
// Ruft den XMLParser mit dem Frame-Array auf. (XML => Frame[] Framememory)
 
        public ArrayList[] parseFromXML(String FileName);
 
 
 
// Ruft den MacroParser mit dem Frame-Array auf. (Frame[] Framememory => Macro)
 
        public boolean parseToMacro(String FileName);
 
 
 
// Liest die globale Variable framememory aus.
 
        public ArrayList[] getFrameMemory();
 
 
 
        // Ruft parseFromXML und getFrameMemory auf.
 
public ArrayList[] loadFrames();
 
 
 
public boolean deleteLastFrame(int colour, int howOften);
 
 
}
 
</pre>
 
 
 
* MacroParserI
 
<pre>
 
// Simpel, aber gut ;)
 
interface MacroParserI{
 
        /*
 
        * public MacroParserI(ArrayList[] _channels, String _filename);
 
        *
 
        */
 
 
 
        public boolean parse();
 
}
 
</pre>
 
 
 
* XMLParserI
 
<pre>
 
interface XMLParserI{
 
        /*
 
        *
 
        * Ist das so in Ordnung? Ich habe noch nie mit Interfaces gearbeitet?
 
        * -> Eine kleine Sache gibts da.
 
        *
 
        */
 
 
 
        // Erwartet Frames und Dateiname
 
        public void writeXML(ArrayList[] channels, String filename);
 
 
 
        // Liefert Frames (Im Array verpackt - [0] = rot, [1] = grün, [2] = blau) und erwartet den Dateinamen
 
        // public ArrayList readXML(String filename);
 
 
 
        // CHANGED: Die Funktion muss ein Array (mit 3 Elementen: rot, grün, blau) aus ArrayLists zurückgeben,
 
        // dann enthält jedes Element eben eine ArrayList gefüllt mit Frames.
 
        public ArrayList[] readXML(String filename);
 
  
        // Liefert boolean ob writeXML bzw readXML erfolgreich war
 
        public boolean success();
 
}
 
</pre>
 
  
* FrameI
+
== Quellcode ==
<pre>
+
Hier kommt der Quellcode von den einzelnen Modulen hin.
interface FrameI{
 
        /*
 
        * public FrameI(char _color,
 
        *        int _fade,
 
        *        int _duration,
 
        *        int _brightness);
 
        *
 
        */
 
  
        public boolean setColor(char _color); // 'r', 'g' oder 'b'
+
'''ACHTUNG:''' VERALTET
        public boolean setFade(int _fade);
 
        public boolean setDuration(int _duration);
 
        public boolean setBrightness(int _brightness);
 
  
        public char getColor();
+
* [http://manuke.gmxhome.de/scripteditor/Simulator.java Simulator.java] (Signatur folgt)
        public int getFade();
+
* [http://manuke.gmxhome.de/scripteditor/SimWindow.java SimWindow.java] (Signatur folgt)
        public int getDuration();
 
        public int getBrightness();
 
  
        // Gibt true zurück, wenn das Frame erfolgreich erstellt werden konnte
+
* [http://www.mene.biz/CMDEditor.java CMDEditor.java] (Text-Interface) -- mene
        public boolean success();
 
}
 
</pre>
 
  
* SimulatorI
+
* [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 ;-)
  
<pre>
+
== Releases ==
interface SimulatorI{
 
/*
 
* public SimulatorI(ArrayList _channel);
 
        *
 
*/
 
  
        // Gibt die Helligkeit des festgelegten Kanals zur Zeit _time zurück.
+
* <strike>'''Stable''': [http://files.blase16.de/src/fnordlichtScripteditor_0.1.jar fnordlichtScripteditor 0.1] (2005-12-02)</strike>
public int getBrightness(float _time);
+
* '''Stable''' von Diozaka: [http://diozaka.org/downloads/fse-20061223.tar.gz Version 2006-12-23] ([http://diozaka.org/modules/fnordlicht.html Changelog])
}
 
</pre>
 
  
 
== GUI ==
 
== GUI ==
Advanced Mode:
+
http://diozaka.org/images/fse.jpg
 
 
http://files.blase16.de/GUI.jpg
 
 
 
Der Simple Mode wird so wie er beschrieben wurde erstmal nicht umgesetzt.
 
Allerdings wird durch die Implementation des Simulators evtl eine gute Mischung aus beidem Erzeugt,
 
aber soweit sind wir noch nicht.
 
  
 
== Koordination ==
 
== Koordination ==
  
Advanced Mode:
+
* 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).
  
* Klasse GUI übergibt die Daten bei jedem Klick auf Add an die => Klasse Linker.
+
Menü:
* Klasse Linker erstellt für die Daten ein einzelnes Objekt von der Klasse Frame und schiebt es in ein Array. Die Klasse Frame ist nur  Daten Container.(Link Interface)
 
  
Menue:
+
* GUI ruft über ''Save'' die Methode parseToXML der Klasse ''Linker'' auf - diese wiederum den XMLParser
* GUI ruft über save die Methode parseToXML in der Klasse Linker auf diese wiederum den XML-Parser.
+
* GUI ruft über ''Open'' die Methode loadFrame der Klasse ''Linker'' auf - diese dann die Methoden parseFromXML und getFrameMemory
* GUI ruft oeffnen die Methode loadFrame in der Klasse Linker auf. Diese wiederum die Methode parseFromXML und getFrameMemory.
+
* GUI ruft über ''Export'' die Methode parseToMacro der Klasse ''Linker'' auf - diese den MacroParser.
* GUI ruft ueber exportieren die Methode parseToMacro in der Klasse Linker auf diese wiederum den Macro-Parser.
 
 
 
TextClient der das selbe macht wie die Gui
 
  
  
Line 204: Line 76:
  
 
--Blase16 & Diozaka
 
--Blase16 & Diozaka
 +
 +
=== DTD ===
 +
 +
Das hier müsste die passende DTD zur Beschreibung sein:
 +
 +
<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>
  
 
=== Beispiel ===
 
=== Beispiel ===
Line 223: Line 109:
 
  </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. :)
 +
 +
 +
[[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. :)