Sommaire cliquez ici si le menu est absent Sommaire


Programmes pour DOS et Linux
en version "ligne de commande"
pour le DS75, et le DS1621

Selon vos centres d'intérêt, vous pouver récupérer la version DOS, ou la version Linux, pour le DS1621, ou pour le DS75 :

Téléchargement Version DOS : Version Linux :
Pour le DS75 : DS75dos.ZIP
v1.0 (14 ko)
DS75lin.ZIP
v2.0 (24 ko),
avec sources
Pour le DS1621 : DS1621dos.ZIP
v1.0 (15 ko)
DS1621lin.ZIP
v2.0 (32 ko),
avec sources

Les quatre exécutables ont la même syntaxe et la même fonction, c'est-à-dire l'affichage de la température (en continu, ou bien une seule mesure), avec la possibilité de masquer les messages complémentaires (option -d), d'afficher en degrés Fareneit (option -f), d'afficher l'état des trois entrées du port série et notamment T(out) (inactif avec l'option -i). Vous devez obligatoirement fournir comme paramètres le port série actif, COM1 à COM4, sur lequel est branchée l'interface, ainsi que le numéro attribué à la sonde DS75, S0 à S7 (défini par l'état des entrées A0, A1 et A2).

Syntaxe de la commande "lireds75" :

Syntaxe :  lireds75  COMx  Sx  [-i]  [-f]  [-m]  [-d]  [-h]

   avec :  COMx = Choix du port série accueillant l'interface
                  valeurs possibles : COM1, COM2, COM3, ou COM4.
           Sx   = Numéro de la sonde (selon les broches A0/A1/A2)
                  valeurs possibles : S0, S1, S2, S3, S4, S5, S6 ou S7.

options :  -i   = Masquer l'affichage des entrées.
           -f   = Afficher la température en degrés Fareneit.
           -m   = Faire une seule mesure, et quitter.
           -d   = Affichage discret, supprime tous les messages sauf T.
           -h   = Afficher cette page d'aide (syntaxe du programme).


Syntaxe de la commande "lire1621" :

Syntaxe :  lire1621  COMx  Sx  [-i]  [-f]  [-m]  [-d]  [-r]  [-h]

   avec :  COMx = Choix du port série accueillant l'interface
                  valeurs possibles : COM1, COM2, COM3, ou COM4.
           Sx   = Numéro de la sonde (selon les broches A0/A1/A2)
                  valeurs possibles : S0, S1, S2, S3, S4, S5, S6 ou S7.
options :  -i   = Masquer l'affichage des entrées.
           -f   = Afficher la température en degrés Fareneit.
           -m   = Faire une seule mesure, et quitter.
           -d   = Affichage discret, supprime tous les messages sauf T.
           -r   = Mesurer avec la résolution standard faible de 0.5°C.
           -h   = Afficher cette page d'aide (syntaxe du programme). 

Le programme "lire1621" possède une option supplémentaire, la commande "-r" qui permet un fonctionnement avec la résolution standard (par pas de 0,5°) ; le programme utilise par défaut un algorithme qui permet d'augmenter notablement cette résolution (au-delà du dixième de degré).


Sous DOS :

Copie d'écran de "lireds75" sous DOS, avec différents paramètres :



C:\>lireds75 com2 s6

Configuration : port série COM2 (adresse $2F8) / sonde n°6.
Pour interrompre les mesures, appuyez sur la touche [Ctrl]...

Initialisation...
T = 27.1875°C / Entrées : T(out)=1 Ring=0 DCD=0
T = 26.8750°C / Entrées : T(out)=1 Ring=0 DCD=0
T = 26.9375°C / Entrées : T(out)=1 Ring=0 DCD=0
T = 26.9375°C / Entrées : T(out)=1 Ring=0 DCD=0
fin des mesures...


C:\>lireds75 com2 s6 -f -d -i -m
T = 81.5000°F

C:\>_

La sonde porte le numéro 6 (A0="0", A1="1", A2="1"), et l'interface est connectée sur le port COM2 ; le programme est lancé deux fois :


Sous Linux :

Sous Linux, le fonctionnement est identique, mais l'utilisateur doit être logué en tant que "root" (mais une solution existe, voir plus loin) ; je précise que ma distribution est une Mandrake 9.2 ; voici le résultat en mode "console" :



[col2000@localhost sources]$ su
Password:
[root@localhost sources]# ./lireds75 com2 s6

Configuration : port série COM2 (adresse $2F8) / sonde n°6.
Pour interrompre les mesures, appuyez sur la touche [Ctrl]...

Initialisation...
T = 26.5625°C / Entrées : T(out)=1 Ring=0 DCD=0
T = 26.6250°C / Entrées : T(out)=1 Ring=0 DCD=0
T = 26.6875°C / Entrées : T(out)=1 Ring=0 DCD=0
T = 26.6875°C / Entrées : T(out)=1 Ring=0 DCD=0
T = 26.6875°C / Entrées : T(out)=1 Ring=0 DCD=0
T = 26.6875°C / Entrées : T(out)=1 Ring=0 DCD=0
T = 26.6875°C / Entrées : T(out)=1 Ring=0 DCD=0
fin des mesures...

[root@localhost sources]# ./lireds75 com2 s6 -d -f -m -i
T = 79.8125°F
[root@localhost sources]# _

Au début, je suis logué en tant qu'utilisateur "col2000" ; grâce à la commande Linux "su" et avec le mot de passe adéquat (non affiché), je me logue en superutilisateur "root" ; je lance alors le programme ./lireds75 ; on procèderait de même avec ./lire1621 ; le signe "./" devant le nom du programme permet d'indiquer au système que le fichier se trouve dans le répertoire courant (qui ne fait pas forcément partie du "PATH" du root).

