A native Linux Kernel driver for the Tiqiaa/ZaZaRemote Tview USB IR Transceiver
  • C 67%
  • Python 31.6%
  • Makefile 1.4%
Find a file
2026-01-14 01:38:28 -05:00
extra driver 2026-01-14 01:38:28 -05:00
udev driver 2026-01-14 01:38:28 -05:00
.gitignore driver 2026-01-14 01:38:28 -05:00
dkms.conf driver 2026-01-14 01:38:28 -05:00
Makefile driver 2026-01-14 01:38:28 -05:00
README.md driver 2026-01-14 01:38:28 -05:00
tiqiaa_ir.c driver 2026-01-14 01:38:28 -05:00

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:

  1. Stop conflicting services: The lircd daemon often grabs the device automatically.

    sudo systemctl stop lircd.socket
    sudo systemctl stop lircd.service
    
  2. View raw data:

    # Ensure you use the 'default' driver, not devinput
    sudo mode2 -d /dev/lirc0 --driver=default
    

    Point your remote and press buttons. You should see pulse and space values.

  3. 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.