Class 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 ;)
    • 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.
      • 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
      • 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 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.