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

  FORUM HardWare.fr
  Programmation
  C

  Valeur d'une broche d'un port série

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Valeur d'une broche d'un port série

n°1483494
Profil sup​primé
Posté le 29-11-2006 à 09:31:44  answer
 

Bonjour à tous,
je cherche le moyen de savoir quand un évènement est levé suite au passage d'un courant sur la broche Ring Indicator d'un port série.
 
Je suis sous Linux et en fait j'ai un device USB vu par l'OS comme une liaison série. Cet équipement a un bouton, qui est reporté sur le RI de la liaison série. Comment je fais en C pour savoir quand on appuie sur le bouton de l'équipement ? J'ai trouvé des exemples pour lire tout ce qui passe sur le port série (en mode caractères) mais pas comment avoir la valeur d'une broche particulière.
 
J'ai bien pensé à ça :
 
int fd, status, RI;
ioctl(fd, TIOCMGET, &status);
RI = status & TIOCM_RNG;
 
ou bien :
ioctl(fd, TIOCMIWAIT, TIOCM_RNG);
pour savoir si la broche a changé de statut mais je ne vois pas comment l'utiliser ensuite.
 
En fait mon problème maintenant c'est comment faire pour qu'à tout moment dans mon code si la borne RI passe à 1 un certain code se déclenche. vous feriez ça comment ? Si quelqu'un avait un lien vers un tuto sur la prog évènementielle en C ça m'aiderait.
 
Merci.

mood
Publicité
Posté le 29-11-2006 à 09:31:44  profilanswer
 

n°1483592
rufo
Pas me confondre avec Lycos!
Posté le 29-11-2006 à 11:19:06  profilanswer
 

processus // avec des wait() et signal() je pense.

n°1483678
Profil sup​primé
Posté le 29-11-2006 à 12:46:15  answer
 

Là je suis parti pour faire 2 processus :
- le fils boucle sur la détection de la broche du port série et se termine quand la valeur que je cherche est détectée.
- le père fait son boulot normal. J'ai mis un traitement sur le signal SIGCHLD. Quand le fils se termine, SIGCHLD est émis et récupéré par le père qui fait alors un autre boulot. Ca devrait marcher.
 
Par contre après la mort du fils, j'ai plus rien qui vérifie le port série. Si la valeur rechange je ne le sais pas. il faudrait que lorsque le fils se termine, le traitement du signal SIGCHLD recrée un fils. Et là je bloque ...

n°1483682
tbp
Posté le 29-11-2006 à 12:59:25  profilanswer
 
n°1483686
Profil sup​primé
Posté le 29-11-2006 à 13:12:09  answer
 

Oui j'avais pensé à le faire avec une file de messages dans laquelle le fils écrit et que lit le père. Mais y a des choses que je ne comprend pas avec ce genre de système : je veux un système totalement asynchrone, où un certain traitement est effectué par le père quand le fils lui indique qu'il a détecté quelque chose sur la broche du port série. Donc si je me contente de faire envoyer un message par le fils, le père va devoir boucler en lecture sur la file de message. Alors qu'avec un signal c'est asynchrone. Et comme je ne pense pas qu'il y ait de signaux déjà existants pour ce que je veux faire, j'ai fait avec SIGCHLD.
 
Ou alors je suis totalement à côté de la plaque  :cry:

n°1483696
tbp
Posté le 29-11-2006 à 13:27:53  profilanswer
 

Le principe avec les docs, c'est de les lire. Surprenant, hein?
 
Même si celle que j'ai lié est particulierement vielle, je l'ai fait parce qu'elle présente, en partie, l'éventail des IPC. Les possiblités abondent: scruter de la mémoire partagée, fifo et O_NONBLOCK, sémaphores sys V et IPC_NOWAIT... j'en passe et des meilleurs.
 
Lire un bouquin sur la programation système serait un plus à ce stade.

n°1483697
Profil sup​primé
Posté le 29-11-2006 à 13:33:04  answer
 

Merci je l'ai lu la doc. La prog système j'en ai fait y a des années mais ça m'a tellement passionné que j'ai tout oublié. Et là je suis obligé d'en refaire.
Je dois être trop bête, parce que dans ce que tu m'as gentiment indiqué, je ne comprend pas ce qui pourrait me servir pour faire un truc où le processus père reçoit un évènement déclencheur d'une certaine tâche. Mais je vais retourner m'esquinter les yeux dessus c'est pas grave.


Message édité par Profil supprimé le 29-11-2006 à 13:47:53
n°1483723
rufo
Pas me confondre avec Lycos!
Posté le 29-11-2006 à 14:04:19  profilanswer
 


 
pourquoi tuer le processus fils? Il peut simplement émetteur un signal particulier au processus père lorsqu'il détecte la valeur recherchée et poursuivre la boucle pour détecter la prochaine valeur recherchée.

n°1483727
Profil sup​primé
Posté le 29-11-2006 à 14:07:15  answer
 

C'est exactement ce que je cherche à faire !  :pt1cable:  
Je fermais le processus fils par facilité (ça balance SIGCHLD d'office) alors que là je dois envoyer un signal moi-même et je ne sais plus faire, tout bêtement. J'ai beau relire le man de signal() et sigaction() je ne comprend pas comment faire.

n°1483732
franceso
Posté le 29-11-2006 à 14:11:07  profilanswer
 

man 2 kill
 
sinon, pense aux signaux SIGUSR1 et SIGUSR2 qui là pour être utilisés comme signaux spécifiques à ton application.


---------------
TriScale innov
mood
Publicité
Posté le 29-11-2006 à 14:11:07  profilanswer
 

n°1483735
rufo
Pas me confondre avec Lycos!
Posté le 29-11-2006 à 14:13:44  profilanswer
 

franceso a écrit :

man 2 kill
 
sinon, pense aux signaux SIGUSR1 et SIGUSR2 qui là pour être utilisés comme signaux spécifiques à ton application.


 
c'est à eux que je pensais. Et dans le processus père, faut avoir un wait(SIGUSR1) (ou truc du genre, je me souviens plus le nom de la fonction)

n°1483736
Profil sup​primé
Posté le 29-11-2006 à 14:13:50  answer
 

OK merci beaucoup je vais faire avec ça  :)

n°1484272
Profil sup​primé
Posté le 30-11-2006 à 13:22:37  answer
 

Le code ioctl(fd, TIOCMGET, &status) me renvoit un "Invalid argument" ... ça dit quelque chose à quelqu'un ?

n°1484357
franceso
Posté le 30-11-2006 à 15:11:56  profilanswer
 

ton fd est bien un descripteur de fichier valide ?


---------------
TriScale innov
n°1484380
Profil sup​primé
Posté le 30-11-2006 à 15:30:58  answer
 

Je me demande justement ... vu que ce que je fais s'interconnecte avec un autre code qui m'a été fourni et que le descripteur de fichier m'est donné comme variable "extern" ... je cherche de ce côté là.


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

  Valeur d'une broche d'un port série

 

Sujets relatifs
Collection triée, avec iterateur et clé/valeur ?VBA - Worksheet_Change ancienne valeur de la cellule
Programmation en C pour liason série[VB/VBA/VBS] Supprimer une valeur du registre qui fini par "\"
[resolu] Valeur de pointeur en assembleurCherche un valeur dans une ligne et retourne la position de la cellule
Identifier une valeurBoucle pour traiter série de fichiers dans un ordre
Copier la valeur d'une cellule à intervals réguliers...?Donner comme valeur a une variable le mot d'un fichier .txt
Plus de sujets relatifs à : Valeur d'une broche d'un port série


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