koldfront

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

🕛︎ - 2026-08-07 - ♺ 1
Irdroid usb infrared transceiver v3

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:

#if IS_ENABLED(CONFIG_IR_TOY)
	{ USB_DEVICE(0x04d8, 0xfd08),
	.driver_info = IGNORE_DEVICE,
	},

	{ USB_DEVICE(0x04d8, 0xf58b),
	.driver_info = IGNORE_DEVICE,
	},
#endif

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

+=

Add comment

How to comment, in excruciating detail…

To avoid spam many websites make you fill out a CAPTCHA, or log in via an account at a corporation such as Facebook, Google or even Microsoft GitHub.

I have chosen to use a more old school method of spam prevention.

To post a comment here, you need to:

  • Configure a newsreader¹ to connect to the server koldfront.dk on port 1119 using nntps (nntp over TLS).
  • Open the newsgroup called lantern.koldfront and post a follow up to the article.
¹ Such as Thunderbird, Pan, slrn, tin or Gnus (part of Emacs).

Or, you can fill in this form:

+=