Des problèmes de réception dans RXTX

J'ai été en utilisant RXTX pour environ un an maintenant, sans trop de problèmes. Je viens de commencer un nouveau programme d'interagir avec un nouveau morceau de matériel, donc j'ai réutilisé la méthode connect() je l'ai utilisé sur mes autres projets, mais j'ai un problème bizarre je n'ai jamais vu avant.

Le Problème

L'appareil fonctionne très bien, parce que lorsque je me connecte avec HyperTerminal, j'ai envoyer et de recevoir ce que j'attends, et Serial Port Monitor(SPM) est le reflet.

Cependant, lorsque je lance le simple HyperTerminal-clone que j'ai écrit pour diagnostiquer le problème, je vais avoir avec mon application principale, les octets sont envoyés, selon SPM, mais rien n'est reçu, et mon SerialPortEventListener se déclenche jamais. Même quand je vérifier la disponibilité de données dans la boucle principale, reader.ready() retourne false. Si je ignorer cette case, puis-je obtenir une exception, les détails ci-dessous.

Section pertinente de la méthode connect ()

//Configure and open port
port = (SerialPort) CommPortIdentifier.getPortIdentifier(name)
                                      .open(owner,1000)
port.setSerialPortParams(baud, databits, stopbits, parity);
port.setFlowControlMode(fc_mode);
final BufferedReader br = new BufferedReader(
                            new InputStreamReader(
                              port.getInputStream(), 
                              "US-ASCII"));

//Add listener to print received characters to screen
port.addEventListener(new SerialPortEventListener(){
  public void serialEvent(SerialPortEvent ev) {
    try {
      System.out.println("Received: "+br.readLine());
    } catch (IOException e) { e.printStackTrace(); }
  }   
});
port.notifyOnDataAvailable();

Exception

java.io.IOException: Underlying input stream returned zero bytes
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:268)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
        at java.io.InputStreamReader.read(InputStreamReader.java:167)
        at java.io.BufferedReader.fill(BufferedReader.java:136)
        at java.io.BufferedReader.read(BufferedReader.java:157)
        at <my code>

La grande question (encore une fois)

Je pense que j'ai éliminé tous les problèmes matériels possibles, de sorte que ce qui pourrait être mal avec mon code, ou le RXTX bibliothèque?

Edit: quelque chose d'intéressant

Quand j'ouvre HyperTerminal après l'envoi d'un tas de commandes à partir de java qui aurait obtenu de réponses, toutes les réponses s'affichent immédiatement, comme s'ils avaient été mis dans le tampon quelque part, mais pas disponible.

Edit 2: je l'ai Essayé quelque chose de nouveau, les mêmes résultats

J'ai couru l'exemple de code trouvé ici, avec les mêmes résultats. Aucune donnée n'est venu, mais quand je suis passé à un nouveau programme, il est venu tout à la fois.

Modifier 3

Le matériel est très bien, et même un autre ordinateur a le même problème. Je ne suis pas à l'aide de l'adaptateur USB.

J'ai commencé à utiliser PortMon, trop, et c'est me donner quelques résultats intéressants. HyperTerminal et RXTX ne sont pas en utilisant les mêmes paramètres, et RXTX toujours sondages le port, à la différence de l'HyperTerminal, mais je ne vois toujours pas quels sont les paramètres qui pourraient affecter ce. Dès que je peux isoler la configuration à partir de la constante d'interrogation, je vais poster mon PortMon journaux.

Edition 4

Est-il possible qu'une certaine sorte de mise à jour de Windows dans les 3 derniers mois pourrait avoir causé cela? Il a foutu un de mes MATLAB mex programmes basés sur une fois.

Modifier 5

J'ai aussi remarqué certaines choses qui sont différentes entre HyperTerminal, RXTX, et d'un autre programme que j'ai trouvé qui communique avec l'appareil (mais ne pas faire ce que je veux, c'est pourquoi je continue mon propre programme)

  • HyperTerminal - définissez pas de contrôle de flux, mais Serial Port Monitor de la RTS et DTR indicateurs sont au vert
  • Autre programme ne savez pas quels paramètres il pense que c'est à l'aide, mais seulement de SPM RTS indicateur est vert
  • RXTX, peu importe ce que le contrôle de flux-je mettre, seulement de SPM CTS et DTR indicateurs sont sur.

De Serial Port Monitor fichiers d'aide (paraphrasé):

the indicators display the state of the serial control lines

  RTS - Request To Send
  CTS - Clear To Send
  DTR - Data Terminal Ready

OriginalL'auteur Nate Parsons | 2009-09-08