13. Quelques applications intéressantes

Contenu de cette section

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~:

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


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre