c du win32 :-( je voudrais tester pour Linux (debian pour etre precis) en fait, j'ai deja fait un truc a l'aide d'un HOWTO
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> #include <stdio.h>
/* les valeurs pour la vitesse, baudrate, sont définies dans <asm/termbits.h>, qui est inclus dans <termios.h> */ #define BAUDRATE B38400 /* changez cette définition pour utiliser le port correct */ #define MODEMDEVICE "/dev/ttyS1" #define _POSIX_SOURCE 1 /* code source conforme à POSIX */
#define FALSE 0 #define TRUE 1
volatile int STOP=FALSE;
main() { int fd,c, res; struct termios oldtio,newtio; char buf[255]; /* On ouvre le périphérique du modem en lecture/écriture, et pas comme terminal de contrôle, puisque nous ne voulons pas être terminé si l'on reçoit un caractère CTRL-C. */ fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); if (fd <0) {perror(MODEMDEVICE); exit(-1); }
tcgetattr(fd,&oldtio); /* sauvegarde de la configuration courante */ bzero(&newtio, sizeof(newtio)); /* on initialise la structure à zéro */
/* BAUDRATE: Affecte la vitesse. vous pouvez également utiliser cfsetispeed et cfsetospeed. CRTSCTS : contrôle de flux matériel (uniquement utilisé si le câble a les lignes nécessaires. Voir la section 7 du Serial-HOWTO). CS8 : 8n1 (8 bits,sans parité, 1 bit d'arrêt) CLOCAL : connexion locale, pas de contrôle par le modem CREAD : permet la réception des caractères */ newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; /* IGNPAR : ignore les octets ayant une erreur de parité. ICRNL : transforme CR en NL (sinon un CR de l'autre côté de la ligne ne terminera pas l'entrée). sinon, utiliser l'entrée sans traitement (device en mode raw). */ newtio.c_iflag = IGNPAR | ICRNL; /* Sortie sans traitement (raw). */ newtio.c_oflag = 0; /* ICANON : active l'entrée en mode canonique désactive toute fonctionnalité d'echo, et n'envoit pas de signal au programme appelant. */ newtio.c_lflag = ICANON; /* initialise les caractères de contrôle. les valeurs par défaut peuvent être trouvées dans /usr/include/termios.h, et sont données dans les commentaires. Elles sont inutiles ici. */ newtio.c_cc[VINTR] = 0; /* Ctrl-c */ newtio.c_cc[VQUIT] = 0; /* Ctrl-\ */ newtio.c_cc[VERASE] = 0; /* del */ newtio.c_cc[VKILL] = 0; /* @ */ newtio.c_cc[VEOF] = 4; /* Ctrl-d */ newtio.c_cc[VTIME] = 0; /* compteur inter-caractère non utilisé */ newtio.c_cc[VMIN] = 1; /* read bloquant jusqu'à l'arrivée d'1 caractère */ newtio.c_cc[VSWTC] = 0; /* '\0' */ newtio.c_cc[VSTART] = 0; /* Ctrl-q */ newtio.c_cc[VSTOP] = 0; /* Ctrl-s */ newtio.c_cc[VSUSP] = 0; /* Ctrl-z */ newtio.c_cc[VEOL] = 0; /* '\0' */ newtio.c_cc[VREPRINT] = 0; /* Ctrl-r */ newtio.c_cc[VDISCARD] = 0; /* Ctrl-u */ newtio.c_cc[VWERASE] = 0; /* Ctrl-w */ newtio.c_cc[VLNEXT] = 0; /* Ctrl-v */ newtio.c_cc[VEOL2] = 0; /* '\0' */
/* à présent, on vide la ligne du modem, et on active la configuration pour le port */ tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio);
/* la configuration du terminal est faite, à présent on traite les entrées Dans cet exemple, la réception d'un 'z' en début de ligne mettra fin au programme. */ while (STOP==FALSE) { /* boucle jusqu'à condition de terminaison */ /* read bloque l'exécution du programme jusqu'à ce qu'un caractère de fin de ligne soit lu, même si plus de 255 caractères sont saisis. Si le nombre de caractères lus est inférieur au nombre de caractères disponibles, des read suivant retourneront les caractères restants. res sera positionné au nombre de caractères effectivement lus */ res = read(fd,buf,255); buf[res]=0; /* on termine la ligne, pour pouvoir l'afficher */ printf(":%s:%d\n", buf, res); if (buf[0]=='z') STOP=TRUE; } /* restaure les anciens paramètres du port */ tcsetattr(fd,TCSANOW,&oldtio); }
et quand je compile cette chose et que je l'execute, je met ma TI89 sur le port serie et je dis a la caltos d'envoyer qqch (au pif) sur le port serie, et ca deconne ... si ta une idée ;-) je prend :p merci A+
|