<!doctype linuxdoc system>

<article>

<title>Modems-HOWTO
<author>Jean Michel VANSTEENE &lt;vanstee@worldnet.net&gt;
<date>13 F&eacute;vrier 1996

<abstract>

Le modem est devenu  aujourd'hui un produit &agrave;  la mode. Que ce  soit
pour l'acc&egrave;s &agrave;   Internet  ou  pour  se connecter   chez   un
particulier qui laisse b&eacute;n&eacute;volement sa machine disponible, il
faut un modem.  Or, cet appareil, d'apparence fort simple, cache des choses
tr&egrave;s  sophistiqu&eacute;es et son  emploi   peut engendrer bien  des
soucis.  J'ai constat&eacute; d'ailleurs  que bon nombre d'utilisateurs  se
posaient des questions &agrave; son propos. (Et ceux qui ne s'en posent pas
ont   parfois   des   probl&egrave;mes   qu'ils seraient    aptes  &agrave;
r&eacute;soudre par  eux-m&ecirc;me,   s'ils  connaissaient  un   peu   son
fonctionnement.)

Ce document  n'est  ni un HOWTO ni  une   FAQ, ce qui   est &agrave; priori
inhabituel pour un  document Linux.  J'ai longuement r&eacute;fl&eacute;chi
avant de  me  lancer dans  cette aventure.  Parmi  mes priorit&eacute;s, la
premi&egrave;re a &eacute;t&eacute; d'&ecirc;tre  clair et de ne pas tomber
dans le genre cours magistral...

Le but de ce document  est en fait   d'&eacute;claircir un peu des  notions
<it>dont on  a  entendu  parler</it>&nbsp;: bande passante,   bits/seconde,
baud,     modulation,    interface  s&eacute;rie,   connexions     &agrave;
vingt-huit-huit&nbsp;...

Apr&egrave;s avoir  lu ce document, de  deux choses l'une&nbsp;:  soit vous
vous dites  <it>c'est  imbitable</it>, et l&agrave;  vous  sautez sur votre
courrier-&eacute; pr&eacute;f&eacute;r&eacute; pour m'engueu... me le dire,
soit vous pensez  que ca vous  a apport&eacute; quelque-chose et l&agrave;,
vous sautez sur  votre courrier-&eacute;... pour me  le dire. En tout  cas,
toute remarque sera la bienvenue, comme d'habitude.

</abstract>

<!-- Table des matieres -->
<toc>

<sect>
Introduction
<p>

La communication a   toujours &eacute;t&eacute;, est  et sera   toujours un
&eacute;change de signaux  entre un &eacute;metteur et un r&eacute;cepteur.
Afin d'avoir  les  id&eacute;es claires sur   ce que  nous allons  aborder,
d&eacute;composons    les   diff&eacute;rentes   &eacute;tapes  de       la
communication.  Le  meilleur mod&egrave;le   que nous allons    prendre est
l'homme qui l'utilise depuis fort longtemps.
<p>

<bf/Premi&egrave;re &eacute;tape&nbsp;/: prenons un homme, bien ras&eacute;
de pr&eacute;f&eacute;rence, propre et  pr&ecirc;t  &agrave; se rendre   au
travail. Justement  il a un  mot &agrave; dire &agrave;   sa femme avant de
partir. C'est l'information &agrave; transmettre.

<p>

<bf/Deuxi&egrave;me &eacute;tape&nbsp;/:  comment la  transmettre.  Si elle
est  l&agrave;, il crie (bon, il  parle), sinon il  &eacute;crit le message
sur un bout de papier.  Notre homme est donc capable (voyez-vous &ccedil;a,
il est  &agrave; peine 7h30 du matin&nbsp;!)   de coder son  information en
fonction de la mani&egrave;re dont il transmet son message.

<p>

Pour  communiquer, nous utilisons   des &eacute;l&eacute;ments de base dont
l'ensemble forme l'alphabet.  Une  succession de ces &eacute;l&eacute;ments
d&eacute;finit un vocabulaire. En fait il s'agit ni plus  ni moins que d'un
code,  complexe certes,  mais  compr&eacute;hensible   par tous  ceux   qui
l'adoptent.  Moins il est  ambigu, plus il  est pr&eacute;cis. (Vous pouvez
essayer de donner  trois sens diff&eacute;rents  &agrave; cette phrase pour
comprendre  que notre  langue    est parfois  ambigu&euml;&nbsp;: il    est
&eacute;norm&eacute;ment   b&ecirc;te&nbsp;.)   Pour   s'exprimer,  il  est
ensuite      capable    de     d&eacute;couper    une     suite     de mots
(&eacute;l&eacute;ments      continus)        en            phon&egrave;mes
(&eacute;l&eacute;ments   discontinus),  que   le r&eacute;cepteur    saura
r&eacute;assembler.

<p>

En informatique, l'information de  base est <bf/binaire/, donc cod&eacute;e
sur deux valeurs logiques  que l'on note  habituellement 0  et 1. C'est  le
code sans doute le plus &eacute;l&eacute;mentaire qui soit. Aussi il existe
un certain nombre de codes interm&eacute;diaires. Nous citerons par exemple
le code ASCII, permettant de coder les lettres et chiffres.

<p>

