Thanks for this @ScruffR!
As soon as I receive this strip, I will test it with below sketch.
Can you check if it should work with the commands after " // setup your pixels"
(It does compile for RPi...)
#define LEDCOUNT 300
uint32_t pxBuffer[LEDCOUNT];
// actually for the APA102 protocol you need some extra bytes for leadin/leadout
//uint32_t pxBuffer[1 + LEDCOUNT + LEDCOUNT/16 + 1]; // element 0 (leadin) ... LEDs ... 1 leadout clock per 2 LEDs (ceil)
bool needRefresh;
volatile bool canRefresh = true;
void setup()
{
  SPI.begin();
  SPI.setClockSpeed(8, MHZ);
  //SPI.setDataMode(0);
  SPI.setBitOrder(MSBFIRST);
}
uint32_t setAPA102Color(int px, uint8_t r, uint8_t g, uint8_t b, uint8_t brightness = 31)
{
  uint32_t color = 0;
  
  // due to big endianness in revers order 
  color |= (brightness <<   0) | 0xE0;  //top 3 bits must be 111
  color |= (r          <<   8);
  color |= (g          <<  16);
  color |= (b          <<  24);
  pxBuffer[px] = color;
  return color;
}
void refreshDone()
{
  canRefresh = true;
}
void loop()
{
  // setup your pixels
  setAPA102Color(8, 30, 100, 40, 100);  // = Approx. "Set LED #8 to 15% RED, 50% GREEN and 20% BLUE"
  setAPA102Color(67, 40, 0, 0, 100);    // = Approx. "Set LED #67 to 20% RED"
  setAPA102Color(88, 40, 0, 140, 100);  // = Approx. "Set LED #88 to 20% RED and 70% BLUE"
  
  if (needRefresh && canRefresh)
  {
    canRefresh = 
    needRefresh = false;
    SPI.transfer(pxBuffer, NULL, sizeof(pxBuffer), refreshDone);
  }
delay(2000); // Slow down loop...
}
![]()