Routines to drive a chain of APA102 Leds.

Fork of APA102 by Joel Rosiene

APA102.cpp

Committer:
vrou44
Date:
2018-05-14
Revision:
3:a1d3dbde7004
Parent:
0:2fd584b4a9b8

File content as of revision 3:a1d3dbde7004:

#include "APA102.h"
#include "mbed.h"

APA102::APA102(PinName mosi,PinName miso,PinName sclk,int rate)
        : _spi(mosi, miso, sclk)
      
        {
            // Setup the spi for 8 bit data, high steady state clock,
            // second edge capture, with a 1MHz clock rate
            _spi.format(8,3);
            _spi.frequency(rate);
        } 
        
void APA102::SetBuffer(unsigned int Buffer[],int Rows,int Cols, int Stride,int Offset, bool ZigZag,bool Wrap)
{
    Buf = Buffer;
    NR = Rows;
    NC = Cols;
    NS = Stride;
    off = Offset;
    ZF = ZigZag;
    WF = Wrap;
    }
    
void APA102::Repaint()
{   
//    int index;
    unsigned int val;
    
    _spi.write(0X00);  // Start
    _spi.write(0X00);
    _spi.write(0X00);
    _spi.write(0X00);
 
 #if 0   
    for(int r = 0;r<NR;r++)
    {
        for(int c = off;c<(NC+off);c++)
        {
            int cc = (WF)?(c%NS):((c<NS)?c:NS);
            if (ZF) 
               if((r&0x01)>0)
                    index = r*NS + NC+off-cc;
                else
                    index = r*NS + cc;
            else 
                index = r*NS + cc;
                
            val = Buf[index];
            _spi.write((val>>24)&0xFF);  
            _spi.write((val>>16)&0xFF);  
            _spi.write((val>>8)&0xFF);  
            _spi.write(val&0xFF);  
        }
    }
#else

    for (int i = 0 ; i < NC ; ++i) {
            val = Buf[i] ;
            _spi.write((val>>24)&0xFF);  
            _spi.write((val>>16)&0xFF);  
            _spi.write((val>>8)&0xFF);  
            _spi.write(val&0xFF);  
    }


#endif
    _spi.write(0XFF); // Stop
    _spi.write(0XFF);
    _spi.write(0XFF);
    _spi.write(0XFF);
    
}