Sophie

Sophie

distrib > Mandriva > 9.0 > i586 > by-pkgid > 0d5cd12c82d627a82c59047e1ba7b8a9 > files > 778

howto-html-fr-9.0-0.2mdk.noarch.rpm

<HTML>
<HEAD>
<TITLE>Quelques applications int&eacute;ressantes</TITLE>
</HEAD>
<BODY>
<H1>13. <A NAME="s13"></A>Quelques applications int&eacute;ressantes</H1>
<P>
<A HREF="Modems-HOWTO.html#toc13">Contenu de cette section</A></P>

<P></P>
<P></P>
<H2>13.1 <A NAME="ss13.1"></A> Un num&eacute;roteur</H2>

<P></P>
<P>Cette id&eacute;e   va faire plaisir  &agrave; <I>Xavier CAZIN</I>~:
c'est la sienne. Le mieux est de le laisser parler~:</P>
<P>
<BLOCKQUOTE>
En fait,  je trouverais tr&egrave;s  utile  de cliquer  sur un bouton  pour
appeler une personne retrouv&eacute;e dans  une base de donn&eacute;es  par
exemple.  Surtout si elle se trouve  &agrave; l'&eacute;tranger (minimum 12
chiffres depuis ici).  Donc, ce que j'aimerais,  ce sont les renseignements
n&eacute;cessaires au  programmeur pour pouvoir  construire  un frontal qui
demande au   modem de composer le   num&eacute;ro choisi,  puis  affiche un
message  (si   le  poste   n'est   pas occup&eacute;)   du   style   "Le
t&eacute;l&eacute;phone  sonne, prenez le combin&eacute;".  Ces petites
choses toutes simples demandent  de comprendre ce  que signifie  prendre la
ligne et la rel&acirc;cher, pour un modem.
</BLOCKQUOTE>
</P>
<P>Excellent  exercice.   Alors  avec tout   ce que  l'on  vient de   dire, au
travail~<CODE>:-)</CODE>.  En laissant de c&ocirc;t&eacute; la partie base
de  donn&eacute;es,  l'algorithme  &agrave;  utiliser  correspond  &agrave;
<I>l'organigramme    d'un appel</I>    donn&eacute;      &agrave;   titre
d'information au chapitre 
<A HREF="Modems-HOWTO-4.html#sec-modems">Le modem</A>
, auquel il
faut rajouter~:</P>
<P>
<UL>
<LI>au    pr&eacute;alable,          ouvrir     le       port      s&eacute;rie
(<CODE>/dev/cua&lt;n&gt;</CODE>),  le  configurer. Le   mieux  est  de  prendre
exemple sur ce que fait <I>getty</I>~;
</LI>
<LI>envoyer    ensuite     les   commandes   AT     d'initialisation   puis  de
num&eacute;rotation (utiliser la fonction chat()) qui fait ceci tr&egrave;s
bien~;
</LI>
<LI>enfin se mettre en lecture sur le port afin de d&eacute;tecter les messages
&eacute;mis  par  le  modem. Le seul   probl&egrave;me  ici est  qu'il sera
difficile    d'attendre   certains  d'entre-eux   (NO~ANSWER, TIMEOUT)
&eacute;tant donn&eacute;  qu'il faut  pr&eacute;venir l'utilisateur  qu'il
peut d&eacute;crocher.</LI>
</UL>
</P>
<P>Par contre les   messages NO~DIALTONE (modem  pas  branch&eacute;), et
BUSY sont  fort int&eacute;ressants et permettent  d'informer l'utilisateur
imm&eacute;diatement.</P>
<P></P>

<H2>13.2 <A NAME="ss13.2"></A> modemstat et compagnie</H2>

<P></P>
<P>Vous  trouverez sur les   <I>serveurs  ftp</I> habituels quelques  petits
programmes permettant d'afficher l'&eacute;tat de la jonction. Vous pourrez
vous  int&eacute;resser particuli&egrave;rement &agrave; la fa&ccedil;on de
r&eacute;cup&eacute;rer les  informations (plut&ocirc;t que sur l'interface
utilisateur qui est l'exemple m&ecirc;me de ce qu'il ne faut pas faire).</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
/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
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Un bon point pour statserial  aussi simple que bien pr&eacute;sent&eacute;,
en mode texte.</P>
<P></P>

<H2>13.3 <A NAME="ss13.3"></A> Un d&eacute;tecteur de signal 109 (CD) </H2>

<P></P>
<P>Lu dans <I>comp.os.linux.development.apps</I> cette demande</P>
<P>
<BLOCKQUOTE>
Existe-t-il un  utilitaire   que    je    pourrais utiliser    dans      un
<I>shell-script</I>   et  retournant une  valeur,   disons  1,  si le  signal
<I>D&eacute;tection de porteuse</I> est mont&eacute; et 0 sinon~?
</BLOCKQUOTE>
</P>
<P>Le message ne   dit pas quel en  serait  l'usage mais peu  importe c'est un
excellent exemple d'utilitaire assez facile &agrave; r&eacute;aliser. Voici
d'ailleurs un exemple de code source possible~:</P>
<P>
<HR>
<PRE>
------------------------- debut de carrier.c -------------------------
#include &lt;sys/types.h&gt;
#include &lt;sys/stat.h&gt;
#include &lt;sys/ioctl.h&gt;
#include &lt;termios.h&gt;
#include &lt;unistd.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;errno.h&gt;
#include &lt;stdio.h&gt;

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, &quot;Usage: %s device-file\n&quot;, whoami);
    return(EXIT_FAILURE);
  }

  device = argv[1];

  if ((fd = open(device, O_RDONLY | O_NDELAY)) &lt; 0) {
    fprintf(stderr, &quot;%s: error opening \&quot;%s\&quot;: %s\n&quot;, whoami, device,
            strerror(errno));
    return(EXIT_FAILURE);
  }

  if (ioctl(fd, TIOCMGET, &amp; modem_bits) &lt; 0) {
    fprintf(stderr, &quot;%s: error getting modem line statuses for \&quot;%s\&quot;: %s\n&quot;,
            whoami, device, strerror(errno));
    return(EXIT_FAILURE);
  }

  if (modem_bits &amp; TIOCM_CAR) {
    printf(&quot;1\n&quot;);
    return(EXIT_SUCCESS);
  }
  
  printf(&quot;0\n&quot;);
  return(EXIT_FAILURE);
}
------------------------- fin de carrier.c -------------------------
</PRE>
<HR>
</P>
<P>On pourra  ensuite  l'utiliser  dans  un <I>shell</I>  de  la  mani&egrave;re
suivante~:</P>
<P>
<HR>
<PRE>
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
</PRE>
<HR>
</P>
<P></P>

<HR>
<P>
Chapitre <A HREF="Modems-HOWTO-14.html">suivant</A>,
Chapitre <A HREF="Modems-HOWTO-12.html">Pr&eacute;c&eacute;dent</A>
<P>
Table des mati&egrave;res de <A HREF="Modems-HOWTO.html#toc13">ce chapitre</A>,
 <A HREF="Modems-HOWTO.html#toc">Table des mati&egrave;res</A> g&eacute;n&eacute;rale</P>
<P>
<A HREF="Modems-HOWTO.html">D&eacute;but</A> du document,
 <A HREF="#0"> D&eacute;but de ce chapitre</A></P>
</BODY>
</HTML>