Difference between revisions of "U23 2005/Scripteditor"

From C4 Wiki
Jump to: navigation, search
(Elemente)
Line 142: Line 142:
 
''Wird aber erstmal nicht umgesetzt, wir konzentrieren uns auf den Expert-Mode. (Screenshot kommt noch)''
 
''Wird aber erstmal nicht umgesetzt, wir konzentrieren uns auf den Expert-Mode. (Screenshot kommt noch)''
  
http://w8n.koeln.ccc.de/media/images/U23-ScriptGUI-Simple.png
+
http://files.blase16.de/GUI.jpg
  
 
== Koordination ==
 
== Koordination ==

Revision as of 19:27, 13 November 2005

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 Beispiel:

1: Zeige mir 10 sec lang Rot an (ohne Fade)
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.

Ein Beispiel:

1: Der rote Kanal soll innerhalb von 15 sec auf volle Helligkeit und dann wieder innerhalb von 15 sec auf                                   
   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... --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 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. Zusätzliche Klasse, die einen Channel und eine Zeit bekommt und die aktuelle Farbe zurückgibt. Was man damit alles machen kann, kan sich jeder selbst ausdenken. manuke (in Arbeit)

Interfaces

  • LinkerI
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);
	 
}
  • MacroParserI
// Simpel, aber gut ;)
interface MacroParserI{
        /*
         * public MacroParserI(ArrayList[] _channels, String _filename);
         *
         */

        public boolean parse();
}
  • XMLParserI
interface XMLParserI{
        /*
         *
         * Ist das so in Ordnung? Ich habe noch nie mit Interfaces gearbeitet?
         *
         */
        //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);

        //Liefert boolean ob writeXML bzw readXML erfolgreich war
        public boolean success();
}
  • FrameI
interface FrameI{
        /*
         * public FrameI(char _color,
         *         int _fade,
         *         int _duration,
         *         int _brightness);
         *
         */

        public boolean setColor(char _color); // 'r', 'g' oder 'b'
        public boolean setFade(int _fade);
        public boolean setDuration(int _duration);
        public boolean setBrightness(int _brightness);

        public char getColor();
        public int getFade();
        public int getDuration();
        public int getBrightness();

        // Gibt true zurück, wenn das Frame erfolgreich erstellt werden konnte
        public boolean success();
}

GUI

Unser erster Entwurf für den Simple-Mode

Wird aber erstmal nicht umgesetzt, wir konzentrieren uns auf den Expert-Mode. (Screenshot kommt noch)

http://files.blase16.de/GUI.jpg

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. Die Klasse Frame ist nur Daten Container.(Link Interface)

Menue:

  • GUI ruft über save die Methode parseToXML in der Klasse Linker auf diese wiederum den XML-Parser.
  • GUI ruft oeffnen die Methode loadFrame in der Klasse Linker auf. Diese wiederum die Methode parseFromXML und getFrameMemory.
  • 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


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

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>