Lirc

Aus TippvomTibb
Zur Navigation springen Zur Suche springen

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]

Request for Comments


Kommentar hinzufügen
TippvomTibb freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, registriere dich bitte oder melde dich an.