Ned Konz / Multi_WS2811

Dependents:   Multi_WS2811_test

Committer:
Ned Konz
Date:
Fri Jun 12 18:23:03 2015 -0700
Revision:
3:df4319053bfa
Parent:
1:86a910560879
Trying to get dma_done to work

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bikeNomad 1:86a910560879 1 #include <stdint.h>
bikeNomad 1:86a910560879 2 #include <cstring>
bikeNomad 1:86a910560879 3
bikeNomad 0:a8535703f23b 4 #include "LedStrip.h"
bikeNomad 0:a8535703f23b 5
bikeNomad 0:a8535703f23b 6 LedStrip::LedStrip(int n)
bikeNomad 0:a8535703f23b 7 {
bikeNomad 0:a8535703f23b 8 // Allocate 3 bytes per pixel:
bikeNomad 0:a8535703f23b 9 numLEDs = n;
bikeNomad 1:86a910560879 10 pixels = new uint8_t[ numPixelBytes() ];
bikeNomad 0:a8535703f23b 11 if (pixels) {
bikeNomad 1:86a910560879 12 std::memset(pixels, 0x00, numPixelBytes()); // Init to RGB 'off' state
bikeNomad 0:a8535703f23b 13 }
bikeNomad 0:a8535703f23b 14 }
bikeNomad 0:a8535703f23b 15
bikeNomad 0:a8535703f23b 16 LedStrip::~LedStrip()
bikeNomad 0:a8535703f23b 17 {
bikeNomad 1:86a910560879 18 delete[] pixels;
bikeNomad 0:a8535703f23b 19 }
bikeNomad 0:a8535703f23b 20
bikeNomad 0:a8535703f23b 21 uint32_t LedStrip::total_luminance(void)
bikeNomad 0:a8535703f23b 22 {
bikeNomad 0:a8535703f23b 23 uint32_t running_total;
bikeNomad 0:a8535703f23b 24 running_total = 0;
bikeNomad 0:a8535703f23b 25 for (int i=0; i< numPixelBytes(); i++)
bikeNomad 0:a8535703f23b 26 running_total += pixels[i];
bikeNomad 0:a8535703f23b 27 return running_total;
bikeNomad 0:a8535703f23b 28 }
bikeNomad 0:a8535703f23b 29
bikeNomad 0:a8535703f23b 30 // Convert R,G,B to combined 32-bit color
bikeNomad 0:a8535703f23b 31 uint32_t LedStrip::Color(uint8_t r, uint8_t g, uint8_t b)
bikeNomad 0:a8535703f23b 32 {
bikeNomad 0:a8535703f23b 33 // Take the lowest 7 bits of each value and append them end to end
bikeNomad 0:a8535703f23b 34 // We have the top bit set high (its a 'parity-like' bit in the protocol
bikeNomad 0:a8535703f23b 35 // and must be set!)
bikeNomad 0:a8535703f23b 36 return ((uint32_t)g << 16) | ((uint32_t)r << 8) | (uint32_t)b;
bikeNomad 0:a8535703f23b 37 }
bikeNomad 0:a8535703f23b 38
bikeNomad 0:a8535703f23b 39 // store the rgb component in our array
bikeNomad 0:a8535703f23b 40 void LedStrip::setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b)
bikeNomad 0:a8535703f23b 41 {
bikeNomad 0:a8535703f23b 42 if (n >= numLEDs) return; // '>=' because arrays are 0-indexed
bikeNomad 0:a8535703f23b 43
bikeNomad 0:a8535703f23b 44 pixels[n*3 ] = g;
bikeNomad 0:a8535703f23b 45 pixels[n*3+1] = r;
bikeNomad 0:a8535703f23b 46 pixels[n*3+2] = b;
bikeNomad 0:a8535703f23b 47 }
bikeNomad 0:a8535703f23b 48
bikeNomad 0:a8535703f23b 49 void LedStrip::setPixelR(uint16_t n, uint8_t r)
bikeNomad 0:a8535703f23b 50 {
bikeNomad 0:a8535703f23b 51 if (n >= numLEDs) return; // '>=' because arrays are 0-indexed
bikeNomad 0:a8535703f23b 52
bikeNomad 0:a8535703f23b 53 pixels[n*3+1] = r;
bikeNomad 0:a8535703f23b 54 }
bikeNomad 0:a8535703f23b 55
bikeNomad 0:a8535703f23b 56 void LedStrip::setPixelG(uint16_t n, uint8_t g)
bikeNomad 0:a8535703f23b 57 {
bikeNomad 0:a8535703f23b 58 if (n >= numLEDs) return; // '>=' because arrays are 0-indexed
bikeNomad 0:a8535703f23b 59
bikeNomad 0:a8535703f23b 60 pixels[n*3] = g;
bikeNomad 0:a8535703f23b 61 }
bikeNomad 0:a8535703f23b 62
bikeNomad 0:a8535703f23b 63 void LedStrip::setPixelB(uint16_t n, uint8_t b)
bikeNomad 0:a8535703f23b 64 {
bikeNomad 0:a8535703f23b 65 if (n >= numLEDs) return; // '>=' because arrays are 0-indexed
bikeNomad 0:a8535703f23b 66
bikeNomad 0:a8535703f23b 67 pixels[n*3+2] = b;
bikeNomad 0:a8535703f23b 68 }
bikeNomad 0:a8535703f23b 69
bikeNomad 0:a8535703f23b 70 void LedStrip::setPackedPixels(uint8_t * buffer, uint32_t n)
bikeNomad 0:a8535703f23b 71 {
bikeNomad 0:a8535703f23b 72 if (n >= numLEDs) return;
bikeNomad 1:86a910560879 73 std::memcpy(pixels, buffer, (std::size_t) (n*3));
bikeNomad 0:a8535703f23b 74 }
bikeNomad 0:a8535703f23b 75
bikeNomad 0:a8535703f23b 76 void LedStrip::setPixelColor(uint16_t n, uint32_t c)
bikeNomad 0:a8535703f23b 77 {
bikeNomad 0:a8535703f23b 78 if (n >= numLEDs) return; // '>=' because arrays are 0-indexed
bikeNomad 0:a8535703f23b 79
bikeNomad 0:a8535703f23b 80 pixels[n*3 ] = (c >> 16);
bikeNomad 0:a8535703f23b 81 pixels[n*3+1] = (c >> 8);
bikeNomad 0:a8535703f23b 82 pixels[n*3+2] = c;
bikeNomad 0:a8535703f23b 83 }