34 lines
2.0 KiB
Markdown
34 lines
2.0 KiB
Markdown
# 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](https://github.com/sgtaziz/lian-li-linux) (MIT); compression is
|
||
|
|
[tinyuz](https://github.com/sisong/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++:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
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
|
||
|
|
```
|