Project:USB Disco Dance Floor/v1/firmware: Difference between revisions

From London Hackspace Wiki

Finished adding details for all commands
(Updated other table styles)
(Finished adding details for all commands)
Line 124: Line 124:
|-
|-
!rowspan="3"|10
!rowspan="3"|10
|colspan="2"|'''Clear floor'''
|colspan="2"|'''Clear module'''
|rowspan="2"|1.0
|rowspan="2"|1.0
|-
|-
Line 130: Line 130:
|width="42%"|'''Data out:''' ''None''
|width="42%"|'''Data out:''' ''None''
|-
|-
|colspan="3"|???
|colspan="3"|Clears the entire module, resetting all pixels to black.
|-
|-
!rowspan="3"|11
!rowspan="3"|11
|colspan="2"|'''Write floor'''
|colspan="2"|'''Write module'''
|rowspan="2"|1.0
|rowspan="2"|1.0
|-
|-
|'''Data in:''' ''None''
|'''Data in:''' 16 colour specs
|'''Data out:''' ''None''
|'''Data out:''' ''None''
|-
|-
|colspan="3"|???
|colspan="3"|Set the intensities of all pixels on the module. Note: if colour specs contain zero-padding, this should '''not''' be removed in the data for this command.
|-
|-
!rowspan="3"|18
!rowspan="3"|18
Line 145: Line 145:
|rowspan="2"|1.0
|rowspan="2"|1.0
|-
|-
|'''Data in:''' ''None''
|'''Data in:''' 1 byte: row number
|'''Data out:''' ''None''
|'''Data out:''' ''None''
|-
|-
|colspan="3"|???
|colspan="3"|Clears the given row, resetting all pixels to black.
|-
|-
!rowspan="3"|19
!rowspan="3"|19
Line 154: Line 154:
|rowspan="2"|1.0
|rowspan="2"|1.0
|-
|-
|'''Data in:''' ''None''
|'''Data in:''' 1 byte: row number, 4 colour specs
|'''Data out:''' ''None''
|'''Data out:''' ''None''
|-
|-
|colspan="3"|???
|colspan="3"|Set the intensities of all pixels in the given row. The data is ordered with increasing X. Note: if colour specs contain zero-padding, this should '''not''' be removed in the data for this command.
|}
|}


Line 171: Line 171:
|rowspan="2"|1.1
|rowspan="2"|1.1
|-
|-
|width="42%"|'''Data in:''' ''None''
|width="42%"|'''Data in:''' 1 byte: co-ordinate, 1 colour spec
|width="42%"|'''Data out:''' ''None''
|width="42%"|'''Data out:''' ''None''
|-
|-
|colspan="3"|''Should only be used very rarely, as it's data-inefficient.'' Sends a one-byte co-ordinate followed by a colour spec. The low nybble of the co-ordinate is ignored.
|colspan="3"|''Should only be used very rarely, as it's data-inefficient.'' Sets the pixel at (x, y) to the given colour. The low nybble of the co-ordinate is ignored.
|-
|-
!rowspan="3"|51
!rowspan="3"|51
Line 180: Line 180:
|rowspan="2"|1.1
|rowspan="2"|1.1
|-
|-
|'''Data in:''' ''None''
|'''Data in:''' 1 byte: co-ordinate, 1 colour spec
|'''Data out:''' ''None''
|'''Data out:''' ''None''
|-
|-
|colspan="3"|???
|colspan="3"|Draws a 1-pixel-width line in the given colour from absolute co-ordinates (x, y) to absolute co-ordinates (w, h) using Bresenham's algorithm.
|-
|-
!rowspan="3"|52
!rowspan="3"|52
Line 189: Line 189:
|rowspan="2"|1.1
|rowspan="2"|1.1
|-
|-
|'''Data in:''' ''None''
|'''Data in:''' 1 byte: co-ordinate, 1 colour spec
|'''Data out:''' ''None''
|'''Data out:''' ''None''
|-
|-
|colspan="3"|???
|colspan="3"|Draws a hollow rectangle in the given colour, with top-left corner at (x, y) and bottom right corner at (w, h).
|-
|-
!rowspan="3"|53
!rowspan="3"|53
Line 198: Line 198:
|rowspan="2"|1.1
|rowspan="2"|1.1
|-
|-
|'''Data in:''' ''None''
|'''Data in:''' 1 byte: co-ordinate, 1 colour spec
|'''Data out:''' ''None''
|'''Data out:''' ''None''
|-
|-
|colspan="3"|???
|colspan="3"|Draws a filled rectangle in the given colour, with top-left corner at (x, y) and bottom right corner at (w, h).
|-
|-
!rowspan="3"|54
!rowspan="3"|54
|colspan="2"|'''Scroll floor'''
|colspan="2"|'''Scroll module'''
|rowspan="2"|1.1
|rowspan="2"|1.1
|-
|-
|'''Data in:''' ''None''
|'''Data in:''' 1 byte: scroll spec
|'''Data out:''' ''None''
|'''Data out:''' ''None''
|-
|-
|colspan="3"|???
|colspan="3"|Scrolls the image on the module according to the given spec. Pixels scrolled off the edge do not wrap, and new pixels will be black.
|-
|-
!rowspan="3"|55
!rowspan="3"|55
Line 216: Line 216:
|rowspan="2"|1.1
|rowspan="2"|1.1
|-
|-
|'''Data in:''' ''None''
|'''Data in:''' 2 bytes: co-ordinate (1), scroll spec (1)
|'''Data out:''' ''None''
|'''Data out:''' ''None''
|-
|-
|colspan="3"|???
|colspan="3"|Scrolls the image within the rectangle from (x, y) to (w, h) according to the given spec. Pixels scrolled off the edge do not wrap, and new pixels will be black.
|-
!rowspan="3"|56
|colspan="2"|'''Scroll module with data'''
|rowspan="2"|1.2
|-
|'''Data in:''' 1 byte: scroll spec, 4-16 colour specs
|'''Data out:''' 4-16 colour specs
|-
|colspan="3"|Scrolls the image on the module according to the given spec. Pixels scrolled off the edge do not wrap but will be returned in increasing X/Y co-ordinates, and new pixels will be taken from the colour specs given, in increasing X/Y co-ordinates.
|-
!rowspan="3"|57
|colspan="2"|'''Scroll rectangle with data'''
|rowspan="2"|1.2
|-
|'''Data in:''' 2 bytes: co-ordinate (1), scroll spec (1); 1-16 colour specs
|'''Data out:''' 1-16 colour specs
|-
|colspan="3"|Scrolls the image within the rectangle from (x, y) to (w, h) according to the given spec. Pixels scrolled off the edge do not wrap but will be returned in increasing X/Y co-ordinates, and new pixels will be taken from the colour specs given, in increasing X/Y co-ordinates.
|-
|-
!rowspan="3"|5E
!rowspan="3"|5E
Line 225: Line 243:
|rowspan="2"|1.1
|rowspan="2"|1.1
|-
|-
|'''Data in:''' ''None''
|'''Data in:''' 2 bytes: pattern, 1 colour spec
|'''Data out:''' ''None''
|'''Data out:''' ''None''
|-
|-
|colspan="3"|???
|colspan="3"|The first two bytes define the pattern to be drawn, with the set bits corresponding to a pixel being set to the given colour. The bits are ordered in the usual way, so the highest bit of the pair is (0,0), the highest of the second byte is (0,2), and the lowest of the pair is (3, 3).
|-
|-
!rowspan="3"|5F
!rowspan="3"|5F
Line 234: Line 252:
|rowspan="2"|1.1
|rowspan="2"|1.1
|-
|-
|'''Data in:''' ''None''
|'''Data in:''' 1 byte: co-ordinate, 1-16 colour specs
|'''Data out:''' ''None''
|'''Data out:''' ''None''
|-
|-
|colspan="3"|???
|colspan="3"|The co-ordinate byte defines a rectangle from (x, y) to (w, h), which is filled with the colour specs in the usual ordering.
|}
|}
<!--
Code | Action
=====+========================================================================
                          STATUS/DIAGNOSTIC COMMANDS
-----+------------------------------------------------------------------------
00  | Reset                                                            v1.0
    | Resets the board to an initial state, with all pixels off. The board
    | sends four bytes representing its hardware and firmware version (2
    | each), followed by 2 bytes for hardware details. The high nybble of
    | the first hardware info byte is the number of different colours
    | supported (0x1, 0x3 or 0x4) and the low nibble is whether sensors are
    | supported (0x1 for yes). The high nybble of the second byte specifies
    | the number of bits needed to specify LED brightness (if different for
    | different colours, the firmware will scale as necessary) and the low
    | nybble does the same for sensor resolution. Note that, for the time
    | being, resolutions should be a power of 2 (0x1, 0x2, 0x4, 0x8). This
    | comand also resets the stored board ID to 0xFFFF (unset).
-----+------------------------------------------------------------------------
01  | Identify                                                          v1.0
    | Informs the board of its board ID for this session (two bytes). Note
    | that board IDs 0x0000 and 0xFFFF are reserved. The board responds with
    | 0x00 (success).
