lirc — périphériques lirc
Les périphériques caractères
/dev/lirc* fournissent une interface bidirectionnelle de bas niveau
pour les télécommandes infrarouges (IR). La plupart de ces
périphériques peuvent recevoir et certains peuvent
émettre. Lors de la réception ou de l’émission
de données, le pilote fonctionne dans deux modes différents
selon le matériel sous-jacent.
Certains matériels (typiquement les cartes TV)
décodent le signal infrarouge en interne et fournissent des
décodages d’appui de bouton sous forme de code
d’analyse d’évènement du clavier (scancode). Les
pilotes de cette sorte de matériel fonctionnent dans le mode
LIRC_MODE_SCANCODE. De tels matériels habituellement ne
gèrent pas l’émission de signaux infrarouges. De plus,
de tels matériels ne peuvent décoder seulement qu’un
nombre limité de protocoles, habituellement seulement le protocole de
la télécommande particulière fournie avec, par exemple,
une carte TV.
D’autres matériels fournissent un flux
d’impulsions/intervalles. De tels pilotes fonctionnent dans le mode
LIRC_MODE_MODE2. De tels matériels peuvent être
utilisés (presque) avec n’importe quelle sorte de
télécommande. Ce genre de matériel peut être
aussi utilisé dans le mode LIRC_MODE_SCANCODE, auquel cas les
décodeurs IR du noyau décoderont les signaux infrarouges. Ces
décodeurs peuvent être écrits en BPF étendu
(consulter bpf(2)) et attachés au périphérique
lirc. Quelquefois ce genre de matériel gère
l’émission de données par IR.
L’ioctl LIRC_GET_FEATURES (voir ci-après)
permet de savoir si l’émission et la réception sont
prises en charge, et, entre autres caractéristiques, dans quels
modes.
Lecture de l’entrée avec le mode
LIRC_MODE_MODE2
Dans le mode LIRC_MODE_MODE2, les données
renvoyées par read(2) fournissent des valeurs en
32 bits représentant une durée d’intervalle ou
d’impulsion. La durée (en microsecondes) est encodée
dans les 24 bits de plus faible poids. L’impulsion (pulse
aussi appelée flash) indique une durée de lumière
infrarouge détectée et l’intervalle (space aussi
appelé gap) indique une durée sans infrarouges. Si la
durée de l’intervalle excède la temporisation (timeout)
d’inactivité, un paquet spécial de temporisation est
émis qui marque la fin du message. Les 8 bits de poids le plus
fort indiquent le type de paquet :
- LIRC_MODE2_SPACE
- La valeur indique une durée d’intervalle
(microsecondes)
- LIRC_MODE2_PULSE
- La valeur indique une durée d’impulsion (microsecondes)
- LIRC_MODE2_FREQUENCY
- La valeur indique une fréquence (Hz); consulter l’ioctl
LIRC_SET_MEASURE_CARRIER_MODE.
- LIRC_MODE2_TIMEOUT
- La valeur indique une durée d’intervalle (microsecondes). Le
paquet indique une temporisation ; consulter l’ioctl
LIRC_SET_REC_TIMEOUT_REPORTS.
- LIRC_MODE2_OVERFLOW
- Le récepteur IR est victime d’un débordement, et en
conséquence des données manquent (depuis
Linux 5.18).
Lecture de l’entrée avec le mode
LIRC_MODE_SCANCODE
Dans le mode LIRC_MODE_SCANCODE, les données
renvoyées par read(2) reflètent les décodages
d’appui sur les boutons dans la structure lirc_scancode. Le
scancode est stocké dans le champ scancode, et le protocole IR
est stocké dans rc_proto. Ce champ a une des valeurs de
enum rc_proto.
Écriture de la sortie avec le mode LIRC_MODE_PULSE
Les données écrites sur le
périphérique caractère en utilisant write(2)
sont une séquence d’impulsions/intervalles de valeurs
entières. Les impulsions et les intervalles sont marqués
implicitement par leur position. Les données doivent débuter
et se terminer par une impulsion, par conséquent elles doivent
toujours inclurent un nombre impair d’échantillons. La
fonction write(2) bloque jusqu’à ce que les
données aient été transmises par l’appareil. Si
plus de données sont fournies que ce que l’appareil peut
envoyer, l’appel write(2) échoue avec l’erreur
EINVAL.
Écriture de la sortie avec le mode LIRC_MODE_SCANCODE
Les données écrites sur le
périphérique caractère doivent être en une seule
structure lirc_scancode. Les champs scancode et
rc_proto doivent renseigner, tous les autres champs doivent
être être 0. Les encodeurs IR du noyau convertiront le
scancode en impulsions et intervalles. Le protocole ou le scancode est non
valable, ou le périphérique lirc ne peut pas
transmettre.
#include <linux/lirc.h> /* Mais voir BOGUES */
int ioctl(int fd, int cmd, int *val);
Les opérations d’ioctl(2) suivantes sont
fournies par le périphérique caractère lirc pour
examiner ou modifier les réglages lirc du matériel.
Les périphériques /dev/lirc* gèrent
toujours la commande suivante :
- LIRC_GET_FEATURES
(void)
- Renvoi d’un masque de bits des bits combinés de
fonctionnalités ; consulter FONCTIONNALITÉS.
Si un périphérique renvoie un code d’erreur
pour LIRC_GET_FEATURES, il est normal de présumer que ce
n’est pas un périphérique lirc.
Quelques périphériques lirc prennent en
charge les commandes listées ci-après. À moins
d’être déclarées autrement, elles
échouent avec l’erreur ENOTTY si
l’opération n’est pas gérée, ou avec
l’erreur EINVAL si l’opération échoue ou
si des arguments non valables sont fournis. Si le pilote n’annonce
pas que certaines fonctionnalités ne sont pas gérées,
l’invocation des ioctls correspondants échouera avec
l’erreur ENOTTY.
- LIRC_GET_REC_MODE
(void)
- Si le périphérique lirc n’a pas de
récepteur, cette opération échouera avec
l’erreur ENOTTY. Sinon le mode de réception sera
renvoyé et sera un des suivants :
- LIRC_MODE_MODE2
- le pilote renvoie une séquence de durées
d’impulsion/intervalles ;
- LIRC_MODE_SCANCODE
- le pilote renvoie les valeurs de la structure lirc_scancode,
chacune d’elles représentant le décodage
d’appui d’un bouton.
- LIRC_SET_REC_MODE
(int)
- Réglage du mode de réception. val est soit
LIRC_MODE_SCANCODE ou LIRC_MODE_MODE2. Si le
périphérique lirc n’a pas de récepteur,
cette opération échoue avec l’erreur
ENOTTY.
- LIRC_GET_SEND_MODE
(void)
- Renvoi du mode d’émission. LIRC_MODE_PULSE ou
LIRC_MODE_SCANCODE sont gérées. Si le
périphérique lirc ne peut pas émettre, cette
opération échoue avec l’erreur ENOTTY.
- LIRC_SET_SEND_MODE
(int)
- Réglage du mode d’émission. val est soit
LIRC_MODE_SCANCODE ou LIRC_MODE_PULSE. Si le
périphérique lirc ne peut pas émettre, cette
opération échoue avec l’erreur ENOTTY.
- LIRC_SET_SEND_CARRIER
(int)
- Réglage de la fréquence de modulation. L’argument est
la fréquence (Hz).
- LIRC_SET_SEND_DUTY_CYCLE
(int)
- Réglage du cycle opératoire de la porteuse. val est
un nombre dans l’intervalle [0,100] qui décrit la largeur
d’impulsion comme un pourcentage du cycle total. Actuellement,
aucune signification spéciale n’est donnée à 0
ou 100, mais ces valeurs sont réservées pour une utilisation
future.
- LIRC_GET_MIN_TIMEOUT
(void), LIRC_GET_MAX_TIMEOUT (void)
- Certains périphériques ont des minuteurs internes qui
peuvent être utilisés pour détecter lorsqu’il
n’y a pas eu d’activité IR depuis un long moment.
Cela peut aider lircd(8) dans la détection qu’un
signal IR a cessé, et peut accélérer le processus de
décodage. Ces opérations renvoient des valeurs
entières avec une temporisation minimale ou maximale pouvant
être définie (microsecondes). Certains
périphériques ont une temporisation fixe. Pour de tels
pilotes, LIRC_GET_MIN_TIMEOUT et LIRC_GET_MAX_TIMEOUT
échoueront avec l’erreur ENOTTY.
- LIRC_SET_REC_TIMEOUT
(int)
- Réglage de la valeur entière pour la temporisation
d’inactivité IR (microsecondes). Pour être
acceptée la valeur doit être entre des limites
définies par LIRC_GET_MIN_TIMEOUT et
LIRC_GET_MAX_TIMEOUT. Une valeur de 0 (si acceptée
par le matériel) désactive toutes les temporisations de
matériel et les données devraient être
annoncées le plus tôt possible. Si la valeur exacte ne peut
être réglée, alors la valeur supérieure
possible la plus proche de la valeur donnée devrait être
définie.
- LIRC_GET_REC_TIMEOUT
(void)
- Renvoi de la temporisation actuelle (microsecondes). Depuis
Linux 4.18.
- LIRC_SET_REC_TIMEOUT_REPORTS
(int)
- Activation (val est 1) ou désactivation (val
est 0) des paquets de temporisation dans LIRC_MODE_MODE2. Le
comportement de cette opération a varié selon les versions
du noyau :
- Depuis Linux 5.17 : les paquets de temporisation sont
toujours activés et cet ioctl ne produit aucun effet.
- Depuis Linux 4.16 : les paquets de temporisation sont
activés par défaut. Chaque fois que le
périphérique lirc est ouvert,
l’opération LIRC_SET_REC_TIMEOUT peut être
utilisée pour désactiver (et, si désiré,
réactiver ultérieurement) la temporisation sur le
descripteur de fichier.
- Dans Linux 4.15 et précédents : les paquets de
temporisation sont désactivés par défaut et leur
activation (à l’aide de LIRC_SET_REC_TIMEOUT) sur
n’importe quel descripteur de fichier associé avec le
périphérique lirc a pour effet d’activer les
temporisations pour tous les descripteurs de fichier
référant à ce périphérique
(jusqu’à ce que les temporisations soient
désactivés de nouveau).
- LIRC_SET_REC_CARRIER
(int)
- Réglage de la limite supérieure de la fréquence de la
porteuse de réception (Hz). Consulter
LIRC_SET_REC_CARRIER_RANGE.
- LIRC_SET_REC_CARRIER_RANGE
(int)
- Réglage de la limite inférieure de la fréquence de la
porteuse de réception (Hz). Pour que ces réglages soient
effectifs, il faut régler la limite inférieure en utilisant
l’ioctl LIRC_SET_REC_CARRIER_RANGE, puis la limite
supérieure en utilisant l’ioctl
LIRC_SET_REC_CARRIER.
- LIRC_SET_MEASURE_CARRIER_MODE
(int)
- Activation (val vaut 1) ou désactivation (val vaut 0)
du mode de mesure. Si activé, lors du prochain appui de touche, le
pilote enverra des paquets LIRC_MODE2_FREQUENCY. Par défaut,
cela devrait être désactivé.
- LIRC_GET_REC_RESOLUTION
(void)
- Renvoi de la résolution du pilote (microsecondes).
- LIRC_SET_TRANSMITTER_MASK
(int)
- Activation de l’ensemble des émetteurs indiqués dans
val, qui contient un masque de bits ou chaque émetteur
activé est un 1. Le premier émetteur est
encodé par le bit de poids le plus faible, etc. Quand un
masque de bits non valable est fourni, par exemple un bit est
défini bien que le périphérique n’ait pas
autant d’émetteurs, cette opération renvoie le nombre
d’émetteurs disponibles et ne fait rien d’autre
autrement.
- LIRC_SET_WIDEBAND_RECEIVER
(int)
- Certains périphériques sont équipés
d’un récepteur large bande qui est prévu pour
découvrir la sortie d’une télécommande
existante. Cet ioctl peut être utilisé pour activer
(val vaut 1) ou désactiver (val vaut 0)
cette fonctionnalité. Cela peut être utile pour des
périphériques qui autrement ont des récepteurs
à bande étroite pour empêcher une utilisation avec
certaines télécommandes. Les récepteurs à
large bande peuvent être aussi plus précis. D’un
autre côté, leur désavantage est en
général une réduction de la bande de
réception.
- Remarque : le récepteur large bande peut être
implicitement activé si les annonces de porteuse sont
activées. Dans ce cas, il sera désactivé
aussitôt que les annonces de porteuse seront
désactivées. Essayer de déactiver un récepteur
large bande alors que les annonces de porteuse sont activées est
sans effet.
L’ioctl LIRC_GET_FEATURES renvoie un masque de bits
décrivant les fonctionnalités du pilote. Les bits suivants
peuvent être renvoyés dans le masque :
- LIRC_CAN_REC_MODE2
- Le pilote peut recevoir en utilisant LIRC_MODE_MODE2.
- LIRC_CAN_REC_SCANCODE
- Le pilote peut recevoir en utilisant LIRC_MODE_SCANCODE.
- LIRC_CAN_SET_SEND_CARRIER
- Le pilote gère la modification de la fréquence de modulation
en utilisant LIRC_SET_SEND_CARRIER.
- LIRC_CAN_SET_SEND_DUTY_CYCLE
- Le pilote gère la modification du cycle opératoire en
utilisant LIRC_SET_SEND_DUTY_CYCLE.
- LIRC_CAN_SET_TRANSMITTER_MASK
- Le pilot gère les émetteurs actifs en utilisant
LIRC_SET_TRANSMITTER_MASK.
- LIRC_CAN_SET_REC_CARRIER
- Le pilote gère le réglage de la fréquence de la
porteuse en utilisant LIRC_SET_REC_CARRIER. N’importe quel
périphérique lirc depuis que les pilotes ont
été intégrés dans Linux 2.6.36 peut
avoir LIRC_CAN_SET_REC_CARRIER_RANGE déclaré si la
fonctionnalité LIRC_CAN_SET_REC_CARRIER est
activée.
- LIRC_CAN_SET_REC_CARRIER_RANGE
- Le pilote gère LIRC_SET_REC_CARRIER_RANGE. La limite basse
de la porteuse doit être d’abord définie en utilisant
l’ioctl LIRC_SET_REC_CARRIER_RANGE, avant d’utiliser
l’ioctl LIRC_SET_REC_CARRIER pour définir la limite
supérieure.
- LIRC_CAN_GET_REC_RESOLUTION
- Le pilote gère LIRC_GET_REC_RESOLUTION.
- LIRC_CAN_SET_REC_TIMEOUT
- Le pilote gère LIRC_SET_REC_TIMEOUT.
- LIRC_CAN_MEASURE_CARRIER
- Le pilote gère la mesure de la fréquence de modulation en
utilisant LIRC_SET_MEASURE_CARRIER_MODE.
- LIRC_CAN_USE_WIDEBAND_RECEIVER
- Le pilote gère le mode d’apprentissage en utilisant
LIRC_SET_WIDEBAND_RECEIVER.
- LIRC_CAN_SEND_PULSE
- Le pilote gère l’émission en utilisant
LIRC_MODE_PULSE ou LIRC_MODE_SCANCODE
L’utilisation de ces périphériques
nécessite le fichier source d’en-tête du noyau
lirc.h. Ce fichier n’était pas disponible avant
Linux 4.6. Les utilisateurs de noyaux plus anciens peuvent utiliser
le fichier disponible dans
http://www.lirc.org.
La traduction française de cette page de manuel a
été créée par Christophe Blaess
<https://www.blaess.fr/christophe/>, Stéphan Rafin
<stephan.rafin@laposte.net>, Thierry Vignaud
<tvignaud@mandriva.com>, François Micaux, Alain Portal
<aportal@univ-montp2.fr>, Jean-Philippe Guérard
<fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh)
<jean-luc.coulon@wanadoo.fr>, Julien Cristau
<jcristau@debian.org>, Thomas Huriaux
<thomas.huriaux@gmail.com>, Nicolas François
<nicolas.francois@centraliens.net>, Florentin Duneau
<fduneau@gmail.com>, Simon Paillard
<simon.paillard@resel.enst-bretagne.fr>, Denis Barbier
<barbier@debian.org>, David Prévot <david@tilapin.org> et
Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>
Cette traduction est une documentation libre ; veuillez
vous reporter à la
GNU General
Public License version 3 concernant les conditions de copie et de
distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page
de manuel, veuillez envoyer un message à
debian-l10n-french@lists.debian.org.