Lire un port com en C
Fermé
Master_Chang
Messages postés
32
Date d'inscription
mercredi 7 août 2013
Statut
Membre
Dernière intervention
15 octobre 2014
-
Modifié par Master_Chang le 15/10/2014 à 16:50
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 9 nov. 2014 à 14:00
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 9 nov. 2014 à 14:00
A voir également:
- Lire un port com en C
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire epub - Guide
- Nettoyer port usb c - Accueil - Téléphones
- Waptric com - Télécharger - Divers TV & Vidéo
- Hotmail.fr ou .com - Forum Hotmail / Outlook.com
1 réponse
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
9 nov. 2014 à 14:00
9 nov. 2014 à 14:00
Bonjour
Il n'y a pas vraiment de commande à faire dans une terminale Windows et l'interfacer avec ton application voir même bidouille pour rediriger le flux vers ton application ou de l'inverse.
Le mieux a faire est d'écrire une fonction qui va te permettre de communiquer directement avec le matériel en question donc, tu dois implémenter plus ou moins une interface "causète" avec ton matériel qui doit prendre:
-> l'adresse du port série
-> la vitesse d'écriture et une variable "buffer" pour écrire les commandes et les réceptionner.
Bref, cela donnerait un exemple ci-dessous que je poste et qui n'est pas optimiser le reste des instructions s'est à toi de le faire selon tes besoins et documente-toi sur la structure "termios" pour vraiment savoir ce que tu veux faire car mon exemple est utilisé pour une application perso donc certains paramètres de configuration du "termios" me sont utiles pour mon application mais pas forcement les tiennes.
à bientôt
Il n'y a pas vraiment de commande à faire dans une terminale Windows et l'interfacer avec ton application voir même bidouille pour rediriger le flux vers ton application ou de l'inverse.
Le mieux a faire est d'écrire une fonction qui va te permettre de communiquer directement avec le matériel en question donc, tu dois implémenter plus ou moins une interface "causète" avec ton matériel qui doit prendre:
-> l'adresse du port série
-> la vitesse d'écriture et une variable "buffer" pour écrire les commandes et les réceptionner.
Bref, cela donnerait un exemple ci-dessous que je poste et qui n'est pas optimiser le reste des instructions s'est à toi de le faire selon tes besoins et documente-toi sur la structure "termios" pour vraiment savoir ce que tu veux faire car mon exemple est utilisé pour une application perso donc certains paramètres de configuration du "termios" me sont utiles pour mon application mais pas forcement les tiennes.
à bientôt
//libC #include <stdio.h> #include <stdlib.h> //Système #include <unistd.h> #include <termios.h> #include <sys/fcntl.h> #define BUFF 1024 //Fonction connexion void f_ConnexionCom( const char *pCom, const unsigned Baud ){ int flag = 0; struct termios OldT; struct termios NewT; flag = open( pCom, O_RDWR|O_NOCTTY ); if( flag <= 0 ){ printf( "*\tImpossible d'ouvrir le port série\n" ); printf( "*\tAssurer vous que vous avez les droits administrateurs\n" ); perror( "*\tEtat Erreur" ); exit( EXIT_FAILURE ); } /** * Sauvegarde & Creation d'une * nouvelle termios à utiliser **/ tcgetattr( flag, &OldT ); tcgetattr( flag, &NewT ); //Config du termios personaliser (&NewT)->c_iflag = IGNBRK; (&NewT)->c_oflag = 0L; (&NewT)->c_lflag = 0L; (&NewT)->c_cc[VMIN] = 1; (&NewT)->c_cc[VTIME] = 0; (&NewT)->c_cflag |= CREAD; (&NewT)->c_cflag &=~ ( CSIZE|PARENB|CSTOPB|CRTSCTS ); (&NewT)->c_cflag |= CS8; (&NewT)->c_cflag |= CLOCAL; (&NewT)->c_iflag &=~ ( IXON|IXOFF|IXANY ); //Configuration de Baudrate exemple 19200 cfsetispeed( &NewT, Baud ); cfsetospeed( &NewT, Baud ); tcsetattr( flag, TCSANOW, &NewT ); tcflush( flag, TCIFLUSH ); //Allocation variable de commande char *pCmd = (char*)calloc( BUFF, sizeof(char) ); if( pCmd == NULL ){ perror( "Impossible de d'initialiser la variable de commande\n" ); exit( EXIT_FAILURE ); } /** * Envoie de commande sur * le port série/Com * pas optimiser la condition de * sorti ( à refaire ) **/ do{ int ret; //Envoie de la commande printf( "Entrer votre commande\t: "); scanf( "%c", pCmd ); printf("\n"); //Lecture des informations ret = write( flag, pCmd, sizeof(pCmd) ); if( ret ){ printf( "# Attente de lecture.....\n"); ret = read( flag, pCmd, 1 ); if( ret ){ printf("=>Reçut\t:%s\n", pCmd ); pCmd = 0; } if( ret <= 0 ){ printf( "\n *\tAucune donné reçut\n" ); return; } } }while( *pCmd != '@'); //condition de sortie bidon /** * Désalocation & Restitution du * Termios initiale **/ free( pCmd ); tcsetattr( flag, TCSANOW, &OldT); close( flag ); } //Fonction principale int main( void ){ /** * Attention ici j'utilise le terminal * Ctrl+Alt+F1 sous UNIX pour faire ce teste * et je le déconseil. utiliser addr de * votre port serie et assurer vous d'être en mode "su" **/ f_ConnexionCom("/dev/tty1", 19200 ); return ( EXIT_SUCCESS ); }