Heroic Robotics / SD600A

Fork of SD600A by Heroic Robotics

Revision:
26:98163818a82e
Parent:
24:d8d960a7124e
Child:
27:6667543f3b28
--- a/SD600A.h	Sat Oct 13 03:10:29 2012 +0000
+++ b/SD600A.h	Sat Oct 13 04:49:47 2012 +0000
@@ -1,53 +1,63 @@
-// Mbed library to control SD600A-based RGB LED Strips
-// (c) 2011 Jelmer Tiete
-// This library is ported from the Arduino implementation of Adafruit Industries
-// found at: http://github.com/adafruit/LPD8806
-// and their strips: http://www.adafruit.com/products/306
-// Released under the MIT License: http://mbed.org/license/mit
-//
-/*****************************************************************************/
-
-// Heavily modified by Jas Strong, 2012-10-04
-// Changed to use a virtual base class, drive the SD600A, and to use software SPI.
-
-#include "mbed.h"
-#include "rtos.h"
-#include "LedStrip.h"
-#ifndef MBED_SD600A_H
-#define MBED_SD600A_H
-
-#define INTERRUPT_INTERVAL (60)
-
-class SD600A : public LedStrip {
-
- public:
-
-  SD600A(PinName dataPin, PinName clockPin, int n);
-  virtual void begin(void);
-  virtual void show(void);
-  virtual void blank(void);
-  virtual void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b);
-  virtual void setPixelB(uint16_t n, uint8_t b);
-  virtual void setPixelG(uint16_t n, uint8_t g);
-  virtual void setPixelR(uint16_t n, uint8_t r);
-  virtual void setPixelColor(uint16_t n, uint32_t c);
-  virtual uint16_t numPixels(void);
-  virtual uint32_t Color(uint8_t, uint8_t, uint8_t);
-  virtual uint32_t total_luminance(void);
-  
- private:
-  void write(uint8_t byte);
-  uint8_t *pixels;          // Holds LED color values; also, SPI buffer.
-  uint32_t data_length;     // used by SPI ISR
-  uint32_t bit_index;       // used by SPI ISR
-  uint32_t byte_index;
-  uint16_t numLEDs;         // Number of RGB LEDs in strand
-  Ticker idletoggle;
-  void spi_isr(void); // toggles the clock to keep PWM working.
-  DigitalOut dat;
-  DigitalOut clk;
-    
-  void
-    writeguard(void);
-};
+// Mbed library to control SD600A-based RGB LED Strips
+// (c) 2011 Jelmer Tiete
+// This library is ported from the Arduino implementation of Adafruit Industries
+// found at: http://github.com/adafruit/LPD8806
+// and their strips: http://www.adafruit.com/products/306
+// Released under the MIT License: http://mbed.org/license/mit
+//
+/*****************************************************************************/
+
+// Heavily modified by Jas Strong, 2012-10-04
+// Changed to use a virtual base class, drive the SD600A, and to use software SPI.
+
+#include "mbed.h"
+#include "rtos.h"
+#include "LedStrip.h"
+#ifndef MBED_SD600A_H
+#define MBED_SD600A_H
+
+#define INTERRUPT_INTERVAL (60)
+
+class SD600A : public LedStrip {
+ public:
+  SD600A(PinName dataPin, PinName clockPin, int n);
+  virtual void begin(void);
+  virtual void show(void);
+  virtual void blank(void);
+  virtual void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b);
+  virtual void setPixelB(uint16_t n, uint8_t b);
+  virtual void setPixelG(uint16_t n, uint8_t g);
+  virtual void setPixelR(uint16_t n, uint8_t r);
+  virtual void setPixelColor(uint16_t n, uint32_t c);
+  virtual uint16_t numPixels(void);
+  virtual uint32_t Color(uint8_t, uint8_t, uint8_t);
+  virtual uint32_t total_luminance(void);
+  friend class SD600ASupervisor;
+  
+ private:
+  void write(uint8_t byte);
+  uint8_t *pixels;          // Holds LED color values; also, SPI buffer.
+  uint32_t data_length;     // used by SPI ISR
+  uint32_t bit_index;       // used by SPI ISR
+  uint32_t byte_index;
+  uint16_t numLEDs;         // Number of RGB LEDs in strand
+  DigitalOut dat;
+  DigitalOut clk;
+
+};
+
+class SD600ASupervisor {
+ public:
+  SD600ASupervisor(void);
+  virtual void add(SD600A *strip);
+ private:
+  uint32_t data_length;     // used by SPI ISR
+  uint32_t bit_index;       // used by SPI ISR
+  uint32_t byte_index;
+
+  uint32_t numstrips;
+  SD600A *strips[8];
+  Ticker idletoggle;
+  void spi_isr(void); 
+};
 #endif
\ No newline at end of file