Page suivante - Page précédente - Table des matières

13. Quelques applications intéressantes

13.1 Un numéroteur

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 :

  • au préalable, ouvrir le port série (/dev/cua<n>), le configurer. Le mieux est de prendre exemple sur ce que fait getty ;
  • envoyer ensuite les commandes AT d'initialisation puis de numérotation (utiliser la fonction chat()) qui fait ceci très bien ;
  • enfin se mettre en lecture sur le port afin de détecter les messages émis par le modem. Le seul problème ici est qu'il sera difficile d'attendre certains d'entre-eux (NO ANSWER, TIMEOUT) étant donné qu'il faut prévenir l'utilisateur qu'il peut décrocher.

Par contre les messages NO DIALTONE (modem pas branché), et BUSY sont fort intéressants et permettent d'informer l'utilisateur immédiatement.

13.2 modemstat et compagnie

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.

13.3 Un détecteur de signal 109 (CD)

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


Page suivante - Page précédente - Table des matières