<bf/Troisi&egrave;me  &eacute;tape&nbsp;/:  sa   femme d&eacute;couvre   le
message  (ou l'entend). Elle est  capable de le  reconstituer.  Les lettres
(respectivement les phon&egrave;mes)    forment des mots  qui forment   des
phrases qui forment le message. Ouf&nbsp;! On y est.

<sect1>
R&eacute;sumons un peu
<p>

<bf/D&eacute;coupage horizontal/.  La communication n'est possible que s'il
existe un code commun. &Agrave; tout niveau il faut s'assurer non seulement
que le code employ&eacute;  a un sens,  mais en plus  qu'il a le m&ecirc;me
pour  l'&eacute;metteur et   le    r&eacute;cepteur.  On  parle   alors  de
<it/protocole/.  Au niveau le plus  bas, un signal est utilis&eacute; comme
un moyen  de  communication.  Il transporte en   effet un message  sous une
forme particuli&egrave;re appel&eacute; <it/codage/ ou <it/modulation/.  Un
signal a une nature physique et un mod&egrave;le math&eacute;matique.  Nous
nous &eacute;tendrons davantage sur sa nature que sur le mod&egrave;le qui,
bien  qu'int&eacute;ressant,  nous  am&egrave;nerait  trop loin.  Le signal
s'appuie sur un support.

<p>

<bf/D&eacute;coupage       vertical/.       De  l'id&eacute;e    au    code
employ&eacute;&nbsp;:  plusieurs niveaux de traitement sont utilis&eacute;s
pour transformer un message complexe en &eacute;l&eacute;ments plus simples
aptes &agrave;   &ecirc;tre  v&eacute;hicul&eacute;s  et  compris   par une
entit&eacute; homologue.
<p>

Or s'il y a un signal, il faut forc&eacute;ment un support de transmission,
permettant de le  v&eacute;hiculer d'un  point   &agrave; un autre.    Nous
verrons cela un peu plus loin. Celui qui nous int&eacute;resse concerne les
transmissions t&eacute;l&eacute;phoniques.

<p>

Voici   donc jet&eacute;es les bases   de   la communication.  Nous  allons
maintenant &eacute;claircir un  peu  tout cela dans les  diff&eacute;rentes
parties qui vont suivre. La  premi&egrave;re &eacute;tape consiste &agrave;
consolider les  bases    sur  les  signaux,   ensuite  nous  verrons   leur
transmission.

<sect>
Un peu de th&eacute;orie du signal...
<p>

La  voix est un  bon exemple  de  signal permettant de v&eacute;hiculer une
information.  Ce    signal est caract&eacute;ris&eacute;  par  sa <bf/bande
passante/, c'est-&agrave;-dire le  domaine de  fr&eacute;quences sur lequel
elle  peut s'&eacute;tendre.   En   g&eacute;n&eacute;ral cette  bande  est
continue  et  comprise entre  30  et 15000   Hz.  Ce   signal  est  de type
sinuso&iuml;dal.

Sans entrer  dans  des  d&eacute;tails math&eacute;matiques,  disons  qu'un
signal   est      compos&eacute;  d'une  fr&eacute;quence     principale et
d'harmoniques.  Il  est   possible  d'en donner  une  repr&eacute;sentation
math&eacute;matique gr&acirc;ce  aux  s&eacute;ries de  Fourier, mais  nous
n'irons  pas plus loin.  Disons  simplement que ce signal est appel&eacute;
signal <sq/analogique/, parce qu'il peut prendre n'importe quelle valeur de
fa&ccedil;on    continue  entre   deux  instants&nbsp;:   le   signal   est
<sq/modul&eacute;/.

<sect1>
Les supports de transmission
<p>

Un   signal quel  qu'il   soit,  n'a d'int&eacute;r&ecirc;t  que s'il  peut
&ecirc;tre  transport&eacute;.   Il  faut   savoir qu'un syst&egrave;me  de
transmission n'est jamais en mesure  d'&eacute;mettre des signaux sans leur
faire  subir de d&eacute;formations&nbsp;:  selon  leur nature, on parle de
distorsion, d'affaiblissement, de diaphonie&nbsp;...  Comme nous le verrons
plus loin,  les  lignes t&eacute;l&eacute;phoniques ne font   pas exception
&agrave; cette r&egrave;gle.
<p>

Chaque  type de support est caract&eacute;ris&eacute;  entre autres par son
aptitude &agrave; transmettre un signal plus ou moins fid&egrave;lement. De
nombreux    supports     sont   utilis&eacute;s    en    transmission    de
donn&eacute;es&nbsp;:  les  supports  avec  guide  physique  (c&acirc;bles,
fibres,   ...)  et les supports  sans   guide physique (ondes radio,  ondes
lumineuses).  Pour donner  une    id&eacute;e, de la   qualit&eacute;   des
supports,  disons que  les c&acirc;bles &eacute;lectriques  &agrave; paires
torsad&eacute;es sont  les    moins fiables, suivis  par   les c&acirc;bles
coaxiaux.  Les fibres  optiques offrent actuellement  le meilleur compromis
fiabilit&eacute;/performance.

<sect>
Les t&eacute;l&eacute;communications analogiques et num&eacute;riques
<p>

<sect1>
Les t&eacute;l&eacute;communications analogiques
<p>

C'est un mode de  communication utilis&eacute; depuis tr&egrave;s longtemps
notamment  dans  la technologie  t&eacute;l&eacute;phonique. Il  s'agit  en
effet d'une activit&eacute;  beaucoup  moins consommatrice de   ressources,
tant  financi&egrave;res   que     technologiques  que    la   transmission
num&eacute;rique. On n'est   pas  tout &agrave; fait  pr&ecirc;t   &agrave;
pouvoir s'en passer.

<sect1>
Le signal t&eacute;l&eacute;phonique
<p>

&Agrave;    l'origine,    le t&eacute;l&eacute;phone   a  &eacute;t&eacute;
con&ccedil;u pour transmettre   la  voix.  Malheureusement,  il  n'est  pas
possible,  &eacute;tant   donn&eacute;   le support    utilis&eacute;,   de
v&eacute;hiculer le   signal  complet, c'est-&agrave;-dire  l'ensemble  des
fr&eacute;quences  le  constituant.   Le domaine   de fr&eacute;quences (on
parle de largeur de        bande) que peuvent transmettre     les    lignes
t&eacute;l&eacute;phoniques est officiellement   compris entre 300 et  3400
hertz<footnote>Les    <it/codecs/    (codeurs-d&eacute;codeurs)    modernes
utilis&eacute;s  dans les  centraux t&eacute;l&eacute;phoniques actuels ont
une bande passante de l'ordre de 200  &agrave; 3700 Hz et la qualit&eacute;
des lignes   des  abonn&eacute;s  s'en   trouve  g&eacute;n&eacute;ralement
am&eacute;lior&eacute;e.</footnote>.   On  applique  donc   au  signal   de
d&eacute;part un   <it/filtre   passe-bande/ qui   restreint  l'espace   de
fr&eacute;quence  attribu&eacute; &agrave; la   transmission du  signal sur
cette liaison. Ceci correspond  heureusement &agrave; 90% de nettet&eacute;
de la voix.
<P>

Selon le principe bien  admis que tout traitement a  un co&ucirc;t, le plus
simple et le moins co&ucirc;teux en t&eacute;l&eacute;communications est de
transmettre  le signal  avec le moins  de  transformations possible.  C'est
bien ce  qui se passe pour  la voix par t&eacute;l&eacute;phone. Les seules
transformations sont d'ordre analogique comme l'amplification par exemple.

<sect1>
Les t&eacute;l&eacute;communications num&eacute;riques
<p>

Nous          avons         d&eacute;j&agrave;         &eacute;voqu&eacute;
pr&eacute;c&eacute;demment que  le fonctionnement de nos  chers ordinateurs
&eacute;tait  fond&eacute; sur la seule   information binaire. Celle-ci est
repr&eacute;sent&eacute;e,  d&egrave;s  lors qu'il s'agit  de la visualiser
(oscilloscope) ou  de la transporter,  par un signal rectangulaire &agrave;
deux niveaux.  <p>

Pour transporter un  tel signal, le plus simple  et le moins  co&ucirc;teux
consiste &agrave; lui faire  subir le moins  de traitement possible,  voire
&agrave;   le transporter tel quel.   On   imagine ais&eacute;ment que pour
transmettre ce  signal sur un  support, il  suffise de  d&eacute;finir deux
signaux &eacute;lectriques repr&eacute;sentant les niveaux logiques 0 et 1.
De  plus     ce    type   de     transmission  offre    des    performances
consid&eacute;rablement    sup&eacute;rieures  &agrave;   la   transmission
analogique, ceci pour deux raisons.

La   premi&egrave;re est un faible  taux  d'erreurs.  En effet, alors qu'en
transmission num&eacute;rique, les signaux sont  transmis avec des tensions
d'amplitude variable, en transmission num&eacute;rique le nombre de niveaux
est  limit&eacute;.  Les   signaux  parasites s'infiltrant  dans un  signal
analogique   sont  donc   tr&egrave;s  difficiles   &agrave; supprimer   et
engendrent  des   erreurs.      En transmission  num&eacute;rique,      les
d&eacute;fauts   sont   plus     facilement  rep&eacute;rables    et    les
&eacute;quipements r&eacute;g&eacute;n&egrave;rent  plus     facilement  un
signal parasit&eacute; ou affaibli.

La deuxi&egrave;me  raison tient au  fait  que l'on sait mieux  traiter une
information  num&eacute;rique. Ainsi, en  utilisant les  m&eacute;thodes de
multiplexage,  de  compression, l'acheminement  des  donn&eacute;es se fait
beaucoup plus rapidement. De    plus le co&ucirc;t du mat&eacute;riel    de
traitement diminue consid&eacute;rablement.

<sect1>
Alors pourquoi l'analogique ?
<p>

Cette  question est   bien  entendu la premi&egrave;re    que l'on se  pose
maintenant.      La  r&eacute;ponse   tient     en  quelques    mots&nbsp;:
essentiellement    pour  des   raisons  financi&egrave;res.   Lorsque   les
ordinateurs  sont    organis&eacute;s en   petits   groupes  ferm&eacute;s,
l'infrastructure &agrave;    mettre en  place   pour les  relier  est  bien
s&ucirc;r  num&eacute;rique.  Mais d&egrave;s  lors  que les communications
s'&eacute;tablissent sur  de  grandes distances,  elles  doivent empreinter
l'infrastructure existante, qui est  analogique. L'&eacute;volution se fait
lentement vers le  tout num&eacute;rique,  Num&eacute;ris en est  l'exemple
prometteur.

<sect1>
De l'analogique au num&eacute;rique et r&eacute;ciproquement
<p>

Puisqu'il faut  s'adapter &agrave;  un monde  fait de   num&eacute;rique et
d'analogique,   il faut savoir   passer   de l'un  &agrave;  l'autre. C'est
essentiellement ce qui va  se passer avec les  modems.  Faisons d'abord  un
point rapide sur les m&eacute;thodes de conversion entre l'analogique et le
num&eacute;rique.

<sect2>
De l'analogique au num&eacute;rique
<p>

L'information de d&eacute;part est  repr&eacute;sent&eacute;e par un signal
qui, si  on le transforme en tensions  &eacute;lectriques, peut prendre une
infinit&eacute; de  valeurs (dans un  intervalle fini, heureusement&nbsp;!)
entre  deux instants.  Pour le  transcrire  dans un  monde fait d'un nombre
limit&eacute; de niveaux significatifs, il  faut le coder. Un des principes
de codage  les  plus  simples  consiste &agrave;   pr&eacute;lever &agrave;
intervalle  r&eacute;gulier   la valeur  de   la    tension,  puis de    la
repr&eacute;senter  en          binaire   sur  7    ou      8     bits.  Le
pr&eacute;l&egrave;vement        est       usuellement        appel&eacute;
<it/&eacute;chantillonnage/ et la fr&eacute;quence d'&eacute;chantillonnage
correspond  au  nombre d'&eacute;chantillons   pr&eacute;lev&eacute;s   par
seconde.    Un    codeur-d&eacute;codeur        pr&eacute;l&egrave;ve    en
g&eacute;n&eacute;ral 8000 &eacute;chantillons par seconde.

<sect2>
Du num&eacute;rique &agrave; l'analogique
<p>

A  l'inverse,   la  transformation d'une   information num&eacute;rique  en
analogique consiste &agrave; moduler un signal de base en fonction de cette
information. C'est le r&ocirc;le du modulateur-d&eacute;modulateur (modem).

Consid&eacute;rons maintenant ce signal de   base.  S'agissant d'un  signal
analogique, c'est  donc une  sinuso&iuml;de  dont la fr&eacute;quence  peut
varier, dans  le   cas qui  nous int&eacute;resse,   de 1000  &agrave; 2000
hertz.  C'est la porteuse. La modulation  de ce signal va consister ensuite
&agrave; en faire   varier   un ou plusieurs param&egrave;tres&nbsp;:    la
<bf/phase/, <bf/l'amplitude/ ou la <bf/fr&eacute;quence/.  <p>

La  modulation d'amplitude  consiste  &agrave; modifier  l'amplitude  de la
porteuse, selon   l'information binaire &agrave; transmettre.   Par exemple
une valeur de l'amplitude est attribu&eacute;e au 0 et une autre au 1.
<p>

La modulation de fr&eacute;quence correspond &agrave; la m&ecirc;me notion,
mais ici   les  deux  valeurs   sont  repr&eacute;sent&eacute;es   par  des
fr&eacute;quences diff&eacute;rentes.
<p>
Enfin, la modulation de  phase, consiste &agrave; faire  varier la phase de
la porteuse, de 45, 135, 225 ou 315 degr&eacute;s par exemple.
<p>

La  <bf/rapidit&eacute;   de   modulation/  caract&eacute;rise  la  vitesse
&agrave;   laquelle      ces   changements    s'effectuent.     C'est    la
caract&eacute;ristique essentielle  qui permet  de d&eacute;finir la  bande
passante.

<p>
Arr&ecirc;tons-nous l&agrave; un instant  pour &eacute;voquer maintenant la
notion  de d&eacute;bit.  Il est  en effet facile  d'imaginer pouvoir faire
varier  un signal &agrave;  volont&eacute;,  mais  ce serait  ne  pas tenir
compte de certaines caract&eacute;ristiques physiques des supports qui nous
contraignent fortement.

<sect1>
Des bits et des d&eacute;bits
<P>

Une des valeurs caract&eacute;ristique des supports  de transmission est le
d&eacute;bit maximum qu'ils peuvent supporter.  Comment s'emp&ecirc;cher de
comparer   un support  &agrave;  une   route.     Le  nombre  maximum    de
v&eacute;hicules  qu'une autoroute est capable  de  supporter par heure est
tr&egrave;s         sup&eacute;rieur     &agrave;     celui     d'une route
d&eacute;partementale  (m&ecirc;me  si     vous n'aimez   pas les    routes
d&eacute;partementales, mais ceci est une autre histoire&nbsp;...).
<P>

En ce qui concerne les  supports de transmission, leur d&eacute;bit maximum
est directement li&eacute; &agrave; la largeur de la bande passante.  Chose
promise, chose  due, pas trop  de  math&eacute;matiques ici.  Mais  il  est
impossible de ne  pas  parler  de  deux   valeurs fondamentales  qui   vont
permettre de  comprendre ce qui se passe  avec les modems&nbsp;: ce sont le
<bf/d&eacute;bit binaire maximum/ et la <bf/capacit&eacute; de transmission
maximale/.

<sect2>
Le d&eacute;bit binaire maximum
<p>

Sur un canal  de  transmission  dont  la  bande   passante est  B,  il  est
montr&eacute;     qu'un  signal      peut   &ecirc;tre   enti&egrave;rement
reconstitu&eacute; &agrave; l'arriv&eacute;e, si on  le transmet en prenant
2B &eacute;chantillons par seconde.  Le d&eacute;bit maximum s'&eacute;crit
alors&nbsp;:

<tscreen><verb>
	Dmax = 2B
</verb></tscreen>

Si, de plus, le signal peut prendre plus de deux valeurs significatives, la
formule se g&eacute;n&eacute;ralise en&nbsp;:

<tscreen><verb>
	Dmax = 2B log  V
                     2
</verb></tscreen>

o&ugrave;   <bf/V/ correspond   au   nombre de   niveaux significatifs  (ou
&eacute;tats) que peut prendre  le signal&nbsp;: c'est sa <bf/valence/. Par
exemple, V=4  si   le  signal peut   prendre les  valeurs   +10&nbsp;volts,
+5&nbsp;volts, -5&nbsp;volts et -10&nbsp;volts.

Ceci    pour  vous  montrer     qu'en   th&eacute;orie,   sur  une    ligne
t&eacute;l&eacute;phonique dont la bande   passante est de 3000   hertz, le
d&eacute;bit maximum est de 6000 bits/s avec deux niveaux significatifs (un
pour le  0, un pour   le 1), 12000  bits/s  avec quatre niveaux,  etc.   Le
d&eacute;bit maximum est th&eacute;oriquement infini.

<sect2>
La capacit&eacute; de transmission maximale
<p>

Un  des  inconv&eacute;nients suppl&eacute;mentaires des   supports est  le
<bf/bruit/.   Or la quantit&eacute; de bruit  pr&eacute;sente sur une ligne
s'exprime par rapport &agrave; la puissance utile du signal transmis&nbsp;:
c'est le   <bf>rapport   signal/bruit</bf>.  Plus  ce   rapport  est grand,
meilleure   est  la  qualit&eacute;.   La  capacit&eacute;  de transmission
maximale    est   une fonction     de    ce  rapport.     Pour  une   ligne
t&eacute;l&eacute;phonique, cette  capacit&eacute;  maximale atteint  30000
bits/s.  Cela  signifie bien que sur ces  lignes <bf>on ne peut transmettre
&agrave; plus  de 30000 bits/s</bf><footnote>C'est bien une capacit&eacute;
maximale physique,   &agrave;  ne pas   confondre  avec  des  d&eacute;bits
logiques apr&egrave;s compression  de donn&eacute;es.</footnote> quels  que
soient la valence et  la fr&eacute;quence du signal.   C'est une  limite au
d&eacute;bit binaire maximum.

<sect><heading><label id="sec-modems">
Le modem
<p>

Le  r&ocirc;le du  modem  est  d'adapter   les signaux  rectangulaires   de
donn&eacute;es, que le r&eacute;seau t&eacute;l&eacute;phonique ne peut pas
transmettre tels quels, en signaux transmissibles par ce r&eacute;seau.

Il a en fait deux fonctions&nbsp;:

<itemize>
<item>

un   r&ocirc;le d'<bf/adaptation du   signal/ aux  lignes du  r&eacute;seau
utilis&eacute;,   c'est-&agrave;-dire        de  modulation      et      de
d&eacute;modulation&nbsp;;

<item>

un r&ocirc;le de <bf/dialogue/ avec l'&eacute;quipement informatique auquel
il est reli&eacute;.

</itemize>

Il tient donc exactement le m&ecirc;me r&ocirc;le fonctionnel qu'une couche
de communication (TCP, par exemple).   Il poss&egrave;de une <bf/interface/
permettant un dialogue  avec un utilisateur se  trouvant &agrave; un niveau
sup&eacute;rieur.   Ici  il  s'agit d'une   interface  physique (y  compris
&eacute;lectrique). Il communique avec  une  entit&eacute; paire (un  autre
modem) selon un <bf/protocole/.

La structure interne d'un modem est d&eacute;crite ci-dessous&nbsp;:

<verb>

+-----+      +--------+         +-------------+       +----------------+
|  J  +----->| codeur +-------> |  modulateur +------>|                |
|  O  |      +--------+         +-------------+       |                |
|  N  |                                               |                |
|  C  |                                               | transformateur | 
|  T  |                                               |                |
|  I  |                                               |     ligne      |
|  O  |      +----------+       +--------------+      |                |
|  N  |<-----+ decodeur |<------+ demodulateur |<-----|                |
+-----+      +----------+       +--------------+      +----------------+

</verb>

Les param&egrave;tres caract&eacute;risant un modem sont&nbsp;:
<itemize>
<item>

le <it>d&eacute;bit d'information</it> en bits/s&nbsp;;

<item>

le <it>mode de transmission</it>&nbsp;: synchrone ou asynchrone&nbsp;;

<item>

le <it>support de  transmission utilis&eacute;</it>&nbsp;: r&eacute;seau ou
ligne sp&eacute;cialis&eacute;e&nbsp;;

<item>

le <it>mode de couplage</it> &agrave;  la ligne&nbsp;: &eacute;lectrique ou
acoustique.

</itemize>

Nous aborderons assez rapidement l'ensemble de ces param&egrave;tres, selon
l'utilisation que nous aurons &agrave; en faire.  La notion de d&eacute;bit
devrait maintenant &ecirc;tre assimil&eacute;e.
<P>

Penchons-nous  rapidement  sur les modes   et les supports  de transmission
utilis&eacute;s.  Voyons   ensuite  plus    pr&eacute;cis&eacute;ment    le
r&ocirc;le d'adaptation du signal du modem, puis le dialogue qui met en jeu
la jonction et la ligne.
<p>

Commen&ccedil;ons par d&eacute;finir un vocabulaire commun.

<sect1><heading><label id="sec-vocab">
Vocabulaire
<p>

Un   <bf/avis/  est une   recommandation  &eacute;dict&eacute;e par l'U.I.T
(Union Internationale des T&eacute;l&eacute;communications),   organisation
intergouvernementale comp&eacute;tente en t&eacute;l&eacute;communications.
Les avis ont valeur de norme au sein de l'Europe, puisque les organismes de
T&eacute;l&eacute;com      nationaux  ont   encore      le   monopole.  Les
recommandations  sont   issues     de travaux  de     diverses  commissions
d'&eacute;tudes  et    sont adopt&eacute;es lors    des   assembl&eacute;es
pleini&egrave;res  (d&eacute;lai de  l'ordre   de  neuf mois,  &eacute;tant
donn&eacute; l'&eacute;volution  rapide des technologies).  La section <ref
id="sec-norme" name="Etat  actuel  de la normalisation"> d&eacute;crit  les
diff&eacute;rents avis actuellement en vigueur.
<p>

Dans   sa    normalisation,   l'U.I.T   d&eacute;finit  l'&eacute;quipement
informatique  comme   un   <bf/ETTD/  (<it>&Eacute;quipement  Terminal   de
Traitement   de Donn&eacute;es</it>) et     le  modem comme  un   <bf/ETCD/
(<it>&Eacute;quipement  Terminal   de Circuit  de Donn&eacute;es</it>).  La
connexion  d'un &eacute;quipement  informatique  &agrave;   un  modem,  par
exemple,     est r&eacute;alis&eacute;e   par l'interm&eacute;diaire  d'une
<bf/jonction/ ou <bf/interface/.
<p>

On     appelle   half-duplex  (bidirectionnel  &agrave;  l'alternat),   une
transmission  s'effectuant dans un seul sens   &agrave; la fois. On appelle
full duplex (bidirectionnel   simultan&eacute;), une  transmission  pouvant
s'effectuer  dans les deux sens    en m&ecirc;me temps.  Ces  transmissions
peuvent avoir lieu indiff&eacute;remment sur liaison 2 ou 4 fils.

<sect1>
Le mode de transmission
<p>

Une  transmission de  donn&eacute;e   est toujours li&eacute;e  au  facteur
temps.    Dans les   transmissions  en   s&eacute;rie   qui  constituent la
majorit&eacute; des transmissions, l'&eacute;metteur et le r&eacute;cepteur
doivent  travailler    &agrave;  la  m&ecirc;me cadence.      Dans  le mode
<bf/synchrone/, ils sont cal&eacute;s sur  le m&ecirc;me rythme gr&acirc;ce
&agrave; des signaux d'horloge  &eacute;mis avant la transmission.  Dans le
mode      <bf/asynchrone/,   l'horloge     du   r&eacute;cepteur      n'est
d&eacute;clench&eacute;e puis arr&ecirc;t&eacute;e que sur r&eacute;ception
de bits de d&eacute;but et de fin.  On les appelle bits de <bf/start/ et de
<bf/stop/.  Ce mode, bien que  moins performant, est le plus utilis&eacute;
actuellement dans  les   communications &agrave; travers  le  r&eacute;seau
public.

<sect1>
Le support de transmission ou ligne
<p>

Un modem est utilisable principalement sur deux types de supports&nbsp;: le
<bf/r&eacute;seau           commut&eacute;/     ou       la       <bf/ligne
sp&eacute;cialis&eacute;e/. Sur  chaque  type   de  support, les   liaisons
peuvent &ecirc;tre &agrave; deux ou quatre fils.
<p>

Dans  le   cas qui  nous int&eacute;resse,  le  modem est   reli&eacute; au
r&eacute;seau t&eacute;l&eacute;phonique  commut&eacute;  et la liaison est
&agrave;  deux fils.  Nous  l'utilisons soit  en half duplex,  soit en full
duplex  selon l'avis (voir d&eacute;finition  de  ce mot au paragraphe <ref
id="sec-vocab" name="Vocabulaire">.
<p>

A ce  propos, r&eacute;fl&eacute;chissons un  peu sur l'utilisation qui est
faite   actuellement  du     R&eacute;seau       T&eacute;l&eacute;phonique
Commut&eacute; (appel&eacute; aussi RTC).  Nous l'utilisons bien souvent en
full  duplex sur liaison deux fils  (avis V.32 ou V.34).  Lorsqu'on utilise
des lignes &agrave; quatre fils, il est facile d'imaginer que l'on consacre
deux fils &agrave;   chaque  sens  de  transmission.  Pour   chaque   sens,
consid&eacute;rant  les vitesses  de  modulations maximales  possibles,  on
con&ccedil;oit qu'il faut combiner  plusieurs   types de modulations   pour
obtenir des d&eacute;bits maintenant courants de l'ordre de 28800 bits/s.

Or le RTC n'utilise  que <bf/deux/ fils.    Pour travailler en  full-duplex
&agrave; des d&eacute;bits relativement   faibles (en  fait  jusqu'&agrave;
l'avis  V22   bis),  il  &eacute;tait possible de   partager   la  bande de
fr&eacute;quence  en deux moiti&eacute;s, une pour   chaque sens.  Avec les
d&eacute;bits  employ&eacute;s actuellement ce   n'est plus possible.  Pour
travailler en full-duplex  &agrave; d'importants d&eacute;bits, il est fait
appel   &agrave;  des    algorithmes  complexes    dits <sq/de  suppression
d'&eacute;cho/ (proche    et  lointain).   Imaginez  le   travail  &agrave;
r&eacute;aliser&nbsp;:   chaque modem   re&ccedil;oit   les  donn&eacute;es
envoy&eacute;es par le distant m&eacute;lang&eacute;es &agrave; ses propres
donn&eacute;es.     Le      tout est   encore     pollu&eacute;    par   de
l'&eacute;cho&nbsp;!   Et pour compliquer le  tout, tout ceci varie dans le
temps, et bien s&ucirc;r d'une communication &agrave; l'autre.
<P>

Vous  comprendrez donc qu'avec  une  telle utilisation  du RTC, les  modems
soient continuellement soumis &agrave;  rude &eacute;preuve pour ce qui est
de   la correction,  ceci  pouvant   conduire  &agrave;  des  d&eacute;bits
variables selon le moment.

<sect1>
L'adaptation du signal
<p>

Nous avons  vu aux  sections pr&eacute;c&eacute;dentes ce qu'&eacute;taient
une modulation et un d&eacute;bit. Rassemblons maintenant un peu toutes ces
id&eacute;es.   Bien souvent, c'est  sur  ce  point d&eacute;licat que  les
esprits se perdent.  Nous avons vu que la rapidit&eacute; de modulation est
une caract&eacute;ristique essentielle   de la bande  passante.  Plus cette
rapidit&eacute;  est grande, plus    la bande passante  demand&eacute;e est
large.  Sur le  r&eacute;seau t&eacute;l&eacute;phonique, la bande maximale
officielle est  de 3100 hertz  (300  &agrave; 3400  Hz). Dans  les centraux
t&eacute;l&eacute;phoniques modernes, elle va jusqu'&agrave; 3500 Hz.
<p>

Pour  bien  comprendre   le  m&eacute;canisme de  l'adaptation   du signal,
imaginez  maintenant que  nous  disposions  d'un appareil &eacute;lectrique
capable d'&eacute;mettre quatre niveaux de tensions possibles.

Les donn&eacute;es &agrave; transmettre sont  quant &agrave; elles toujours
pr&eacute;sent&eacute;es sous  forme  d'un  flot ininterrompu (ou  presque)
d'informations binaires.

L'id&eacute;e serait de regrouper  les bits deux par deux  et de les  faire
passer par  ce dispositif, afin d'obtenir  en  sortie le  niveau de tension
correspondant.  Un tel  signal en sortie  est dit de  <bf/valence/ 4.  Plus
g&eacute;n&eacute;ralement,  la    valence  d'un  signal    est  le  nombre
d'&eacute;tats  qu'il  peut prendre.  Cette   transformation du  signal est
appel&eacute;e <bf/codage/.
<p>

Afin d'adapter ce signal  de  sortie  au support,   il faut  maintenant  le
moduler, par exemple en  choisissant  d'effectuer une modulation de  phase.
Etant   donn&eacute;e  sa  valence,    nous    avons  besoin    de   quatre
d&eacute;calages de phase.

A chaque  fois que <bf/deux/  bits  se pr&eacute;sentent,  il est  possible
d'effectuer <bf/une/   modulation. A l'autre  bout, l'&eacute;quipement est
capable de    reg&eacute;n&eacute;rer  deux  bits.  Le     d&eacute;bit (en
<bf>bits/s</bf>)  est donc   bien   double de  la    vitesse  de modulation
(exprim&eacute;e en <bf/bauds/).
<p>

<sect2>
Exemple
<p>

Vous configurez un  modem &agrave; 4800  bits par  seconde (V.27&nbsp;ter).
Que va-t-il  se   passer   &nbsp;?    Selon   cette norme,   le   modem  va
r&eacute;aliser  une modulation de phase diff&eacute;rentielle octovalente.
Il  va donc  regrouper les bits   par trois (<bf/tribits/)  pour moduler le
signal.  La vitesse de modulation est donc de 1600 bauds et le d&eacute;bit
de 4800 bits/seconde.   Pour   obtenir un d&eacute;bit   de 9600  bits  par
seconde, il faudra combiner  un autre type de  modulation.  La section <ref
id="sec-modul"  name="D&eacute;bits et    modulations">     pr&eacute;sente
l'essentiel  des  modulations utilis&eacute;es dans  les diff&eacute;rentes
normes actuelles.

<sect2>
R&eacute;sum&eacute;
<p>

L'adaptation du signal peut se faire de trois mani&egrave;res&nbsp;:
<itemize>
<item>

par une simple modulation appropri&eacute;e&nbsp;;

<item>

par un codage puis une modulation&nbsp;;

<item>

par un simple codage. Ce type d'adaptation est pr&eacute;sent dans certains
modems dits <sq>bande de base</sq> qui transmettent directement ce code sur
la ligne.  Ce ne sont pas ceux que nous utilisons couramment.

</itemize>

La  rapidit&eacute; de modulation s'exprime  en <bf/bauds/. Elle correspond
au nombre de changements d'&eacute;tats du signal  par seconde sur la ligne
de transmission.   Une  rapidit&eacute; de <it/b/  bauds ne  correspond pas
forc&eacute;ment  &agrave; <it/b/ bits/s sur  la  ligne.  Une configuration
binaire (un  ou  plusieurs bits selon  la  valence) correspond &agrave;  un
&eacute;tat du signal.

<sect1>
Le dialogue
<p>

Int&eacute;ressons-nous  maintenant au  dialogue  entre l'&eacute;quipement
informatique  et la   jonction.

<sect2>
La jonction s&eacute;rie
<p>

La jonction  sp&eacute;cifie les caract&eacute;ristiques m&eacute;caniques,
&eacute;lectriques  et   fonctionnelles  des signaux.   Bien   entendu  ces
jonctions   sont  normalis&eacute;es     (voir  plus loin     les  tableaux
r&eacute;capitulatifs  sur  l'&eacute;tat actuel  de  la  normalisation) et
celle  qui    nous   int&eacute;resse   plus  particuli&egrave;rement   est
r&eacute;f&eacute;renc&eacute;e sous  le nom V.24 par l'U.I.T, sensiblement
&eacute;quivalente     de   la      norme   RS-232C   d&eacute;finie    par
l'E.I.A<footnote>Electronic Industries Association.</footnote>.

<p>

Voici une description des signaux  de l'interface V.24 les plus  couramment
utilis&eacute;s&nbsp;:

<tscreen><verb>
+------+-----------+-----------+--------+------+--------------------------------+
| Code | No broche | No broche | RS-232 | V.24 |        Signification           |
|      | ISO  2110 |   DB 9    |        |      |                                |
+------+-----------+-----------+--------+------+--------------------------------+
| 101  |     1     |           |  PG    | TP   |  Terre de protection           |
|      |           |           |        |      |                                |
| 102  |     7     |    5      |  SG    | TS   |  Terre de signalisation        |
+------+-----------+-----------+--------+------+--------------------------------+
| 103  |     2     |    3      |  TD    | ED   |  Emission de donnees           |
|      |           |           |        |      |                                |
| 104  |     3     |    2      |  RD    | RD   |  Reception de donnees          |
+------+-----------+-----------+--------+------+--------------------------------+
| 105  |     4     |    7      |  RTS   | DPE  |  Demande pour emettre          |
|      |           |           |        |      |                                |
| 106  |     5     |    8      |  CTS   | PAE  |  Pret a emettre                |
|      |           |           |        |      |                                |
| 107  |     6     |    6      |  DSR   | PDP  |  Poste de donnees pret         |
|      |           |           |        |      |                                |
| 108  |    20     |    4      |  DTR   | TDP  |  Terminal de donnees pret      |
|      |           |           |        |      |                                |
| 109  |     8     |    1      |  DCD   | DS   |  Detection du signal de ligne  |
+------+-----------+-----------+--------+------+--------------------------------+
| 125  |    22     |    9      |  RI    | IA   |  Indicateur d'appel            |
+------+-----------+-----------+--------+------+--------------------------------+
</verb></tscreen>
Brochage des prises c&ocirc;t&eacute; soudures :
<tscreen><verb>
      +-----------+          +---------------------------------------+
      | 5 4 3 2 1 |          | 13 12 11 10 9  8  7  6  5  4  3  2  1 |
      \  9 8 7 6  /          \  25 24 23 22 21 20 19 18 17 16 15 14  /
       `---------'            `-------------------------------------'
          DB 9                              ISO IS 2110
</verb></tscreen>

<sect2><heading><label id="sec-dialogue">
Le dialogue proprement dit
<p>

Prenons deux postes  de travail &eacute;quip&eacute;s  d'un modem chacun et
souhaitant communiquer.
<p>

Nous passerons  rapidement sur le fait  que les  &eacute;quipements doivent
&ecirc;tre reli&eacute;s  &agrave; la masse. Ceci est r&eacute;alis&eacute;
gr&acirc;ce  au circuit 101.  D'autre   part, il  est n&eacute;cessaire  de
d&eacute;finir une r&eacute;f&eacute;rence de signalisation&nbsp;: c'est le
r&ocirc;le du circuit 102.
<p>

D&egrave;s  sa  mise sous  tension, l'ETTD  pr&eacute;sente  un &eacute;tat
logique <sq/1/ sur le  circuit  108&nbsp;: <it/Terminal  de  Donn&eacute;es
Pr&ecirc;t/  (DTR).  D&egrave;s  la mise  sous  tension de l'ETCD, celui-ci
pr&eacute;sente l'&eacute;tat <it/Poste de Donn&eacute;es Pr&ecirc;t/ (DSR)
correspondant &agrave; un &eacute;tat   logique <sq/1/ sur le circuit  107,
assurant ainsi que le modem est sous tension et connect&eacute; &agrave; la
ligne.
<p>

L'ETTD  ayant des donn&eacute;es  &agrave; &eacute;mettre, demande &agrave;
&eacute;mettre.   Il pr&eacute;sente     sur   la  jonction   l'information
<it/Demande Pour &Eacute;mettre/ (RTS) sur le  circuit 105.  Ceci valide le
modulateur de l'ETCD qui &eacute;met alors une porteuse.
<p>

Du  cot&eacute; appel&eacute;, l'ETCD  d&eacute;tecte la pr&eacute;sence de
la porteuse sur la ligne de transmission et  le signale &agrave; l'ETTD sur
le circuit  109&nbsp;:   <it/D&eacute;tection  de  signal/ (porteuse).  Les
circuits 107  et    108  auront  &eacute;t&eacute;   initialis&eacute;s  au
pr&eacute;alable comme ci-dessus.
<p>

L'ETTD ayant signal&eacute; son  intention d'&eacute;mettre sur le  circuit
105 re&ccedil;oit  en r&eacute;ponse peu  de  temps apr&egrave;s  le signal
<it/Pr&ecirc;t &Agrave; &Eacute;mettre/ (CTS) sur le circuit 106.

Les donn&eacute;es peuvent ensuite circuler via les circuits 103 et 104.

<sect2>
Le contr&ocirc;le de flux
<p>

Lorsqu'un   &eacute;metteur &eacute;met de fa&ccedil;on syst&eacute;matique
plus de  donn&eacute;es que le r&eacute;cepteur  ne peut en accepter, il se
pose alors   un probl&egrave;me qui ne   peut  &ecirc;tre r&eacute;solu que
gr&acirc;ce au m&eacute;canisme de <it>contr&ocirc;le de flux</it>.

Le contr&ocirc;le de flux peut &ecirc;tre de diff&eacute;rents types&nbsp;:

<descrip>
<tag/logiciel/

Le modem  ins&egrave;re des caract&egrave;res   de contr&ocirc;les dans  le
flot de donn&eacute;es  circulant  entre l'ETCD et l'ETTD&nbsp;:  <bf/XOFF/
pour arr&ecirc;ter l'envoi et <bf/XON/ pour le reprendre.

<tag/mat&eacute;riel/

G&eacute;n&eacute;ralement appel&eacute; <bf>CRTSCTS</bf>, il met en oeuvre
l'emploi des circuits 105  (RTS) et 106  (CTS).  Ce symbole  est en fait le
nom donn&eacute;       &agrave; la  constante    du    fichier  d'inclusion
<it/termios.h/.

</descrip>

Le  fonctionnement  du contr&ocirc;le  de flux  mat&eacute;riel  pendant la
transmission peut se r&eacute;sumer ainsi&nbsp;:
<P>

Avant d'&eacute;mettre,  le terminal doit lever  son signal RTS (Request To
Send).   &Agrave;  partir  de ce moment,  le   modem,  s'il  est  en mesure
d'&eacute;mettre,  l&egrave;ve  le signal CTS  (Clear  To Send). Lorsque le
buffer    du modem est   plein,  le  modem   descend   CTS.  Il le  remonte
ensuite.  Dans l'autre sens de transmission,  lorsque le buffer du terminal
est plein, le terminal descend RTS.

<sect1>
La connexion au r&eacute;seau t&eacute;l&eacute;phonique commut&eacute;
<p>

Maintenant, plusieurs  questions se posent, et   j'imagine que parmi celles
que vous vous posez il y a&nbsp;:

<itemize>
<item>

et sous Linux, le fonctionnement est-il identique&nbsp;?

<item>

&agrave;   quel  moment   le   num&eacute;ro   du    correspondant a   t-il
&eacute;t&eacute; compos&eacute;&nbsp?

<item>

mon modem est configur&eacute; en r&eacute;ception/&eacute;mission, comment
&ccedil;a marche&nbsp;?

<item>
etc.
</itemize>

Nous allons maintenant tenter de r&eacute;pondre.
<p>

Eclaircissons un peu  les choses.   Le dialogue  que  nous  venons de  voir
concerne le  dialogue <it/th&eacute;orique/ ETTD-ETCD  et ETCD-ETTD sans se
soucier d'&eacute;ventuelles contraintes pouvant provenir du syst&egrave;me
d'exploitation.  Il est toujours vrai.  N&eacute;anmoins,  il ne suffit pas
forc&eacute;ment pour  qu'une communication soit  &eacute;tablie, notamment
via le  RTC.  Nous allons &eacute;tudier ce  fonctionnement point par point
en prenant un bon syst&egrave;me d'exploitation  (<bf/Linux/, mais ce n'est
qu'un    exemple), un   bon    port  s&eacute;rie   et  du  courage.   Vous
continuez&nbsp;?
<p>

Tout d'abord, nous avons vu qu'une communication commen&ccedil;ait toujours
par le  premier &eacute;change DTR/DSR,   ou si vous pr&eacute;f&eacute;rez
108/107.  La mont&eacute;e  du circuit 108 est r&eacute;alis&eacute;e  sous
Linux  &agrave;  l'ouverture  du  port s&eacute;rie  (ex.&nbsp;   <tt>fopen
("/dev/ttyS0", ...)</tt>).   Cela se  voit  tr&egrave;s bien  sur un  modem
externe, le voyant TR est allum&eacute;.  La r&eacute;ponse du modem par le
circuit 107  est  un   peu   diff&eacute;rente.   Dans  la    section  <ref
id="sec-dialogue" name="Le dialogue  proprement dit">, pour des  raisons de
simplicit&eacute;,  nous supposions que   le modem r&eacute;pondait  sur le
circuit   107    apr&egrave;s     un   d&eacute;lai   tr&egrave;s     bref,
c'est-&agrave;-dire     qu'il       &eacute;tait      instantan&eacute;ment
connect&eacute; &agrave; la ligne.

Cette r&eacute;ponse est  maintenant  conditionn&eacute;e par  la connexion
&agrave;  la    ligne    via le    r&eacute;seau t&eacute;l&eacute;phonique
commut&eacute;.
<p>

<sect2>
Initialisation du modem
<p>

En  g&eacute;n&eacute;ral,  c'est juste   apr&egrave;s l'ouverture  du port
s&eacute;rie que le modem est  initialis&eacute;.  Cela se fait gr&acirc;ce
aux commandes   AT que nous  ne   d&eacute;taillerons pas.  Simplement, ces
commandes sont envoy&eacute;es    au modem (par  l'interm&eacute;diaire  du
circuit 103) (ex.&nbsp;  <tt/write/ sur le  <it/descripteur  de fichier/ du
p&eacute;riph&eacute;rique)  et    interpr&eacute;t&eacute;es    par   lui,
lorsque&nbsp;:

<itemize>
<item>

le circuit 108 est ferm&eacute; (&eacute;tat <sq/1/)&nbsp;;

<item>

le modem est en mode commande.

</itemize>

<sect2>
&Eacute;tablissement de la connexion
<p>

L'une    des commandes  d'initialisation     permet  la  composition   d'un
num&eacute;ro.   Le  modem d&eacute;croche  (eh  oui, ce terme barbare veut
dire que suite &agrave; la fermeture du relais, le central local envoie une
tonalit&eacute; &agrave;  la fr&eacute;quence  de 440 Hz&nbsp;<tt>:-)</tt>)
puis compose le num&eacute;ro.

Sur  l'&eacute;quipement  distant,   le circuit   108 est  &eacute;galement
mont&eacute;.   Le  modem appel&eacute;  d&eacute;tecte l'appel.  Le signal
d'indication   d'appel (circuit 125)  est   utilis&eacute; en interne  pour
m&eacute;moriser l'appel,  le modem r&eacute;alisant donc lui-m&ecirc;me la
connexion &agrave; la ligne. Cette   m&eacute;morisation est maintenue  par
DTR (jusqu'&agrave; d&eacute;connexion).
<p>

&Agrave; ce moment pr&eacute;cis, le  modem appel&eacute; r&eacute;pond  en
validant son modulateur qui &eacute;met la porteuse.
<p>

Le modem appelant,  en  &eacute;tat de  d&eacute;crochage et attendant   la
porteuse,   met     son   &eacute;metteur    en     service.   Apr&egrave;s
n&eacute;gociation,  le circuit  109  (DCD)  est alors valid&eacute;.    Du
c&ocirc;t&eacute; de l'appel&eacute;,  le circuit 109 est  &eacute;galement
valid&eacute;.  La prise de contact est  termin&eacute;e.  Les circuits 107
(DSR) des deux  modems sont alors  mont&eacute;s en r&eacute;ponse &agrave;
DTR (asservissement des circuits 107-109).

<sect2>
R&eacute;ponse automatique ou manuelle
<p>

Du c&ocirc;t&eacute; de l'appel&eacute;, il est possible de mettre le modem
en mode r&eacute;ponse  automatique.   Il  r&eacute;pond alors  tout   seul
&agrave; l'appel apr&egrave;s quelques sonneries. Le registre S0 des modems
est    g&eacute;n&eacute;ralement     r&eacute;serv&eacute;   &agrave;   la
configuration de ce mode.
<p>

Lorsque   ce  registre contient  la valeur   0,  (ATS0=0), le modem  est en
r&eacute;ponse manuelle. Sous Linux, c'est  assez souvent l'option choisie,
et c'est le  logiciel (notamment <it/getty/)  qui  g&egrave;re l'appel.  En
effet   les   gestionnaires,     de   <it/tty/   tels     que    <it/getty/
pr&eacute;f&egrave;rent prendre en  charge la connexion&nbsp;: ce n'est pas
au  modem  &agrave;  r&eacute;pondre    &agrave; un  appel  mais   &agrave;
<it/getty/  lui  m&ecirc;me.  Lorsque le  modem  re&ccedil;oit un appel, il
&eacute;met simplement  le  message <bf/RING/  (bien s&ucirc;r,  si le mode
verbeux est bien  configur&eacute;&nbsp;: ATE1).  Sur ce, <it/getty/ envoie
la commande ATA qui valide le mode r&eacute;ponse et la porteuse.
<p>

Enfin,   &agrave;   la fermeture  du  port,  les  signaux 108/107 repassent
&agrave; l'&eacute;tat <bf/0/.


Voici &agrave; titre d'information l'organigramme d'un appel&nbsp;:

<tscreen><verb>

                     +---------------------------------------+
                     | Detection de l'invitation a numeroter |
                     +---------------------------------------+
                                         |  
                           +--------------------------+
                           |       Numerotation       |
                           +--------------------------+
                                         |  
                        +---------------------------------+
                        | Emission de la tonalite d'appel |
                        +---------------------------------+
                                         |  
                           +--------------------------+
         +------- NON -----|   Detection de tonalite  |- OUI
         |                 +--------------------------+    |
         |                    |                            |
         |         +--------------+            +--------------------------+
         |         |   Occupe     |            |     Retour d'appel       |
         |         +--------------+            +--------------------------+
         |           |                                     |
         |           |                         +--------------------------+
         +------------------------- NON -------| Detection arret tonalite |
         |           |                         +--------------------------+
         |           |                                     |
         |           |                      +-------------------------------+
         |           |    +-------- NON ----| Detection tonalite de reponse |
         |           |    |                 +-------------------------------+
         |           |    |                                |
         |           |    |                   +--------------------------+
         |           |    |            +-NON--| Prise de contact aboutie |
         |           |    |            |      +--------------------------+
         |           |    | NO         |                   |
 TIMEOUT |     BUSY  |    | ANSWER     | TIMEOUT           | CONNECT
    +--------------------------+   +-------------+  +--------------------------+
    |    Appel infructueux     |   | Deconnexion |  | Transmission de donnees  |
    +--------------------------+   +-------------+  +--------------------------+

</verb></tscreen>

<sect2>
D&eacute;connexion
<p>

Plusieurs m&eacute;thodes permettent de mettre fin &agrave; un appel&nbsp;:

<itemize>

<item>
<bf>Mode  commande.</bf> Mettre  le modem en   mode commande et  envoyer la
cha&icirc;ne <tt>+++ATH</tt>&nbsp;;

<item>
<bf>Perte de  porteuse.</bf> L'une   des causes est  la  d&eacute;connexion
normale de l'autre modem&nbsp;;

<item>
<bf>Ouverture  du circuit 108</bf> (DTR). C'est   la m&eacute;thode la plus
couramment employ&eacute;e.

</itemize>


<sect><heading><label id="sec-norme">
Etat actuel de la normalisation
<p>

Voici un tableau r&eacute;sumant l'&eacute;tat actuel de la normalisation
concernant les classes de d&eacute;bits support&eacute;s.

<tscreen><verb>

+----------+--------------------------------------------+
|   Avis   |              Signification                 |
+----------+--------------------------------------------+
| V.21     | Utilisation sur RTC a 300 bits/s           |
|          |                                            |
| V.22     | Utilisation a 1200 bits/s sur RTC 2 fils   |
|          | full duplex                                |
| V.22 bis | idem a 2400 bits/s                         |
|          |                                            |
| V.23     | Utilisation a 600 ou 1200 bits/s sur RTC   |
|          | ou 1200/75 bits/s                          |
|          |                                            |
| V.25 et  | Composition automatique du numero et/ou    |
| V.25 bis | reponse automatique a un appel sur RTC     |
|          |                                            |
| V.26     | Utilisation a 2400 bits/s sur LS(*) 4 fils |
|          |                                            |
| V.26 bis | Modem 2400 bits/s (1200 en repli) sur RTC  |
|          |                                            |
| V.27     | Modem 4800 bits/s pour LS                  |
|          |                                            |
| V.27 bis | Modem 4800 bits/s (2400 en repli) pour     |
|          | donnees synchrones                         |
|          |                                            |
| V.27 ter | Modem 4800 bits/s (2400 en repli) meme     |
|          | modulation mais pour le RTC                |
|          |                                            |
| V.29     | Modem 9600 bits/s pour LS                  |
|          |                                            |
| V.32     | 9600 bits/s (4800 en repli) duplex 2 fils  |
|          | sur RTC                                    |
|          |                                            |
| V.32 bis | 14400 bits/s                               |
|          |                                            |
| V.34     | 28800 bits/s sur RTC                       |
|          |                                            |
| V.42     | Correction d'erreurs LAP-M et MNP4         |
|          |                                            |
| V.42 bis | Correction d'erreurs +                     |
|          | compression de donnees  MNP5               |
|          |                                            |
| V.54     | Normalise les boucles de tests             |
+----------+--------------------------------------------+

* LS = Ligne Specialisee
</verb></tscreen>

<sect1>
&Agrave; propos du V.42 bis
<p>

Un  tout petit  mot &agrave;  propos de  la norme V.42  bis  qui  permet la
compression de  donn&eacute;es.   L'algorithme utilise un   dictionnaire de
cha&icirc;nes de caract&egrave;res. Lorsqu'une cha&icirc;ne appara&icirc;t,
un  <it/token/  est   transmis qui  n'est   autre   que l'index de    cette
cha&icirc;ne dans le  dictionnaire. La longueur maximale d'une cha&icirc;ne
ainsi que la taille maximale  du dictionnaire sont  n&eacute;goci&eacute;es
au d&eacute;but  de la   connexion.   La norme  V.42&nbsp;bis  autorise une
longueur de  cha&icirc;ne  comprise entre 6  et  250 caract&egrave;res.  La
taille minimale du dictionnaire est de 512 entr&eacute;es (soit 9 bits pour
coder le  rang d'un entr&eacute;e). Le taux  maximal de compression dans ce
cas est de&nbsp;:

<tscreen><verb>
250 * 8 : 9 = 222.2
</verb></tscreen>

soit un taux de  222:1. Un bon taux de  compression est plus une affaire de
taille m&eacute;moire et d'efficacit&eacute; en fonction des donn&eacute;es
&agrave; coder qu'une affaire de puissance de processeur.

<sect1><heading><label id="sec-modul">
D&eacute;bits et modulations
<p>

<quote>
Merci  &agrave; Christian   'naddy'   Weisgerber  de   son  aide   pour  la
r&eacute;daction de cette partie.
</quote>

Voici rassembl&eacute;s dans les tableaux suivants les d&eacute;bits et les
modulations correspondantes  utilis&eacute;s  dans les  principales  normes
pour liaisons t&eacute;l&eacute;phoniques &agrave; 2 fils.  Les <it/normes/
qui ne sont pas   cit&eacute;es ci-apr&egrave;s sont   peu utilis&eacute;es
voire  oubli&eacute;es aujourd'hui (liaisons  &agrave;  4 fils, V.32 terbo,
Bell xxx, V.FC, ZyXEL, HST, PEP...  certaines n'&eacute;tant d'ailleurs pas
de v&eacute;ritables normes).

<tscreen><verb>
+------------------------------------------------------------------------+
| Avis             b/s             bauds        modulation     remarques |
+------------------------------------------------------------------------+
| V.21             300             300            FSK                    |
|                                                                        |
| V.22            1200             600            DPSK                   |
|                                                                        |
| V.22bis         2400             600            QAM                    |
|                                                                        |
| V.23            1200            1200            FSK                    |
|                  600             600            FSK                    |
|                   75              75            FSK             [1]    |
|                                                                        |
| V.32            9600            2400            QAM+TCM                |
|                 9600            2400            QAM                    |
|                 4800            2400            QAM                    |
|                                                                        |
| V.32bis        14400            2400            QAM+TCM                |
|                12000            2400            QAM+TCM                |
|                 9600            2400            QAM+TCM                |
|                 7200            2400            QAM+TCM                |
|                 4800            2400            QAM                    |
|                                                                        |
| V.34            (voir tableau suivant)                                 |
|                                                                        |
| V.27ter         4800            1600            DPSK                   |
|                 2400            1200            DPSK                   |
|                                                                        |
| V.29            9600            2400            QAM                    |
|                 7200            2400            QAM                    |
|                 4800            2400            QAM             [2]    |
|                                                                        |
| V.17           14400            2400            QAM+TCM                |
|                12000            2400            QAM+TCM                |
|                 9600            2400            QAM+TCM                |
|                 7200            2400            QAM+TCM                |
+------------------------------------------------------------------------+

[1] Bande de retour.
[2] Pas utilise pour fax.

V.21, V.22, V.22bis, V.32, V.32bis, V.34 sont "full duplex".
V.27ter, V.29, V.17 sont "half duplex" et utilises pour fax.
V.23 est "half duplex" et asymetrique.

Les modulations:

FSK :  Frequency Shift Keying 		(modulation de frequence)
DPSK : Differential Phase Shift Keying 	(modulation de phase differentielle)
QAM :  Quadrature Amplitude Modulation	(modulation d'amplitude en quadrature)
TCM :  Trellis Coded Modulation		(modulation codee en treillis)
</verb></tscreen>

Dans le cas de l'avis V.34, les choses  se compliquent un peu.  Cette norme
a des vitesses  de modulation obligatoires  (2400, 3000, 3200 bauds) et des
vitesses facultatives (2743, 2800, 3429 bauds).  La modulation est toujours
de type QAM   (modulation  d'amplitude en quadrature)  avec   une des trois
m&eacute;thodes TCM   choisie  par le r&eacute;cepteur.   Les  combinaisons
suivantes sont possibles&nbsp;:

<tscreen><verb>
+-------------------------------------------------------------+
|         2400    2743    2800    3000    3200    3429  bauds |
|  b/s                                                        |
+-------------------------------------------------------------+
|  2400     x                                                 |
|  4800     x       x       x       x       x       x         |
|  7200     x       x       x       x       x       x         |
|  9600     x       x       x       x       x       x         |
| 12000     x       x       x       x       x       x         |
| 14400     x       x       x       x       x       x         |
| 16800     x       x       x       x       x       x         |
| 19200     x       x       x       x       x       x         |
| 21600     x       x       x       x       x       x         |
| 24000             x       x       x       x       x         |
| 26400                             x       x       x         |
| 28800                                     x       x         |
+-------------------------------------------------------------+
</verb></tscreen>

<sect>
Foire Aux Questions
<p>

<descrip>

<tag/Comment puis-je changer  facilement  un param&egrave;tre de   mon port
s&eacute;rie ?/

La meilleure fa&ccedil;on de le faire, aussi bien  manuellement que dans un
script est de  rediriger le  p&eacute;riph&eacute;rique sur l'entr&eacute;e
standard de <it/stty/. Exemple&nbsp;:

<tscreen><verb>
	stty crtscts < /dev/ttyS0
</verb></tscreen>

activera le   contr&ocirc;le de flux  mat&eacute;riel  sur  le premier port
s&eacute;rie utilis&eacute; en entr&eacute;e.

<tscreen><verb>
	stty -a < /dev/cua0
</verb></tscreen>

affichera   tous   les  param&egrave;tres   du  premier   port s&eacute;rie
utilis&eacute; en sortie.

<tag/Pourquoi faut-il configurer CRTSCTS sur le port s&eacute;rie ?/

Pour g&eacute;rer le contr&ocirc;le de  flux mat&eacute;riel.  Ce n'est pas
une  obligation, c'est une  garantie que l'&eacute;change de donn&eacute;es
entre  ETTD et ETCD se  fera dans les  meilleures conditions.  Il faut bien
entendu que  votre modem puisse    le faire.  Contrairement  &agrave;   une
id&eacute;e  re&ccedil;ue, si vous  mettez l'option CRTSCTS dans le fichier
/etc/gettydefs, il  n'est  pas n&eacute;cessaire  d'effectuer   en plus  un
<tt>stty  crtscts &lt;/dev/port\#</tt>.   Par   contre, il faut  le  mettre
&agrave; la fois dans la  partie <it/initiale/ et <it/finale/ de gettydefs.
Notez qu'il s'agit bien d'un contr&ocirc;le de  flux local, et en aucun cas
il  ne faut  s'inqui&eacute;ter de  ce  que fait  le correspondant dans  ce
domaine.

<tag>Je  remarque  que  agetty modifie les droits du fichier /dev/ttyS0,
bizarre non&nbsp;?</tag>

Ca  peut  effectivement para&icirc;tre  bizarre.   Il  s'agit  en  fait  de
l'&eacute;tablissement       d'une    <it/session/    d'utilisation      du
p&eacute;riph&eacute;rique. Celui-ci prend alors les droits du <sq/chef/ de
session (<it/session leader/) qui se  prot&egrave;ge ainsi des utilisations
du m&ecirc;me tty par d'autres processus.

<tag/Aurais-je acc&egrave;s &agrave; mon t&eacute;l&eacute;phone ?/

Cette question a &eacute;t&eacute; r&eacute;ellement pos&eacute;e.  Si vous
n'avez qu'une  ligne t&eacute;l&eacute;phonique, la r&eacute;ponse est non.
De plus, en d&eacute;crochant le combin&eacute; t&eacute;l&eacute;phonique,
vous  pertuberez la    ligne et  le   modem  risque  fort  de   diminuer le
d&eacute;bit (pour le remonter si tout va bien ensuite).

<tag/Lorsque  je me connecte chez mon  fournisseur, comment  mon adresse IP
est g&eacute;n&eacute;r&eacute;e&nbsp;?/

Cette question montre &agrave; l'&eacute;vidence une confusion entre toutes
les notions r&eacute;seaux. Bien qu'elle ait &eacute;t&eacute; pos&eacute;e
suite &agrave; un probl&egrave;me relatifs aux modems, la r&eacute;ponse ne
devrait    th&eacute;oriquement      pas     se       trouver   dans     ce
document. N&eacute;anmoins, le chapitre suivant rappelle quelques principes
de base des empilements protocolaires afin de clarifier un peu tout cela.

</descrip>

<sect>
Un mot sur les empilements protocolaires couramment utilis&eacute;s
<p>

Un tel titre pourrait  faire croire &agrave; une erreur  de mise en page ou
de <it/copier-coller/ &eacute;tant  donn&eacute;  le sujet du  document. En
fait, il n'en est rien.
<p>

La connexion d'une machine &agrave;  un fournisseur d'acc&egrave;s &agrave;
Internet met en jeu un ensemble de protocoles de communications&nbsp;: TCP,
UDP,    IP,  SLIP,   PPP,   etc.    De  nombreux  utilisateurs   souhaitent
r&eacute;aliser ce type   de connexion depuis   chez eux, via  un modem  et
rencontrent parfois quelques probl&egrave;mes de configuration.
<p>

Il est &eacute;vident  qu'il est &agrave; la  fois difficile et inutile  de
tout conna&icirc;tre de ces protocoles.  Il faut vraiment <it/&ecirc;tre du
m&eacute;tier/ pour bien les conna&icirc;tre, et encore&nbsp;! Cependant il
semble raisonnable de penser  que la mise  en oeuvre de  telles connexions,
sous Linux par exemple, ne peut se faire  dans de bonnes conditions sans un
minimum   de   connaissances     sur  l'architecture    de    communication
utilis&eacute;e.

La lecture  du   forum <it/fr.comp.os.linux/ montre   parfois  une certaine
confusion  dans toutes  les fonctions  mises en  oeuvre   et qui engendrent
in&eacute;vitablement de mauvais param&eacute;trages.
<p>

Les  quelques sch&eacute;mas  qui suivent  donnent  une  id&eacute;e de  la
fa&ccedil;on dont tous ces   <it/engrenages/  sont plac&eacute;s pour   que
<sq/&ccedil;a tourne/&nbsp;!

<sect1>
TCP/UDP/IP
<P>

Ces sigles  sont tr&egrave;s fr&eacute;quemment utilis&eacute;s aujourd'hui
et pour cause&nbsp;: ces  empilements de couches de  communications tendent
&agrave; se r&eacute;pandre &agrave; vive allure.  C'est &agrave; l'origine
un ensemble de protocoles d&eacute;velopp&eacute;s dans  le cadre du projet
ARPANET, cr&eacute;&eacute; par ARPA (aujourd'hui DARPA), l'agence pour les
projets  de     recherche  avanc&eacute;e   du    Minist&egrave;re  de   la
D&eacute;fense des Etats-Unis.

<itemize>
<item>

TCP<footnote>  Transmission     Control Protocol  </footnote>     est   une
entit&eacute; de  niveau Transport  charg&eacute;e de v&eacute;hiculer  des
donn&eacute;es  de  mani&egrave;re  fiable  entre  deux machines souhaitant
dialoguer&nbsp;;

<item>

UDP<footnote> User Datagram  Protocol</footnote> est  une entit&eacute;  de
niveau  Transport  charg&eacute;e  de  v&eacute;hiculer des  donn&eacute;es
entre deux machines souhaitant dialoguer&nbsp;;

<item>

IP<footnote> Internet Protocol</footnote>  est une entit&eacute;  de niveau
R&eacute;seau charg&eacute;e de  v&eacute;hiculer des  donn&eacute;es entre
deux noeuds d'un r&eacute;seau.

</itemize>

<sect1>
PPP/SLIP
<P>

PPP<footnote>Point-to-Point Protocol</footnote>    et  SLIP<footnote>Serial
Line   IP</footnote>  proposent  une   m&eacute;thode d'encapsulation   des
datagrammes  IP sur  des liaisons   point &agrave;  point, par  exemple les
lignes asynchrones s&eacute;rie.  En quelques  mots, disons que SLIP est un
protocole tr&egrave;s  simple,  assez  ancien,  datant d'une  &eacute;poque
o&ugrave;  certains  probl&egrave;mes n'&eacute;taient pas aussi importants
qu'aujourd'hui&nbsp;:      adressage,   identification   r&eacute;ciproque,
d&eacute;tection    et   correction d'erreurs,   compression  (extrait   du
RFC-1055).  PPP est  quant  &agrave; lui  beaucoup  plus  complet et  c'est
pourquoi il est g&eacute;n&eacute;ralement pr&eacute;f&eacute;r&eacute; par
les    connaisseurs.    Il  offre   toutes   ces    caract&eacute;ristiques
regroup&eacute;es en trois sous-ensembles&nbsp;:

<itemize>

<item>

une m&eacute;thode d'encapsulation de type  HDLC sur circuit commut&eacute;
ou permanent, synchrone ou asynchrone&nbsp;;

<item>

un  protocole LCP (Link  Control Protocol)  permettant d'&eacute;tablir, de
configurer et de tester une connexion&nbsp;;

<item>

une   famille  de  protocoles NCP      (Network  Control Protocols)    pour
l'&eacute;tablissement et la configuration des protocoles r&eacute;seaux.

</itemize>

<p>

Pour obtenir  de plus amples renseignements,  vous pouvez vous reporter aux
documents  concernant   ces   protocoles&nbsp;:   <bf/RFC-1055/ (SLIP),
<bf/RFC-1171/ et <bf/RFC-1172/ (PPP) et le <bf/PPP-HOWTO/.

<sect1>
Mise en oeuvre
<p>

<tscreen><verb>

+----------------+-------+ +--------+ +--------+ +------+ +-----+
|  Applications  |  FTP  | | TELNET | |  SMTP  | | TFTP | | ... |
+----------------+---+---+ +---+----+ +--------+ +--+---+ +-----+
                     |         |      |             | 
+----------------+---+---------+------++------------+-----+
| Transport      |         TCP         |        UDP       |
+----------------+---------------------+------------------+
| Reseau         |                                        |
|                |                    IP                  |
|                |      _____         _____     ______    |
| (interfaces)   |     / eth \       / ppp \   / slip \   |
+----------------+-----------------^---------+------------+
| Liaison        |       LLC       |   PPP   |   SLIP     |
|                |       MAC       |         |            |
+----------------+-------++--------+--------+-+-----------+
                         ||                 | |
+----------------+-------++--------+--------+-+-----------+
| Interfaces     |      LAN        |       V.24           | Fonctionnelle
|                |  (non decrit)   |       V.28           | Electrique
|                |                 |  ISO.2110 (25 br)    | Physique
+----------------+-------++--------+--------+-+----------------+
                         ||                 | |
              Ethernet  +--+              +-+-+-+  Modem
              ==========|  |=====         |\     \-------
              Fddi      +--+              \ \_____\     /
                                           \|_0_0_|    ---------
</verb></tscreen>

La mise en oeuvre de  tels protocoles se fait  toujours de bas en haut (des
couches  basses aux couches  hautes) puisque la demande  se fait de haut en
bas. Prenons un exemple&nbsp;:
<p>

Supposons  que  vous   souhaitiez faire   un  <it/ftp/  de  chez vous   sur
<it/ftp.samachine.fr/.   L'application    <it/ftp/    demande &agrave;  TCP
d'&eacute;tablir une connexion. Pour  qu'elle puisse s'&eacute;tablir,  PPP
doit d&eacute;j&agrave; fonctionner. Pour que PPP fonctionne, le modem doit
&ecirc;tre en ligne&nbsp;:
<p>

<itemize>

<item>

premi&egrave;re   &eacute;tape&nbsp;:      &eacute;tablissement      d'une
communication  entre  deux modems.  Cette  &eacute;tape est suppos&eacute;e
connue, maintenant&nbsp;;

<item>

deuxi&egrave;me    &eacute;tape&nbsp;: mise  en     route  de    PPP,  avec
&eacute;ventuellement authentification&nbsp;;

<item>

troisi&egrave;me  &eacute;tape&nbsp;:  configuration    de  l'interface  IP
correspondante.    Il  s'agit   en  g&eacute;n&eacute;ral,  sous  Linux, de
l'interface <it/ppp0/.   Une  adresse   IP  pouvant provenir   soit   d'une
configuration  locale,  soit  de   votre fournisseur, est   affect&eacute;e
&agrave; l'interface.   Dans  ce dernier  cas, celui-ci  la fournit lors de
l'initialisation PPP.   Dans  les deux  cas, c'est le  d&eacute;mon PPP qui
configure l'adresse de l'interface&nbsp;;

<item>

quatri&egrave;me &eacute;tape&nbsp;:  &eacute;tablissement  d'une connexion
TCP, puis initialisation de <it/ftp/.  A partir de l&agrave;, si tout s'est
bien pass&eacute;, vous pouvez transf&eacute;rer vos fichiers.
<p>

</itemize>

Vous pouvez    maintenant     imaginer   le    d&eacute;roulement     d'une
d&eacute;connexion.

<sect1>
Les fichiers de configuration
<p>

<sect2>
Les applications
<p>

Vous comprendrez qu'il  est  difficile de d&eacute;crire  ici l'emplacement
des  fichiers de configuration  des applications.  Prenez  soin de lire les
fichiers  README  ou     INSTALL   et d'ex&eacute;cuter      l'installation
correctement.

<sect2>
Les couches de communication : TCP/UDP/IP
<p>

Pour une configuration standard  de votre machine,  vous devez compiler  le
noyau avec les options <sq/r&eacute;seau/ suivantes&nbsp;:

<tscreen><verb>
Networking support		y

Network firewalls		n
Network aliasing		n
TCP/IP networking		y

IP: forwarding/gatewaying	n
IP: multicasting		n
IP: accounting			n
IP: PC/TCP compatibility mode	n
IP: Reverse ARP			n
IP: Disable Path MTU Discovery
    	(normally enabled)	n
IP: Disable NAGLE algorithm
    	(normally enabled)	n
IP: Drop source routed frames	y
IP: Allow large windows
    	(not recommended
	if <16Mb of memory)	n

The IPX protocol		n
... autres protocoles 		n
</verb></tscreen>

Le fichier <it/resolv.conf/ doit contenir&nbsp;:

<tscreen><verb>
domain <domaine de votre fournisseur>
nameserver <adresse IP du serveur de nom de votre fournisseur>
</verb></tscreen>

<sect>
Le Minitel
<p>

Bien que ce merveilleux appareil commence  &agrave; prendre de l'&acirc;ge,
il est difficile de  ne pas en parler  un peu, notamment  en raison de  ses
sp&eacute;cificit&eacute;s. Pourquoi ne pas envisager  en effet de faire un
serveur Minitel chez vous ou tout simplement  de l'utiliser comme terminal.
Nous nous   contenterons ici  d'en donner quelques  caract&eacute;ristiques
int&eacute;ressantes dans le cadre d'une utilisation avec Linux.
<p>

Les STUM&nbsp;1B<footnote>Sp&eacute;cifications Techniques d'Utilisation du
Minitel    1B.</footnote>     d&eacute;crivent        l'ensemble        des
caract&eacute;ristiques des divers modules du Minitel 1B&nbsp;:

<itemize>
<item>
l'&eacute;cran&nbsp;;

<item>
le clavier&nbsp;;

<item>
le modem&nbsp;;

<item>
la prise p&eacute;ri-informatique.<footnote>A ce  propos, je tiens &agrave;
votre disposition   un   sch&eacute;ma  &eacute;lectronique  d'un   montage
permettant l'adaptation RS232-Minitel.  Il met en  oeuvre le circuit MAX232
permettant une parfaite adaptation des tensions.</footnote>

</itemize>

<sect1>
L'&eacute;cran
<p>

Le   minitel  1B  est  capable    d'afficher   24 lignes   de   40  ou   80
caract&egrave;res et 8 couleurs (ou niveaux de gris).

Le mode 40  colonnes correspond   au  standard <it/Videotex/, le mode    80
colonnes   au  standard   <it/t&eacute;l&eacute;-informatique/.    C'est en
g&eacute;n&eacute;ral  celui-ci que  l'on       utilisera s'il sert      de
terminal.  Les s&eacute;quences de touches  permettant de  passer d'un mode
&agrave; l'autre sont indiqu&eacute;es dans le  tableau suivant dans lequel
on retrouvera &eacute;galement quelques s&eacute;quences utiles&nbsp;:

<tscreen><verb>
+-------------+----------------------------------+
|   Touches   |          Signification           |
+-------------+----------------------------------+
| <Fcnt T> A  | Mode tele-informatique americain |
|             | (pas d'accents)                  |
| <Fcnt T> F  | Mode tele-informatique francais  |
|             | accents (codage particulier)     |
| <Fcnt T> V  | Mode Videotex                    |
+-------------+----------------------------------+
| <Fcnt T> E  | Valide/invalide l'echo local     |
|             |                                  |
| <Fcnt E> P  | Mode page (retour haut de page   |
|             | en fin d'ecran)                  |
| <Fcnt E> R  | Mode rouleau (par defaut)        |
|             |                                  |
| <Fcnt C> M  | Verouillage minuscules (defaut   |
|             | en mode tele-informatique)       |
+-------------+----------------------------------+
</verb></tscreen>


<sect1>
Le clavier
<p>

Il s'agit d'un  clavier <it/AZERTY/ permettant  la saisie de la plupart des
caract&egrave;res courants pour un  terminal.  Il est notamment possible de
verouiller  les  minuscules    gr&acirc;ce  &agrave;   la   s&eacute;quence
&lt;Fcnt&nbsp;C&gt;&nbsp;M.   A noter une   correspondance,  dans  le  mode
t&eacute;l&eacute;-informatique, de certaines touches&nbsp;:

<tscreen><verb>
+-------------+-----------------------------------+
|   Touches   | Correspondance terminal classique |
+-------------+-----------------------------------+
| Sommaire    |   PF1                             |
|             |                                   |
| Annulation  |   PF2                             |
|             |                                   |
| Retour      |   PF3                             |
|             |                                   |
| Repetition  |   PF4                             |
|             |                                   |
| Envoi       |   Enter (Entree)                  |
+-------------+-----------------------------------+
</verb></tscreen>

La   touche   <it/Entr&eacute;e/   correspond &eacute;galement &agrave;  la
s&eacute;quence de touches &lt;Ctrl&nbsp;J&gt;

<sect1>
Le modem
<p>

Le modem du minitel  permet des d&eacute;bits  de 300 &agrave; 4800 ou 9600
bits/s<footnote>Tous les  mod&egrave;les de  minitel n'autorisent pas  tous
ces d&eacute;bits.</footnote>.  Il  est associ&eacute; &agrave; un coupleur
travaillant sur 7 bits de donn&eacute;es, un bit de parit&eacute; paire, un
bit   de   <it/start/   et  un   bit  de   <it/stop/,   soit   10  bits par
caract&egrave;re.  Le tableau suivant donne les s&eacute;quences de touches
permettant de  configurer   le    modem &agrave;   ces    diff&eacute;rents
d&eacute;bits.


<tscreen><verb>
+-------------+--------------+
|   Touches   |    Debit     |
+-------------+--------------+
| <Fcnt P> 3  |  300 bits/s  |
|             |              |
| <Fcnt P> 1  | 1200 bits/s  |
|             |              |
| <Fcnt P> 4  | 4800 bits/s  |
|             |              |
| <Fcnt P> 9  | 9600 bits/s  |
+-------------+--------------+
</verb></tscreen>

En  standard  V.23, il  est possible  de   <it/retourner/ le modem (vitesse
&eacute;mission-r&eacute;ception)     avec      la          s&eacute;quence
&lt;Fcnt&nbsp;M&gt;&nbsp;R.

<sect1>
Utilisation du Minitel comme simple terminal
<p>

D'apr&egrave;s les conseils avis&eacute;s de  <it/Pierre Ficheux/, voici un
exemple de configuration permettant de connecter un Minitel&nbsp;:

<sect2>
Configuration de getty
<p>

Une m&eacute;thode simple consiste  &agrave; compiler un <it/getty/ un  peu
particulier.       Les    sources   se    trouvent     dans  le   paquetage
<bf/getty_ps-2.0.7h/,   en  g&eacute;n&eacute;ral  disponible par  <it/ftp/
(ftp.ibp.fr) sous  <bf>/pub/linux/tsx-11/sources/sbin</bf>.  <p>  Il s'agit
ensuite de modifier le fichier <it/tune.h</it> comme suit&nbsp;:

<tscreen><verb>
#ifdef V23
#define	DEF_CFL	 (CS7|PARENB)			/* Pour connexion V.23 */
#else
#define	DEF_CFL	 (CS8)			/* default word-len/parity */
#endif /* V23 */
</verb></tscreen>

Puis de  compiler l'ensemble avec  l'option  -DV23 vous donnant  un fichier
ex&eacute;cutable  <it/uugetty/ que vous pourrez renommer <it/uugetty_v23/.
Ensuite, il      faut    ajouter  quelques  entr&eacute;es       au fichier
<it>/etc/gettydefs</it>&nbsp;:

<tscreen><verb>
#
# Pour la connexion V.23
#
9600v23# B9600 CS7 PARENB -PARODD CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S login: #4800v23

4800v23# B4800 CS7 PARENB -PARODD CLOCAL # B4800 SANE -ISTRIP CLOCAL #@S login: #2400v23

2400v23# B2400 CS7 PARENB -PARODD CLOCAL # B2400 SANE -ISTRIP CLOCAL #@S login: #1200v23

1200v23# B1200 CS7 PARENB -PARODD CLOCAL # B1200 SANE -ISTRIP CLOCAL #@S login: #1200v23
</verb></tscreen>

Enfin, vous   modifiez  le fichier  <it/inittab/  de  fa&ccedil;on &agrave;
d&eacute;marrer <it/uugetty_v23/ comme dans l'exemple ci-dessous&nbsp;:

<tscreen><verb>
d4:45:respawn:/sbin/uugetty_v23 ttyS1 9600v23
</verb></tscreen>

Une  solution  diff&eacute;rente  consisterait &agrave;  seulement modifier
<it>/etc/gettydefs</it>.   La m&eacute;thode pr&eacute;c&eacute;dente    ne
fait, finalement, que red&eacute;finir l'option   SANE qui ne comporte  pas
moins de 16 param&egrave;tres, en modifiant  l'un d'eux&nbsp;: DEF_CFL.  Il
est    possible    de  la   red&eacute;finir   par    configuration   en la
rempla&ccedil;ant par l'ensemble des param&egrave;tres,  sauf CS8 que  l'on
remplacera   par      CS7&nbsp;PARENB.   Les        entr&eacute;es       de
<it>/etc/gettydefs</it>    sont  &agrave;       modifier    comme l'exemple
ci-apr&egrave;s&nbsp;:

<tscreen><verb>
#
# Pour la connexion V.23
#
9600v23# B9600 CS7 PARENB -PARODD CLOCAL # B9600 ISTRIP CS7 PARENB -PARODD (*)
 CLOCAL BRKINT IGNPAR ICRNL IXON IXANY OPOST ONLCR CREAD HUPCL ISIG ICANON (*)
 ECHO ECHOE ECHOK #@S login: #4800v23

(*) a continuer sur la meme ligne

[reste du ficher]
</verb></tscreen>

Bien que cela puisse  para&icirc;tre lourd, il est pr&eacute;f&eacute;rable
d'utiliser  cette m&eacute;thode.  On  a  trop tendance &agrave; recompiler
des  sources pour les adapter &agrave;   trente-six situations alors qu'ils
fournissent g&eacute;n&eacute;ralement  un niveau de configurabilit&eacute;
extr&ecirc;mement  complet et puissant.  C'est le  cas  ici. Les sources de
<it/getty/ pr&eacute;voient  d'analyser tous ces param&egrave;tres, et cela
fonctionne parfaitement.

<sect1>
Utilisation du Minitel pour un acc&egrave;s distant
<p>

Deux cas peuvent se pr&eacute;senter&nbsp;:

<itemize>
<item>

soit vous  souhaitez  d&eacute;dier   votre ligne aux   seuls  acc&egrave;s
Minitel, auquel cas   il  est souhaitable d'envisager de   configurer votre
syst&egrave;me comme ci-dessus.   Il  faut simplement modifier  le  fichier
<it>/etc/gettydefs</it> en  rempla&ccedil;ant l'option  CLOCAL par  CRTSCTS
dans  la      premi&egrave;re   partie   (options   initiales)    et    par
CRTSCTS&nbsp;HUPCL dans le partie suivante (options finales)&nbsp;;

<item>

soit vous  souhaitez seulement <it>pouvoir</it>  utiliser le  Minitel comme
terminal    distant,      sans   que    ce     soit   un       acc&egrave;s
d&eacute;di&eacute;.  Dans ce  cas il n'y  a rien  &agrave; faire sur votre
syst&egrave;me   (rien   de plus  que  la    configuration  que  vous  avez
d&eacute;j&agrave;  d&ucirc;   mettre en  place&nbsp;:   getty,  gettydefs,
inittab, ...).   Sur le  Minitel,  il sera  pr&eacute;f&eacute;rable de  le
configurer          en           mode       t&eacute;l&eacute;-informatique
(&lt;Fcnt&nbsp;T&gt;&nbsp;F).

</itemize>

<sect>
Un modem particulier: le c&acirc;ble null-modem
<p>

Un c&acirc;ble <it/null-modem/ est tout simplement un c&acirc;ble inverseur
permettant  de   relier        ensemble  deux  ETTD  sans    passer     par
l'interm&eacute;diaire     de deux ETCD.   Il   est  conforme aux normes du
C.C.I.T.T., c'est &agrave; dire qu'il simule les diff&eacute;rents signaux.
Son     seul    inconv&eacute;nient     est     que   la   liaison    ainsi
r&eacute;alis&eacute;e ne peut d&eacute;passer 250 m&egrave;tres.
<p>

Voici le sch&eacute;ma du c&acirc;ble &agrave; r&eacute;aliser&nbsp;:

<tscreen><verb>
+------+-------+---------------------------------+------+-------+
| Code | V.24  |     Cablage (No de broche)      | Code | V.24  |
+------+-------+---------------------------------+------+-------+
| 101  |  TP   |    1 o-------------------o 1    | 101  |  TP   |
|      |       |                                 |      |       |
| 102  |  TS   |    7 o-------------------o 7    | 102  |  TS   | 
|      |       |                                 |      |       |
| 103  |  ED   |    2 o-------------------o 3    | 104  |  RD   |
|      |       |                                 |      |       |
| 104  |  RD   |    3 o-------------------o 2    | 103  |  ED   |
|      |       |                                 |      |       |
| 105  |  DPE  |    4 o-|               |-o 4    | 105  |  DPE  |
|      |       |        |               |        |      |       |
| 106  |  PAE  |    5 o-|               |-o 5    | 106  |  PAE  |
|      |       |        \        ,------'        |      |       |
|      |       |         -------(---------o 8    | 109  |  DS   |
| 109  |  DS   |    8 o---------'                |      |       |
|      |       |                                 |      |       |
| 107  |  PDP  |    6 o------------------o 20    | 108  |  TDP  |
|      |       |                                 |      |       |
| 108  |  TDP  |   20 o------------------o 6     | 107  |  PDP  |
|      |       |                                 |      |       |
+------+-------+---------------------------------+------+-------+
</verb></tscreen>

<sect>
Choix d'un modem
<p>

Si vous &ecirc;tes sur le  point d'investir dans un modem,  il y a au moins
trois facteurs d&eacute;terminants pour vous&nbsp;:

<descrip>
<tag/Le co&ucirc;t/

Ce  facteur est g&eacute;n&eacute;ralement   le plus important.  Vous  vous
&ecirc;tes  certainement fix&eacute;  une     somme que  vous  ne   pourrez
d&eacute;passer que   dans des limites raisonnables   (moins  de 500 francs
environ) et       moyennant   un    service    suppl&eacute;mentaire    non
n&eacute;gligeable. On trouve &agrave; l'heure actuelle d'excellents modems
dans une gamme de prix de l'ordre de 1000 FF &agrave; 2000 FF.

<tag/Le d&eacute;bit/

La r&eacute;ponse pourrait  &ecirc;tre  vague&nbsp;: tout d&eacute;pend  de
l'utilisation. En fait, il semble que la plupart d'entre vous se connectera
&agrave; Internet et la plupart des fournisseurs proposent d&eacute;sormais
des acc&egrave;s &agrave;  28800  bits/s. Il semble raisonnable  d'investir
dans   un tel   modem, d'autant  plus    que leur co&ucirc;t  est  rarement
sup&eacute;rieur    &agrave;    2000&nbsp;FF.     Vous   pouvez  d'ailleurs
esp&eacute;rer gagner un peu sur les temps de connexions lors de transferts
de fichiers ou de navigation <sq/WEB/.

<tag/Le type de modem&nbsp;: interne ou externe/

Pour r&eacute;pondre rapidement, on pourrait  dire que le modem interne  a,
en  France, tous les  d&eacute;fauts.   Hors  de  France, il a  beaucoup de
d&eacute;fauts. C'est un  avis,  il  vaut ce   qu'il vaut, mais  il  semble
partag&eacute; par bon nombre d'utilisateurs&nbsp;:

</descrip>

<itemize>
<item>

le  premier  d&eacute;faut  est  qu'il  est   interne et   occupe  donc  un
emplacement sur  le <it/bus/. En  externe le modem  est  de plus facilement
transportable d'un PC &agrave; un autre, par exemple&nbsp;;

<item>

le deuxi&egrave;me est que notre op&eacute;rateur national demande &agrave;
ce  qu'un  num&eacute;ro   soit  <sq/br&ucirc;l&eacute;/   lorsqu'un  appel
&eacute;choue plusieurs fois.  Une fois le num&eacute;ro br&ucirc;l&eacute,
le    modem   refuse de  le    composer.   La  seule   solution  est  alors
d'&eacute;teindre  le  modem   et  de   recommencer.   Au    fait,  comment
&eacute;teignez-vous un modem interne&nbsp;?

<item>

le troisi&egrave;me est plut&ocirc;t li&eacute; au confort.  La plupart des
modems  externes  poss&egrave;dent    en   effet  des   voyants   indiquant
l'&eacute;tat  de  la  connexion.  Il   est  agr&eacute;able  de  constater
rapidement que   la   connexion  est   perdue  ou   que  le  transfert  est
perturb&eacute;.

</itemize>

Le  seul inconv&eacute;nient du  modem   externe est qu'il  occupe un  port
s&eacute;rie. De  plus il vaut mieux  poss&eacute;der  un port s&eacute;rie
rapide  de type 16550A (les  16550 sont bogu&eacute;s). Notez cependant que
les  ports   s&eacute;rie  de type   8250   (les  anciens) supportent   des
d&eacute;bits pouvant   aller jusqu'&agrave; 57600   bits/s.  Contrairement
&agrave;  ce que l'on dit,  ils  ne sont pas si  mauvais  que cela. Qui est
d&eacute;j&agrave;    mont&eacute;      &agrave;        des   d&eacute;bits
sup&eacute;rieurs&nbsp;?

<sect>
Quelques chiffres
<p>

Beaucoup  d'utilisateurs   se posent des  questions  sur  ce qu'ils peuvent
attendre de leur  modem et du co&ucirc;t  des communications. Bien souvent,
la facture surprend tous les deux mois.

<sect1>
D&eacute;bit r&eacute;el
<p>

Un petit tableau vaut mieux qu'un long discours,  voici quelques valeurs de
d&eacute;bits r&eacute;els.  Evidemment,   il  n'est pas tenu   compte  des
probl&egrave;mes  de   lignes,  de  disponibilit&eacute; des   serveurs qui
r&eacute;duisent parfois   les taux de  transfert effectifs.   De plus, les
valeurs sont indiqu&eacute;es  sans  compression  logicielle.  En  cas   de
compression, il faudra multiplier les  valeurs par au   plus 2, ce qui  est
d&eacute;j&agrave; optimiste.

Il  faut   savoir  qu'en  transmission   asynchrone 8   bits,  &eacute;tant
donn&eacute;s  les  bits de <bf/start/ et  de  <bf/stop/,  le rendement est
d'environ 80%.

<tscreen><verb>
+---------------+--------------+-------------------+
| Debit affiche |  Debit reel  |  Ko/s  | Mo/heure |
+---------------+--------------+--------+----------+
|   9600 b/s    |   7680 b/s   |  0,96  |   3,4    |
|               |              |        |          |
|  14400 b/s    |  11520 b/s   |  1,44  |   5,2    |
|               |              |        |          |
|  19200 b/s    |  15360 b/s   |  1,92  |   6,9    |
|               |              |        |          |
|  21600 b/s    |  17280 b/s   |  2,16  |   7,8    |
|               |              |        |          |
|  26400 b/s    |  21120 b/s   |  2,64  |   9,5    |
|               |              |        |          |
|  28800 b/s    |  23040 b/s   |  2,88  |  10,4    |
+---------------+--------------+--------+----------+
</verb></tscreen>

<sect1>
Co&ucirc;ts de connexion
<p>

Le meilleur  indicateur  pour ce genre   de calcul est bien  entendu France
T&eacute;l&eacute;com.  Essayons   ici de d&eacute;gager   quelques  grands
chiffres.   Les  prix  sont  indiqu&eacute;es    pour  un  appel   &agrave;
Paris&nbsp;:

<tscreen><verb>
+---------------+---------------------------------+
|               |  Prix / heure de connexion      |
+---------------+---------------------------------+
| Appel de :    | Tarif plein |   50%   |   65%   |
+---------------+-----------------------+---------+
|     Paris     |   14,84 F   |  7,42 F |  5,20 F |
|               |             |         |         |
|  Proche       |   22,26 F   | 11,13 F |  7,79 F |
|  Banlieue     |             |         |         |
|               |             |         |         |
|  Province     |  127,20 F   | 63,60 F | 44,52 F |
+---------------+---------------------------------+
</verb></tscreen>
Prix de l'unit&eacute; T&eacute;l&eacute;com&nbsp;: 0,742 FF.
<p>

<sect>
Envisager d'&eacute;crire des applications
<p>

Vous  avez  s&ucirc;rement    plein  d'id&eacute;es          d'applications
int&eacute;ressantes,  mais   envisager  de  contr&ocirc;ler   une jonction
s&eacute;rie vous fait peur&nbsp;? Voici quelques petites indications.

<sect1>
Et si c'&eacute;tait simple&nbsp;?
<p>

Sous  Unix, donc sous  Linux,  les seuls  objets manipul&eacute;s  lors des
entr&eacute;es/sorties sont les <it/fichiers/.   (Tiens, au fait, on aurait
peut-&ecirc;tre d&ucirc; commencer par l&agrave;&nbsp;! Bon, vous le saviez
d&eacute;j&agrave;, ce n'est pas un cours  Unix).  La jonction s&eacute;rie
n'&eacute;chappe  pas &agrave;  cette   r&egrave;gle et le   pilote vous la
pr&eacute;sente  ainsi. Ici, il s'agit d'un  (ou plut&ocirc;t deux comme on
le verra  plus loin) fichier particulier, bien  s&ucirc;r, puisque se cache
derri&egrave;re un  pilote (<it/driver/) en  mode caract&egrave;re, mais la
fa&ccedil;on de    r&eacute;aliser les   entr&eacute;es   sorties est    la
m&ecirc;me&nbsp;: <bf/open, read,    write, ioctl, close/.   Il y   a quand
m&ecirc;me quelques petites choses &agrave; savoir.
<p>

Le pilote s&eacute;rie  s'est enregistr&eacute;,  &agrave; l'initialisation
du noyau, comme  un <it/tty/.  Il  est donc g&eacute;r&eacute; comme un tty
classique.     Il apporte   bien  entendu quelques  caract&eacute;ristiques
suppl&eacute;mentaires  que    nous verrons   rapidement  dans   la section
concernant  la commande  <it/ioctl/.  Toujours   est-il  que si vous  savez
g&eacute;rer  un <it/tty/ sous  Unix (commande <it/stty/), vous saurez sans
probl&egrave;me g&eacute;rer ce pilote.
<p>

<sect2>
open, close
<p>

La  m&eacute;thode d'ouverture et de  fermeture  d'un port s&eacute;rie est
classique.   N&eacute;anmoins  un  m&eacute;canisme  particulier se   cache
derri&egrave;re  la primitive  <bf/open/  qui est rapidement  d&eacute;crit
&agrave; la section <ref id="sec-appels" name="Appels entrants (Dial-in) et
appels sortants (Call-out) sous Linux">.

<sect2>
read, write
<p>

Rien &agrave; signaler de particulier.

<sect2>
ioctl
<p>

Le contr&ocirc;le de  tout  syst&egrave;me  d'entr&eacute;e/sortie se  fait
avec la commande syst&egrave;me <it/ioctl/. Elle est souvent masqu&eacute;e
par des commandes de  haut niveau (setserial,  stty, modemstat,  ...), mais
elle est leur moteur.
<p>

Selon     que vous souhaitez    vous   adresser aux  fonctionnalit&eacute;s
classiques d'un <it/tty/   ou aux fonctions sp&eacute;cialis&eacute;es   du
pilote s&eacute;rie,  vous  utiliserez  deux  sous-ensembles  de  commandes
diff&eacute;rentes.  Vous les retrouverez  dans le fichier &agrave; inclure
<it>linux/termios.h</it>.    D&eacute;crivons-les      rapidement       (on
d&eacute;borde un tout petit peu du sujet <tt>:-)</tt>)&nbsp;:

<descrip>
<tag/TCGETS - TCSETS/

et  quelques d&eacute;riv&eacute;s avec WAIT,  FLUSH... Elles permettent de
r&eacute;cup&eacute;rer (resp. positionner) les attributs standard <it/tty/
dans une structure <it/termios/ (voir le fichier <it>linux/termios.h</it>)

<tag/TIOCSTTY - TIOCNOTTY/

permettent  de d&eacute;finir (resp. annuler)  une session d'utilisation du
<it/tty/. Ceci est visible car, entre autres choses, une cons&eacute;quence
est le changement des droits du fichier correspondant

<tscreen><verb>
Avant:
	crw-rw-rw-   1 root     tty        4,  64 Nov 26 20:47 ttyS0
Apres: 
	crw--w--w-   1 root     root       4,  64 Nov 26 20:49 ttyS0
</verb></tscreen>

<tag/TCFLSH et compagnie/

positionnement d'indicateurs (voir la commande stty)

<tag/TIOCGSERIAL - TIOCSSERIAL/

permettent de r&eacute;cup&eacute;rer (resp.  positionner) les informations
g&eacute;n&eacute;rales dans une  (resp.  &agrave; partir d'une)  structure
<it/serial_struct/ (voir le fichier <it>linux/serial.h</it>)&nbsp;: le type
de port s&eacute;rie, la ligne, le port, l'irq le port utilis&eacute;... ni
plus ni moins ce que fait <it/setserial/.

<tag/TIOCMGET - TIOCMSET/

permettent de r&eacute;cup&eacute;rer (resp.  positionner) les informations
plus sp&eacute;cifiques &agrave;   la  jonction proprement  dite  (dans  un
entier,  sous forme  de bits    positionn&eacute;s selon que   l'indicateur
correspondant est vrai ou faux)&nbsp;:

</descrip>

<tscreen><verb>
+-------------------------------------------------------------------------------------------+
|   //     DSR      RNG       CAR        CTS        //   //    RTS            DTR         //|
|  //   (Data Set  (Ring)  (Carrier)  (Clear To    //   //   (Request   (Data Terminal   // |
| //      Ready)                        Send)     //   //     To Send)      Ready)      //  |
+------+----------+-------+----------+-----------+----+----+-----------+---------------+----+
 31   9     8         7        6          5        4    3        2          1            0
</verb></tscreen>


<sect1><heading><label id="sec-appels">
Appels entrants (Dial-in) et appels sortants (Call-out) sous Linux
<p>

<sect2>
Introduction
<p>

Le  pilote   s&eacute;rie du  noyau  de  Linux  propose de  g&eacute;rer un
m&ecirc;me  port s&eacute;rie &agrave; la  fois pour les appels entrants et
pour   les   appels     sortants    exploitant   ainsi  pleinement     leur
caract&eacute;ristique   bi-directionnelle.   Il   offre  donc     &agrave;
l'utilisateur deux types de fichiers&nbsp;:

<itemize>
<item>

<tt>/dev/ttyS&lt;n&gt;</tt>&nbsp;:      sont     g&eacute;n&eacute;ralement
utilis&eacute;s en entr&eacute;e&nbsp;;

<item>

<tt>/dev/cua&lt;n&gt;</tt>&nbsp;:    sont       g&eacute;n&eacute;ralement
utilis&eacute;s en sortie.

</itemize>

<sect2>
Gestion
<p>

Chaque port s&eacute;rie est  enregistr&eacute; deux fois  aupr&egrave;s du
g&eacute;rant <it/tty/&nbsp;:  une fois  en mode <it/entr&eacute;e/  (ttyS,
majeur&nbsp;4) et  une  fois en   mode  <it/sortie/ (cua,   majeur&nbsp;5).
Voyons   rapidement  comment le pilote    g&egrave;re ensuite les <sq/deux/
ports&nbsp;:

<itemize>

<item>

les ports s&eacute;ries  <tt>/dev/cua</tt> sont g&eacute;r&eacute;s en mode
<it/non-bloquant/.   Leur  ouverture  n'est  possible    que  si  la  ligne
<tt>/dev/ttyS</tt> correspondante n'est   pas  ouverte  et  active   (sinon
<tt/errno/ retourne EBUSY)&nbsp;;

<item>

les ports s&eacute;ries <tt>/dev/ttyS</tt> sont g&eacute;r&eacute;s en mode
bloquant ou  non-bloquant,  c'est donc  un peu  plus  compliqu&eacute;.  Si
l'indicateur     CLOCAL  est   positionn&eacute;,    l'ouverture   en  mode
<bf/bloquant/ est effective  si la ligne  <tt>/dev/cua</tt>  est libre.  Si
l'indicateur CLOCAL n'est pas positionn&eacute;,  elle est effective si les
deux conditions suivantes sont r&eacute;unies&nbsp;:

<itemize>
<item>

la   ligne est  libre      (le <tt>/dev/cua</tt> correspondant    n'est pas
utilis&eacute;),

<item>

la porteuse (circuit 109) a &eacute;t&eacute; d&eacute;tect&eacute;e.

</itemize>

Dans ce mode et pendant que  l'ouverture est bloqu&eacute;e, la ligne n'est
pas   occup&eacute;e,  ce qui signifie    qu'une  application peut toujours
effectuer  un  appel  sortant. Si  le   port est   en cours   de fermeture,
l'ouverture &eacute;choue  (EAGAIN).

<p>

L'ouverture en mode non-bloquant, quant &agrave; elle,  est effective si le
port   n'est  pas  d&eacute;j&agrave; ouvert  et    actif (sinon <tt/errno/
retourne   EBUSY)<footnote>    Les  applications  utilisent     de  plus le
m&eacute;canisme des fichiers de verrouillage garantissant l'unicit&eacute;
d'utilisation de la ressource.</footnote>.

</itemize>

C'est   le mode qu'utilisent  beaucoup  d'applications comme <it/getty/ qui
souhaitent  dans un premier temps  initialiser la ligne (pour &eacute;viter
des    instabilit&eacute;s         li&eacute;es         aux      connexions
pr&eacute;c&eacute;dentes)     voire     ensuite       pour     initialiser
l'&eacute;quipement (modem).   Elles ne s'int&eacute;ressent qu'au fait que
la ligne soit occup&eacute;e, en fermeture ou libre.  Si celle-ci n'est pas
libre,  l'application se termine  et le m&eacute;canisme du <it/respawn/ se
charge de les relancer.

<p>

Pour la  gestion de la  connexion proprement dite, l'application <it/getty/
(pour prendre un exemple courant) ouvre la  ligne, soit en mode bloquant si
vous laissez   le  modem  en  r&eacute;ponse  automatique,   soit   en mode
non-bloquant si vous souhaitez qu'elle g&egrave;re activement la connexion.
Elle est alors en attente bloquante en lecture (sur <it/read/).

<sect>
Quelques applications int&eacute;ressantes
<p>

<sect1>
Un num&eacute;roteur
<p>

Cette id&eacute;e   va faire plaisir  &agrave; <it>Xavier CAZIN</it>&nbsp;:
c'est la sienne. Le mieux est de le laisser parler&nbsp;:

<quote>
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   <sq>Le
t&eacute;l&eacute;phone  sonne, prenez le combin&eacute;</sq>.  Ces petites
choses toutes simples demandent  de comprendre ce  que signifie  prendre la
ligne et la rel&acirc;cher, pour un modem.
</quote>

Excellent  exercice.   Alors  avec tout   ce que  l'on  vient de   dire, au
travail&nbsp;<tt>:-)</tt>.  En laissant de c&ocirc;t&eacute; la partie base
de  donn&eacute;es,  l'algorithme  &agrave;  utiliser  correspond  &agrave;
<it>l'organigramme    d'un appel</it>    donn&eacute;      &agrave;   titre
d'information au chapitre <ref  id="sec-modems" name="Le modem">, auquel il
faut rajouter&nbsp;:

<itemize>
<item>
au    pr&eacute;alable,          ouvrir     le       port      s&eacute;rie
(<tt>/dev/cua&lt;n&gt;</tt>),  le  configurer. Le   mieux  est  de  prendre
exemple sur ce que fait <it/getty/&nbsp;;

<item>
envoyer    ensuite     les   commandes   AT     d'initialisation   puis  de
num&eacute;rotation (utiliser la fonction chat()) qui fait ceci tr&egrave;s
bien&nbsp;;

<item>
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&nbsp;ANSWER, TIMEOUT)
&eacute;tant donn&eacute;  qu'il faut  pr&eacute;venir l'utilisateur  qu'il
peut d&eacute;crocher.
</itemize>

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

<sect1>
modemstat et compagnie
<p>

Vous  trouverez sur les   <it>serveurs  ftp</it> 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).

<tscreen><verb>
/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
</verb></tscreen>

Un bon point pour statserial  aussi simple que bien pr&eacute;sent&eacute;,
en mode texte.

<sect1>
Un d&eacute;tecteur de signal 109 (CD) 
<p>

Lu dans <it/comp.os.linux.development.apps/ cette demande

<quote>
Existe-t-il un  utilitaire   que    je    pourrais utiliser    dans      un
<it/shell-script/   et  retournant une  valeur,   disons  1,  si le  signal
<it/D&eacute;tection de porteuse/ est mont&eacute; et 0 sinon&nbsp;?
</quote>

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&nbsp;:

<code>
------------------------- 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 -------------------------
</code>

On pourra  ensuite  l'utiliser  dans  un <it/shell/  de  la  mani&egrave;re
suivante&nbsp;:

<code>
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
</code>

<sect>
Remerciements
<p>

Ce document  n'aurait  vu le  jour sans  un   certain nombre de  gens  fort
sympathiques et plein  de bonnes id&eacute;es  appartenant  pour la plupart
&agrave; la mailing list de traduction :

Ren&eacute; COUGNENC,\\
Xavier CAZIN,\\
Bernard CHOPPY,\\
Fran&ccedil;ois AUDIBERT\\
Eric DUMAS,\\
Pierre FICHEUX, \\
Herv&eacute; MIGNOT, \\
Pierre VASSELLERIE, \\
Jacques LAVIGNOTTE, \\
et tous les autres.
</article>





