Difference between revisions of "U23 2005/Scripteditor"

From C4 Wiki
Jump to: navigation, search
(Arbeitsschritte)
(Interfaces)
Line 45: Line 45:
  
 
== Interfaces ==
 
== Interfaces ==
 +
* LinkerI
 +
<pre>
 +
interface LinkerI {
 +
/*
 +
* Globale Variable:
 +
* ArrayList[] Framememory Als ArrayList 0=Red, 1=Green, 2=Blue
 +
*
 +
*/
 +
public boolean createFrane(char c, int fade, int duration,int  brightnes);//und schreibt ihn in ein Array
 +
public boolean parseToXML(String FileName);//ruft den XMLParser mit dem Frame Array auf.(Frame[] Framememory=>XML)
 +
public ArrayList[] parseFromXML(String FileName);//ruft den XMLParser mit dem Frame Array auf.(XML->Frame[] Framememory)
 +
public boolean parseToMacro(String FileName);//ruft den MakroParser mit dem Frame Array auf.(Frame[] Framememory=>Macro)
 +
public ArrayList[] getFrameMemory();//ließt die globale Variable framememory raus.
 +
public ArrayList[] loadFrames();//ruft parseFromXML und getFrameMemory
 +
public boolean deleteLastFrame(int colour, int howOften);
 +
 +
}
 +
</pre>
 +
 +
* MacroParser
 +
* XMLParser
 +
* Frame
  
 
== GUI ==
 
== GUI ==

Revision as of 00:53, 11 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. Machen: diozaka, manuke. (fertig)
  • GUI entwerfen. (fertig, siehe unten)
  • GUI schreiben. Macht: Blase16
  • Linker (Interface siehe unten) : Blase 16
  • Macro-Parser: Script-Entwurf -> Assembler-Macros Macht: Diozaka manuke
  • XML-Parser & Dateiformat für Script-Entwürfe (.fs) definieren. (Erster Vorschlag, siehe unten): Macht tux.ICBlood
  • Frame Klasse: Blase16/Diozaka/manuke
  • DelfiGui: jabbawox
  • TextClient: mene
  • Makefile anpassen. (siehe oben) Macht: ??

Interfaces

  • LinkerI
interface LinkerI {
	/*
	* Globale Variable: 
	* ArrayList[] Framememory Als ArrayList 0=Red, 1=Green, 2=Blue
	*
	*/
	public boolean createFrane(char c, int fade, int duration,int  brightnes);//und schreibt ihn in ein Array
	public boolean parseToXML(String FileName);//ruft den XMLParser mit dem Frame Array auf.(Frame[] Framememory=>XML)
 	public ArrayList[] parseFromXML(String FileName);//ruft den XMLParser mit dem Frame Array auf.(XML->Frame[] Framememory)
	public boolean parseToMacro(String FileName);//ruft den MakroParser mit dem Frame Array auf.(Frame[] Framememory=>Macro)
	public ArrayList[] getFrameMemory();//ließt die globale Variable framememory raus.
	public ArrayList[] loadFrames();//ruft parseFromXML und getFrameMemory
	public boolean deleteLastFrame(int colour, int howOften);
	 
}
  • MacroParser
  • XMLParser
  • Frame

GUI

Unser erster Entwurf für den Simple-Mode

http://w8n.koeln.ccc.de/media/images/U23-ScriptGUI-Simple.png

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, 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

Dateiformat, in XML

XML ist sehr wahrscheinlich einfacher zu lesen und zu parsen, also hier eine Idee in XML.

Ein XML Beispiel (Blase16)

Das obige Script hier als XML.

<? xml version="1.0" ?>
<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

  • <fnordlicht> Ist das Wurzelement
  • <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

Noch ein XML-Beispiel (Diozaka)

<?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>

Time-Attribut entfernt, die Frames werden einfach chronologisch abgearbeitet.

Ohne Erläuterung...