Package org.kapott.hbci.manager
Class FlickerRenderer
java.lang.Object
org.kapott.hbci.manager.FlickerRenderer
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 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
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.final void
start()
Startet das Rendering des Flicker-Codes.final void
stop()
Stoppt das Rendern.final void
waitFor()
Kann verwendet werden, um den Aufrufer-Thread solange zu pausieren, bis "stop()" aufgerufen wurde.
-
Field Details
-
FREQUENCY_DEFAULT
public static final int FREQUENCY_DEFAULTDefault-Taktfequenz in Hz. Soll laut tan_hhd_uc_v14.pdf, Kapitel C.1 zwischen 2 und 20 Hz liegen.- See Also:
-
FREQUENCY_MIN
public static final int FREQUENCY_MINMinimale Taktfrequenz.- See Also:
-
FREQUENCY_MAX
public static final int FREQUENCY_MAXMaximale Taktfrequenz. Laut Spec. sind die Geraete bis 20 Hz zugelassen, viele koennen aber schneller.- See Also:
-
halfbyteid
private int halfbyteid -
clock
private int clock -
bitarray
-
thread
-
iterations
private int iterations -
freq
private int freq
-
-
Constructor Details
-
FlickerRenderer
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 invalid input: '&'invalid input: '&' flicker.length() > 0) { MyFlickerRenderer = new FlickerRenderer(flicker) { // hier paint() ueberschreiben }; }
-
-
Method Details
-
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.
-