Irdroid on a Raspberry Pi #infrared #automation #hardware #jukebox

To be able to automatically turn on and off a projector from my jukebox, I recently purchased an Irdroid Infrared Transceiver v3.
On my laptop it shows up like this:
usb 3-5: new full-speed USB device number 5 using xhci_hcd
usb 3-5: New USB device found, idVendor=04d8, idProduct=fd08, bcdDevice= 0.02
usb 3-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-5: Product: USB Infrared Transceiver
usb 3-5: Manufacturer: Irdroid
usb 3-5: SerialNumber: 00000002
cdc_acm 3-5:1.0: ttyACM0: USB ACM device
usbcore: registered new interface driver cdc_acm
cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
and I can use lirc and the Python modules serial and irtoy to access it via /dev/ttyACM0. I used irrecord to make a configuration file recording what the remote control of the projector sends, and it works!
The only thing I can't make work is to make lirc send the "turn on" code, so I'm using a Python script for that. That's all good on the laptop.
When I want to use lirc and the Python script on my Raspberry Pi, unfortunately things don't work. When I connect the USB device I get this:
usb 1-1.3: new full-speed USB device number 8 using xhci_hcd
usb 1-1.3: New USB device found, idVendor=04d8, idProduct=fd08, bcdDevice= 0.02
usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1.3: Product: USB Infrared Transceiver
usb 1-1.3: Manufacturer: Irdroid
usb 1-1.3: SerialNumber: 00000002
usbcore: registered new interface driver cdc_acm
cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
ir_toy 1-1.3:1.1: version: hardware 2, firmware 2.5, protocol 1
Registered IR keymap rc-rc6-mce
IR RC6 protocol handler initialized
rc rc3: Infrared Toy as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3/1-1.3:1.1/rc/rc3
rc rc3: lirc_dev: driver ir_toy registered at minor = 1, raw IR receiver, raw IR transmitter
input: Infrared Toy as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3/1-1.3:1.1/rc/rc3/input4
usbcore: registered new interface driver ir_toy
So I have it as /dev/lirc1 - but unfortunately it doesn't work with the Python script:
serial.serialutil.SerialException: Could not configure port: (25, 'Inappropriate ioctl for device')
It does not work with lircd either:
$ irsend --device=/var/run/lirc/lircd-irtoy SEND_ONCE Viewsonic-Q-3101 KEY_SLEEP
Error running command: Protocol error
with lircd logging:
lircd-0.10.2[2330]: Error: irtoy: could not reset tty
lircd-0.10.2[2330]: Warning: Failed to initialize hardware
lircd-0.10.2[2330]: curl_poll()() failed: Bad file descriptor
lircd-0.10.2[2330]: Notice: caught signal
So it seems I would like the device to be recognized not as an ir_toy device on the Raspberry Pi but as a cdc_acm device, as it is on the laptop.
On my laptop I noticed that I have no ir_toy module for the kernel, so I tried blacklisting the ir_toy module on the Raspberry Pi. After doing that, attaching the usb device gives:
usb 1-1.3: new full-speed USB device number 8 using xhci_hcd
usb 1-1.3: New USB device found, idVendor=04d8, idProduct=fd08, bcdDevice= 0.02
usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1.3: Product: USB Infrared Transceiver
usb 1-1.3: Manufacturer: Irdroid
usb 1-1.3: SerialNumber: 00000002
usbcore: registered new interface driver cdc_acm
cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
So I am missing the crucial line "cdc_acm 3-5:1.0: ttyACM0: USB ACM device"!
This is how far I got, I don't know how to proceed, suggestions welcome.
Writing about something always seems to make progress happen.
Not unexpectedly I found this in the cdc_acm module's source code:
Now I am trying to cross compile a cdc-acm module with CONFIG_IR_TOY turned off, following the Raspberry Pi documentation The Linux Kernel.
I was unable to figure out how to just build that one module, so it is taking a while.
Fingers crossed!
- Adam Sjøgren 🕑︎ - 2026-08-07
Yep, turning off CONFIG_IR_TOY, building kernel and modules and installing them helped, now it works!!
- Adam Sjøgren 🕓︎ - 2026-08-07