Heroic Robotics / SD600A

Fork of SD600A by Heroic Robotics

SD600A.h

Committer:
heroic
Date:
2014-08-25
Revision:
29:0200c63e1158
Parent:
27:6667543f3b28

File content as of revision 29:0200c63e1158:

// 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 service(void);
  virtual void setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b);
  virtual void setPackedPixels(uint8_t * buffer, uint32_t n);
  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