Package org.kapott.hbci.manager
Class FlickerRenderer
- java.lang.Object
-
- org.kapott.hbci.manager.FlickerRenderer
-
public class FlickerRenderer extends java.lang.Object
Uebernimmt das Umwandeln eines Flicker-Codes in die blinkende Darstellung. Da wir hier in HBCI4Java ja keinen GUI-spezifischen Code (Swing, SWT, etc.) haben, uebernimmt die Klasse lediglich das Erzeugen der schwarzen und weissen Balken sowie das Timing. Sie ruft dann im Wiedergabe-Takt die Funktion paint() auf, die ueberschrieben werden muss, um dort dann das eigentliche Zeichnen der 5 Balken durchzufuehren. Die paint-Funktion wird so ca. 10-20 mal pro Sekunde aufgerufen, sollte die Ausgabe auf dem Bildschirm daher flott machen ;)
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.List<int[]>
bitarray
private int
clock
private int
freq
static int
FREQUENCY_DEFAULT
Default-Taktfequenz in Hz.static int
FREQUENCY_MAX
Maximale Taktfrequenz.static int
FREQUENCY_MIN
Minimale Taktfrequenz.private int
halfbyteid
private int
iterations
private java.lang.Thread
thread
-
Constructor Summary
Constructors Constructor Description FlickerRenderer(java.lang.String code)
ct.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
done(int iterations)
Wird immer dann aufgerufen, nachdem der Flicker-Code einmal komplett an den TAN-Generator uebertragen wurde.void
paint(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5)
Wird immer dann aufgerufen, wenn die 5 Balken der Flicker-Grafik aktualisiert werden sollen.void
setFrequency(int hz)
Legt die Taktfrequenz in Hz fest.void
start()
Startet das Rendering des Flicker-Codes.void
stop()
Stoppt das Rendern.void
waitFor()
Kann verwendet werden, um den Aufrufer-Thread solange zu pausieren, bis "stop()" aufgerufen wurde.
-
-
-
Field Detail
-
FREQUENCY_DEFAULT
public static final int FREQUENCY_DEFAULT
Default-Taktfequenz in Hz. Soll laut tan_hhd_uc_v14.pdf, Kapitel C.1 zwischen 2 und 20 Hz liegen.- See Also:
- Constant Field Values
-
FREQUENCY_MIN
public static final int FREQUENCY_MIN
Minimale Taktfrequenz.- See Also:
- Constant Field Values
-
FREQUENCY_MAX
public static final int FREQUENCY_MAX
Maximale Taktfrequenz. Laut Spec. sind die Geraete bis 20 Hz zugelassen, viele koennen aber schneller.- See Also:
- Constant Field Values
-
halfbyteid
private int halfbyteid
-
clock
private int clock
-
bitarray
private java.util.List<int[]> bitarray
-
thread
private java.lang.Thread thread
-
iterations
private int iterations
-
freq
private int freq
-
-
Constructor Detail
-
FlickerRenderer
public FlickerRenderer(java.lang.String code)
ct.- Parameters:
code
- der zu rendernde Flicker-Code. Er wird von HBCI4Java ueber den Callback NEED_PT_TA uebergeben. Etwa so: case HBCICallback.NEED_PT_TAN: String flicker = retData.toString(); if (flicker != null && flicker.length() > 0) { MyFlickerRenderer = new FlickerRenderer(flicker) { // hier paint() ueberschreiben }; }
-
-
Method Detail
-
setFrequency
public void setFrequency(int hz)
Legt die Taktfrequenz in Hz fest.- Parameters:
hz
- die zu verwendende Taktfrequenz. Es werden nur Werte zwischenFREQUENCY_MIN
undFREQUENCY_MAX
akzeptiert.
-
start
public final void start()
Startet das Rendering des Flicker-Codes. Die Funktion startet einen neuen Thread, kehrt also sofort zurueck. Da diese Funktion einen neuen Thread startet und somit sofort zurueckkehrt, kann es ggf. noetig sein, eine Warteschleife zu implementieren. Hierzu kann einfach die Funktion "waitFor()" aufgerufen werden. Sie pausiert solange, bis "stop()" augerufen wurde. Beispiel: FlickerRenderer renderer = new FlickerRenderer(meinCode) { public void paint(boolean b1,boolean b2,boolean b3,boolean b4,boolean b5) { // hier eigenen Code zum Rendern einbauen } public void done(int iterations) { // Nach 20 Uebertragungen hoeren wir auf. if (iterations > 20) stop(); } }; renderer.start(); renderer.waitFor(); System.out.println("Code uebertragen");
-
stop
public final void stop()
Stoppt das Rendern.
-
paint
public void paint(boolean b1, boolean b2, boolean b3, boolean b4, boolean b5)
Wird immer dann aufgerufen, wenn die 5 Balken der Flicker-Grafik aktualisiert werden sollen. Die 5 Boolean-Parameter legen die aktuell anzuzeigende Codierung fest. Die Default-Implementierung ist leer. Diese Funktion muss auf jeden Fall ueberschrieben werden. Sonst kriegt man keinen Flicker-Code.- Parameters:
b1
- Balken 1. true=weiss, false=schwarzb2
- Balken 2. true=weiss, false=schwarzb3
- Balken 3. true=weiss, false=schwarzb4
- Balken 4. true=weiss, false=schwarzb5
- Balken 5. true=weiss, false=schwarz
-
done
public void done(int iterations)
Wird immer dann aufgerufen, nachdem der Flicker-Code einmal komplett an den TAN-Generator uebertragen wurde. Die Funktion wird zum ersten Mal NACH der ersten Uebertragung aufgerufen und anschliessend nach jeder weiteren. Die Default-Implementierung ist leer. Fuer gewoehnlich wird die Funktion zur Darstellung nicht benoetigt. Sie kann aber zu Debugging-Zwecken verwendet werden oder zum automatischen Abbruch nach einer definierten Anzahl von Uebertragungen. Sie muss also nicht ueberschrieben werden. Die Funktion wird direkt im Flicker-Thread aufgerufen. Sie sollte daher auf keinen Fall irgendwas aufwaendiges machen, da das zum Ausbremsen der Flicker-Uebertragung fuehren wuerde.- Parameters:
iterations
- Anzahl der bisherigen Uebertragungen (beginnend bei 1 - da die Funktion ja erst nach der ersten Uebertragung aufgerufen wird)
-
waitFor
public final void waitFor()
Kann verwendet werden, um den Aufrufer-Thread solange zu pausieren, bis "stop()" aufgerufen wurde. Damit kann warten, bis die Uebertragung abgeschlossen ist.
-
-