Cette idée va faire plaisir à Xavier CAZIN : c'est la sienne. Le mieux est de le laisser parler :
En fait, je trouverais très utile de cliquer sur un bouton pour appeler une personne retrouvée dans une base de données par exemple. Surtout si elle se trouve à l'étranger (minimum 12 chiffres depuis ici). Donc, ce que j'aimerais, ce sont les renseignements nécessaires au programmeur pour pouvoir construire un frontal qui demande au modem de composer le numéro choisi, puis affiche un message (si le poste n'est pas occupé) du style "Le téléphone sonne, prenez le combiné". Ces petites choses toutes simples demandent de comprendre ce que signifie prendre la ligne et la relâcher, pour un modem.
Excellent exercice. Alors avec tout ce que l'on vient de dire, au
travail :-)
. En laissant de côté la partie base
de données, l'algorithme à utiliser correspond à
l'organigramme d'un appel donné à titre
d'information au chapitre
Le modem, auquel il
faut rajouter :
/dev/cua<n>
), le configurer. Le mieux est de prendre
exemple sur ce que fait getty ;
Par contre les messages NO DIALTONE (modem pas branché), et BUSY sont fort intéressants et permettent d'informer l'utilisateur immédiatement.
Vous trouverez sur les serveurs ftp habituels quelques petits programmes permettant d'afficher l'état de la jonction. Vous pourrez vous intéresser particulièrement à la façon de récupérer les informations (plutôt que sur l'interface utilisateur qui est l'exemple même de ce qu'il ne faut pas faire).
/pub/linux/sunsite/system/Serial/modem-stats-1.0.tar.gz
/pub/linux/sunsite/system/Serial/statserial-1.1.tar.gz
/pub/linux/sunsite/system/Serial/modemstat-0.2.tgz
Un bon point pour statserial aussi simple que bien présenté, en mode texte.
Lu dans comp.os.linux.development.apps cette demande
Existe-t-il un utilitaire que je pourrais utiliser dans un shell-script et retournant une valeur, disons 1, si le signal Détection de porteuse est monté et 0 sinon ?
Le message ne dit pas quel en serait l'usage mais peu importe c'est un excellent exemple d'utilitaire assez facile à réaliser. Voici d'ailleurs un exemple de code source possible :
------------------------- debut de carrier.c ------------------------- #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <termios.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include <stdio.h> main(int argc, char *argv[]) { char *whoami, *device; int fd; int modem_bits; whoami = (whoami = strrchr(argv[0], '/')) ? whoami + 1 : argv[0]; if (argc != 2) { fprintf(stderr, "Usage: %s device-file\n", whoami); return(EXIT_FAILURE); } device = argv[1]; if ((fd = open(device, O_RDONLY | O_NDELAY)) < 0) { fprintf(stderr, "%s: error opening \"%s\": %s\n", whoami, device, strerror(errno)); return(EXIT_FAILURE); } if (ioctl(fd, TIOCMGET, & modem_bits) < 0) { fprintf(stderr, "%s: error getting modem line statuses for \"%s\": %s\n", whoami, device, strerror(errno)); return(EXIT_FAILURE); } if (modem_bits & TIOCM_CAR) { printf("1\n"); return(EXIT_SUCCESS); } printf("0\n"); return(EXIT_FAILURE); } ------------------------- fin de carrier.c -------------------------
On pourra ensuite l'utiliser dans un shell de la manière suivante :
if [ `carrier /dev/modem` -eq 1 ]; then ... choses a faire si la porteuse est detectee ... else ... choses a faire s'il n'y a pas de porteuse ... fi