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