rblake / rainbowdash

Fork of the Rainbowdash Rainbowduino firmware (http://code.google.com/p/rainbowdash/)

Home Page:http://www.hackup.net/2011/12/wifi-enabled-rgb-matrix-wall-light-part-1/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

R a i n b o w D a s h b o a r d

advanced rainbowduino firmware

(c) 2011 Kreative Software




RainbowDashboard is a third-party firmware for the Rainbowduino
by Seeed Studio. Among its features:

* Clean, maintainable code base.
* Compatible with standard firmware.
* Supports UART mode (no Arduino host needed - talk to Rainbowduino directly).
* Double-buffered graphics operations.
* Software real-time clock.
* Animation driven by the Rainbowduino itself.
* Full Windows ANSI (CP1252) character set.
* High-level command set.




DirectMode

DirectMode is a rewrite of the standard direct-mode firmware.

Write 96 bytes of raw pixel data to show an image on the LED display.
The data is organized channel-by-channel in green, red, blue order;
row-by-row; then column-by-column, with one byte per two columns.




CommandMode

CommandMode is a rewrite of the standard command-mode firmware.

Commands have the following format:

  52 - the header, an ASCII 'R'
  cc - the command number
  sr - the column number; the red channel
  gb - the green channel; the blue channel
  ii - the image number, ASCII value, or row number

The following commands are supported:

  52 01 s0 00 ii - SHOW_IMAGE: Displays a hard-coded image.
  52 02 sr gb ii - SHOW_CHARACTER: Displays an 8x8 ASCII character.
  52 03 0r gb 00 - SHOW_COLOR: Displays a solid color.
  52 04 sr gb ii - SHOW_PIXEL: Sets an individual pixel on the display.

CommandMode has all the same restrictions as the standard firmware:
only five built-in images, only letters and digits, and only the commands
listed above. The only extra is the SHOW_PIXEL command, as it is a common
modification, and the Rainbowduino is close to useless without it.




RainbowDash

The RainbowDash directory contains the main attraction, the RainbowDashboard
firmware itself. RainbowDashboard operates similarly to command mode, but
supports four types of commands instead of just one.

Short commands have the same format as standard command mode:

  52 - the header, an ASCII 'R'
  cc - the command number
  sr - the column number; the red channel
  gb - the green channel; the blue channel
  ii - the image number, ASCII value, or row number

Long commands have the following format:

  72 - the header, an ASCII 'r'
  cc - the command number
  xx - the column number
  yy - the row number (typically)
  zz - the picture number, ASCII value, or control channel (typically)
  rr - the red channel (typically)
  gg - the green channel (typically)
  bb - the blue channel (typically)

Short direct-mode commands have the format of an ASCII uppercase 'D' followed
by 96 bytes of raw Rainbowduino buffer data in the format used by DirectMode.

Long direct-mode commands have the format of an ASCII lowercase 'd' followed
by 256 bytes of raw RainbowDashboard buffer data. The data is organized
channel-by-channel in control, red, green, blue order; row-by-row; then
column-by-column, with one byte per one column.




RainbowDashboard Commands

RainbowDashboard has 48 commands, listed below in both short and long formats.

All commands that set pixels operate on a temporary buffer to eliminate
flicker. SHOW_IMAGE, SHOW_CHARACTER, SHOW_COLOR, and SHOW_PIXEL will
immediately switch buffers, so their effects will be immediately visible.
Other commands, however, will not switch buffers, so their effects will
not be visible until you send the SWAP_BUFFER command.

  52 00 00 00 00          - NO_OP: Does nothing.
  72 00 00 00 00 00 00 00 - (Command number 0 is guaranteed to be ignored.)

  52 01 x0 00 ii          - SHOW_IMAGE: Displays a hard-coded image,
  72 01 xx yy ii 00 00 00 - with wrap-around.

  52 02 xr gb ii          - SHOW_CHARACTER: Displays an 8x8 ASCII character
  72 02 xx yy ii rr gg bb - (erasing any existing image).

  52 03 0r gb 00          - SHOW_COLOR: Displays a solid color
  72 03 00 00 cc rr gg bb - or pixel value.

  52 04 xr gb yy          - SHOW_PIXEL: Sets an individual pixel
  72 04 xx yy cc rr gg bb - on the display.

  52 05 x0 00 ii          - DRAW_IMAGE: Draws a hard-coded image,
  72 05 xx yy ii 00 00 00 - without wrap-around.

  52 06 xr gb ii          - DRAW_CHAR_8x8: Draws an 8x8 ASCII character
  72 06 xx yy ii rr gg bb - (on top of an existing image).

  52 07 xr gb ii          - DRAW_CHAR_4x4: Draws a 4x4 ASCII character
  72 07 xx yy ii rr gg bb - (on top of an existing image).

  52 08 0r gb 00          - SET_ALL_COLOR: Sets the pixel values
  72 08 00 00 cc rr gg bb - of all pixels.

  52 09 0r gb yy          - SET_ROW_COLOR: Sets the pixel values
  72 09 00 yy cc rr gg bb - of all pixels in a row.

  52 0A xr gb 00          - SET_COLUMN_COLOR: Sets the pixel values
  72 0A xx 00 cc rr gg bb - of all pixels in a column.

  52 0B xr gb yy          - SET_PIXEL_COLOR: Sets the pixel value
  72 0B xx yy cc rr gg bb - of a single pixel.

  52 0C 0r gb 00          - SET_ALL_BITMAP: Sets the colors of all pixels
  72 0C 00 00 cc rr gg bb - according to a one-bit-per-channel bitmap.

  52 0D 0r gb yy          - SET_ROW_COLOR: Sets the colors of a row
  72 0D 00 yy cc rr gg bb - according to a one-bit-per-channel bitmap.

  52 0E xr gb 00          - SET_COLUMN_COLOR: Sets the colors of a column
  72 0E xx 00 cc rr gg bb - according to a one-bit-per-channel bitmap.

  52 0F xr gb yy          - SET_PIXEL_COLOR: Sets the color of one pixel
  72 0F xx yy cc rr gg bb - according to a one-bit-per-channel bitmap.

  (no short ver)          - SET_CLOCK_ADJUST: Adjusts the speed of the software
  72 10 00 00 vv vv vv vv - clock to compensate for an inaccurate timer.
                          - See the explanation for the clocktest utility.

  (no short ver)          - SET_CLOCK_DATE_D: Sets the date (in days since
  72 11 00 00 vv vv vv vv - January 1, 1970, UTC) and resets the time.

  (no short ver)          - SET_CLOCK_DATE_P: Sets the date (in days since
  72 12 00 00 vv vv vv vv - January 1, 1970, UTC) without resetting the time.

  (no short ver)          - SET_CLOCK_TIME: Sets the time
  72 13 00 00 vv vv vv vv - (in milliseconds since midnight, UTC).

  (no short ver)          - SET_CLOCK_ZONE: Sets the time zone
  72 14 00 00 vv vv vv vv - (in milliseconds added to UTC).

  (no short ver)          - SET_CLOCK_DST: Sets daylight saving time
  72 15 00 00 vv vv vv vv - (in milliseconds added to standard time).

  (no short ver)          - SET_REGISTER: Sets a user-defined register value.
  72 16 00 ii vv vv vv vv - See the Pixel Format section.

  (no short ver)          - SET_ANIM_INFO: Sets up an animation slot.
  72 17 00 ss aa ll oo dd - See the Animation section.

  (no short ver)          - SET_ANIM_DATA_1: Sets 1 byte of animation data.
  72 18 00 aa v1 00 00 00 - See the Animation section.

  (no short ver)          - SET_ANIM_DATA_2: Sets 2 bytes of animation data.
  72 19 00 aa v1 v2 00 00 - See the Animation section.

  (no short ver)          - SET_ANIM_DATA_3: Sets 3 bytes of animation data.
  72 1A 00 aa v1 v2 v3 00 - See the Animation section.

  (no short ver)          - SET_ANIM_DATA_4: Sets 4 bytes of animation data.
  72 1B 00 aa v1 v2 v3 v4 - See the Animation section.

  (no short ver)          - SET_GAMMA: Sets the gamma for a particular
  72 1C 00 ll gg 00 00 00 - brightness level.

  (no short ver)          - SET_BUFFER: If ff is 1 or 3, sets buffer number
  72 1D 00 ff dd ww 00 00 - dd to be the display buffer. If ff is 2 or 3,
                          - sets buffer number ww to be the working buffer.

  52 1E 00 00 00          - COPY_BUFFER: Copies the display buffer
  72 1E 00 00 00 00 00 00 - into the working buffer.

  52 1F 00 00 00          - SWAP_BUFFER: Swaps the display and
  72 1F 00 00 00 00 00 00 - working buffers.

  52 20 xr gb yy          - SCROLL_BUFFER: Scrolls the display x pixels
  72 20 xx yy cc rr gg bb - horizontally and y pixels vertically, filling
                          - empty pixels with a color.

  52 21 xr gb yy          - SCROLL_ROW: Scrolls a row (row y) x pixels
  72 21 xx yy cc rr gg bb - horizontally, filling empty pixels with a color.

  52 22 xr gb yy          - SCROLL_COLUMN: Scrolls a column (column x) y pixels
  72 22 xx yy cc rr gg bb - vertically, filling empty pixels with a color.

  52 23 x0 00 yy          - ROLL_BUFFER: Scrolls the display x pixels
  72 23 xx yy 00 00 00 00 - horizontally and y pixels vertically with
                          - wraparound.

  52 24 x0 00 yy          - ROLL_ROW: Scrolls a row (row y) x pixels
  72 24 xx yy 00 00 00 00 - horizontally with wraparound.

  52 25 x0 00 yy          - ROLL_COLUMN: Scrolls a column (column x) y pixels
  72 25 xx yy 00 00 00 00 - vertically with wraparound.

  52 26 x0 00 yy          - FLIP_BUFFER: Flips the entire display horizontally
  72 26 xx yy 00 00 00 00 - (if x is nonzero) and/or vertically (if y is
                          - nonzero).

  52 27 00 00 yy          - FLIP_ROW: Flips a row
  72 27 00 yy 00 00 00 00 - horizontally.

  52 28 x0 00 00          - FLIP_COLUMN: Flips a column
  72 28 xx 00 00 00 00 00 - vertically.

  52 29 00 00 00          - INVERT_BUFFER: Inverts the display
  72 29 00 00 00 00 00 00 - (black becomes white and vice versa).

  52 2A 00 00 yy          - INVERT_ROW: Inverts a row
  72 2A 00 yy 00 00 00 00 - (black becomes white and vice versa).

  52 2B x0 00 00          - INVERT_COLUMN: Inverts a column
  72 2B xx 00 00 00 00 00 - (black becomes white and vice versa).

  (no short ver)          - DRAW_IMAGE_ROW: Draws a single row of a hard-coded
  72 2C dd ss ii 00 00 00 - image. Row s of the image is drawn on row d.

  (no short ver)          - DRAW_IMAGE_COLUMN: Draws a single column of a
  72 2D dd ss ii 00 00 00 - hard-coded image. Column s of the image is drawn
                          - on column d.

  (no short ver)          - DRAW_CHAR_ROW: Draws a single row of an 8x8 ASCII
  72 2E dd ss ii rr gg bb - character. Row s of the character is drawn on row d.

  (no short ver)          - DRAW_CHAR_COLUMN: Draws a single column of an 8x8
  72 2F dd ss ii rr gg bb - ASCII character. Column s of the character is drawn
                          - on column d.

RainbowDashboard includes a complete Windows ANSI (CP1252) character set
in both 4x4 and 8x8 font sizes, displayed using the SHOW_CHARACTER,
DRAW_CHAR_8x8, and DRAW_CHAR_4x4 commands. It also includes eight built-in
images displayed using the SHOW_IMAGE and DRAW_IMAGE commands, the first
five of which are identical to the built-in images provided by the standard
firmware. Image number 6 is particularly useful when determining desired
gamma levels to be set with the SET_GAMMA command.




RainbowDashboard Pixel Format

Each pixel in the RainbowDashboard buffer has a control channel, a red
channel, a green channel, and a blue channel. A pixel may have any of
the following formats:

  00000000 rrrrrrrr gggggggg bbbbbbbb  -  A solid color.

  00000rgb rrrrrrrr gggggggg bbbbbbbb  -  An animation.

    The control channel determines whether each other channel is a fixed
    color value (0) or an animation slot number (1).

  1fffffff 00bbbbbb dddd0000 pppppppp  -  An indexed color.

    The control channel determines the field number, with fields 0-63 being
    clock values and fields 64-127 being user-defined register values.

    The red channel determines the base and the green channel determines
    the digit. The blue channel determines which palette is used. The value
    of the field is divided by (base^digit) and then used as an index into
    the specified palette.

  1fffffff 01bbbbbb ddddr0r1 g0g1b0b1  -  A gradient.

    The control channel determines the field number, with fields 0-63 being
    clock values and fields 64-127 being user-defined register values.

    The red channel determines the base and the upper half of the green
    channel determines the digit.

    The lower half of the green channel actually determines the *red* values
    of the two endpoints of the gradient. The upper half of the blue channel
    determines the green values, and the lower half of the blue channel
    determines the blue values.

    The value of the field is divided by (base^digit) and then put on a
    scale between 0 and base-1, with 0 corresponding to r0g0b0 and base-1
    corresponding to r1g1b1.

  1fffffff 10bbbbbb ddddr0r1 g0g1b0b1  -  A 4x4 character display.

    The control channel determines the field number, with fields 0-63 being
    clock values and fields 64-127 being user-defined register values.

    The red channel determines the base and the upper half of the green
    channel determines the digit.

    The lower half of the green channel actually determines the *red* values
    of the background and foreground. The upper half of the blue channel
    determines the green values, and the lower half of the blue channel
    determines the blue values.

    The value of the field is divided by (base^digit) and then displayed as
    a 4x4 character with background color r0g0b0 and foreground color r1g1b1.

    The same pixel value must be applied to a 4x4 area in the upper left,
    upper right, lower left, or lower right to get the whole display.

  1fffffff 11bbbbbb ddddr0r1 g0g1b0b1  -  An 8x8 character display.

    The control channel determines the field number, with fields 0-63 being
    clock values and fields 64-127 being user-defined register values.

    The red channel determines the base and the upper half of the green
    channel determines the digit.

    The lower half of the green channel actually determines the *red* values
    of the background and foreground. The upper half of the blue channel
    determines the green values, and the lower half of the blue channel
    determines the blue values.

    The value of the field is divided by (base^digit) and then displayed as
    an 8x8 character with background color r0g0b0 and foreground color r1g1b1.

    The same pixel value must be applied to the entire 8x8 LED matrix to
    get the whole display.




Animation

Animations are accomplished using two additional separate data areas.

The Animation Data area contains 256 actual frame-by-frame color levels.
To set these levels, the SET_ANIM_DATA_1, 2, 3, and 4 commands are used:

  SET_ANIM_DATA_1:  72 18 00 aa v1 00 00 00 - aa is the address where v1
                                              will be stored.
  SET_ANIM_DATA_2:  72 19 00 aa v1 v2 00 00 - aa is the address where v1
                                              will be stored; v2 will be
                                              stored at the following
                                              address.
  SET_ANIM_DATA_3:  72 1A 00 aa v1 v2 v3 00 - aa is the address where v1
                                              will be stored; v2 will be
                                              stored at the following
                                              address, and v3 after that.
  SET_ANIM_DATA_4:  72 1B 00 aa v1 v2 v3 v4 - aa is the address where v1
                                              will be stored; v2 will be
                                              stored at the following
                                              address, then v3, then v4.

The Animation Info area contains 64 animation slots, each of which
determines the address of the animation loop within the Animation Data
area, the number of frames in the loop, the offset to the first frame
(relative to the address), and the duration of each frame. An animation
slot is set using the SET_ANIM_INFO command:

  SET_ANIM_INFO:  72 17 00 ss aa ll oo dd - ss is the slot number.
                                            aa is the address.
                                            ll is the number of frames.
                                            oo is the offset of frame 1.
                                            dd is the duration of a frame.

The duration of a frame is expressed in hundredths of a second; the longest
possible duration is 2.55 seconds.




Fields

When the high bit of the control channel is set, the control channel is
treated as a field number. Fields 64-127 are determined by user-controlled
registers. Fields 0-63 are the following time values:

   0 / 0x00 - milliseconds since 1970-1-1 UTC
   1 / 0x01 - ticks (60ths of a second) since 1970-1-1 UTC
   2 / 0x02 - 16ths of a second since 1970-1-1 UTC
   3 / 0x03 - seconds since 1970-1-1 UTC
   4 / 0x04 - minutes since 1970-1-1 UTC
   5 / 0x05 - hours since 1970-1-1 UTC
   6 / 0x06 - days since 1970-1-1 UTC
   7 / 0x07 - weeks since 1970-1-1 UTC
   8 / 0x08 - 0 for BCE, 1 for CE
   9 / 0x09 - 1 for BCE, 2 for CE
  10 / 0x0A - 0 for a non-leap year, 1 for a leap year
  11 / 0x0B - 1 for a non-leap year, 2 for a leap year
  12 / 0x0C - year number
  13 / 0x0D - month number from 0 to 11, alternating between 11 and 12 in Dec.
  14 / 0x0E - month number from 0 to 11
  15 / 0x0F - month number from 1 to 12
  16 / 0x10 - ISO week number from 0 to 51/52
  17 / 0x11 - ISO week number from 1 to 52/53
  18 / 0x12 - week number within the current month, from 0 to 3/4/5
  19 / 0x13 - week number within the current month, from 1 to 4/5/6
  20 / 0x14 - day of month from 0 to 27/28/29/30
  21 / 0x15 - day of month from 1 to 28/29/30/31
  22 / 0x16 - day of year from 0 to 364/365
  23 / 0x17 - day of year from 1 to 365/366
  24 / 0x18 - day of week from 0 on Sunday to 6 on Saturday
  25 / 0x19 - day of week from 1 on Sunday to 7 on Saturday
  26 / 0x1A - day of week from 0 on Monday to 6 on Sunday
  27 / 0x1B - day of week from 1 on Monday to 7 on Sunday
  28 / 0x1C - number of this day of week in this month from 0 to 3/4/5
  29 / 0x1D - number of this day of week in this month from 1 to 4/5/6
  30 / 0x1E - number of days in this month
  31 / 0x1F - number of days in this year
  32 / 0x20 - 0 for AM, 1 for PM
  33 / 0x21 - 1 for AM, 2 for PM
  34 / 0x22 - hour from 0 to 11
  35 / 0x23 - hour from 1 to 12
  36 / 0x24 - hour from 0 to 23
  37 / 0x25 - hour from 1 to 24
  38 / 0x26 - minute from 0 to 59
  39 / 0x27 - second from 0 to 59
  40 / 0x28 - tick from 0 to 59
  41 / 0x29 - millisecond from 0 to 999
  42 / 0x2A - time zone offset from UTC, in minutes
  43 / 0x2B - time zone offset from UTC, in seconds
  44 / 0x2C - time zone offset from UTC, in milliseconds
  45 / 0x2D - daylight saving offset in minutes
  46 / 0x2E - daylight saving offset in seconds
  47 / 0x2F - daylight saving offset in milliseconds
  48 / 0x30 - milliseconds since midnight (local)
  49 / 0x31 - ticks since midnight (local)
  50 / 0x32 - sixteenths since midnight (local)
  51 / 0x33 - seconds since midnight (local)
  52 / 0x34 - minutes since midnight (local)
  53 / 0x35 - hours since midnight (local)
  54 / 0x36 - days since 1970-1-1 (local)
  55 / 0x37 - weeks since 1970-1-1 (local)
  56 / 0x38 - number of cycles (1 cycle = 400 years) since 1970-1-1 (local)
  57 / 0x39 - number of cycles since 1970-1-1 (local), plus one
  58 / 0x3A - number of year within cycle, from 0 to 399
  59 / 0x3B - number of year within cycle, from 1 to 400
  60 / 0x3C - number of day within cycle, from 0 to 146096
  61 / 0x3D - number of day within cycle, from 1 to 146097
  62 / 0x3E - ISO week year number
  63 / 0x3F - number of weeks in this year




Bases

When the high bit of the control channel is set, the red channel contains
the base or radix in which the value of a field will be displayed. A red
channel value of zero or one means no digit extraction is performed. A red
channel value of 2 to 16 corresponds directly to base 2 to 16. However,
red channel values above 16 express slightly different bases:

   2 -> 2     15 -> 15    28 -> 40    41 -> 84    54 -> 160
   3 -> 3     16 -> 16    29 -> 42    42 -> 88    55 -> 168
   4 -> 4     17 -> 18    30 -> 44    43 -> 92    56 -> 176
   5 -> 5     18 -> 20    31 -> 46    44 -> 96    57 -> 184
   6 -> 6     19 -> 22    32 -> 48    45 -> 100   58 -> 192
   7 -> 7     20 -> 24    33 -> 52    46 -> 104   59 -> 200
   8 -> 8     21 -> 26    34 -> 56    47 -> 108   60 -> 208
   9 -> 9     22 -> 28    35 -> 60    48 -> 112   61 -> 224
  10 -> 10    23 -> 30    36 -> 64    49 -> 120   62 -> 240
  11 -> 11    24 -> 32    37 -> 68    50 -> 128   63 -> 256
  12 -> 12    25 -> 34    38 -> 72    51 -> 136
  13 -> 13    26 -> 36    39 -> 76    52 -> 144
  14 -> 14    27 -> 38    40 -> 80    53 -> 152




Palettes

When the high bit of the control channel is set and the high two bits of
the red channel are clear, the value of the field is used as an index into
a color palette. That color in that color palette is the color that will
be displayed. The blue channel determines which palette:

   0 / 0x00 - black, blue, green, cyan, red, magenta, yellow, white
   1 / 0x01 - black, green, blue, cyan, red, yellow, magenta, white
   2 / 0x02 - black, blue, red, magenta, green, cyan, yellow, white
   3 / 0x03 - black, red, blue, magenta, green, yellow, cyan, white
   4 / 0x04 - black, green, red, yellow, blue, cyan, magenta, white
   5 / 0x05 - black, red, green, yellow, blue, magenta, cyan, white
   6 / 0x06 - white, yellow, magenta, red, cyan, green, blue, black
   7 / 0x07 - white, yellow, red, orange, blue, green, purple, black
   8 / 0x08 - black, red, yellow, green, cyan, blue, magenta, white
   9 / 0x09 - black, red, orange, yellow, green, blue, violet, white
  10 / 0x0A - red, orange, yellow, green, cyan, blue, violet, magenta
  11 / 0x0B - black, red, orange, yel, green, cyan, blue, violet, mag, white
  12 / 0x0C - black, brown, red, orange, yel, green, blue, violet, gray, white
  13 / 0x0D - gray, green, blue, yel, red, rose, blonde, violet, scarlet, white
  14 / 0x0E - blk, brn, red, orange, yel, grn, cyan, blue, vi, mag, gray, white
  15 / 0x0F - red, or, yel, char, green, aqua, cyan, azure, blue, vi, mag, rose

  16 / 0x10 - CGA palette
  17 / 0x11 - cheap CGA palette
  18 / 0x12 - SabineOS palette
  19 / 0x13 - TOS palette
  20 / 0x14 - Windows palette
  21 / 0x15 - Macintosh palette

  22 / 0x16 - black, brown, red, orange, yellow, chartreuse, green, aqua,
              cyan, azure, blue, violet, magenta, rose, gray, white

  23 / 0x17 - red, scarlet, orange, blonde, yellow, chartreuse, green, aqua,
              cyan, azure, blue, indigo, violet, purple, magenta, rose

  24 / 0x18 - blk, brn, red, scarlet, orange, blonde, yel, char, green, aqua,
              cyan, azure, blue, indigo, vi, purple, mag, rose, gray, white

  25 / 0x19 - coral, corange, lemon, lime, sky, frost, lavender, pink,
              red, orange, yellow, green, cyan, blue, violet, magenta,
              maroon, umber, olive, pine, teal, navy, eggplant, plum

  26 / 0x1A - coral, corange, lemon, lime, sky, frost, lavender, pink,
              red, scarlet, orange, blonde, yellow, chartreuse, green, aqua,
              cyan, azure, blue, indigo, violet, purple, magenta, rose,
              maroon, umber, olive, pine, teal, navy, eggplant, plum

  27 / 0x1B - black, maroon, umber, olive, pine, teal, navy, eggplant, plum,
              brown, red, scarlet, orange, blonde, yellow, char, green, aqua,
              cyan, azure, blue, indigo, violet, purple, magenta, rose, gray,
              coral, corange, lemon, lime, sky, frost, lavender, pink, white

  28 / 0x1C - orange, red, blue, white, brown, violet, yellow

  29 / 0x1D - red, violet, lemon, green, rose, corange, blue,
              orange, white, yellow, brown, red, green

  30 / 0x1E - green, rose, lemon, blue, chartreuse, violet, orange, white,
              white, red, purple, black, brown, blue, yellow, magenta, gray,
              red, creme, black, orange, brown, white, corange, yellow, gray

  31 / 0x1F - black, gray, white, creme, brown, coral, corange, lemon,
              lime, sky, frost, lavender, pink, red, scarlet, orange,
              blonde, yellow, chartreuse, green, aquamarine, cyan, azure,
              blue, indigo, violet, purple, magenta, rose, maroon, umber,
              olive, pine, teal, navy, eggplant, plum




Host

The Host directory contains programs that run on a host PC
that communicate with the Rainbowduino, or that are otherwise
useful when communicating with a Rainbowduino.

becho:
  A general-purpose utility that simply writes its arguments
  back to standard output. Escape sequences (with a backslash)
  are decoded (see the Escape Sequences section), but otherwise
  arguments are left untouched. No options are supported for
  this command; they end up written to standard output just like
  all other arguments. No spaces are written between arguments,
  and no newlines are written at the end. The 'b' in becho
  stands for 'binary.'

aecho:
  A utility similar to becho that instead writes its output
  to a serial port. Unlike becho, aecho takes options:

    -p <path>       Specifies the path to the serial port device. Can also
                    be specified with the environment variable ARDUINO_PORT.

    -b <baud>       Specifies the baud or bit rate used to communicate with
                    the serial port. Defaults to 9600. Can also be specified
                    with the environment variable ARDUINO_BITRATE.

    -m <num> <str>  Writes the specified string the specified number of times.

    -i              Writes standard input to the serial port.

    -f <path>       Writes the contents of a file to the serial port.

    -rl             Reads data back from the serial port until a newline
                    and writes it back to standard output.

    -rm             Reads data back from the serial port until a carriage
                    return and writes it back to standard output.

    -rn             Reads data back from the serial port until a null
                    byte and writes it back to standard output.

    -ra             Reads any and all data back from the serial port
                    and writes it back to standard output.

    -rf <len>       Reads the specified number of bytes back from the
                    serial port and writes it back to standard output.

    -rb             Reads a single byte back from the serial port
                    and writes it back to standard output.

    -d <msec>       Waits the specified number of milliseconds before
                    processing the next argument.

    -o              Opens the serial port before anything has been written.

    -c              Closes the serial port before all arguments
                    have been processed.

    -n              If nothing has been written, exit immediately instead
                    of writing standard input to the serial port.

  If no data is written to the serial port using the arguments to
  aecho, standard input will be written instead, unless the -n option
  is specified. The 'a' in aecho stands for 'arduino.'

rtime:
  Prints the current time as days since January 1, 1970, UTC;
  milliseconds since midnight, UTC; time zone offset from UTC
  in milliseconds; and daylight saving time offset from UTC
  in milliseconds. These four values define the current time
  as kept by the software real-time clock in RainbowDashboard.

    -d    Prints the four values as decimal integers; the default.

    -h    Prints the four values as 8-digit hexadecimal integers.

    -b    Outputs the four values as 32-bit big-endian binary data.

    -r    Outputs the four values as a series of RainbowDashboard
          commands that set the clock on the Rainbowduino.

    -f    Outputs the current values of all 64 individual clock fields.

  You can set the clock on the Rainbowduino by simply redirecting
  the output of rtime -r to the Rainbowduino's serial port using
  aecho or rainbowd. The 'r' in rtime stands for 'Rainbowduino.'

clocktest:
  Used to determine the accuracy of the Rainbowduino's clock.
  Every 10 seconds, clocktest will tell you how long it took to send
  a message and get a response, and how much the Rainbowduino's clock
  has shifted relative to the PC's clock.
  
  This information can be used with the SET_CLOCK_ADJUST command
  to give more accurate time. The SET_CLOCK_ADJUST command takes
  the number of milliseconds it takes for the Rainbowduino to lose
  or gain a millisecond. If your Rainbowduino's clock is running
  fast, a negative number will slow the clock down; if the clock is
  running slow, a positive number will speed the clock up.

    -p <path>       Specifies the path to the serial port device. Can also
                    be specified with the environment variable ARDUINO_PORT.

    -b <baud>       Specifies the baud or bit rate used to communicate with
                    the serial port. Defaults to 9600. Can also be specified
                    with the environment variable ARDUINO_BITRATE.

    -c <msec>       Runs the clock test with the specified value for
                    SET_CLOCK_ADJUST.

rainbowd:
  A background process that creates a named pipe and copies
  anything written to the pipe to the Rainbowduino's serial port.

  If you write directly to the Rainbowduino's serial port using
  aecho or another program, you might notice that the Rainbowduino
  resets every time the serial port is opened. Using rainbowd,
  you can open and close the named pipe at will without closing
  the serial port.

  When rainbowd starts, it will set the Rainbowduino's clock,
  print a message on the Rainbowduino, then create the named pipe
  and listen for input.

    -f <path>    Specifies the path to the named pipe used for input to
                 rainbowd. Defaults to /tmp/rainbowduino. Can also be
                 specified with the environment variable RAINBOWD_PIPE.

    -p <path>    Specifies the path to the serial port device. Can also
                 be specified with the environment variable ARDUINO_PORT.

    -b <baud>    Specifies the baud or bit rate used to communicate with
                 the serial port. Defaults to 9600. Can also be specified
                 with the environment variable ARDUINO_BITRATE.

    -s           Do not set the Rainbowduino's clock (standard firmware).

    -a           Set the Rainbowduino's clock (advanced firmware).

    -l <msec>    Adds the specified number of milliseconds to the current
                 time when setting the Rainbowduino's clock. This should
                 be the amount of time it takes for the clock-setting
                 commands to reach the Rainbowduino. Can also be specified
                 with the environment variable RAINBOWD_LATENCY.

    -c <msec>    Sends a SET_CLOCK_ADJUST command. The SET_CLOCK_ADJUST
                 command takes the number of milliseconds it takes for
                 the Rainbowduino to lose or gain a millisecond. If your
                 Rainbowduino's clock is running fast, a negative number
                 will slow the clock down; if the clock is running slow,
                 a positive number will speed the clock up. Can also be
                 specified with the environment variable RAINBOWD_CLOCK_ADJUST.

  Using rainbowd, you can simply copy files to /tmp/rainbowduino to
  execute RainbowDashboard commands. A few such files are included.
  Or, you can create your own programs that write to /tmp/rainbowduino
  without the need to mess with serial ports.

rainbowclock:
  A background process that updates the Rainbowduino's clock every hour.
  The rainbowd process must already be running. You can use this as a
  template for your own background process.

    -f <path>    Specifies the path to the named pipe used for input to
                 rainbowd. Defaults to /tmp/rainbowduino. Can also be
                 specified with the environment variable RAINBOWD_PIPE.

    -l <msec>    Adds the specified number of milliseconds to the current
                 time when setting the Rainbowduino's clock. This should
                 be the amount of time it takes for the clock-setting
                 commands to reach the Rainbowduino. Can also be specified
                 with the environment variable RAINBOWD_LATENCY.

rainbowmarquee:
  A background process that drives a scrolling message display on the
  Rainbowduino. The rainbowd process must be running. The message to display
  is passed in as the command's arguments.

    -f <path>    Specifies the path to the named pipe used for input to
                 rainbowd. Defaults to /tmp/rainbowduino. Can also be
                 specified with the environment variable RAINBOWD_PIPE.

    -c <cols>    Specifies the number of Rainbowduinos chained together.

    -s <speed>   Specifies the number of milliseconds per frame.

    -A <code>    Adds a character to the message string using its CP1252
                 code point.

    -F <field>   Adds a field to the message string. The value of the field
       <base>    is divided by (base^digit) and then displayed as a single
       <digit>   ASCII character.

    -B <color>   Sets the background color of any following characters.

    -C <color>   Sets the foreground color of any following characters.

    -M <weight>  Sets the font weight of any following characters.
                 A weight of 1 is normal; a weight of 2 is bold.

    -W <width>   Sets the advance width of any following characters;
                 in other words, the number of pixels between the start
                 of one character and the start of the next character.

    -T           Adds a number of spaces at the end of the message string
                 equal to the number of Rainbowduinos chained together,
                 allowing the end of the message to disappear before the
                 beginning of the message reappears.




Escape Sequences for becho and aecho

The following escape sequences are recognized by the becho and aecho
utilities. Your shell may require you to escape the backslash itself.

  \'        apostrophe
  \"        quotation mark
  \\        backslash
  \a        bell/alert
  \b        backspace
  \cX       control-X
  \d        delete
  \e        escape
  \f        form feed
  \i        shift in
  \l        crlf
  \n        newline
  \o        shift out
  \r        return
  \t        tab
  \uXXXX    Unicode character U+XXXX (UTF-8)
  \v        vertical tab
  \wXXXXXX  Unicode character U+XXXXXX (UTF-8)
  \xXX      byte value in hex
  \z        MS-DOS EOF
  \0XXX     byte value in octal
  \XXX      byte value in decimal

  \A        apostrophe
  \B        backslash
  \C        colon
  \D        dollar sign
  \E        equals sign
  \F        slash
  \G        greater than
  \H        question mark
  \I        opening parenthesis
  \J        closing parenthesis
  \K        semicolon
  \L        less than
  \M        ampersand
  \N        plus sign
  \O        pound sign
  \P        percent sign
  \Q        quotation mark
  \R        caret
  \S        asterisk
  \T        tilde
  \U        underscore
  \V        vertical bar
  \W        backtick
  \X        exclamation mark
  \Y        opening brace
  \Z        closing brace

Other escape sequences simply substitute the character
after the backslash.

About

Fork of the Rainbowdash Rainbowduino firmware (http://code.google.com/p/rainbowdash/)

http://www.hackup.net/2011/12/wifi-enabled-rgb-matrix-wall-light-part-1/


Languages

Language:C++ 56.1%Language:C 36.9%Language:Java 6.4%Language:Shell 0.6%