<HTML> <HEAD> <TITLE>user-enh</TITLE> </HEAD> <BODY> <A NAME="hardware"></A> <H1>6. <A NAME="s6"></A>user-enhNotes sur le matériel</H1> <P> <A HREF="UPS-HOWTO.html#toc6">Contenu de cette section</A></P> <A NAME="make-cable"></A> <H2>6.1 <A NAME="ss6.1"></A> Comment réaliser un câble ?</H2> <P>Cette section est juste composée de messages que j'ai vus sur le Net. Je ne l'ai pas réalisé, donc je ne peux parler d'expérience. Si quelqu'un le peut, qu'il écrive cette section pour moi :). Voir aussi le message concernant le GPS1000 dans la section <A HREF="UPS-HOWTO-8.html#gps1000">GPS1000 d'ACCODATA</A> pour ne pas citer toutes les données spécifiques de la section <A HREF="UPS-HOWTO-8.html#ups-specific">Informations sur un certain nombre d'onduleurs</A> </P> <P> <BLOCKQUOTE><CODE> <PRE> >From miquels@caution.cistron.nl.mugnet.org Wed Jul 21 14:26:33 1993 Newsgroups: comp.os.linux Subject: Re: Interface onduleur pour Linux ? From: miquels@caution.cistron.nl.mugnet.org (Miquel van Smoorenburg) Date: Sat, 17 Jul 93 18:03:37 Distribution: world Organization: Cistron Electronics. Dans l'article <1993Jul15.184450.5193@excaliber.uucp> joel@rac1.wam.umd.edu (Joel M. Hoffman) ecrit_: >Je ne vais pas tarder a acheter un onduleur, et ai remarque que certains >d'entre eux ont des interfaces reseau pour prevenir celui-ci lorsque le >courant est coupe. > >Y a-t-il une telle interface pour Linux ? > >Merci.. > >-Joel >(joel@wam.umd.edu) > Lorsque je travaillais sur la derniere version de SysVinit (2.4 actuellement), j'ai eu temporairement un onduleur sur mon ordinateur, donc j'ai ajoute le support de celui-ci. Tu as peut-etre vu que dans le dernier fichier d'en-tete <signal.h>, il y a maintenant un #define SIGPWR 30 :-). Malgre tout, je n'avais pas une telle interface speciale, mais la sortie de nombreux onduleurs est juste un relais qui s'ouvre ou se ferme en cas de coupure de courant. J'ai reflechi a une methode simple pour connecter ca sur la ligne DCD du port serie. Dans le paquetage SysVinit, il y a un demon appele "powerd" qui garde un oeil sur cette ligne serie et envoie SIGPWR a init lorsque l'etat change, pour qu'init puisse faire quelque chose (comme arreter le systeme dans les 5 minutes). La methode de connexion de l'onduleur a la ligne serie est decrite dans le source "powerd.c", mais je vais le dessiner ici pour explications_: +------------------------o DTR | +---+ | | resistance | | 10 kilo-Ohm | | +---+ Vers le port serie | +-----o-------+------------------------o DCD | | o relais | \ de l' | \ onduleur | | | +-----o-------+------------------------o GND Joli dessin, hein ? J'espere que cela peut etre utile. SysVinit peut etre trouve sur sunsite (et tsx-11 probablement) dans SysVinit2.4.tar.z Mike. </PRE> </CODE></BLOCKQUOTE> </P> <P><CODE>--</CODE></P> <P> <BLOCKQUOTE><CODE> <PRE> Miquel van Smoorenburg, <miquels@cistron.nl.mugnet.org> Ibmio.com: cannot open CONFIG.SYS: file handle broke off. >From danny@caution.cistron.nl.mugnet.org Wed Jul 21 14:27:04 1993 Newsgroups: comp.os.linux Subject: Re: Interface onduleur pour Linux_? From: danny@caution.cistron.nl.mugnet.org (Danny ter Haar) Date: Mon, 19 Jul 93 11:02:14 Distribution: world Organization: Cistron Electronics. Dans l'article <9307174330@caution.cistron.nl.mugnet.org> miquels@caution.cistron.nl.mugnet.org (Miquel van Smoorenburg) ecrit : >La methode de connexion de l'onduleur a la ligne serie est decrite dans le >source "powerd.c", mais je vais le dessiner ici pour explications_: Le dessin n'etait pas vraiment clair, utilisez plutot celui-ci ! > > +------------------------o DTR > | > +---+ > | | resistance > | | 10 kilo-Ohm > | | > +---+ Vers le port serie > | > +-----o-------+------------------------o DCD > | > o relais > \ de l' > \ onduleur > | > +-----o--------------------------------o GND > Le DTR est maintenu haut. Lorsque le courant de l'onduleur s'arrete, le relais se ferme. L'ordinateur controle la descente de la ligne DCD. Lorsque cela arrive, il lance une sequence shutdown... _____ Danny -- <=====================================================================> Danny ter Haar <dannyth@hacktic.nl> or <danny@cistron.nl.mugnet.org> Robins law #103: 'a couple of lightyears can't part good friends' </PRE> </CODE></BLOCKQUOTE> </P> <P></P> <A NAME="hacking"></A> <H2>6.2 <A NAME="ss6.2"></A> Analyse de câbles et modification de powerd.c</H2> <P>Essayez d'obtenir la documentation des câbles que votre revendeur d'onduleurs fournit. En particulier, recherchez :</P> <P> <UL> <LI>quelles lignes doivent être maintenues hautes ;</LI> <LI>quelle(s) ligne(s) éteint(gnent) l'onduleur ;</LI> <LI>quelles lignes l'onduleur modifie pour indiquer que : <UL> <LI>le courant est coupé,</LI> <LI>la batterie est faible.</LI> </UL> </LI> </UL> </P> <P>Il vous faut ensuite modifier <CODE>powerd.c</CODE> en conséquence, ou utiliser l'un des paquetages configurables cités plus haut (voir <EM>genpower-1.0.1.tgz</EM>, <EM>power-2.0.tar.gz</EM> ou <EM>upsd-1.0.tgz</EM> décrits dans la section <A HREF="UPS-HOWTO-4.html#software">Logiciels</A> . Si vous utilisez l'un des paquetages, suivez les instruction correspondantes. Si vous voulez bidouiller <CODE>powerd.c</CODE>, lisez ce qui suit.</P> <P>Si vous avez des problèmes pour obtenir les informations précitées, ou si vous voulez juste les contrôler (une <EM>bonne</EM> idée), le programme suivant peut vous y aider. C'est une version bidouillée de powerd.c. Il vous permet de positionner les signaux du port depuis la ligne de commande, puis il contrôle le port, en affichant l'état des signaux chaque seconde. Je l'ai utilisé en "upscheck /dev/cua1 2" (par exemple) pour monter le deuxième bit (<EM>DTR</EM>) et descendre les autres. Le nombre en base 2 indique les bits à monter, ainsi par exemple pour monter les bits 1, 2 et 3 (et descendre les autres), utilisez 7. Voir le code pour les détails.</P> <P>Voici le programme (non testé) upscheck.c. Il n'est pas testé car j'ai modifié la version que j'avais utilisée au départ pour le rendre plus clair, et que je ne peux tester la nouvelle version pour le moment.</P> <P>NdT : La traduction des commentaires et messages peut aussi avoir altéré le comportement du programme.</P> <P> <BLOCKQUOTE><CODE> <HR> <PRE> /* * upscheck Controle comment l'ordinateur et l'onduleur communiquent * * Usage: upscheck <peripherique> <bits a monter> * Par exemple, upscheck /dev/cua4 4 pour monter le bit 3 et * controler /dev/cua4. * * Author: Harvey J. Stein <hjstein@math.huji.ac.il> * (mais en realite juste une modification mineure de Miquel van * Smoorenburg's <miquels@drinkel.nl.mugnet.org> powerd.c * * Version: 1.0 19940802 * */ #include <sys/types.h> #include <sys/ioctl.h> #include <fcntl.h> #include <errno.h> #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <signal.h> /* Programme principal. */ int main(int argc, char **argv) { int fd; /* Ces parametres TIOCM_* sont definis dans <linux/termios.h>, qui */ /* est inclus indirectement ici. */ int dtr_bit = TIOCM_DTR; int rts_bit = TIOCM_RTS; int set_bits; int flags; int status, oldstat = -1; int count = 0; int pc; if (argc < 2) { fprintf(stderr, "Usage: upscheck <peripherique> <bits-a-positionner>\n"); exit(1); } /* Ouvre le peripherique a controler. */ if ((fd = open(argv[1], O_RDWR | O_NDELAY)) < 0) { fprintf(stderr, "upscheck: %s: %s\n", argv[1], sys_errlist[errno]); exit(1);} /* Recupere les bits a positionner sur la ligne de commande */ sscanf(argv[2], "%d", &amp;set_bits); while (1) { /* Positionne les bits specifies sur la ligne de commande (et */ /* seulement eux). */ ioctl(fd, TIOCMSET, &amp;set_bits); fprintf(stderr, "Positionnement de %o.\n", set_bits); sleep(1); /* Recupere les bits actuellement positionnes */ ioctl(fd, TIOCMGET, &amp;flags); fprintf(stderr, "Les signaux sont %o.\n", flags); /* Piochez ici en changeant TIOM_CTS par un autre TIOCM jusqu'a */ /* ce que le programme detecte que le courant est coupe lorsque */ /* vous debranchez l'onduleur. Ensuite, vous saurez comment */ /* modifier powerd.c */ if (flags & TIOCM_CTS) { pc = 0 ; fprintf(stderr, "Le courant est la.\n"); } else { pc = pc + 1 ; fprintf(stderr, "Le courant est coupe.\n"); } } close(fd); } </PRE> <HR> </CODE></BLOCKQUOTE> </P> <P></P> <A NAME="serial-port"></A> <H2>6.3 <A NAME="ss6.3"></A> Assignement des broches du port série</H2> <P>La section qui précède présuppose la connaissance de la correspondance entre les signaux de terminal et les broches du port série. Voici une référence de cette correspondance, reprise du document de David Tal : "Câbles et connecteurs fréquemment utilisés". J'inclus un diagramme illustrant les connecteurs, et une table donnant la corresopondance entre les numéros de broches et les signaux de ligne de terminal.</P> <P>Si vous avez besoin d'une référence générale sur le brochage de câbles, celle de David Tal en est une bonne, mais je n'arrive plus à localiser ce document sur le Net. Mais j'ai trouvé un bon livre de remplacement, c'est <A HREF="http://www.blackdown.org/~hwb/hwb.html">The Hardware Book</A> .</P> <P>NdT : si un lecteur français veut proposer une référence dans la langue de Molière, qu'il n'hésite pas à me contacter.</P> <P>Autres sites utiles : <UL> <LI> <A HREF="http://star.sols.pt/docs/yost.html">Yost Serial Device Wiring Standard</A> qui contient des informations intéressantes sur les connecteurs RJ-45 et les câbles quatre paires pour toutes les connexions série ;</LI> <LI> <A HREF="http://www.stokely.com/stokely">Stokely consulting</A> pour l'information générale sur Unix et en particulier leur Unix Serial Port Resources ;</LI> <LI> <A HREF="http://www.uwsg.indiana.edu/usail/edcert">Unix Workstation System Administration Education Certification</A> qui contient : <A HREF="http://www.uwsg.indiana.edu/usail/peripherals/rs232">RS-232: Connectors and Cables</A> .</LI> </UL> </P> <P>Incidemment, il semble que le paquetage Linuxdoc-sgml ne formate plus les tableaux très bien en sortie <EM>html</EM>. Si vous voulez pouvoir lire la table qui suit, vous devrez probablement vous référer à la version <EM>DVI</EM> ou texte simple du présent document.</P> <P> <TABLE> <BR> DB-25 DB-9 Nom EIA CCITT DTE-DCE Description <BR> Broche Broche <BR> <HR> 1 FG AA 101 --- Masse de chassis GND<BR> 2 3 TD BA 103 ---> Données transmises, TxD<BR> 3 2 RD BB 104 <--- Données reçues, RxD<BR> 4 7 RTS CA 105 ---> Requête pour envoyer<BR> 5 8 CTS CB 106 <--- Prêt à envoyer<BR> 6 6 DSR CC 107 <--- Jeu de données prêt<BR> 7 5 SG AB 102 ---- Masse de signal, GND<BR> 8 1 DCD CF 109 <--- Détection de porteuse<BR> 9 -- -- - - Tension positive continue de test<BR> 10 -- -- - - Tension négative continue de test<BR> 11 QM -- - <--- Mode d'égalisation<BR> 12 SDCD SCF 122 <--- Détection de porteuse secondaire<BR> 13 SCTS SCB 121 <--- Prêt à envoyer secondaire<BR> 14 STD SBA 118 ---> Données transmise secondaires<BR> 15 TC DB 114 <--- Signal d'horloge de l'émetteur<BR> 16 SRD SBB 119 <--- Signal d'horloge secondaire du récepteur<BR> 17 RC DD 115 ---> Signal d'horloge du récepteur<BR> 18 DCR -- - <--- Horloge divisée du récepteur<BR> 19 SRTS SCA 120 ---> Requête pour émettre secondaire<BR> 20 4 DTR CD 108.2 ---> Terminal de données prêt<BR> 21 SQ CG 110 <--- Détection de qualité de signal<BR> 22 9 RI CE 125 <--- Indicateur de sonnerie<BR> 23 -- CH 111 ---> Sélecteur de vitesse de données<BR> 24 -- CI 112 <--- Sélecteur de vitesse de données<BR> 25 TC DA 113 <--- Horloge transmise<BR> <CAPTION> Assignement des broches de port série (RS-232C), DB-25 et DB-9</CAPTION> </TABLE> </P> <P> <HR> <PRE> 1 13 1 5 _______________________________ _______________ \ . . . . . . . . . . . . . / \ . . . . . / Connecteurs \ . . . . . . . . . . . . / \ . . . . / RS-232 vus de --------------------------- ----------- l'arri&egrave;re de 14 25 6 9 l'ordinateur DTE : Equipement terminal de donn&eacute;es (i.e. ordinateur) DCE : Equipement de communication de donn&eacute;es (i.e. modem) RxD : Donn&eacute;es re&ccedil;ues; 1 est transmis "bas", 0 "haut" TxD : Donn&eacute;es envoy&eacute;es; 1 est transmis "bas", 0 "haut" DTR : DTE annonce qu'il est aliment&eacute; et pr&ecirc;t &agrave; communiquer DSR : DCE annonce qu'il est pr&ecirc;t &agrave; communiquer; "bas" raccroche le modem RTS : DTE demande &agrave; DCE la permission d'envoyer des donn&eacute;es CTS : DCE agr&eacute;e la RTS RI : DCE indique au DTE qu'il tente d'&eacute;tablir une connexion DCD : DCE annonce qu'une connexion est &eacute;tablie </PRE> <HR> </P> <P></P> <A NAME="ioctl"></A> <H2>6.4 <A NAME="ss6.4"></A> Correspondance entre ioctl et RS232</H2> <P>Puisque vous pouvez aussi devoir modifier powerd.c pour monter et descendre les signaux corrects, vous pouvez aussi avoir besoin des valeurs numériques des différents signaux de terminal. Ils peuvent être trouvés dans <CODE>/usr/include/linux/termios.h</CODE>, mais sont reproduits ici comme référence. Puisqu'ils peuvent être sujets à changements, vous auriez avantage à les vérifier avec ledit fichier.</P> <P> <BLOCKQUOTE><CODE> <HR> <PRE> /* lignes modem */ #define TIOCM_LE 0x001 #define TIOCM_DTR 0x002 #define TIOCM_RTS 0x004 #define TIOCM_ST 0x008 #define TIOCM_SR 0x010 #define TIOCM_CTS 0x020 #define TIOCM_CAR 0x040 #define TIOCM_RNG 0x080 #define TIOCM_DSR 0x100 #define TIOCM_CD TIOCM_CAR #define TIOCM_RI TIOCM_RNG </PRE> <HR> </CODE></BLOCKQUOTE> </P> <P>Notez que la troisième colonne est en hexadécimal.</P> <P></P> <P></P> <HR> <P> Chapitre <A HREF="UPS-HOWTO-7.html">suivant</A>, Chapitre <A HREF="UPS-HOWTO-5.html">Précédent</A> <P> Table des matières de <A HREF="UPS-HOWTO.html#toc6">ce chapitre</A>, <A HREF="UPS-HOWTO.html#toc">Table des matières</A> générale</P> <P> <A HREF="UPS-HOWTO.html">Début</A> du document, <A HREF="#0"> Début de ce chapitre</A></P> </BODY> </HTML>