Celine788
Messages postés5Date d'inscriptionlundi 26 juin 2006StatutMembreDernière intervention28 juin 2006
-
26 juin 2006 à 21:15
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023
-
28 juin 2006 à 23:16
Bonjour à tous,
diabétique depuis quelques années, je cherche à me développer une application en JAVA pour me personnaliser mes suivis de glycémie (plus avantageusement que le logiciel fourni par le fabriquant du lecteur).
J'utilise le lecteur de glycémie One Touch Ultra et la communication s'effectue grâce à un cable qui relie le lecteur au PC via le port série (RS 232).
J'ai trouvé sur le site de LifeScan (le fabriquant), les spécifications techniques sur la communication avec le lecteur que je résume ci-dessous : «
Cable: Connect LifeScan Interface cable to an available serial/com port on the computer. Insert the
LifeScan Interface cable plug into the ONE TOUCH® Ultra data port that is located at the
bottom of the meter.
Software: Select port settings in communications software: Baud Rate 9600 bps Data Bits 8 Stop Bits 1 Parity none Flow Control None Com Port port # utilized
Set the Caps lock to "ON" on your keyboard and type a "DM?" command to wake up the Meter. The Meter should display "PC". The Meter is now ready to communicate with
your computer. You may now issue the following commands to upload and erase the results stored in the Meter's memory.
· DM? : send the Meter's software version and date
· DM@ : send the Meter's serial number
· DMF : send date and time from the Meter's clock
· DMP : upload blood and control records from the Meter's memory
· DMSU'x' : set or display the glucose Units
· DMST'x' : set or display the Time format (AM/PM or 24hr)
· DMTmm/dd/yy hh:mm[:ss] : set the date and Time of the Meter's clock
· DMZ : zero the Meter's data log
Serial commands and responses are encoded as ASCII characters. A checksum is generated for all messages and the hexadecimal representation of the least significant 16 bits of the checksum (a
blank followed by 4 characters) is placed at the end of each response message, just before the carriage return (<CR>), line feed (<LF>) pair.
The following conditions must be met to enable the LifeScan Interface Cable to work with the ONE
TOUCH® Ultra Meter:
1. The computer must assert (apply a positive RS-232 voltage to) RTS and/or DTR. Either or
both of these signals supply power to the cable circuitry.
2. The computer may leave RTS "open" but may not drive it to a negative RS-232 level.
3. The computer communications port must be set to 9600 baud, 8 data bits, no parity, and one
stop bit. »
J'ai écrit le code JAVA suivant pour essayer de réveiller le lecteur : «
public void init() {
Win32Driver w32Driver = new Win32Driver();
SerialPort portSerie = null;
// initialisation du port
w32Driver.initialize();
portInitialise = true;
// ouverture du port "COM1"
portId = CommPortIdentifier.getPortIdentifier("COM1");
portSerie = (SerialPort)portId.open("GlucoMeter", 2000);
// paramétrage du port
portSerie.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
// récupération du flux de lecture
BufferedReader fluxLecture = new BufferedReader( new
InputStreamReader(portSerie.getInputStream()) );
// ajout d'un flux d'écriture
OutputStream fluxEcriture = portSerie.getOutputStream();
// ajout du listener
portSerie.addEventListener(this);
// TENTATIVE DE COMMUNICATION AVEC LE LECTEUR char debut = 17;
oneTouch.sendMessage(debut + "\rDMS\r\r");
public void serialEvent(SerialPortEvent event) {
System.out.println("Je reçois un début de signal...");
// gestion des événements sur le port :
// on ne fait rien sauf quand les données sont disponibles
switch (event.getEventType()) {
case SerialPortEvent.BI : System.out.println("message lu BI == BREAK"); break;
case SerialPortEvent.OE : System.out.println("message lu OE"); break;
case SerialPortEvent.FE : System.out.println("message lu FE"); break;
case SerialPortEvent.PE : System.out.println("message lu PE"); break;
case SerialPortEvent.CD : System.out.println("message lu CD"); break;
case SerialPortEvent.CTS : System.out.println("message lu CTS"); break;
case SerialPortEvent.DSR : System.out.println("message lu DSR");break;
case SerialPortEvent.RI : System.out.println("message lu RI"); break;
case SerialPortEvent.OUTPUT_BUFFER_EMPTY : System.out.println("message lu VIDE"); break;
case SerialPortEvent.DATA_AVAILABLE : System.out.println("Message disponible : ");
try {
maChaine = new String(fluxLecture.readLine());
System.out.println("chaine reçu : " + maChaine);
} catch (Exception e) {
System.out.println("impossible de lire la ligne...");
e.printStackTrace();
}
break;
}
}
}
public void sendMessage(String s) {
try {
fluxEcriture.write(s.getBytes());
System.out.println("Message suivant envoyé : " + s);
} catch (IOException e) {
System.out.println("Erreur lors de l'envoi du message : " +
e.getMessage());
}
} ».
Lorsque j'exécute le code ci-dessus, il ne se passe rien ; mon lecteur refuse de se réveiller et d'afficher "PC" pour commencer la communication. Je me suis alors décidé à utiliser les logiciels
Serial Sniffer AX DEMO 2.0, HHD Serial Monitor, Serial Monitor Professionnal pour espionner le logiciel fourni par LifeScan qui fonctionne bien avec mon cable.
Je me suis ainsi aperçu :
- la commande pour réveiller le lecteur n'est pas "DM?" comme écrit dans la specification mais "DMS"
- les commandes sont précédés du caractère numéro : 17
Mais en envoyant exactement les mêmes données au lecteur de glycémie que le logiciel fourni par Lifescan, mon lecteur refuse de s'allumer.
Il doit y avoir un problème sur le mode de communication ?
Y-aurait-il une erreur sur la spécification au niveau de la vitesse, du controle de flux de données, du nombre de bits d'arret ..etc ? Auriez-vous une idée et comment pourrais-je détecter d'où viens le
problème ?
De plus, le logiciel Serial Monitor Professionnal m'a donné une information supplémentaire :
- avec le logiciel de LifeScan, durant la communication, on a :
* RTS et DTR qui sont verts, c'est à dire au niveau haut du signal ;
* CTS, DSR, DCD, RI sont gris, indiquant un état de la ligne non déterminé pour le moment.
- avec ma classe JAVA (cf. ci-dessus), on a durant la communication :
* RTS et DTR qui sont verts, c'est à dire au niveau haut du signal ;
* CTS, DSR, DCD, RI sont ROUGES, indiquant un niveau bas du signal.
Comment dois-je faire pour que ces capteurs soient considérés comme "non déterminé pour le moment" ???
Merci beaucoup pour votre aide.
Mille bisous à tous.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 27 juin 2006 à 09:49
Salut,
Simple question et avec un hyper terminal tu y arrive au moins???? je
pose cette question pasque avant d'investiguer il serait plus judicieux
de savoir si le problème viens vraiment de ton code...un truc que tu
fais ou que tu ne fais pas... (sinon apriori le code semble être bon).
------------------------------------
On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ...
Celine788
Messages postés5Date d'inscriptionlundi 26 juin 2006StatutMembreDernière intervention28 juin 2006 27 juin 2006 à 14:17
Foub, qu'as-tu voulu dire ?
Oui, je crois qu'HyperTerminal permet de dialoguer avec le port série.
Je vais essayer de chercher de ce côté-là...
Merci pour vos réponses !
perso je fais toujours un test avec minicom avant de faire le test avec
un de mes codes afin de ne pas perdre mon temps a me dire "ca
vient de mon code ou pas?".
------------------------------------
On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ...
WORA
Vous n’avez pas trouvé la réponse que vous recherchez ?
Celine788
Messages postés5Date d'inscriptionlundi 26 juin 2006StatutMembreDernière intervention28 juin 2006 27 juin 2006 à 14:47
Le logiciel fourni par One Touch Ultra fonctionne parfaitement donc on peut penser que cela vient de la configuration de la connexion au port série.
Comment puis-je détecter l'état, l'activation au niveau du port série utilisée par l'application On Touch Ultra ?
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 27 juin 2006 à 15:59
Mais il fonctionne bien avec un hyperterm? ou il fonctionne simple bien?
tu veux tester l'état comment? tu utilise qu'elle api pour la com.
rs232 c'elle de sun (qui merdouille à mort avec xp (sauf si ils ont
corrigé depuis (5mois mes derniers test avec)) ou tu utilise une api
proprio et dans ce cas merci de donner un lien du site pour regarder ce
que c'est (sinon pour win xp j'utilise serialio qui est payante mais m'a permit de piloter à 100% un routeur cisco via une appli java).
------------------------------------
On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ...