Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1732 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [API Javax Comm] Lire Port COM sur evenement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[API Javax Comm] Lire Port COM sur evenement

n°1547797
DaVe73
Posté le 24-04-2007 à 09:02:54  profilanswer
 

Bonjour à tous!
J'utilise dans un programme java l'API javax.comm pour lire des infos venant d'un recepteur gps USB (détecté sur un port série virtuel).
Etant donné que le numéro du port COM attribué au recepteur GPS peut changer et que l'utilisateur du programme ne doit pas s'occuper de ça, je scanne tous les ports série et test si il y a des datas format NMEA (trames du recepteur GPS) qui arrivent du port COM en question. (Je n'ai pas trouver mieux!)
Donc j'essaye de faire une lecture du port série sur évènements comme dans le tutoriel :  
http://christophej.developpez.com/ [...] mm/#L2.3.3
 
J'ai juste un petit souci maintenant : j'arrive bien a trouver mon recepteur GPS mais mon prog plante une fois les trames lues! Je crois que le prog reste bloqué dans la structure switch qui gère les évènements du port série!

Code :
  1. import javax.comm.*;
  2. import java.util.*;
  3. import java.math.*;
  4. import java.net.*;
  5. import com.sun.comm.Win32Driver;
  6. import java.io.*;
  7. public class testCOM implements SerialPortEventListener {
  8.     private String portCOM;
  9.     private CommPortIdentifier portID = null; //identifiant du port
  10.     private SerialPort serialPort; //le port série
  11.     private BufferedReader fluxLecture; //flux de lecture du port
  12. /*
  13.  * Methode qui initialise le port série en evenementiel
  14.  */
  15. public void ModeEvenement(String portCOM) {
  16.  //récupération de l'identifiant du port
  17.  try {
  18.   portID = CommPortIdentifier.getPortIdentifier(portCOM);
  19.  } catch (NoSuchPortException e) {
  20.  }
  21.  //ouverture du port
  22.  try {
  23.   serialPort = (SerialPort) portID.open("ModeEvenement", 2000);
  24.  } catch (PortInUseException e) {
  25.  }
  26.  //récupération du flux
  27.  try {
  28.   fluxLecture =
  29.    new BufferedReader(
  30.     new InputStreamReader(serialPort.getInputStream()));
  31.  } catch (IOException e) {}
  32.  //ajout du listener
  33.  try {
  34.   serialPort.addEventListener(this);
  35.  } catch (TooManyListenersException e) {
  36.  }
  37.  //paramétrage du port
  38.  serialPort.notifyOnDataAvailable(true);
  39.  try {
  40.   serialPort.setSerialPortParams(
  41.    4800,
  42.    SerialPort.DATABITS_8,
  43.    SerialPort.STOPBITS_1,
  44.    SerialPort.PARITY_NONE);
  45.  } catch (UnsupportedCommOperationException e) {}
  46.  System.out.println("port ouvert, attente de lecture" );
  47. }
  48.    
  49.     /*
  50.      * Methode qui effectue la lecture de 7 trames sur le port série
  51.      * Une fois la lecture faite on ferme le flux de lecture et le port COM
  52.      */
  53.     public void ReadSerialPort(){
  54.      int i=7;
  55.      String reponse = new String();
  56.  try {
  57.   System.out.println("i="+i);
  58.   while(i!=0){
  59.    System.out.println("On lit sur le port COM\n" );
  60.    reponse = (String) fluxLecture.readLine();
  61.    System.out.println(reponse);
  62.    i--;
  63.    System.out.println("i="+i);
  64.   }
  65.  } catch (IOException e) {}
  66.  //fermeture du flux de lecture
  67.  try {
  68.   fluxLecture.close();
  69.  } catch (IOException e) {}
  70.  //fermeture du port COM
  71.  serialPort.close();
  72. }
  73. public void serialEvent(SerialPortEvent event) {
  74.  //gestion des événements sur le port :
  75.  //on ne fait rien sauf quand les données sont disponibles
  76.    switch (event.getEventType()) {
  77.   case SerialPortEvent.DATA_AVAILABLE :
  78.    this.ReadSerialPort();//si data dispo on lance la lecture
  79.    break;
  80.   default:
  81.    break;//on ne fait rien pour les autres evenements
  82.  }
  83. }
  84.    
  85.     /*
  86.      * Methode qui scanne tous les ports COM et test si des données viennent du port COm scanné
  87.      */
  88. public void listPort(){
  89.  Enumeration listePorts = CommPortIdentifier.getPortIdentifiers();
  90.  int typePort;
  91.  String GPSPortCOM;
  92.  while (listePorts.hasMoreElements()){
  93.   portID = (CommPortIdentifier) (CommPortIdentifier) listePorts.nextElement();
  94.   if(portID.getPortType()==CommPortIdentifier.PORT_SERIAL){   
  95.       System.out.println("Nom du PORT :"+portID.getName());
  96.       System.out.println("User :"+portID.getCurrentOwner());
  97.       System.out.println("Use ? :"+portID.isCurrentlyOwned());
  98.       System.out.println("Type du PORT :"+portID.getPortType());
  99.       // On lance la gestion des évènements sur portID
  100.    this.ModeEvenement(portID.getName());
  101.   }
  102.  }
  103. }
  104. public static void main(String[] args) {
  105.  //initialisation du driver
  106.  Win32Driver w32Driver = new Win32Driver();
  107.  w32Driver.initialize();
  108.  testCOM test = new testCOM();
  109.  test.listPort();
  110. }
  111. }


 
Je ne sais pas si j'ai été assez clair! Mais si quelqu'un a une idée je suis preneur!!!
Merci d'avance.

mood
Publicité
Posté le 24-04-2007 à 09:02:54  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [API Javax Comm] Lire Port COM sur evenement

 

Sujets relatifs
[PHP] Comment lire un fichier depuis la fin?Lire un fichier a l'envers
HTML et Java : lire une liste de MP3 à la suite les uns des autres.[debutant] evenement bouton + checkbox
Meilleure API pour récupérer les couvertures de livresDétecter évenement "Nouveau message" dans Access 2000
Piloter son port USBLire un fichier BMP pixel par pixel
[Réseaux]+[wxWidgets] bonne méthode pour scanner un port ?boucle + evenement + incrementer [NOOB]
Plus de sujets relatifs à : [API Javax Comm] Lire Port COM sur evenement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR