Announcement

Collapse
No announcement yet.

SerialPortEvent synchronisieren über Object.wait/notify()

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SerialPortEvent synchronisieren über Object.wait/notify()

    Ein Modem soll über COM1 bzw. /dev/cua/a angesprochen werden.

    Dazu wird ein Port mit Suns commapi geöffnet und so konfiguriert, daß
    die JVM, wenn was an der seriellen Leitung anliegt einen
    SerialPortEvent feuert

    port.notifyOnDataAvailable(true);

    Meine Klasse soll so funktionieren, daß sie den
    SerialPortEventListener implementiert und über das Eventmodel in der
    Methode
    public void serialEvent(SerialPortEvent event){...}
    auf den Event reagiert und den Datenstrom liest.

    Der Ablauf muss aber sequentiell sein. Also sende Befehl zur COM
    Schnittstelle,
    warte solange bis der Event gefeuert wurde, lese und mache erst dann
    mit dem nächsten Befehl weiter.

    Mein Problem ist wie synchronisieren ich "Sende Befehle und warte auf
    Antwort" mit dem "ich habe die Bytestrom gelesen und bin fertig" Teil.

    Mein Ansatz wäre so etwas hier:
    <PRE>
    class MyComHandler implements SerialPortEventListener ()
    StringBuffer response = new StringBuffer();
    Boolean lock = new Boolean(true);

    //...
    public String sendAT(String at){
    /* schreibe auf serielle Schnittstelle */

    // warte bis du notifiziert wirst
    // try chatch wegen lesbarkeit hier weg gelassen
    lock.wait(19 /*ms*/)
    return new String(response);
    }

    // ...
    public void serialEvent(SerialPortEvent event) {
    switch(event.getEventType()) {
    case SerialPortEvent.DATA_AVAILABLE:
    while (/* daten vorhanden */){
    // lese byte stream in response
    // StringBuffer ein
    }
    lock.notify(); // relase
    break;
    }
    } // end of class
    </PRE>

    Aber ich kenne mich mit den dem Thema Thread nicht so gut aus
    und weiss daher nicht wie die genaue Implementierung von
    object.wait()/notify()
    aussehen muss. Es wäre schön wenn es damit ginge.

    Danke
Working...
X