Lirc
Inhaltsverzeichnis
Allgemeines
Als ich gerade eben mal auf die Schnelle einen LIRC-Transceiver auf einem Raspi in Betrieb nehmen wollte, habe ich mich gewundert und geaergert zugleich, dass ich zu diesem Thema noch nichts aufgeschrieben hatte. Dabei habe ich gefuehlt die letzten 25 Jahre immer mal wieder was mit LIRC unternommen. Heute werde ich dieser Luecke eine Ende bereiten und das Vorgehen beschreiben.
Raspi mit SuSE
Um es vorweg zu nehmen es war eine dumme Idee. OpenSusE lief zwar aber die Anpassungen und Aenderungen an den LIRC-Support waren mir nach einer Zeit des Probierens zu viel geworden. Abgesehen von der Tatsache, dass LIRC als Paket v0.9.4c(!!!!) angeboten wurde, waren die Kernelmodule nicht dazu zu bewegen mit LIRC, auch nicht mit v0.94d zu laufen. Also dann doch zu Raspberry OS, siehe unten.
zypper se lirc
1 S | Name | Summary | Type
2 ---+------------------------+----------------------------------------------------+------
3 i | liblirc0 | LIRC driver library | Paket
4 i | liblirc_client0 | LIRC client library | Paket
5 i | liblirc_driver0 | LIRC driver library | Paket
6 i+ | lirc-config | LIRC Configuration Tools and Data | Paket
7 i+ | lirc-core | LIRC core, always needed to run LIRC | Paket
8 i+ | lirc-devel | LIRC development files | Paket
9 i+ | lirc-disable-kernel-rc | Disable kernel ir device handling in favor of lirc | Paket
10 i+ | lirc-drv-ftdi | Ftdi LIRC User-Space Driver | Paket
11 i+ | lirc-drv-portaudio | Portaudio LIRC User-Space Driver | Paket
12 i+ | lirc-tools-gui | LIRC GUI tools | Paket
13 i | pulseaudio-module-lirc | LIRC module for PulseAudio | Paket
An die recht vielen Installation auf ehemaligen Rechnern kann ich Fallstricke erinnern, die mich jedesmal ueber Gebuehr beschaeftigt haben. Man kann sich schnell in hunderten Configfiles oder Anbindungen spezieller Hardware verlieren und dabei den Blick auf den Kern verlieren. Hiflreich ist hier sicherlich sich einen Ueberblick ueber die Softwarebestandteile zu machen. Ich habe dem Repository zu SuSE 15.3 die V0.9.4c installiert. Dann gleich schon ein Daempfer.
Bei zypper konnte ich keine Option entdecken, die mir den Inhalt der Pakete anzeigt.
Mit rpm ist mir dieses mit folgendem Befehl gelungen.
rpm -q -i -l <Name>
liblirc0
/usr/lib64/liblirc.so.0 /usr/lib64/liblirc.so.0.0.0 </syntaxhighlight>
liblirc_client0
/usr/lib64/liblirc_client.so.0 /usr/lib64/liblirc_client.so.0.5.0 </syntaxhighlight>
liblirc_driver0
/usr/lib64/liblirc_driver.so.0 /usr/lib64/liblirc_driver.so.0.0.0 </syntaxhighlight>
lirc-config
/usr/share/lirc/configs/xxxxxxxx.config </syntaxhighlight>
lirc-core
1 >
2 /etc/lirc
3 /etc/lirc/irexec.lircrc
4 /etc/lirc/lirc_options.conf
5 /etc/lirc/lircd.conf
6 /etc/lirc/lircd.conf.d
7 /etc/lirc/lircd.conf.d/README.conf.d
8 /etc/lirc/lircd.conf.d/devinput.lircd.conf
9 /etc/lirc/lircmd.conf
10 /run/lirc
11 /run/lirc/lircd
12 /run/lirc/lircm
13 /usr/bin/ircat
14 /usr/bin/irdb-get
15 /usr/bin/irexec
16 /usr/bin/irpipe
17 /usr/bin/irpty
18 /usr/bin/irrecord
19 /usr/bin/irsend
20 /usr/bin/irsimreceive
21 /usr/bin/irsimsend
22 /usr/bin/irtestcase
23 /usr/bin/irtext2udp
24 /usr/bin/irw
25 /usr/bin/lirc-config-tool
26 /usr/bin/lirc-lsremotes
27 /usr/bin/lirc-make-devinput
28 /usr/bin/lirc-setup
29 /usr/bin/lircrcd
30 /usr/bin/mode2
31 /usr/bin/pronto2lirc
32 /usr/lib/python3.6/site-packages/lirc
33 /usr/lib/python3.6/site-packages/lirc/__pycache__
34 /usr/lib/python3.6/site-packages/lirc/__pycache__/baseview.cpython-36.opt-1.pyc
35 /usr/lib/python3.6/site-packages/lirc/__pycache__/baseview.cpython-36.pyc
36 /usr/lib/python3.6/site-packages/lirc/__pycache__/choosers.cpython-36.opt-1.pyc
37 /usr/lib/python3.6/site-packages/lirc/__pycache__/choosers.cpython-36.pyc
38 /usr/lib/python3.6/site-packages/lirc/__pycache__/config.cpython-36.opt-1.pyc
39 /usr/lib/python3.6/site-packages/lirc/__pycache__/config.cpython-36.pyc
40 /usr/lib/python3.6/site-packages/lirc/__pycache__/database.cpython-36.opt-1.pyc
41 /usr/lib/python3.6/site-packages/lirc/__pycache__/database.cpython-36.pyc
42 /usr/lib/python3.6/site-packages/lirc/__pycache__/mvc_control.cpython-36.opt-1.pyc
43 /usr/lib/python3.6/site-packages/lirc/__pycache__/mvc_control.cpython-36.pyc
44 /usr/lib/python3.6/site-packages/lirc/__pycache__/mvc_model.cpython-36.opt-1.pyc
45 /usr/lib/python3.6/site-packages/lirc/__pycache__/mvc_model.cpython-36.pyc
46 /usr/lib/python3.6/site-packages/lirc/__pycache__/mvc_view.cpython-36.opt-1.pyc
47 /usr/lib/python3.6/site-packages/lirc/__pycache__/mvc_view.cpython-36.pyc
48 /usr/lib/python3.6/site-packages/lirc/__pycache__/util.cpython-36.opt-1.pyc
49 /usr/lib/python3.6/site-packages/lirc/__pycache__/util.cpython-36.pyc
50 /usr/lib/python3.6/site-packages/lirc/baseview.py
51 /usr/lib/python3.6/site-packages/lirc/choosers.py
52 /usr/lib/python3.6/site-packages/lirc/config.py
53 /usr/lib/python3.6/site-packages/lirc/configs
54 /usr/lib/python3.6/site-packages/lirc/database.py
55 /usr/lib/python3.6/site-packages/lirc/lirc-setup
56 /usr/lib/python3.6/site-packages/lirc/lirc-setup.ui
57 /usr/lib/python3.6/site-packages/lirc/mvc_control.py
58 /usr/lib/python3.6/site-packages/lirc/mvc_model.py
59 /usr/lib/python3.6/site-packages/lirc/mvc_view.py
60 /usr/lib/python3.6/site-packages/lirc/util.py
61 /usr/lib/systemd/system/irexec.service
62 /usr/lib/systemd/system/lircd-uinput.service
63 /usr/lib/systemd/system/lircd.service
64 /usr/lib/systemd/system/lircd.socket
65 /usr/lib/systemd/system/lircmd.service
66 /usr/lib/tmpfiles.d/lirc.conf
67 /usr/lib/udev/rules.d/60-lirc.rules
68 /usr/lib64/lirc
69 /usr/lib64/lirc/plugins
70 /usr/lib64/lirc/plugins/accent.so
71 /usr/lib64/lirc/plugins/alsa_usb.so
72 /usr/lib64/lirc/plugins/atilibusb.so
73 /usr/lib64/lirc/plugins/atwf83.so
74 /usr/lib64/lirc/plugins/audio_alsa.so
75 /usr/lib64/lirc/plugins/awlibusb.so
76 /usr/lib64/lirc/plugins/bte.so
77 /usr/lib64/lirc/plugins/commandir.so
78 /usr/lib64/lirc/plugins/creative.so
79 /usr/lib64/lirc/plugins/creative_infracd.so
80 /usr/lib64/lirc/plugins/default.so
81 /usr/lib64/lirc/plugins/devinput.so
82 /usr/lib64/lirc/plugins/dfclibusb.so
83 /usr/lib64/lirc/plugins/dsp.so
84 /usr/lib64/lirc/plugins/ea65.so
85 /usr/lib64/lirc/plugins/file.so
86 /usr/lib64/lirc/plugins/ftdix.so
87 /usr/lib64/lirc/plugins/girs.so
88 /usr/lib64/lirc/plugins/hiddev.so
89 /usr/lib64/lirc/plugins/i2cuser.so
90 /usr/lib64/lirc/plugins/irlink.so
91 /usr/lib64/lirc/plugins/irtoy.so
92 /usr/lib64/lirc/plugins/livedrive_midi.so
93 /usr/lib64/lirc/plugins/livedrive_seq.so
94 /usr/lib64/lirc/plugins/logitech.so
95 /usr/lib64/lirc/plugins/mouseremote.so
96 /usr/lib64/lirc/plugins/mp3anywhere.so
97 /usr/lib64/lirc/plugins/mplay.so
98 /usr/lib64/lirc/plugins/pcmak.so
99 /usr/lib64/lirc/plugins/pinsys.so
100 /usr/lib64/lirc/plugins/pixelview.so
101 /usr/lib64/lirc/plugins/silitek.so
102 /usr/lib64/lirc/plugins/slinke.so
103 /usr/lib64/lirc/plugins/srm7500libusb.so
104 /usr/lib64/lirc/plugins/tira.so
105 /usr/lib64/lirc/plugins/udp.so
106 /usr/lib64/lirc/plugins/uirt2.so
107 /usr/lib64/lirc/plugins/uirt2_raw.so
108 /usr/lib64/lirc/plugins/usbx.so
109 /usr/lib64/lirc/plugins/zotac.so
110 /usr/sbin/lirc-lsplugins
111 /usr/sbin/lircd
112 /usr/sbin/lircd-setup
113 /usr/sbin/lircmd
114 /usr/sbin/rclircd
115 /usr/sbin/rclircmd
116 /usr/share/doc/packages/lirc-core
117 /usr/share/doc/packages/lirc-core/AUTHORS
118 /usr/share/doc/packages/lirc-core/ChangeLog
119 /usr/share/doc/packages/lirc-core/NEWS
120 /usr/share/doc/packages/lirc-core/README
121 /usr/share/doc/packages/lirc-core/contrib
122 /usr/share/doc/packages/lirc-core/contrib/60-lirc.rules
123 /usr/share/doc/packages/lirc-core/contrib/60-usb-generic-perms.rules
124 /usr/share/doc/packages/lirc-core/contrib/61-lirc.blacklist-all.conf
125 /usr/share/doc/packages/lirc-core/contrib/97-lircd-uinput.rules
126 /usr/share/doc/packages/lirc-core/contrib/98-lirc-stable-link.rules
127 /usr/share/doc/packages/lirc-core/contrib/99-remote-control-lirc.rules
128 /usr/share/doc/packages/lirc-core/contrib/irexec.desktop
129 /usr/share/doc/packages/lirc-core/contrib/irman2lirc
130 /usr/share/doc/packages/lirc-core/contrib/lircd.conf
131 /usr/share/doc/packages/lirc-core/contrib/lircmd.conf
132 /usr/share/doc/packages/lirc-core/contrib/lircrc
133 /usr/share/doc/packages/lirc-core/contrib/lircrc/lircmap.xml
134 /usr/share/doc/packages/lirc-core/contrib/lircrc/lircrc
135 /usr/share/doc/packages/lirc-core/contrib/lircrc/mplayer.lircrc
136 /usr/share/doc/packages/lirc-core/contrib/lircrc/mythtv.lircrc
137 /usr/share/doc/packages/lirc-core/contrib/lircrc/vlc.lircrc
138 /usr/share/doc/packages/lirc-core/contrib/lircrc/volume_alsa.lircrc
139 /usr/share/doc/packages/lirc-core/contrib/lircrc/volume_mythtv.lircrc
140 /usr/share/doc/packages/lirc-core/contrib/lircrc/volume_pulse.lircrc
141 /usr/share/doc/packages/lirc-core/contrib/release-process.txt
142 /usr/share/doc/packages/lirc-core/html
143 /usr/share/doc/packages/lirc-core/html/alsa-usb.html
144 /usr/share/doc/packages/lirc-core/html/api-general.html
145 /usr/share/doc/packages/lirc-core/html/atilibusb.html
146 /usr/share/doc/packages/lirc-core/html/atwf83.html
147 /usr/share/doc/packages/lirc-core/html/audio-alsa.html
148 /usr/share/doc/packages/lirc-core/html/audio.html
149 /usr/share/doc/packages/lirc-core/html/configuration-guide.html
150 /usr/share/doc/packages/lirc-core/html/configure.html
151 /usr/share/doc/packages/lirc-core/html/default.html
152 /usr/share/doc/packages/lirc-core/html/devinput.html
153 /usr/share/doc/packages/lirc-core/html/driver-api.html
154 /usr/share/doc/packages/lirc-core/html/empty_toc.html
155 /usr/share/doc/packages/lirc-core/html/file.html
156 /usr/share/doc/packages/lirc-core/html/ftdi.html
157 /usr/share/doc/packages/lirc-core/html/ftdix.html
158 /usr/share/doc/packages/lirc-core/html/girs.html
159 /usr/share/doc/packages/lirc-core/html/help.html
160 /usr/share/doc/packages/lirc-core/html/imon-24g.html
161 /usr/share/doc/packages/lirc-core/html/imon.html
162 /usr/share/doc/packages/lirc-core/html/index.html
163 /usr/share/doc/packages/lirc-core/html/install.html
164 /usr/share/doc/packages/lirc-core/html/irtoy.html
165 /usr/share/doc/packages/lirc-core/html/lirc_client.html
166 /usr/share/doc/packages/lirc-core/html/no-api-docs.html
167 /usr/share/doc/packages/lirc-core/html/programs-overview.html
168 /usr/share/doc/packages/lirc-core/html/programs.html
169 /usr/share/doc/packages/lirc-core/html/pronto2lirc.html
170 /usr/share/doc/packages/lirc-core/html/srm7500atilibusb.html
171 /usr/share/doc/packages/lirc-core/html/technical.html
172 /usr/share/doc/packages/lirc-core/html/tira.html
173 /usr/share/doc/packages/lirc-core/html/udp.html
174 /usr/share/doc/packages/lirc-core/irxevent.keys
175 /usr/share/doc/packages/lirc-core/lirc.hwdb
176 /usr/share/licenses/lirc-core
177 /usr/share/licenses/lirc-core/COPYING
178 /usr/share/lirc
179 /usr/share/lirc/lirc.hwdb
180 /usr/share/man/man1/ircat.1.gz
181 /usr/share/man/man1/irdb-get.1.gz
182 /usr/share/man/man1/irexec.1.gz
183 /usr/share/man/man1/irpipe.1.gz
184 /usr/share/man/man1/irpty.1.gz
185 /usr/share/man/man1/irrecord.1.gz
186 /usr/share/man/man1/irsend.1.gz
187 /usr/share/man/man1/irsimreceive.1.gz
188 /usr/share/man/man1/irsimsend.1.gz
189 /usr/share/man/man1/irtestcase.1.gz
190 /usr/share/man/man1/irtext2udp.1.gz
191 /usr/share/man/man1/irw.1.gz
192 /usr/share/man/man1/lirc-config-tool.1.gz
193 /usr/share/man/man1/lirc-lsplugins.1.gz
194 /usr/share/man/man1/lirc-lsremotes.1.gz
195 /usr/share/man/man1/lirc-make-devinput.1.gz
196 /usr/share/man/man1/lirc-setup.1.gz
197 /usr/share/man/man1/mode2.1.gz
198 /usr/share/man/man1/pronto2lirc.1.gz
199 /usr/share/man/man5/lircd.conf.5.gz
200 /usr/share/man/man5/lircrc.5.gz
201 /usr/share/man/man8/lircd-setup.8.gz
202 /usr/share/man/man8/lircd-uinput.8.gz
203 /usr/share/man/man8/lircd.8.gz
204 /usr/share/man/man8/lircmd.8.gz
205 /usr/share/man/man8/lircrcd.8.gz
lirc-devel
1 /usr/include/lirc
2 /usr/include/lirc/ciniparser.h
3 /usr/include/lirc/config_file.h
4 /usr/include/lirc/config_flags.h
5 /usr/include/lirc/curl_poll.h
6 /usr/include/lirc/dictionary.h
7 /usr/include/lirc/driver.h
8 /usr/include/lirc/drv_admin.h
9 /usr/include/lirc/dump_config.h
10 /usr/include/lirc/include
11 /usr/include/lirc/include/media
12 /usr/include/lirc/include/media/lirc.h
13 /usr/include/lirc/input_map.h
14 /usr/include/lirc/input_map.inc
15 /usr/include/lirc/ir_remote.h
16 /usr/include/lirc/ir_remote_types.h
17 /usr/include/lirc/irpipe.h
18 /usr/include/lirc/irrecord.h
19 /usr/include/lirc/line_buffer.h
20 /usr/include/lirc/lirc-utils.h
21 /usr/include/lirc/lirc_client.h
22 /usr/include/lirc/lirc_config.h
23 /usr/include/lirc/lirc_log.h
24 /usr/include/lirc/lirc_options.h
25 /usr/include/lirc/paths.h
26 /usr/include/lirc/receive.h
27 /usr/include/lirc/release.h
28 /usr/include/lirc/serial.h
29 /usr/include/lirc/transmit.h
30 /usr/include/lirc_client.h
31 /usr/include/lirc_driver.h
32 /usr/include/lirc_private.h
33 /usr/lib64/libirrecord.so
34 /usr/lib64/liblirc.so
35 /usr/lib64/liblirc_client.so
36 /usr/lib64/liblirc_driver.so
37 /usr/lib64/pkgconfig/lirc-driver.pc
38 /usr/lib64/pkgconfig/lirc.pc
lirc-disable-kernel-rc
1 /usr/lib/udev/rules.d/99-remote-control-lirc.rules
lirc-drv-ftdi
1 /usr/lib64/lirc/plugins/ftdi.so
2 /usr/share/lirc/configs/ftdi.conf
lirc-drv-portaudio
1 /usr/lib64/lirc/plugins/audio.so
2 /usr/share/lirc/configs/audio.conf
lirc-tools-gui
1 /usr/bin/irxevent
2 /usr/bin/xmode2
3 /usr/share/man/man1/irxevent.1.gz
4 /usr/share/man/man1/xmode2.1.gz
5 ===pulseaudio-module-lirc===
6 <syntaxhighlight lang="bash" line>
7 /usr/lib64/pulse-14.2
8 /usr/lib64/pulse-14.2/modules
9 /usr/lib64/pulse-14.2/modules/module-lirc.so
Die erstmal wichtigsten Dateien befinden sich in lirc-core und lirc-tools-gui.
Die wichtigtsten Dateien werden bei der Installation in die folgenden Verzeichnisse abgelegt.
/etc/lirc /run /usr/bin /usr/lib/systemd/system/ /usr/sbin /usr/share/doc/packages/lirc-core
Eine Liste der wichtigsten Programme
lircd - Decode infrared signals and provide them on a socket. Die Zentrale!
xmode2 Show the pulse/space length of infrared signals Sozusagen ein Oszilloskop. Eigentlich das wichtigste Programm zu Beginn.
irxevent Infrared X-event Sender Sendet IR-Kommandos zu X Programmen weiter. Damit kann man mit einer IR-RemoteControl X-Windows-Programme steuern.(siehe auch irexec und irpty)
Treiber
lirc_rpi scheint es nicht mehr zu geben. Stattdessen findet sich auf meinem System gpio-ir, gpio-ir-tx und pwm-ir-tx. Bisher kannte ich nur den lirc_serial, den das gleich Schicksal ereilte. Schwuppdiwupp ist da mal serial_ir draus geowrden.
RasPi Inbetriebnahme
Was bei OpenSuSE schon mal gleich auffaellt, dass es keine /boot/config.txt gibt. Nach dem Studium der Doku von config.txt
include
Causes the content of the specified file to be inserted into the current file.
For example, adding the line include extraconfig.txt to config.txt will include the content of extraconfig.txt file in the config.txt file.
Include directives are not supported by bootcode.bin or the EEPROM bootloader
Die passenden Dateien finden sich bei openSuSE in /boot...
1 /boot/efi/config.txt
2 /boot/efi/extraconfig.txt
3 /boot/efi/ubootconfig.txt
4 /boot/vc/config.txt
5 /boot/vc/ubootconfig.txt
efi ist die UEFI Partition.
/dev/mmcblk0p1 on /boot/efi type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
vc kann sinnvollerweise nur VideoCore bedeuten. Einen Beleg dafuer konnte ich nur indirekt finden.
'vcgencmd' is a command line utility that can get various pieces of information from the VideoCore GPU on the Raspberry Pi.
Dieses Programm gibt es unter openSuSE nicht. Grrrr! (BTW: raspi-config gibt es auch nicht und nirgends ein Hinweis zu einem Ersatz)
Bei Bootlin kann man lesen:
Device Tree Overlays
A specificity of the Raspberry Pi is that the boot flow starts from the GPU core and not the ARM core like it does on most embedded processors. The GPU load a first bootloader from a ROM that will load a second bootloader (bootcode.bin) from eMMC/SD card that is in charge of executing a firmware (start.elf). This GPU firmware finally reads and parses a file stored in the boot partition (config.txt), which is used to set various boot parameters such as the image to boot on.
This config.txt file also allows to indicate which Device Tree file should be used as the hardware description, as well as Device Tree Overlays that should be applied on top of the Device Tree files. Device Tree Overlays are a bit like patches for the Device Tree: they allow to extend the base Device Tree with new properties and nodes. They are typically used to describe the hardware attached to the RaspberryPi through expansion boards.
The Raspberry Pi kernel tree contains a number of such Device Tree Overlays in the arch/arm/boot/dts/overlays folder. Each of those overlays, stored in .dts file gets compiled into a .dtbo files. Those .dtbo can be loaded and applied to the main Device Tree by adding the following statement to the config.txt file:
dtoverlay=overlay-name,overlay-arguments
We will fully take advantage of this mechanism to introduce two new Device Tree Overlays that will be parsed and dynamically merged into the main Device Tree.
Weiter kann man bei die dtoverlay Reference nachschlagen.
Allerdings laesst sich der Raspi immer noch nicht bewegen wie gewohnt seinen Betrieb aufzunehmen.
Dann habe ich folgende Meldung gefunden. Na Prost Mahlzeit!
Bevor ich aber kurzerhand auf eine aeltere Rasbian umsteige, gebe ich der V0.9.4d und V0.10.1 eine Chance.
Kompilieren hat soweit geklappt. Jetzt geht's ans Installieren.
---------- --------------- ---------- | | | Linux input | | | | |---->----| layer |---------->----------| Appli- | | | | | /dev/input/eventX | cation | | | --------------- | |
--->---| | | | ---------- remote | kernel | devinput v |
| | | ^ uinput | | | | ---------- | | --------------- | Appli- | | |---->----| lirc |---------->----------| cation |-- | | | | /var/run/lirc/lircd | | | ---------- --------------- ---------- |-- | | | ---------- | | | ----------
Basic setup flow
------------ | remote | ------------ (air gap) ------------ ! capture ! ! device ! ------------ | v | ------------ ! kernel ! Sometimes needs ! driver ! modprobe(1) configuration. ------------ | v IR pulse data Device like /dev/lirc0, /dev/ttyACM0. | or /dev/ttyS0. ------------ | lirc | Configure lirc_options.conf | driver | with driver and usually also device. ------------ | v IR pulse data Use mode2(1) to debug | ---------------- | lirc pass 1 | lircd.conf config file. ---------------- | v Key symbols Output socket e. g., LIRC - Linux Infrared Remote Control (p5 of 29) | /var/run/lirc/lircd. Use irw(1) to debug. | ---------------- | lirc pass 2 | lircrc config file. ---------------- | v Application strings Use ircat(1) to debug. |
Applications
Wechsel zu Raspberry Pi OS (64 Bit)
Da ich das Gefuehl bei openSuSE nicht los geworden bin an verschiedenen Baustellen zu arbeiten. Habe mich kurzerhand entschieden aud Raspberry Pi OS Bullseye zu wechseln. Mal schauen.
Nach der Installation von "allen" lirc-Paketen gab das Log von aptitude (cat /var/log/apt/history) folgendens aus: (NB: Zur besseren Lesbarkeit nachformatiert.
1 Start-Date: 2022-02-25 18:12:43
2 Commandline: packagekit role='install-packages'
3 Requested-By: pi (1000)
4 Install:
5 liblirc0:arm64 (0.10.1-6.3),
6 xfonts-75dpi:arm64 (1:1.0.4+nmu1.1, automatic),
7 lirc:arm64 (0.10.1-6.3),
8 libportaudio2:arm64 (19.6.0-1.1, automatic),
9 libusb-0.1-4:arm64 (2:0.1.12-32, automatic),
10 lirc-compat-remotes:arm64 (0.9.0-1.1),
11 lirc-doc:arm64 (0.10.1-6.3),
12 xfonts-encodings:arm64 (1:1.0.4-2.1, automatic),
13 python3-yaml:arm64 (5.3.1-5, automatic),
14 xfonts-utils:arm64 (1:7.7+6, automatic),
15 lirc-x:arm64 (0.10.1-6.3),
16 gir1.2-vte-2.91:arm64 (0.62.3-1, automatic)
17 End-Date: 2022-02-25 18:13:07
Die nicht direkt mit Namen 'LIRC' in Zusammenhang stehenden Pakete ergeben sich wohlmoeglich durch Abhaengigkeiten.
Die Aktivierung in der config.txt, erstmal nur das Empfangen, ging ohne Probleme und nach dem reboot hatte ich auch ein /dev/lirc0.
cat /dev/lirc0
zeigte auch eine Reaktion beim Drücken einer Fernbedienungstaste. Nun kann es ans Einlesen gehen. Dazu dient irrecord.q
1 NAME
2 irrecord - IR-codes recording tool for usage with LIRC
3
4 SYNOPSIS
5 irrecord [-f] [-n] [-H driver] [-d device] [file]
6
7 irrecord -a <file> Analyse a raw_codes config file, trying to convert it to a regular configuration.
8
9 irrecord -l List valid button names.
10
11 irrecord --help | --version
irrecord -l zeigt die moeglichen Button Names. Da ich ich hier gerne eindeutige Namen der Fernbedienung haben moechte schalte ich den vorgegeben Namen mit der Option - n aus.
1 i@raspberrypi:~ $ ir-ctl --features
2 Receive features /dev/lirc0:
3 - Device can receive raw IR
4 - Can report decoded scancodes and protocol
5 - Receiving timeout 60000 microseconds
6 - Can set receiving timeout min 1 microseconds, max 1250000 microseconds
7 Send features /dev/lirc0:
8 - Device cannot send
9 pi@raspberrypi:~ $
Bei den Versuchen die Fernbedienungen einzulesen ist zum wiederholten Male
Sorry, something went wrong.
Da leider keine genau Aussage darueber getroffen wird was wrong ist, muss ich einen Schritt zurueck.
cat /dev/lirc0
liefert eine Ausgabe. OK. mode2 liefert eine Ausgabe. smode2 existiert nicht und xmode2 bricht mit Fehlermeldung (Font not found) ab. Also ab in den Quellcode und was soll ich sagen ich bin schockiert. Ich wundere mich, dass xmode2 ueberhaupt mal richtig lief. Um den Quellcode zu analysieren habe ich die lirc-Quellen installiert. Dazu die auskommentierten SRC-Repositories eingebunden.
sudo vi /etc/apt/sources.list sudo vi /etc/apt/sources.list.d/raspi.list sudo apt update apt-get source lirc (NB:apt-src gibt es nicht (mehr))
In xmode2.cpp stehen gleich schon irrefuehrenden Dinge.
Usage: xmode2 [-t (ms/div)] , default division is 5 ms/div ????? default ist 0,05 ms/div
compile: gcc -o xmode2 xmode2.c -L/usr/X11R6/lib -lX11
Abgesehen davon, dass das Programm xmode2.cpp heiszt, kann das so nicht (mehr) funktionieren. Auch die Versionsnummer und Datum gibt zu denken.
Bei der Dokumentation fehlt mir hier der Hinweis auf die Version. Eine richtig brauchbare Doku findet man hier Der Fehler mit dem unauffindbaren Font ist schnell gefunden.
char font1_name[] = "-misc-fixed-*-r-*-*-12-*-*-*-*-*-iso8859-1";
Hardkodiert. Den Font gibt es bei mir nicht! Grrrr! Wer macht den sowas?
QAD Workaround(Patch):
char font1_name[] = "fixed";
Dann der naechste Klopper. Da ich zum Testen im LIRCSRC-Pfad arbeite muss ich zwangslaeufig die Positione der lirc_options.conf angeben. Beider Option --options-file ist in der Usage/Help das Gleichheitszeichen vergessen worden!
--options-file=/etc/lirc/lirc_options.conf
Und dennoch kommt eine Fehlermeldung:
xmode2: unrecognized option '--options-file=/etc/lirc/lirc_option.conf'
Erst war mir gar nicht klar welcher Programmteil diese Fehlermeldung produziert. Obwohl man schoen erkennen kann, dass in der Funktion options_load und dann parse_O_arg in lirc_options.c der Option -O, bzw. --options-file eine Sonderbehandlung zu gute kommt. Die auch funktioniert. Wird die Fehlermeldung durch die weitere "normale" Optionsbehandlung in parse_options ausgeloest, das es dort keine Option -O gehen darf! Also entweder man integriert die -O-Sonderbehandlung in parse_options oder man loescht nach erfolgreicher Sonderbehandlung die -O-Option aus argv heraus.
QAD Workaround(Patch)
const char* const optstring = "g:hvdD:U:H:t:mrA:O:"; // in parse_options bei mir Zeile 186 xmode2.cpp
und
case 'O': break;
in der switch-Anweisung.
Nach den Anpassungen und Kompilieren konnte ich z.B. mit
xmode2 --options-file=/etc/lirc/lirc_options.conf -Dinfo --device=/dev/lirc0 --driver=default
das Programm erfolgreich starten.
Dann zeigte sich aber ein Verhalten, dass bei Uerblaufendem Fenster nicht mehr angezeigt wurde. Das Umschalten der TimeDiv funktionierte zwar, aber die 0,05 ms/div erhielt ich nur zum Programmstart. Die Wahl der TimeDIV empfinde ich als zu umstaendlich.
Links
Heimat von IRScrutinizer [1][2] So richtig stabil kommt mich das Programm aber auch nicht vor. Mehrfach java.Exceptions!
Wenn ich schon mal dabei bin. Vielleicht gibt's einen neuen Empfaenger.[3]
Global Cache scheint mir ein wenig ueberteuert.[4]
IRTrans ist auch nicht unbedingt ein Schnapper.[5]
IRToy ist nach meinem Geschmack, fairer Preis und super Doku:-), aber leider nicht mehr lieferbar?[6]
RCoid kann man ja mal probieren.[7]Ist jedenfalls bei der Entwicklung noch aktuell und auf dem richtigen Weg.[8]
Die automatische Aktualisierung der Kommentare aktivieren.