Compare commits

..

5 Commits

Author SHA1 Message Date
tTh
6a025f9503 bla 2024-07-11 02:25:38 +02:00
tTh
352ab26ba7 + abcde 2024-07-11 02:24:13 +02:00
tTh
f7b5af5a9b wesh scanf ! 2024-07-11 02:23:30 +02:00
tTh
326926aa16 cosmetic 2024-07-07 19:54:33 +02:00
tTh
58ba52762c add a chapter about DMX512 2024-06-04 01:37:47 +02:00
6 changed files with 165 additions and 16 deletions

View File

@ -103,7 +103,7 @@ Il est temps de préciser les détails.
Une fonction a un unique point d'entrée\footnote{Qui a déja joué Une fonction a un unique point d'entrée\footnote{Qui a déja joué
avec le ENTRY du Fortran ?}, avec une éventuelle liste avec le ENTRY du Fortran ?}, avec une éventuelle liste
de paramètres, de paramètres,
et une tout aussi éventuelel unique valeur de retour. et une tout aussi éventuelle unique valeur de retour.
XXX\index{XXX} XXX\index{XXX}
@ -114,8 +114,11 @@ XXX\index{XXX}
Il est évident qu'un logiciel qui n'a aucun moyen de communiquer Il est évident qu'un logiciel qui n'a aucun moyen de communiquer
avec le monde extérieur a bien moins d'utilité qu'un bon ed. avec le monde extérieur a bien moins d'utilité qu'un bon ed.
Dans le schéma «~classique~», ces échanges ont lieu par Dans le schéma «~classique~» d'une utilisation interactive,
le truchement d'un terminal. ces échanges ont lieu par
le truchement d'un terminal, qui peut tout aussi bien
être une \textsl{real glasstty} ou une fenêtre d'un émulateur
graphique de terminal, comme \texttt{xterm}.
\subsection{Les trois flux canoniques} \subsection{Les trois flux canoniques}
@ -268,6 +271,55 @@ Avez-vous bien révisé la section qui cause des pointeurs ?
À ne plus savoir où peut être la tête de lecture ? À ne plus savoir où peut être la tête de lecture ?
Alors les subtilités de \texttt{scanf} vont vous plaire. Alors les subtilités de \texttt{scanf} vont vous plaire.
Nous allons commencer par un exemple simple~: la lecture
de deux nombres entiers depuis l'entrée standard.
Les valeurs lues seront stockée dans deux variables
de type \texttt{int}.
\begin{verbatim}
#include <stdio.h>
...
int foo, bar, nbread;
nbread = scanf("%d %d", &foo, &bar);
\end{verbatim}
Le premier argument est une chaine de caractères contenant
des directives de conversion, semblables à celles
du printf.
Dans cette exemple, nous avons deux fois \texttt{"\%d"}
séparées par une espace. Cette directive veut dire
« lire les chiffres qui arrivent et les convertir
en nombre entier quand il n'y en a plus », une
simple règle de conversion.
Les deux arguments suivants sont les adresses des deux variables
destinées à recevoir les valeurs lues,
ou, en langage commun « faut mettre ÇA LÀ ».
Ce sont donc des pointeurs, on les reconnait au
caractère \& qui précède leur nom.
Quand à la valeur retournée par la fonction scanf, elle
présente un grand intérêt car elle contient le nombre
de lectures élémentaires qui se sont bien passées.
Tous les cas d'erreur ne sont pas couvert, mais c'est
suffisant pour traiter les cas simples de la discipline.
Donc, en toute rigueur, le code que nous venons de voir
devrait s'écrire, en utilisant comme il se doit
le \textsl{yoda coding} pour le test de cette valeur
de retour~:
\begin{verbatim}
...
int foo, bard;
if (2 != scanf("%d %d", &foo, &bar)) {
fputs("FAIL\n", stderr)
abort();
}
...
\end{verbatim}
\textit{To be continued...} \textit{To be continued...}
% --------------------------------------------------------- % ---------------------------------------------------------
@ -362,12 +414,14 @@ page \pageref{pipeline}.
\textbf{Ah, enfin, on a failli attendre !} \textbf{Ah, enfin, on a failli attendre !}
Qu'est-ce qu'un pointeur ? La réponse est multiple, et c'est Qu'est-ce qu'un pointeur ?
La réponse est multiple et parfois obscure, et c'est
le pointeur qui fait à la fois la force et la faiblesse du C. le pointeur qui fait à la fois la force et la faiblesse du C.
Pour faire simple, un pointeur est une variable qui contient Pour faire simple, un pointeur est une variable qui contient
l'adresse dans la mémoire d'une autre variable. l'adresse dans la mémoire d'une autre variable.
Mais en fait c'est un peu plus subtil : un pointeur « connait » la taille Mais en fait c'est un peu plus subtil :
un pointeur « connait » le type (donc la taille)
de l'objet pointé, et peut donc « parcourir » un tableau de ces objets. de l'objet pointé, et peut donc « parcourir » un tableau de ces objets.
\begin{verbatim} \begin{verbatim}
@ -377,14 +431,24 @@ ptr = tableau; // *ptr désigne tableau[0];
ptr++; // *ptr désigne tableau[1]; ptr++; // *ptr désigne tableau[1];
\end{verbatim} \end{verbatim}
XXX il y a beaucoup à dire, et de quoi bien rire \textsl{:)} \index{XXX}
XXX il y a encore beaucoup à dire, et de quoi bien rire \textsl{:)}
% https://hackthedeveloper.com/function-pointer-in-c/ % https://hackthedeveloper.com/function-pointer-in-c/
\subsection{Pointeurs et chaines}
\subsection{Pointeurs et fonctions}
Exemple classique : qsort.
% ========================================================= % =========================================================
\section{Le préprocesseur}\index{cpp} \section{Le préprocesseur}\index{cpp}
\textbf{Attention !} L'utilisation abusive du préprocesseur
peut générer des trolls de plusieurs centaines de posts.
Nous avons déja abordé de loin la directive \texttt{\#include}, Nous avons déja abordé de loin la directive \texttt{\#include},
qui fait partie du préprocesseur, comme toutes les lignes qui fait partie du préprocesseur, comme toutes les lignes
de code commençant par le caractère \textbf{\#}. de code commençant par le caractère \textbf{\#}.
@ -411,7 +475,10 @@ pour être traduite en codes opératoires, dont l'exécution
affichera une maxime dont la véracité demande à être vérifiée affichera une maxime dont la véracité demande à être vérifiée
par l'expérimentation. Mais ça n'est pas fini. par l'expérimentation. Mais ça n'est pas fini.
Ce sympathique \textsf{préproc'} nous permet aussi de faire Ce sympathique \textsf{préproc'}%
\footnote{Certains l'appellent même tendrement « mon cépépé »
avec un regard de guimauve mal grillée.}
nous permet aussi de faire
de la compilation conditinnelle, et ça, c'est cool parce que de la compilation conditinnelle, et ça, c'est cool parce que
ça ouvre la porte à plein de choses. ça ouvre la porte à plein de choses.
Par exemple, l'instrumentation du code afin de faciliter Par exemple, l'instrumentation du code afin de faciliter

43
chap/DMX512.tex Normal file
View File

@ -0,0 +1,43 @@
\chapter{DMX512}
\index{DMX} \label{chap:DMX}
% -----------------------------------------------------
D'après Wikipédia :
\begin{quote}
Le DMX512 (Digital Multiplexing) est une norme de transmission de données
utilisée pour le contrôle de l'éclairage et des effets de scène dans le spectacle
vivant.
Le protocole DMX512 (qui utilise généralement une liaison
suivant la norme EIA RS 485 et cadencée à 250 kb/s) permet
de contrôler 512 canaux (9 bits d'adressage) en affectant à
chacun une valeur comprise entre 0 et 255 (8 bits de données par
canal). La transmission numérique unidirectionnelle se fait de
façon sérialisée par liaison symétrique, et chaque appareil
reçoit en même temps l'ensemble des 512 valeurs (ce qui est
appelée une « trame » DMX).
\end{quote}
% -----------------------------------------------------
\section{Open Light Architecture} \index{OLA}
https://ryderdamen.com/blog/enttec-open-dmx-on-linux/
% -----------------------------------------------------
\section{Enttec OpenDMX}
\begin{verbatim}
Bus 001 Device 027: ID 0403:6001
Future Technology Devices International, Ltd FT232 Serial (UART) IC
\end{verbatim}
look at \texttt{tcsendbreak} !
% -----------------------------------------------------
% -----------------------------------------------------
% -----------------------------------------------------

View File

@ -4,7 +4,9 @@
Vous allez bien dire : « Encore un truc de vieux\dots ». Vous allez bien dire : « Encore un truc de vieux\dots ».
Oui, peut-être, mais il y a quand même pas mal d'usages Oui, peut-être, mais il y a quand même pas mal d'usages
assez cools pour ces technologies du passé. Nous allons assez cools pour ces technologies du passé, l'auto-radio
de votre vieille voiture, par exemple.
Nous allons
en explorer quelques uns. en explorer quelques uns.
% ++++++++++++++++++++++++++++++++++++++++++++++++++ % ++++++++++++++++++++++++++++++++++++++++++++++++++
@ -12,14 +14,43 @@ en explorer quelques uns.
\section{CD Audio} \section{CD Audio}
Un CD audio ne contient pas de système de fichier, il ne peut
donc pas être lu de manière conventionnelle.
Il faut donc passer par des logiciels adaptés, qui vont
directement aller dire le contenu du disque, puis
convertir les pistes en fichiers audio conventionnels.
\subsection {Riping} \subsection {Riping}
\index{abcde} \index{cdparanoia}
Le \textsl{ripage} est l'action d'extraire les pistes d'un Le \textsl{ripage} est l'action d'extraire les pistes d'un
cd audio pour les convertir en fichier numérique audio. cd audio pour les convertir en fichier numérique audio
au format désiré.
Il existe plusieurs méthodes, la première va vous satisfaire,
et nous verrons (peut-être) les autres la semaine prochaine.
Un des outils utilisés est \texttt{cdparanoia}. Les nombreuses Un des outils utilisés est \texttt{cdparanoia}. Les nombreuses
options décrites dans la manpage montrent à quel point ce logiciel options décrites dans la manpage montrent à quel point ce logiciel
est complet et compliqué. est complet et compliqué. Heureusement, il y a une surcouche,
\texttt{abcde}\footnote{A better CD Encoder}, qui facilite
bien les choses. Passons immédiatement à l'œuvre en tentant
d'encoder un cd audio\footnote{Mylene Farmer, Ainsi soit je...}
vers des fichiers encodées en Ogg\index{ogg}.
Voici la ligne de commande minimale que nous allons utiliser,
pour ensuite y ajouter quelques autres options :
\begin{verbatim}
$ abcde -o ogg
\end{verbatim}
Oh, mais il y a une jolie animation en asciiart pour suivre
le déroulement des opérations.
Parmi les (nombreuses) options possibles, on trouve
\texttt{-p Pads track numbers with 0's}
\textsl{||}
% -------------------------------------------------------- % --------------------------------------------------------

View File

@ -21,13 +21,15 @@ fprintf(stderr, "Name: \"%s\"\n", joy_name);
La macro \texttt{JSIOCGNAME} étant définie dans le fichier La macro \texttt{JSIOCGNAME} étant définie dans le fichier
\texttt{/usr/include/linux/joystick.h} comme \texttt{/usr/include/linux/joystick.h} comme
\texttt{\_IOC(\_IOC\_READ, 'j', 0x13, len)}. \texttt{\_IOC(\_IOC\_READ, 'j', 0x13, len)}.
Bon, OK, j'aurais pu choisir un exemple plus simple, Bon, d'accord, j'aurais pu choisir un exemple plus simple,
mais vous avez capté le principe\dots mais vous avez capté le principe\dots
% ========================================================= % =========================================================
\vspace{5em} \vspace{5em}
Ailleurs dans ce document : Ports série (p. \pageref{rs232}) Ailleurs dans ce document :
la gestion des ports série (p. \pageref{rs232}) utilise beaucoup les ioctl,
tout comme les webcams (p. \pageref{chap:webcam})
% ========================================================= % =========================================================

View File

@ -34,8 +34,7 @@ ts.tv_sec = sec;
ts.tv_nsec = nano; ts.tv_nsec = nano;
while ( EOF != (c=getchar()) ) while ( EOF != (c=getchar()) )
{ {
putchar(c); putchar(c), fflush(stdout);
fflush(stdout);
nanosleep(&ts, NULL); nanosleep(&ts, NULL);
} }

View File

@ -78,10 +78,17 @@ Et pour finir, il y a quelques ouvrages de référence.
Citons, par exemple, le K\&R, ceux de Christophe Blaess, Citons, par exemple, le K\&R, ceux de Christophe Blaess,
le Christian Pelissier, et bien d'autres. le Christian Pelissier, et bien d'autres.
En \textbf{mars 2024}, je déménage dans le Gers, au milieu
de la campagne, et le travail sur cette ouvrage peut
reprendre dans des conditions plus sereines.
Je vais même tenter de faire avec seulement l'aide
de mes souvenirs et les manpages.
\vspace{3em} \vspace{3em}
Le code \LaTeX{} et les fichiers d'exemples sont disponibles Le code \LaTeX{} et les fichiers d'exemples sont disponibles
en ligne sur le site du Tetalab. Your mileage may vary\dots en ligne sur le site du Tetalab.
Your mileage may vary, film at 11\dots
\texttt{https://git.tetalab.org/tTh/TetaTricks} \texttt{https://git.tetalab.org/tTh/TetaTricks}
@ -108,7 +115,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots
\input{chap/modular} \input{chap/modular}
\input{chap/MIDI} \input{chap/MIDI}
\input{chap/OSC} \input{chap/OSC}
\input{chap/DMX512} % nouveau 2 juin 2024
\input{chap/image} \input{chap/image}
\input{chap/reseau} \input{chap/reseau}
\input{chap/Perl} \input{chap/Perl}