-----+------------------------------------------------------------------------
02  | Ping                                                              v1.0
    | Checks connectivity. The board will respond with 0x00 (success).
-----+------------------------------------------------------------------------
03  | Neighbours                                                        v1.2?
    | Asks the board to search for its immediate neighbours. The board will
    | respond with 8 bytes representing the two-byte IDs of its neighbours,
    | starting with its "top" connection and proceeding clockwise. If no
    | neighbour is found in a given position, 0x0000 is returned. If a
    | neighbour is found but it has not been given an identifier for this
    | session, it will return 0xFFFF.
    | This should allow the controller software to automatically detect the
    | layout of the floor.
-----+------------------------------------------------------------------------
0E  | Display static test pattern                                      v1.0
    | A static test pattern will be displayed, as selected by the one-byte
    | argument. A list of patterns is given below:
    |  00 - All white
    |  01 - All red
    |  02 - All green
    |  03 - All yellow
    |  04 - All blue
    |  05 - All magenta
    |  06 - All cyan
    |  07 - All 50% white
    |  08 - Checkerboard: (0,0)=red; (0,1)=cyan
    |  09 - Checkerboard: (0,0)=cyan; (0,1)=red
    |  0A - Checkerboard: (0,0)=green; (0,1)=magenta
    |  0B - Checkerboard: (0,0)=magenta; (0,1)=green
    |  0C - Checkerboard: (0,0)=blue; (0,1)=yellow
    |  0D - Checkerboard: (0,0)=yellow; (0,1)=blue
    |  0E - Checkerboard: (0,0)=white; (0,1)=black
    |  0F - Checkerboard: (0,0)=black; (0,1)=white
    |  10 - RGB fade, (0,0) = red; (3,0) = green; (0,3) = blue; (3,3) = ?
-----+------------------------------------------------------------------------
0F  | Display animated test pattern                                    v1.0
    | An animated test pattern will be displayed, as selected by the one-byte
    | argument. A list of patterns is given below:
    |  00 - clockwise spiral chase (white), starting at (0,0)
    |  01 - clockwise spiral (white), starting at (0,0); then black spiral
    |      once complete
==============================================================================
                          SIMPLE DISPLAY COMMANDS
-----+------------------------------------------------------------------------
10  | Clear floor                                                      v1.0
-----+------------------------------------------------------------------------
11  | Write floor                                                      v1.0
-----+------------------------------------------------------------------------
18  | Clear row                                                        v1.0
-----+------------------------------------------------------------------------
19  | Write row                                                        v1.0
==============================================================================
                          COMPLEX DISPLAY COMMANDS
-----+------------------------------------------------------------------------
50  | Set pixel                                                        v1.1
    | Should only be used very rarely, as it's highly data-inefficient.
    | Sends a one-byte co-ordinate followed by a color specification. The low
    | nybble of the co-ordinate is ignored.
-----+------------------------------------------------------------------------
51  | Draw line                                                        v1.1
    | Sends a one-byte co-ordinate followed by a color specification. A
    | 1-pixel line is drawn from absolute co-ordinates (x,y) to absolute
    | co-ordinates (w,h) using ???'s algorithm.
-----+------------------------------------------------------------------------
52  | Draw hollow rectangle                                            v1.1
    | Sends a one-byte co-ordinate followed by a color specification. A
    | hollow rectangle will be drawn of width w and height h, with top-left
    | at (x, y).
-----+------------------------------------------------------------------------
53  | Draw filled rectangle                                            v1.1
    | Sends a one-byte co-ordinate followed by a color specification. A
    | filled rectangle will be drawn of width w and height h, with top-left
    | at (x, y).
-----+------------------------------------------------------------------------
54  | Scroll floor                                                      v1.1
    | Sends a one-byte co-ordinate. Scrolls the entire image by (x, y)
    | pixels. If w or h is non-zero then the scroll direction is reversed.
-----+------------------------------------------------------------------------
55  | Scroll rectangle                                                  v1.1
    | Sends two co-ordinate bytes. The first defines the rectangle to scroll,
    | the second is a scroll spec (as above).
-----+------------------------------------------------------------------------
5E  | Draw single-colour pattern                                        v1.1
    | Sends two bytes followed by a colour spec. The first two bytes define
    | the pattern to be drawn on the module as a whole, with set bits
    | indicating that the given pixel should be set to the given colour.
-----+------------------------------------------------------------------------
5F  | Draw pattern rect                                                v1.1
    | Sends a co-ordinate byte to define the rectangle, followed by a list of
    | colour specs to be used when filling that rectangle. The specs are
    | given in order of increasing X then increasing Y (e.g. (0,0), (1,0),
    | (0,1), (1,0))
-->
Anonymous user