Class FlickerRenderer

java.lang.Object
org.kapott.hbci.manager.FlickerRenderer

public class FlickerRenderer extends 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 List<int[]>
     
    private int
     
    private int
     
    static final int
    Default-Taktfequenz in Hz.
    static final int
    Maximale Taktfrequenz.
    static final int
    Minimale Taktfrequenz.
    private int
     
    private int
     
    private Thread
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    ct.
  • Method Summary

    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.
    final void
    Startet das Rendering des Flicker-Codes.
    final void
    Stoppt das Rendern.
    final void
    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 Details

    • 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:
    • FREQUENCY_MIN

      public static final int FREQUENCY_MIN
      Minimale Taktfrequenz.
      See Also:
    • 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:
    • halfbyteid

      private int halfbyteid
    • clock

      private int clock
    • bitarray

      private List<int[]> bitarray
    • thread

      private Thread thread
    • iterations

      private int iterations
    • freq

      private int freq
  • Constructor Details

    • FlickerRenderer

      public FlickerRenderer(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 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 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.