Le comportement des versions Linux est identique à celui des versions DOS, en fonction des paramètres.

L'archive ZIP ayant été créée sous DOS, il se peut qu'il soit nécessaire de réattribuer au fichier lireds75 ou lire1621 les droits d'exécution, avec la commande Linux suivante :

  chmod 755 ./lireds75
ou :
  chmod 755 ./lire1621

Les fichiers sources sont fournis avec les versions Linux, car c'est dans la philosophie de ce système d'exploitation orienté "logiciel libre", mais il n'y a quasiment pas de commentaires, et je ne garantis pas qu'ils soient irréprochables car je suis débutant dans la programmation sous Linux. Vous pouvez les recompiler avec les options suivantes :

  gcc  -g  -O3  -o  lireds75  lireds75v2.c
ou :
  gcc  -g  -O3  -o  lire1621  lire1621v1.c

A ce propos, la communication avec la sonde nécessite le pilotage direct des sorties DTR, RTS, TxD et la lecture de CTS ; l'accès aux broches DTR, RTS et CTS ne pose pas de problème avec les fonctions classiques de Linux pour l'accès au port série...

open(), close(), ioctl(TIOMBIC,xxx), ioctl(TIOMBIS,xxx), etc.

...mais je n'ai pas trouvé le moyen de mettre à 0 ou 1 la broche TxD efficacement malgré de nombreux essais ("tcsendbreak()", et autres...), donc je me suis rabattu sur les fonctions d'entrées/sorties directe (ioperm(), inb(), outb()...), mais qui nécessitent d'être logué en tant que "root", au moins à un moment ou à un autre, ce qui est désagréable. Je lance donc un appel aux petits génies de Linux : si vous connaissez une solution plus élégante, ne manquez pas de m'en faire part !


Usage par un simple utilisateur :

Il est assez contrariant de devoir se loguer en tant que root pour pouvoir lancer le programme ; il existe une petite manipulation qui va permettre à chaque simple utilisateur d'avoir accès à la lecture des températures : cela consiste à activer (une fois pour toutes) le bit "SUID" de l'exécutable, et donc à donner provisoirement à l'utilisateur, au moment du lancement du programme, un droit d'accès équivalent à celui du root, bien sûr uniquement pour cette commande. Ce genre de manipulation est toujours à effectuer avec circonspection, mais on peut considérer que cela ne constitue pas un affaiblissement dans la sécurité du système, car le fichier source du programme est disponible et chacun peut constater qu'il ne contient pas de commandes pernicieuses.

Voyons ensemble pas à pas le détail des opérations et la succession des commandes Linux en mode "console" . J'ai numéroté les lignes (en bleu) pour plus de clareté dans les explications :


L01: [col2000@localhost sources]$ ls -al
L02: total 372
L03: drwxrwxr-x    2 col2000  col2000      4096 jan 26 16:03 ./
L04: drwxr-xr-x    4 col2000  col2000      4096 jan 14 15:56 ../
L05: -rwxrwxrwx    1 col2000  col2000     16261 jan 22 15:12 lire1621v1.c*
L06: [col2000@localhost sources]$ gcc -O3 -o lire1621 lire1621v1.c
L07: [col2000@localhost sources]$ ls -al
L08: total 368
L09: drwxrwxr-x    2 col2000  col2000      4096 jan 26 16:05 ./
L10: drwxr-xr-x    4 col2000  col2000      4096 jan 14 15:56 ../
L11: -rwxr-xr-x    1 col2000  col2000     25177 jan 26 16:05 lire1621*
L12: -rwxrwxrwx    1 col2000  col2000     16261 jan 22 15:12 lire1621v1.c*
L13: [col2000@localhost sources]$ su
L14: Password:
L15: [root@localhost sources]# chown root:root ./lire1621
L16: [root@localhost sources]# ls -al
L17: total 368
L18: drwxrwxr-x    2 col2000  col2000      4096 jan 26 16:05 ./
L19: drwxr-xr-x    4 col2000  col2000      4096 jan 14 15:56 ../
L20: -rwxr-xr-x    1 root     root        25177 jan 26 16:05 lire1621*
L21: -rwxrwxrwx    1 col2000  col2000     16261 jan 22 15:12 lire1621v1.c*
L22: [root@localhost sources]# chmod 4755 ./lire1621
L23: [root@localhost sources]# ls -al
L24: total 368
L25: drwxrwxr-x    2 col2000  col2000      4096 jan 26 16:05 ./
L26: drwxr-xr-x    4 col2000  col2000      4096 jan 14 15:56 ../
L27: -rwsr-xr-x    1 root     root        25177 jan 26 16:05 lire1621*
L28: -rwxrwxrwx    1 col2000  col2000     16261 jan 22 15:12 lire1621v1.c*
L29: [root@localhost sources]# exit
L30: exit
L31: [col2000@localhost sources]$ lire1621 com2 s1 -d -m -i
L32: T = 25.04°C
L33: [col2000@localhost sources]$ _

On utiliserait exactement la même méthode pour le fichier "lireds75". Remarque : si vous vous loguez en tant que root avant de procéder à la compilation du fichier source, l'exécutable obtenu appartient au root ; il n'est pas alors nécessaire de changer le propriétaire, et la ligne 15 (commande "chown") devient inutile.


Voilà pour aujourd'hui ; n'hésitez pas à me faire parvenir vos propres programmes, notamment sous Linux...


Dernière mise à jour : le 26 janvier 2004.

Sommaire cliquez ici si le menu est absent Sommaire