A conversion of the excellent Adafruit WS2801 library for Arduino to work on mbed

Dependents:   WiFiDipCortex_Cheerlights

Revision:
0:582e1b9c1cc1
Child:
1:6ff477690983
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Adafruit_WS2801.h	Fri Mar 08 08:49:04 2013 +0000
@@ -0,0 +1,63 @@
+#include "mbed.h"
+
+
+// Not all LED pixels are RGB order; 36mm type expects GRB data.
+// Optional flag to constructors indicates data order (default if
+// unspecified is RGB).  As long as setPixelColor/getPixelColor are
+// used, other code can always treat 'packed' colors as RGB; the
+// library will handle any required translation internally.
+#define WS2801_RGB 0
+#define WS2801_GRB 1
+
+class Adafruit_WS2801 {
+
+ public:
+
+  // Configurable pins:
+  Adafruit_WS2801(uint16_t n, PinName dpin, PinName cpin, uint8_t order=WS2801_RGB);
+  Adafruit_WS2801(uint16_t x, uint16_t y, PinName dpin, PinName cpin, uint8_t order=WS2801_RGB);
+  // Use SPI hardware; specific pins only:
+  Adafruit_WS2801(uint16_t n, uint8_t order=WS2801_RGB);
+  // Empty constructor; init pins/strand length/data order later:
+  Adafruit_WS2801();
+  // Release memory (as needed):
+  ~Adafruit_WS2801();
+
+  void
+    begin(void),
+    show(void),
+    setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b),
+    setPixelColor(uint16_t n, uint32_t c),
+    setPixelColor(uint16_t x, uint16_t y, uint8_t r, uint8_t g, uint8_t b),
+    setPixelColor(uint16_t x, uint16_t y, uint32_t c),
+    updatePins(PinName dpin, PinName cpin), // Change pins, configurable
+    updatePins(void), // Change pins, hardware SPI
+    updateLength(uint16_t n), // Change strand length
+    updateOrder(uint8_t order); // Change data order
+  uint16_t
+    numPixels(void);
+  uint32_t
+    getPixelColor(uint16_t n);
+
+ private:
+
+  uint16_t
+    numLEDs,
+    width,     // used with matrix mode
+    height;    // used with matrix mode
+  uint8_t
+    *pixels,   // Holds color values for each LED (3 bytes each)
+    rgb_order // Color order; RGB vs GRB (or others, if needed in future)
+    ;
+  DigitalOut  clkpin;
+  DigitalOut  datapin;     // Clock & data pin numbers
+//    clkpinmask, datapinmask; // Clock & data PORT bitmasks
+//  volatile uint8_t
+//    *clkport  , *dataport;   // Clock & data PORT registers
+  void
+    alloc(uint16_t n),
+    startSPI(void);
+  bool
+    hardwareSPI, // If 'true', using hardware SPI
+    begun;       // If 'true', begin() method was previously invoked
+};