Compare commits
5 Commits
66bc3d19c4
...
6a025f9503
Author | SHA1 | Date | |
---|---|---|---|
|
6a025f9503 | ||
|
352ab26ba7 | ||
|
f7b5af5a9b | ||
|
326926aa16 | ||
|
58ba52762c |
81
chap/C.tex
81
chap/C.tex
@ -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
43
chap/DMX512.tex
Normal 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} !
|
||||||
|
|
||||||
|
% -----------------------------------------------------
|
||||||
|
|
||||||
|
% -----------------------------------------------------
|
||||||
|
|
||||||
|
% -----------------------------------------------------
|
||||||
|
|
@ -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{||}
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
|
@ -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})
|
||||||
|
|
||||||
% =========================================================
|
% =========================================================
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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}
|
||||||
|
Loading…
Reference in New Issue
Block a user