35240e5dfc9945fa0a9bb6b0e72aab44a5bdc35a
Proof-of-concept tools for the UNI FAN SL-INF Wireless kit (SLV3 TX/RX dongles 0416:8040/8041): a Python scan/colour script, tinyuz helpers, a JavaScript tinyuz encoder, the SignalRGB plugin and tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lian Li wireless fan tools
Proof-of-concept tools for the Lian Li UNI FAN SL-INF Wireless kit (SLV3 TX 0416:8040, RX 0416:8041).
Protocol from sgtaziz/lian-li-linux (MIT); compression is
tinyuz (MIT).
Only one program can use a dongle at a time: quit SignalRGB (it holds the TX) and L-Connect before running anything that opens the TX.
| File | What it does |
|---|---|
lianli_poc.py |
scan / color RRGGBB / demo. Needs pip install --user pyusb libusb-package. |
tuzc.exe |
tinyuz compressor used by lianli_poc.py (stdin to stdout, round-trip checked). |
tuzd.exe |
reference tinyuz decoder, tuzd <size>, used by the tests. |
tuz.js |
JavaScript tinyuz encoder (same code is inlined in the plugin). |
LianLi_Wireless_SLINF_PoC.js |
SignalRGB plugin source. Installed copy: Documents\WhirlwindFX\Plugins. |
test/tuz_test.js |
node test/tuz_test.js: JS encoder vs reference decoder, no hardware. |
test/js_tuz_on_fan.py |
sends JS-compressed frames to the fan (needs TX free). |
test/watch_rx.py |
python test/watch_rx.py [seconds]: watches the fan's effect id via the RX only; works while SignalRGB runs. |
build-src/ |
sources for tuzc.exe / tuzd.exe. |
The plugin hardcodes the fan MAC e8:b5:62:62:32:e1 and RX slot 1 (from lianli_poc.py scan).
Rebuilding tuzc.exe / tuzd.exe
Clone https://github.com/sisong/tinyuz and https://github.com/sisong/HDiffPatch into build-src/, then with MinGW g++:
cd build-src
F="-O2 -DNDEBUG -D_HPATCH_IS_USED_MULTITHREAD=0 -D_IS_USED_MULTITHREAD=0 -IHDiffPatch/libParallel"
gcc $F -c tinyuz/decompress/tuz_dec.c -o tuz_dec.o
g++ $F -static -o ../tuzc.exe tuzc_main.cpp tuz_wrapper.cpp tuz_dec.o tinyuz/compress/tuz_enc.cpp tinyuz/compress/tuz_enc_private/*.cpp HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.cpp -x c HDiffPatch/libHDiffPatch/HPatch/patch.c
gcc -O2 -D_IS_RUN_MEM_SAFE_CHECK=1 -o ../tuzd.exe tuzd_main.c tinyuz/decompress/tuz_dec.c
Languages
JavaScript
45.7%
Python
38.7%
C++
13.4%
C
2.2%