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
`static int` `FREQUENCY_DEFAULT` Default-Taktfequenz in Hz.
`static int` `FREQUENCY_MAX` Maximale Taktfrequenz.
`static int` `FREQUENCY_MIN` Minimale Taktfrequenz.

### Constructor Summary

Constructors
`FlickerRenderer​(java.lang.String code)` ct.

### Method Summary

All Methods Instance Methods Concrete Methods
`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.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

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

### 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 zwischen `FREQUENCY_MIN` und `FREQUENCY_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=schwarz
  `b2` - Balken 2. true=weiss, false=schwarz
  `b3` - Balken 3. true=weiss, false=schwarz
  `b4` - Balken 4. true=weiss, false=schwarz
  `b5` - 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.