Newsgroup: it.comp.java
Titolo: Java comm

Sto provando a capire e a far funzionare le due classi java di esempio di
comunicazione con la seriale scaricate direttamente dalla sun. Essendo
abbastanza corto, posto per chiarezza il codice della classe di read in
calce.
Avrei due domande, se qualcuno può rispondermi.
1) La classe in oggetto compilata ed eseguita sul mio tower funziona
benissimo. I due System.out.println che ho aggiunto mi danno la
configurazione delle mie porte e riesco a decodificare le stringhe che
ricevo sulla seriale. Faccio la stessa cosa su di un portatile (ibm
thinkpad 600E con windows 2000) e non mi vede le porte lpt1/2 e com1/2 e
(di conseguenza immagino) esce subito invece di restare in ascolto.
2) come faccio a "fermare" il Thread? sulla documentazione in rete c'è
scritto i metodi stop sono deprecati, ma non riesco a capire bene le
soluzioni alternative che danno
3) il Thread vorrei fermarlo perché restando in ascolto sulla porta mi
sembra che la "blocchi": è corretto? E' il Thread quello che mi resta in
sospeso quando eseguo la classe qui sotto, giusto? Io dovrei "parlare" con
una periferica in plc tramite la porta, quindi dovrei alternare un
outStream ad un inputStream: devo fermare il thread?
Poche idee e ben confuse   :o)))
Grazie a chi vorrà darmi delle delucidazioni ...
--------------------------------------------------------
import java.io.*;
import java.util.*;
import javax.comm.*;
public class SimpleRead implements Runnable, SerialPortEventListener {
    static CommPortIdentifier portId;
    static Enumeration portList;
    InputStream inputStream;
    SerialPort serialPort;
    Thread readThread;
    public static void main(String[] args) {
        portList = CommPortIdentifier.getPortIdentifiers();
        while (portList.hasMoreElements()) {
            portId = (CommPortIdentifier) portList.nextElement();
 
System.out.println("Tipo: " + portId.getPortType());
System.out.println("Nome: " + portId.getName());
 
            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                if (portId.getName().equals("COM1")) {
                // if (portId.getName().equals("/dev/term/a")) {
                    SimpleRead reader = new SimpleRead();
                }
            }
        }
    }
    public SimpleRead() {
        try {
            serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
        } catch (PortInUseException e) {}
        try {
            inputStream = serialPort.getInputStream();
        } catch (IOException e) {}
	try {
            serialPort.addEventListener(this);
	} catch (TooManyListenersException e) {}
        serialPort.notifyOnDataAvailable(true);
        try {
            serialPort.setSerialPortParams(9600,
                SerialPort.DATABITS_8,
                SerialPort.STOPBITS_1,
                SerialPort.PARITY_NONE);
        } catch (UnsupportedCommOperationException e) {}
        readThread = new Thread(this);
        readThread.start();
    }
    public void run() {
        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {}
    }
    public void serialEvent(SerialPortEvent event) {
        switch(event.getEventType()) {
        case SerialPortEvent.BI:
        case SerialPortEvent.OE:
        case SerialPortEvent.FE:
        case SerialPortEvent.PE:
        case SerialPortEvent.CD:
        	break;
        case SerialPortEvent.CTS:
        case SerialPortEvent.DSR:
        case SerialPortEvent.RI:
        case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
            break;
        case SerialPortEvent.DATA_AVAILABLE:
            byte[] readBuffer = new byte[20];
            try {
                while (inputStream.available() > 0) {
                    int numBytes = inputStream.read(readBuffer);
                }
                System.out.print(new String(readBuffer));
            } catch (IOException e) {}
            break;
        }
    }
}
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

