- C 67%
- Python 31.6%
- Makefile 1.4%
| extra | ||
| udev | ||
| .gitignore | ||
| dkms.conf | ||
| Makefile | ||
| README.md | ||
| tiqiaa_ir.c | ||
Tiqiaa Tview USB IR Linux Driver
A native Linux Kernel driver for the Tiqiaa/ZaZaRemote Tview USB IR Transceiver (USB ID 10c4:8468).
Unlike userspace implementations (Python/LibUSB), this driver integrates directly with the Linux Kernel rc-core subsystem. This means the device appears as a standard IR interface (/dev/lirc0, /sys/class/rc/rc0), allowing it to work natively with standard tools like ir-keytable, lirc, ir-ctl, and Home Assistant.
Features
- Native Kernel Integration: Works with standard Linux IR tools out of the box.
- Full Duplex Support:
- Receive: Robust polling mechanism (5ms intervals) with automatic re-synchronization.
- Transmit: Synchronous acknowledgement handling prevents device buffer overflows.
- Noise Filtering: Built-in simple glitch filter ignores electrical noise (< 50µs) while preserving valid signals.
- High Throughput: Optimized FIFO draining handles large USB bursts without dropping packets.
Hardware Supported
- Device: Tiqiaa Tview USB IR Transceiver
- Vendor ID:
0x10c4(Silicon Labs) - Product ID:
0x8468 - Chipset: CP210x Bridge with Tiqiaa MCU
Prerequisites
You need the kernel headers and build tools for your current kernel version:
Debian/Ubuntu/Raspberry Pi OS:
sudo apt update
sudo apt install build-essential linux-headers-$(uname -r) v4l-utils
Fedora:
sudo dnf install kernel-devel kernel-headers v4l-utils
Installation
1. Build and Install
# Clone the repository
git clone https://git.rocord.dev/rocord01/tiqiaa-linux-driver.git
cd tiqiaa-linux-driver
# Compile the driver
make
# Install the module
sudo make install
2. Setup Permissions (Udev)
To allow non-root users to access the device (required for many userspace applications), install the provided udev rule:
sudo cp udev/99-tiqiaa.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger
3. Load the Module
If the module is not already loaded:
sudo modprobe rc-core
sudo insmod tiqiaa_ir.ko
Note: Unplug and replug the USB stick after first installation to ensure the firmware is in a clean state.
Usage
Testing Reception (RX)
To see raw pulse/space data:
-
Stop conflicting services: The
lircddaemon often grabs the device automatically.sudo systemctl stop lircd.socket sudo systemctl stop lircd.service -
View raw data:
# Ensure you use the 'default' driver, not devinput sudo mode2 -d /dev/lirc0 --driver=defaultPoint your remote and press buttons. You should see
pulseandspacevalues. -
Decoding Protocols: You can tell the kernel to decode specific protocols (like NEC, Sony, RC-5):
# Enable all protocols sudo ir-keytable -p all # Watch for decoded keypresses sudo ir-keytable -t
Testing Transmission (TX)
You can send IR signals using ir-ctl.
Send Raw Scancode (cleanest method):
For example, to send an NEC command with code 0x123456:
sudo ir-ctl -S nec:0x123456
Send Raw Hex File: If you have a captured Pronto Hex or raw timing file:
sudo ir-ctl -s extra/cmd.hex
DKMS (Automatic Updates)
To ensure the driver is automatically rebuilt when you update your Linux kernel, you can register it with DKMS.
sudo apt install dkms
sudo cp -r . /usr/src/tiqiaa_ir-1.0
sudo dkms add -m tiqiaa_ir -v 1.0
sudo dkms build -m tiqiaa_ir -v 1.0
sudo dkms install -m tiqiaa_ir -v 1.0
Troubleshooting
"FIFO is full" errors in dmesg
The driver includes a fix for this by draining the kernel buffer mid-packet. If you still see this, your system might be under heavy load, but the driver will automatically recover.
Device stops receiving after Transmit
This usually indicates the device firmware is "stuck" in a mode transition. The driver includes msleep buffers to prevent this. If it happens, unplug and replug the device.
"Operation not permitted"
Ensure you copied the 99-tiqiaa.rules file to /etc/udev/rules.d/ and your user is part of the plugdev group.
License
GPL-2.0
Acknowledgments
- Reverse engineering based on Python scripts by XenRE and Connor Clairmont's userspace driver.
- Developed with assistance for Kernel 6.8+ compatibility.