Utilisation javax.comm -> java.io.IOException: Erro getting StatusFlags in call to io
Bonjour à tous,
j'ai réalisé un programme qui établit une communication avec le port Série (en utilisant l'API javax.comm).
cette communication effectue une écriture et une attente de réponse sur ce port.
tout tourne parfaitement bien en faisant tourner le soft sur windows (dans ce cas j'initialise un Wind32Driver avant d'ouvrir le port, mais je rencontre un probleme lorsque je porte ce code sur linux...
j'enlève bien entendu l'initialisation de cet objet Win32Driver et je remplace le nom du port par le /dev/tty correspondant, le port est bien trouvé à priori mais pendant l'ouverture j'ai l'erreur suivante:
Code:
1 2 3 4 5
|
Exception in thread "Thread-29" java.io.IOException: Erro getting StatusFlags in call to ioctl(TIOCMGET)
at com.sun.comm.LinuxSerial.nativeGetStatusFlags(Native Method)
at com.sun.comm.LinuxSerial.access$1500(LinuxSerial.java:14)
at com.sun.comm.LinuxSerial$SSCheckStatusThread.run(LinuxSerial.java:649) |
et voici le bout de code qui effectue l'ouverture du port:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
System.setSecurityManager(null);
//recuperation du port de COM dans le fichier de conf
String com = EMIConfig.getUsbPort();
try{
// ouverture du port serie:
log.debug("Ouverture du port "+com);
portId=CommPortIdentifier.getPortIdentifier(com);
serialPort=(SerialPort)portId.open(EMIConfig.getLogin(),2000);
//parametrage du port
serialPort.notifyOnDataAvailable(true);
// on selectionne tous les parametres de la connexion serie:
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
//ajout du listener
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {
}
in = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
out = serialPort.getOutputStream();
try {
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException ex) {
log.debug("Erreur de Setting de Parametres: "+ex.toString());
ready = USB_Not_Ready;
}
ready = USB_Ready;
}
catch (javax.comm.PortInUseException ex){
log.debug("Port en cours d'utilisation: "+ex.toString());
ready = USB_Not_Ready;
try{
serialPort.close();
}catch(Exception e){
if (log.isDebugEnabled()) {
log.debug("Toujours Occupe."+e.toString());
} else {
log.error(e, e);
}
ready = USB_Not_Ready;
}
}
catch (Exception e){
if (log.isDebugEnabled()) {
log.debug("Probleme d'ouverture de port.", e);
ready = USB_Not_Ready;
} else {
log.error(e, e);
}
ready = USB_Not_Ready;
}
if(ready == USB_Ready){
log.debug("port USB ouvert");
USBState = comUSBConstants.USB_READY;
}
else
log.debug("Erreur d'ouverture de port");
}//fin constructeur |
donc le port de COM s'ouvre bien (mais avec l'exception citée plus haut) et lors de la premiere ecriture sur le port il se ferme et je n'arrive plus à le réouvrir derrière...
avec vous une idée ?
Merci,
Tiamat.