Adafruit LED Matrix Display program

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
tamaki
Date:
Sat Jul 11 01:16:40 2015 +0000
Commit message:
adafruit LED matrix Display program(Test)

Changed in this revision

Adafruit_GFX.h Show annotated file Show diff for this revision Revisions of this file
RGBmatrixPanel.cpp Show annotated file Show diff for this revision Revisions of this file
RGBmatrixPanel.h Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 86b6f02fab12 Adafruit_GFX.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Adafruit_GFX.h	Sat Jul 11 01:16:40 2015 +0000
@@ -0,0 +1,84 @@
+
+#ifndef _ADAFRUIT_GFX_H
+#define _ADAFRUIT_GFX_H
+ 
+#include "mbed.h"
+//#include "Arduino.h"
+//#include "Print.h"
+ 
+#define swap(a, b) { int16_t t = a; a = b; b = t; }
+ 
+class Adafruit_GFX : public Print {                        // THIS LINE RIGHT HERE
+ 
+ public:
+ 
+  Adafruit_GFX(int16_t w, int16_t h); // Constructor
+ 
+  // This MUST be defined by the subclass:
+  virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;
+ 
+  // These MAY be overridden by the subclass to provide device-specific
+  // optimized code.  Otherwise 'generic' versions are used.
+  virtual void
+    drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color),
+    drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color),
+    drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color),
+    drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color),
+    fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color),
+    fillScreen(uint16_t color),
+    invertDisplay(bool i);
+ 
+  // These exist only with Adafruit_GFX (no subclass overrides)
+  void
+    drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color),
+    drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername,
+      uint16_t color),
+    fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color),
+    fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername,
+      int16_t delta, uint16_t color),
+    drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1,
+      int16_t x2, int16_t y2, uint16_t color),
+    fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1,
+      int16_t x2, int16_t y2, uint16_t color),
+    drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h,
+      int16_t radius, uint16_t color),
+    fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h,
+      int16_t radius, uint16_t color),
+    drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap,
+      int16_t w, int16_t h, uint16_t color),
+    drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color,
+      uint16_t bg, uint8_t size),
+    setCursor(int16_t x, int16_t y),
+    setTextColor(uint16_t c),
+    setTextColor(uint16_t c, uint16_t bg),
+    setTextSize(uint8_t s),
+    setTextWrap(bool w),
+    setRotation(uint8_t r);
+ 
+#if ARDUINO >= 100
+  virtual size_t write(uint8_t);
+#else
+  virtual void   write(uint8_t);
+#endif
+ 
+  int16_t
+    height(void),
+    width(void);
+ 
+  uint8_t getRotation(void);
+ 
+ protected:
+  const int16_t
+    WIDTH, HEIGHT;   // This is the 'raw' display w/h - never changes
+  int16_t
+    _width, _height, // Display w/h as modified by current rotation
+    cursor_x, cursor_y;
+  uint16_t
+    textcolor, textbgcolor;
+  uint8_t
+    textsize,
+    rotation;
+  bool
+    wrap; // If set, 'wrap' text at right edge of display
+};
+
diff -r 000000000000 -r 86b6f02fab12 RGBmatrixPanel.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RGBmatrixPanel.cpp	Sat Jul 11 01:16:40 2015 +0000
@@ -0,0 +1,403 @@
+ /*
+This is the core graphics library for all our displays,
+providing a common set of graphics primitives (points, lines, circles, etc.).
+It needs to be paired with a hardware-specific library for each display device we carry (to handle the lower-level functions).
+ 
+Adafruit invests time and resources providing this open source code,
+please support Adafruit and open-source hardware by purchasing products from Adafruit!
+ 
+Written by Limor Fried/Ladyada for Adafruit Industries.
+BSD license, check license.txt for more information.
+All text above must be included in any redistribution.
+*/
+ 
+/*
+ *  Modified by Tatsuki Fukuda 25/5/2014 for use in mbed
+ */
+ 
+#include "Adafruit_GFX.h"
+ 
+// Draw a circle outline
+void Adafruit_GFX::drawCircle(int16_t x0, int16_t y0, int16_t r,
+                              uint16_t color)
+{
+    int16_t f = 1 - r;
+    int16_t ddF_x = 1;
+    int16_t ddF_y = -2 * r;
+    int16_t x = 0;
+    int16_t y = r;
+ 
+    drawPixel(x0  , y0+r, color);
+    drawPixel(x0  , y0-r, color);
+    drawPixel(x0+r, y0  , color);
+    drawPixel(x0-r, y0  , color);
+ 
+    while (x<y) {
+        if (f >= 0) {
+            y--;
+            ddF_y += 2;
+            f += ddF_y;
+        }
+        x++;
+        ddF_x += 2;
+        f += ddF_x;
+ 
+        drawPixel(x0 + x, y0 + y, color);
+        drawPixel(x0 - x, y0 + y, color);
+        drawPixel(x0 + x, y0 - y, color);
+        drawPixel(x0 - x, y0 - y, color);
+        drawPixel(x0 + y, y0 + x, color);
+        drawPixel(x0 - y, y0 + x, color);
+        drawPixel(x0 + y, y0 - x, color);
+        drawPixel(x0 - y, y0 - x, color);
+    }
+}
+ 
+void Adafruit_GFX::drawCircleHelper( int16_t x0, int16_t y0,
+                                     int16_t r, uint8_t cornername, uint16_t color)
+{
+    int16_t f     = 1 - r;
+    int16_t ddF_x = 1;
+    int16_t ddF_y = -2 * r;
+    int16_t x     = 0;
+    int16_t y     = r;
+ 
+    while (x<y) {
+        if (f >= 0) {
+            y--;
+            ddF_y += 2;
+            f     += ddF_y;
+        }
+        x++;
+        ddF_x += 2;
+        f     += ddF_x;
+        if (cornername & 0x4) {
+            drawPixel(x0 + x, y0 + y, color);
+            drawPixel(x0 + y, y0 + x, color);
+        }
+        if (cornername & 0x2) {
+            drawPixel(x0 + x, y0 - y, color);
+            drawPixel(x0 + y, y0 - x, color);
+        }
+        if (cornername & 0x8) {
+            drawPixel(x0 - y, y0 + x, color);
+            drawPixel(x0 - x, y0 + y, color);
+        }
+        if (cornername & 0x1) {
+            drawPixel(x0 - y, y0 - x, color);
+            drawPixel(x0 - x, y0 - y, color);
+        }
+    }
+}
+ 
+void Adafruit_GFX::fillCircle(int16_t x0, int16_t y0, int16_t r,
+                              uint16_t color)
+{
+    drawFastVLine(x0, y0-r, 2*r+1, color);
+    fillCircleHelper(x0, y0, r, 3, 0, color);
+}
+ 
+// Used to do circles and roundrects
+void Adafruit_GFX::fillCircleHelper(int16_t x0, int16_t y0, int16_t r,
+                                    uint8_t cornername, int16_t delta, uint16_t color)
+{
+ 
+    int16_t f     = 1 - r;
+    int16_t ddF_x = 1;
+    int16_t ddF_y = -2 * r;
+    int16_t x     = 0;
+    int16_t y     = r;
+ 
+    while (x<y) {
+        if (f >= 0) {
+            y--;
+            ddF_y += 2;
+            f     += ddF_y;
+        }
+        x++;
+        ddF_x += 2;
+        f     += ddF_x;
+ 
+        if (cornername & 0x1) {
+            drawFastVLine(x0+x, y0-y, 2*y+1+delta, color);
+            drawFastVLine(x0+y, y0-x, 2*x+1+delta, color);
+        }
+        if (cornername & 0x2) {
+            drawFastVLine(x0-x, y0-y, 2*y+1+delta, color);
+            drawFastVLine(x0-y, y0-x, 2*x+1+delta, color);
+        }
+    }
+}
+ 
+// Bresenham's algorithm - thx wikpedia
+void Adafruit_GFX::drawLine(int16_t x0, int16_t y0,
+                            int16_t x1, int16_t y1,
+                            uint16_t color)
+{
+    int16_t steep = abs(y1 - y0) > abs(x1 - x0);
+    if (steep) {
+        swap(x0, y0);
+        swap(x1, y1);
+    }
+ 
+    if (x0 > x1) {
+        swap(x0, x1);
+        swap(y0, y1);
+    }
+ 
+    int16_t dx, dy;
+    dx = x1 - x0;
+    dy = abs(y1 - y0);
+ 
+    int16_t err = dx / 2;
+    int16_t ystep;
+ 
+    if (y0 < y1) {
+        ystep = 1;
+    } else {
+        ystep = -1;
+    }
+ 
+    for (; x0<=x1; x0++) {
+        if (steep) {
+            drawPixel(y0, x0, color);
+        } else {
+            drawPixel(x0, y0, color);
+        }
+        err -= dy;
+        if (err < 0) {
+            y0 += ystep;
+            err += dx;
+        }
+    }
+}
+ 
+// Draw a rectangle
+void Adafruit_GFX::drawRect(int16_t x, int16_t y,
+                            int16_t w, int16_t h,
+                            uint16_t color)
+{
+    drawFastHLine(x, y, w, color);
+    drawFastHLine(x, y+h-1, w, color);
+    drawFastVLine(x, y, h, color);
+    drawFastVLine(x+w-1, y, h, color);
+}
+ 
+void Adafruit_GFX::drawFastVLine(int16_t x, int16_t y,
+                                 int16_t h, uint16_t color)
+{
+    // Update in subclasses if desired!
+    drawLine(x, y, x, y+h-1, color);
+}
+ 
+void Adafruit_GFX::drawFastHLine(int16_t x, int16_t y,
+                                 int16_t w, uint16_t color)
+{
+    // Update in subclasses if desired!
+    drawLine(x, y, x+w-1, y, color);
+}
+ 
+void Adafruit_GFX::fillRect(int16_t x, int16_t y, int16_t w, int16_t h,
+                            uint16_t color)
+{
+    // Update in subclasses if desired!
+    for (int16_t i=x; i<x+w; i++) {
+        drawFastVLine(i, y, h, color);
+    }
+}
+ 
+void Adafruit_GFX::fillScreen(uint16_t color)
+{
+    fillRect(0, 0, _width, _height, color);
+}
+ 
+// Draw a rounded rectangle
+void Adafruit_GFX::drawRoundRect(int16_t x, int16_t y, int16_t w,
+                                 int16_t h, int16_t r, uint16_t color)
+{
+    // smarter version
+    drawFastHLine(x+r  , y    , w-2*r, color); // Top
+    drawFastHLine(x+r  , y+h-1, w-2*r, color); // Bottom
+    drawFastVLine(x    , y+r  , h-2*r, color); // Left
+    drawFastVLine(x+w-1, y+r  , h-2*r, color); // Right
+    // draw four corners
+    drawCircleHelper(x+r    , y+r    , r, 1, color);
+    drawCircleHelper(x+w-r-1, y+r    , r, 2, color);
+    drawCircleHelper(x+w-r-1, y+h-r-1, r, 4, color);
+    drawCircleHelper(x+r    , y+h-r-1, r, 8, color);
+}
+ 
+// Fill a rounded rectangle
+void Adafruit_GFX::fillRoundRect(int16_t x, int16_t y, int16_t w,
+                                 int16_t h, int16_t r, uint16_t color)
+{
+    // smarter version
+    fillRect(x+r, y, w-2*r, h, color);
+ 
+    // draw four corners
+    fillCircleHelper(x+w-r-1, y+r, r, 1, h-2*r-1, color);
+    fillCircleHelper(x+r    , y+r, r, 2, h-2*r-1, color);
+}
+ 
+// Draw a triangle
+void Adafruit_GFX::drawTriangle(int16_t x0, int16_t y0,
+                                int16_t x1, int16_t y1,
+                                int16_t x2, int16_t y2, uint16_t color)
+{
+    drawLine(x0, y0, x1, y1, color);
+    drawLine(x1, y1, x2, y2, color);
+    drawLine(x2, y2, x0, y0, color);
+}
+ 
+// Fill a triangle
+void Adafruit_GFX::fillTriangle ( int16_t x0, int16_t y0,
+                                  int16_t x1, int16_t y1,
+                                  int16_t x2, int16_t y2, uint16_t color)
+{
+ 
+    int16_t a, b, y, last;
+ 
+    // Sort coordinates by Y order (y2 >= y1 >= y0)
+    if (y0 > y1) {
+        swap(y0, y1);
+        swap(x0, x1);
+    }
+    if (y1 > y2) {
+        swap(y2, y1);
+        swap(x2, x1);
+    }
+    if (y0 > y1) {
+        swap(y0, y1);
+        swap(x0, x1);
+    }
+ 
+    if(y0 == y2) { // Handle awkward all-on-same-line case as its own thing
+        a = b = x0;
+        if(x1 < a)      a = x1;
+        else if(x1 > b) b = x1;
+        if(x2 < a)      a = x2;
+        else if(x2 > b) b = x2;
+        drawFastHLine(a, y0, b-a+1, color);
+        return;
+    }
+ 
+    int16_t
+    dx01 = x1 - x0,
+    dy01 = y1 - y0,
+    dx02 = x2 - x0,
+    dy02 = y2 - y0,
+    dx12 = x2 - x1,
+    dy12 = y2 - y1,
+    sa   = 0,
+    sb   = 0;
+ 
+    // For upper part of triangle, find scanline crossings for segments
+    // 0-1 and 0-2.  If y1=y2 (flat-bottomed triangle), the scanline y1
+    // is included here (and second loop will be skipped, avoiding a /0
+    // error there), otherwise scanline y1 is skipped here and handled
+    // in the second loop...which also avoids a /0 error here if y0=y1
+    // (flat-topped triangle).
+    if(y1 == y2) last = y1;   // Include y1 scanline
+    else         last = y1-1; // Skip it
+ 
+    for(y=y0; y<=last; y++) {
+        a   = x0 + sa / dy01;
+        b   = x0 + sb / dy02;
+        sa += dx01;
+        sb += dx02;
+        /* longhand:
+        a = x0 + (x1 - x0) * (y - y0) / (y1 - y0);
+        b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);
+        */
+        if(a > b) swap(a,b);
+        drawFastHLine(a, y, b-a+1, color);
+    }
+ 
+    // For lower part of triangle, find scanline crossings for segments
+    // 0-2 and 1-2.  This loop is skipped if y1=y2.
+    sa = dx12 * (y - y1);
+    sb = dx02 * (y - y0);
+    for(; y<=y2; y++) {
+        a   = x1 + sa / dy12;
+        b   = x0 + sb / dy02;
+        sa += dx12;
+        sb += dx02;
+        /* longhand:
+        a = x1 + (x2 - x1) * (y - y1) / (y2 - y1);
+        b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);
+        */
+        if(a > b) swap(a,b);
+        drawFastHLine(a, y, b-a+1, color);
+    }
+}
+ 
+void Adafruit_GFX::drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color)
+{
+    int16_t i, j;
+    for(j=0; j<h; j++) {
+        for(i=0; i<w; i++ ) {
+            if(bitmap[i+(j/8)*w]& _BV(j%8) )
+                drawPixel(x+i, y+j, color);
+        }
+    }
+}
+ 
+size_t Adafruit_GFX::writeChar(uint8_t c)
+{
+    if (c == '\n') {
+        cursor_y += textsize*8;
+        cursor_x  = 0;
+    } else if (c == '\r') {
+        cursor_x  = 0;
+    } else {
+        drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize);
+        cursor_x += textsize*6;
+        if (wrap && (cursor_x > (_width - textsize*6))) {
+            cursor_y += textsize*8;
+            cursor_x = 0;
+        }
+    }
+    return 1;
+}
+ 
+// Draw a character
+void Adafruit_GFX::drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size)
+{
+    if((x >= _width)|| // Clip right
+            (y >= _height)|| // Clip bottom
+            ((x + 6 * size - 1) < 0) || // Clip left
+            ((y + 8 * size - 1) < 0))// Clip top
+        return;
+ 
+    for (int8_t i=0; i<6; i++ ) {
+        uint8_t line;
+        if (i == 5)
+            line = 0x0;
+        else
+            line = font[(c*5)+i];
+        for (int8_t j = 0; j<8; j++) {
+            if (line & 0x1) {
+                if (size == 1) // default size
+                    drawPixel(x+i, y+j, color);
+                else {  // big size
+                    fillRect(x+(i*size), y+(j*size), size, size, color);
+                }
+            } else if (bg != color) {
+                if (size == 1) // default size
+                    drawPixel(x+i, y+j, bg);
+                else {  // big size
+                    fillRect(x+i*size, y+j*size, size, size, bg);
+                }
+            }
+            line >>= 1;
+        }
+    }
+}
+ 
+ 
+void Adafruit_GFX::invertDisplay(bool i)
+{
+    // Do nothing, must be subclassed if supported
+}
+ 
+            
diff -r 000000000000 -r 86b6f02fab12 RGBmatrixPanel.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RGBmatrixPanel.h	Sat Jul 11 01:16:40 2015 +0000
@@ -0,0 +1,190 @@
+#include "mbed.h"
+#include "Adafruit_GFX.h"
+
+#ifndef _BV
+#define _BV(bit) (1<<(bit))
+#endif
+
+#ifdef DEBUG
+#define log_debug(format,...)   std::printf(format,##__VA_ARGS__)
+#else
+#define log_debug(...)
+#endif
+
+//** RGBmatrixPanel is class for full color LED matrix
+
+#include "mbed.h"
+#include "RGBmatrixPanel.h" // Hardware-specific library
+
+PinName ub1=p6;
+PinName ug1=p7;
+PinName ur1=p8;
+PinName lb2=p9;
+PinName lg2=p10;
+PinName lr2=p11;
+RGBmatrixPanel matrix(ur1,ug1,ub1,lr2,lg2,lb2,p12,p13,p14,p15,p16,p17,false);
+//RGBmatrixPanel(r1, g1, b1, r2, g2, b2, a, b, c, sclk, latch, oe, enable double_buffer);
+
+int main()
+{
+    matrix.begin();
+    while(1) {
+        // fill the screen with 'black'
+        matrix.fillScreen(matrix.Color333(0, 0, 0));
+        // draw a pixel in solid white
+        matrix.drawPixel(0, 0, matrix.Color333(7, 7, 7));
+        wait_ms(500);
+
+        // fix the screen with green
+        matrix.fillRect(0, 0, 32, 16, matrix.Color333(0, 7, 0));
+        wait_ms(500);
+
+        // draw a box in yellow
+        matrix.drawRect(0, 0, 32, 16, matrix.Color333(7, 7, 0));
+        wait_ms(500);
+
+        // draw an 'X' in red
+        matrix.drawLine(0, 0, 31, 15, matrix.Color333(7, 0, 0));
+        matrix.drawLine(31, 0, 0, 15, matrix.Color333(7, 0, 0));
+        wait_ms(500);
+
+        // draw a blue circle
+        matrix.drawCircle(7, 7, 7, matrix.Color333(0, 0, 7));
+        wait_ms(500);
+
+        // fill a violet circle
+        matrix.fillCircle(23, 7, 7, matrix.Color333(7, 0, 7));
+        wait_ms(500);
+
+        // fill the screen with 'black'
+        matrix.fillScreen(matrix.Color333(0, 0, 0));
+
+        // draw some text!
+        matrix.setCursor(1, 0);   // start at top left, with one pixel of spacing
+        matrix.setTextSize(1);    // size 1 == 8 pixels high
+
+        // printff each letter with a rainbow color
+        matrix.setTextColor(matrix.Color333(7,0,0));
+        matrix.putc('1');
+        matrix.setTextColor(matrix.Color333(7,4,0));
+        matrix.putc('6');
+        matrix.setTextColor(matrix.Color333(7,7,0));
+        matrix.putc('x');
+        matrix.setTextColor(matrix.Color333(4,7,0));
+        matrix.putc('3');
+        matrix.setTextColor(matrix.Color333(0,7,0));
+        matrix.putc('2');
+
+        matrix.setCursor(1, 9);   // next line
+        matrix.setTextColor(matrix.Color333(0,7,7));
+        matrix.putc('*');
+        matrix.setTextColor(matrix.Color333(0,4,7));
+        matrix.putc('R');
+        matrix.setTextColor(matrix.Color333(0,0,7));
+        matrix.putc('G');
+        matrix.setTextColor(matrix.Color333(4,0,7));
+        matrix.putc('B');
+        matrix.setTextColor(matrix.Color333(7,0,4));
+        matrix.putc('*');
+        wait_ms(500);
+    }
+}
+
+
+class RGBmatrixPanel : public Adafruit_GFX
+{
+
+public:
+    // Constructor for 16x32 panel:
+    RGBmatrixPanel(PinName r1,PinName g1,PinName b1,PinName r2,PinName g2,PinName b2,PinName a,PinName b,PinName c,PinName sclk,PinName latch,PinName oe, bool dbuf);
+
+    // Constructor for 32x32 panel (adds 'd' pin):
+    RGBmatrixPanel(PinName r1,PinName r2,PinName g1,PinName g2,PinName b1,PinName b2,PinName a,PinName b,PinName c,PinName d,PinName sclk, PinName latch,PinName oe,bool dbuf);
+
+    /** @fn void RGBmatrixPanel::begin(void)
+    *   @bref Attach a updateDisplay() to be called by the Ticker(every 100us)
+    */
+    void begin(void);
+    /** @fn void RGBmatrixPanel::drawPixel(int16_t x, int16_t y, uint16_t c)
+    *   @bref drawPixel
+    */
+    virtual void drawPixel(int16_t x,int16_t y,uint16_t c);
+    /** @fn void RGBmatrixPanel::fillScreen(uint16_t c)
+    *   @bref fillScreen
+    *   @param  c   fill screen 16bit color 0x0000 ~ 0xFFFF
+    */
+    virtual void fillScreen(uint16_t c);
+    /** @fn void RGBmatrixPanel::updateDisplay(void)
+    *   @param c    updateDisplay\n
+    *               This method is called by the interrupt start at begin().
+    */
+    void updateDisplay(void);
+    /** @fn void RGBmatrixPanel::swapBuffers(bool copy)
+    *   @param  copy swap buffer (if you use double-buffer)
+    */
+    void swapBuffers(bool copy);
+    /** @fn void RGBmatrixPanel::dumpMatrix(void)
+    *   @bref dump to default USB Serial\n
+    *         Declaration is required to use.(#define DEBUG)
+    */
+    void dumpMatrix(void);
+
+    uint8_t *backBuffer(void);
+
+    /** @fn uint16_t RGBmatrixPanel::Color333(uint8_t r, uint8_t g, uint8_t b)
+    *   @bref up convert to 16bit color from 9bit color.
+    *   @return 16bit(uint16_t) color value
+    */
+    uint16_t Color333(uint8_t r, uint8_t g, uint8_t b);
+    /** @fn uint16_t RGBmatrixPanel::Color444(uint8_t r, uint8_t g, uint8_t b)
+    *   @bref up convert to 16bit color from 12bit color.
+    *   @param r 0~7
+    *   @param g 0~7
+    *   @param b 0~7
+    *   @return 16bit(uint16_t) color value
+    */
+    uint16_t Color444(uint8_t r, uint8_t g, uint8_t b);
+    /** @fn uint16_t RGBmatrixPanel::Color888(uint8_t r, uint8_t g, uint8_t b)
+    *   @bref down convert to 16bit color from 24bit color.
+    *   @return 16bit(uint16_t) color value
+    */
+    uint16_t Color888(uint8_t r, uint8_t g, uint8_t b);
+    /** @fn uint16_t RGBmatrixPanel::Color888(uint8_t r, uint8_t g, uint8_t b, bool gflag)
+    *   @bref down convert to 16bit color from 24bit color using the gamma value table.
+    *   @return 16bit(uint16_t) color value
+    */
+    uint16_t Color888(uint8_t r, uint8_t g, uint8_t b, bool gflag);
+    /** @fn uint16_t RGBmatrixPanel::ColorHSV(long hue, uint8_t sat, uint8_t val, bool gflag)
+    *   @bref convert to 16bit color from (unsigned integer)HSV color using the gamma value table.
+    *   @param hue 0~1536(decimal value)
+    *   @param sat 0~255(decimal value) Does not make sense that it is not a multiple of 32.
+    *   @param val 0~255(decimal value) Does not make sense that it is not a multiple of 32.
+    *   @return 16bit(uint16_t) color value
+    */
+    uint16_t ColorHSV(long hue, uint8_t sat, uint8_t val, bool gflag)
+    ;
+    /** @fn uint16_t RGBmatrixPanel::ColorHSV(float hue, float sat, float val, bool gflag)
+    *   @bref convert to 16bit color from (float)HSV color using the gamma value table.
+    *   @param hue Normalized value from 0.0 to 1.0
+    *   @param sat Normalized value from 0.0 to 1.0
+    *   @param val Normalized value from 0.0 to 1.0
+    *   @return 16bit(uint16_t) color value
+    */
+    uint16_t ColorHSV(float hue, float sat, float val, bool gflag);
+private:
+    uint8_t *matrixbuff[2];
+    uint8_t nRows;
+    uint8_t backindex;
+    bool swapflag;
+
+    // Init/alloc code common to both constructors:
+    void init(uint8_t rows, bool dbuf);
+
+    BusOut _dataBus;
+    BusOut _rowBus;
+    DigitalOut _d,_sclk, _latch, _oe;
+    Ticker _refresh;
+    // Counters/pointers for interrupt handler:
+    uint8_t row, plane;
+    uint8_t *buffptr;
+};
\ No newline at end of file
diff -r 000000000000 -r 86b6f02fab12 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sat Jul 11 01:16:40 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/552587b429a1
\ No newline at end of file