Implementing WS2801 support woes

Hi all.

I´ve been trying to make a WS2801 LED chain that I found in my stashes to work with Klipper.

My first approach - using modified dotstar-code to do it all in python using a sw-spi on an Arduino Uno seems to be running into a buffer/transfer size issue.

It works fine for a certain number of LEDs but when I get over a certain limit (10?), from what I understand, the SPI-requests are divided into multiple requests leading to pauses between the SPI-data sent to the LED-string.
The way the WS2801 works, it does not need any start-byte or stop byte but instead just takes whatever data is trown at it following a minimum of 500us pause where SPI Clock and Data are low level.
This makes me think that the pauses between SPI-requests makes the WS2801 lock in the data it has gotten so far in the first transport and then start all over for the next transport.
I have not yet hooked up my oscilloscope to confirm that though.
Different SPI-modes does not make things work differently.

Do any of you see an easier way than to implement code on both MCU side and Python side to set up SPI on the “printer” side, keep the buffers there and update LED by LED Neopixel style?

WS2801 datasheet for reference:

FWIW: I made it work, supports both hardware and software SPI and works fantastically with Led Effects (at least when running hardware SPI…)

Now I need to read up on howto create a pull request that could eventually be accepted.
Any protips?