Skip to content
Snippets Groups Projects
apa102LEDStrip.c 2.19 KiB
#include "badge23/apa102LEDStrip.h"
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

void initLEDs(struct apa102LEDStrip *ledObject, short int numLEDs, unsigned char bytesPerLED, unsigned char globalBrightness)
{  
  ledObject->_numLEDs = numLEDs;
  ledObject->_bytesPerLED = bytesPerLED;
  ledObject->_endFrameLength = 1;//round( (numLEDs/2)/8 );
  ledObject->_frameLength = (1+numLEDs+ledObject->_endFrameLength)*bytesPerLED;
  ledObject->_globalBrightness = globalBrightness;
  ledObject->LEDs = (unsigned char *)malloc(ledObject->_frameLength*sizeof(unsigned char)); 
  
  //Start Frame
  ledObject->LEDs[0] = 0;
  ledObject->LEDs[1] = 0;
  ledObject->LEDs[2] = 0;
  ledObject->LEDs[3] = 0;
  //Driver frame+PIXEL frames
  for(ledObject->_counter=ledObject->_bytesPerLED; ledObject->_counter<ledObject->_frameLength-(ledObject->_endFrameLength*ledObject->_bytesPerLED); ledObject->_counter+=ledObject->_bytesPerLED)
  {
    ledObject->LEDs[ledObject->_counter] = ledObject->_globalBrightness;
    ledObject->LEDs[ledObject->_counter+1] = 0;
    ledObject->LEDs[ledObject->_counter+2] = 0;
    ledObject->LEDs[ledObject->_counter+3] = 0;
  }
  //END frames
  for(ledObject->_counter=ledObject->_frameLength-(ledObject->_endFrameLength*ledObject->_bytesPerLED); ledObject->_counter<ledObject->_frameLength; ledObject->_counter+=ledObject->_bytesPerLED)
  {
    ledObject->LEDs[ledObject->_counter] = 255;
    ledObject->LEDs[ledObject->_counter+1] = 255;
    ledObject->LEDs[ledObject->_counter+2] = 255;
    ledObject->LEDs[ledObject->_counter+3] = 255;
  }
}
void setPixel(struct apa102LEDStrip *ledObject, short int pixelIndex, unsigned char *pixelColour)
{
  ledObject->_counter = 4*(pixelIndex+1);
  ledObject->LEDs[ ledObject->_counter + 1 ] = pixelColour[2];
  ledObject->LEDs[ ledObject->_counter + 2 ] = pixelColour[1];
  ledObject->LEDs[ ledObject->_counter + 3 ] = pixelColour[0];
}
void getPixel(struct apa102LEDStrip *ledObject, short int pixelIndex, unsigned char *pixelColour)
{
  ledObject->_counter = 4*(pixelIndex+1);
  pixelColour[2] = ledObject->LEDs[ ledObject->_counter + 1 ];
  pixelColour[1] = ledObject->LEDs[ ledObject->_counter + 2 ];
  pixelColour[0] = ledObject->LEDs[ ledObject->_counter + 3 ];
}