Ho intrapreso un viaggio sulla comunicazione con la porta seriale. L'inizio è stato subito fantastico, poi il primo problema ed è un paio di giorni che ci sbatto il muso e non ho capito come risolvere il problema:
package com.marktech.seriale;
import com.fazecast.jSerialComm.*;
import com.sun.xml.internal.stream.writers.UTF8OutputStreamWriter;
import java.io.*;
import java.nio.CharBuffer;
public class Main {
public static void main(String[] args) {
// mi prendo la porta
SerialPort comPort = SerialPort.getCommPorts()[0];
//apro la comunicazione con un DCE3 (roba vecchia)
comPort.setBaudRate(600);
comPort.setParity(7);
comPort.openPort();
// do un occhio se effettivamente è la porta (unica) che ho scelto per la connessione
System.out.println(comPort.getDescriptivePortName());
comPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 100, 0);
InputStream in = comPort.getInputStream();
InputStreamReader inputStreamReader;
OutputStream out = comPort.getOutputStream();
try
{
System.out.println(comPort.isOpen());
// comando per ottenere l'help della macchina
String datiDaInviare = new String("at&h");
out.write(datiDaInviare.getBytes());
char invio = 13; // carattere invio
out.write(invio);
try {
inputStreamReader = new InputStreamReader(in);
int data = inputStreamReader.read();
System.out.println(inputStreamReader.getEncoding());
while(data != -1) {
System.out.print((char) data);
data = inputStreamReader.read();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
//
}
in.close();
} catch (Exception e) { e.printStackTrace(); }
comPort.closePort();
}
}
ed ottego:
"C:\Program Files\Java\jdk1.8.0_60\bin\java" -Didea.launcher.port=7532 "-Didea.launcher.bin.path=C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 14.1.5\bin" -Dfile.encoding=windows-1252 -classpath "C:\Program Files\Java\jdk1.8.0_60\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\access-bridge.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\zipfs.jar;C:\Users\11617466\Google Drive\Programmazione Java\ProgrammazioneMarcoAlberto\Seriale_02\out\production\Seriale_02;C:\Users\11617466\Google Drive\Programmazione Java\ProgrammazioneMarcoAlberto\Seriale_02\Dipendenze\jSerialComm-1.3.11.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 14.1.5\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.marktech.seriale.Main
Prolific USB-to-Serial Comm Port (COM3)
true
Cp1252
át¦è?¡lj-K©j-K©j-K©j-K©j-K©j-K©j-K©j-K©j-K©j-K©j-K©j-Kij
P?ÓÁ:“i,/…íx½îVë.#i3…â<¥cxk
P?ÓÅ:“i,/…íx½îVë.ke{K¥ú¿txk
P?» '›…l_txÞi½îVë.?¡Q¦(Ò ÔÅ&½î¯Íó S×2 k
c¡Q¦Ò Z?•rVc¬+ +t«tY?• ÷³??¡Q¦.Ó Z?•rVc¬+ +t«tY?• ”éƒ3k
P?kÁ:o^k• +t«tY?• Š 3k
P?kÅ:o^k• +t«tY?• P* c¡Q¦rÒ U› Î? k
P?K±'³Å3{Æ?¡Q¦)Ò Õ Î? k
P?[Å:³Í¸{Æ?¡Q¦:Ò ¸K?õZ×±ª ÖKé.{N k
P?“±'i®Õi×±ª Z?•rVc¬+ c¡Q¦8Ò ¸K?õZ×±º ÖKé.{N k
P?±'i®Õi×±º Z?•rVc¬+ c¡Q¦*Ò ¸K?õZױἋ¥tx× c¡Q¦ªÓ ¸K?õZ×±äZ¾âZ+Ñ.?¡Q¦Ò ¸K?õZ×±[Ἃ¥tx× c¡Q¦Ó ¸K?õZ×±[äZ¾âZ+Ñ.
c¥©j-K©j-K©j-K©j-K©j-KœŠWÒS¸©j-K©j-K©j-K©j-K©j-K¥L?ájava.io.IOException: Underlying input stream returned zero bytes
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:288)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at sun.nio.cs.StreamDecoder.read0(StreamDecoder.java:127)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:112)
at java.io.InputStreamReader.read(InputStreamReader.java:168)
at com.marktech.seriale.Main.main(Main.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Process finished with exit code 0
Al di la dell'errore finale, che poi sistemo, i caratteri come si evince dalla stampa sono in formato cp1252, come si fa per trasformare tutto in unicode?