LINUX - Problème de gestion voie serie avec ecran tactile

LINUX - Problème de gestion voie serie avec ecran tactile - C - Programmation

Marsh Posté le 11-01-2005 à 02:05:16    

Bonjour,
J'ai un petit souci concernant le vidage du flux de données d(une voie serie sous Linux
 
Je résume le problème :
 
J'ai une machine linux (debian) et j'ai un tactile de chez Elotouch de branché dessus.
 
Le driver de chez EloTouch à l'air de fonctionner correctement mais le problème de calibration quand a lui présente quelques bugs.
 
La calibration se fait en mode console et on va lire les coordonnées du point taper sur /dev/ttyS0.
 
Le programme fonctionne si l'on ne touche pas a l"ecran avant de lancer le programme. Mais si l'on remplit le flux de la /dev/ttyS0 (un appuie sur l'ecran = 2 à 3 trame de 10 caractères envoyer), le programme valide automatiquement des coordonées qui ne sont pas forcément les bonnes.
 
Pour etre plus clair sur le programme (en gros)
 
- Ouverture de la voie serie
- Init du terminal (console)
- boucle pour valider 3 angles à taper
  - appel de la fonction d'affichage Croix (génération de croix à l'ecran)
  - Capture de la trame (trame commencant par un 'U' et 10 caractères de long)
  - Libération buffer et Descripteur de fichier
-fermeture voie serie
- fermeture terminal
 
Le probleme c'est que si j'utilise :
while (!feof(DesFich))
{
   read = fgetc (Desfich);
}
Il reste bloquer dans la boucle en attendant que j'appuie sur l'écran pour vider la /dev/ttyS0, il n'arrive pas à voir la fichier de fichier pour sortir de la boucle
 
et si j'utilise un fread, a priori il n'arrive pas a me valider mon
read = malloc (char*)..... il me retourne etat NULL
 
et meme un fflush ne fonctionne pas, j'ai toujours les coordonnees qui traine.
A priori la boucle de capture des caractères de trame est bonne mais vu que pour un simple appuie, le tactile balance au moins 2 ou 3 trame, le programme garde les trames qui suivent en mémoire pour les coordonnées des autres points.
 
Merci d'avance de vos réponse.

Reply

Marsh Posté le 11-01-2005 à 02:05:16   

Reply

Marsh Posté le 11-01-2005 à 04:34:52    

je  :sleep:  déja mais essaye de poster un peu plus de code en utilisant les balises, sinon peut-être ça à la place ?

Code :
  1. int c;
  2. while(c = fgetc(Desfich) != EOF) ...


 
enfin quelqun t'aideras demain  :sleep:  :sleep:  :sleep:


Message édité par push le 11-01-2005 à 14:03:18
Reply

Marsh Posté le 11-01-2005 à 13:51:01    

tu pense que ca pourrait venir de ma variable "c", moi dans le prog elle est defini en "char"

Reply

Marsh Posté le 11-01-2005 à 14:01:41    

de toute facon ça doit être un int sinon tu risques d'avoir des problèmes un jour ou l'autre mais ton soucis vient peut-être du feof enfait, en testant la valeur de retour du fgetc toi même ça arrange rien ?
 
enfin se que j'en dis  :sleep:

Reply

Marsh Posté le 11-01-2005 à 14:18:16    

Le probleme s'est que cette methode je l'ai déja testé de cette facon:
 
read = fgetc (DesFich);
while (read != EOF)
{
    read = fgetc (DesFich);
}
et ça fait le meme resultat.
Je vais poster du code dans la soiree, tu pourras me dire ce qui te choque.
Je te remercie

Reply

Marsh Posté le 11-01-2005 à 15:45:25    

Romux a écrit :

Le probleme s'est que cette methode je l'ai déja testé de cette facon:


read = fgetc (DesFich);
while (read != EOF)
{
    read = fgetc (DesFich);
}


et ça fait le meme resultat.


Ce code est correct à condition que 'read' soit de type int.
 
La façon de coder habituelle est :


   int read;
 
   while ((read = fgetc (DesFich)) != EOF)
   {
      /* traiter 'read' */
   }


Message édité par Emmanuel Delahaye le 11-01-2005 à 15:46:25

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 11-01-2005 à 16:34:33    

Merci je vais essayer avec ça mais bon c'est un prog pour mon boulot et le probleme c'est que sur mon portable pas de voie serie .... sniff

Reply

Marsh Posté le 11-01-2005 à 17:43:10    

Romux a écrit :

Merci je vais essayer avec ça mais bon c'est un prog pour mon boulot et le probleme c'est que sur mon portable pas de voie serie .... sniff


On trouve sur le marché des adaptateurs USB/V.24 pilotables du PC comme un port série...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 12-01-2005 à 03:29:08    

merci bcp je vais me rencarder de ça. je vais poster du code demain.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed