Project:USB Disco Dance Floor/v1/firmware: Difference between revisions
(Improved at-a-glance information about data transfer, currently only for first set of commands) |
(Updated other table styles) |
||
Line 120: | Line 120: | ||
{| class="wikitable" width="100%" | {| class="wikitable" width="100%" | ||
!width="80"|Command | !width="80"|Command | ||
! | !colspan="2"|Details | ||
!width="100"|Min version | !width="100"|Min version | ||
|- | |- | ||
!rowspan=" | !rowspan="3"|10 | ||
|'''Clear floor''' | |colspan="2"|'''Clear floor''' | ||
|1.0 | |rowspan="2"|1.0 | ||
|- | |- | ||
| | |width="42%"|'''Data in:''' ''None'' | ||
|width="42%"|'''Data out:''' ''None'' | |||
|- | |- | ||
|colspan="3"|??? | |||
|- | |- | ||
|colspan="2"| | !rowspan="3"|11 | ||
|colspan="2"|'''Write floor''' | |||
|rowspan="2"|1.0 | |||
|- | |- | ||
|'''Data in:''' ''None'' | |||
|''' | |'''Data out:''' ''None'' | ||
|- | |- | ||
|colspan=" | |colspan="3"|??? | ||
|- | |- | ||
!rowspan=" | !rowspan="3"|18 | ||
|''' | |colspan="2"|'''Clear row''' | ||
|1.0 | |rowspan="2"|1.0 | ||
|- | |- | ||
|colspan="2"|??? | |'''Data in:''' ''None'' | ||
|'''Data out:''' ''None'' | |||
|- | |||
|colspan="3"|??? | |||
|- | |||
!rowspan="3"|19 | |||
|colspan="2"|'''Write row''' | |||
|rowspan="2"|1.0 | |||
|- | |||
|'''Data in:''' ''None'' | |||
|'''Data out:''' ''None'' | |||
|- | |||
|colspan="3"|??? | |||
|} | |} | ||
Line 152: | Line 164: | ||
{| class="wikitable" width="100%" | {| class="wikitable" width="100%" | ||
!width="80"|Command | !width="80"|Command | ||
! | !colspan="2"|Details | ||
!width="100"|Min version | !width="100"|Min version | ||
|- | |- | ||
!rowspan=" | !rowspan="3"|50 | ||
|'''Set pixel''' | |colspan="2"|'''Set pixel''' | ||
|1.1 | |rowspan="2"|1.1 | ||
|- | |||
|width="42%"|'''Data in:''' ''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. | |||
|- | |||
!rowspan="3"|51 | |||
|colspan="2"|'''Draw line''' | |||
|rowspan="2"|1.1 | |||
|- | |||
|'''Data in:''' ''None'' | |||
|'''Data out:''' ''None'' | |||
|- | |||
|colspan="3"|??? | |||
|- | |||
!rowspan="3"|52 | |||
|colspan="2"|'''Draw hollow rectangle''' | |||
|rowspan="2"|1.1 | |||
|- | |||
|'''Data in:''' ''None'' | |||
|'''Data out:''' ''None'' | |||
|- | |||
|colspan="3"|??? | |||
|- | |- | ||
|colspan="2"|'' | !rowspan="3"|53 | ||
|colspan="2"|'''Draw filled rectangle''' | |||
|rowspan="2"|1.1 | |||
|- | |- | ||
|'''Data in:''' ''None'' | |||
|''' | |'''Data out:''' ''None'' | ||
|- | |- | ||
|colspan=" | |colspan="3"|??? | ||
|- | |- | ||
!rowspan=" | !rowspan="3"|54 | ||
|''' | |colspan="2"|'''Scroll floor''' | ||
|1.1 | |rowspan="2"|1.1 | ||
|- | |- | ||
| | |'''Data in:''' ''None'' | ||
|'''Data out:''' ''None'' | |||
|- | |- | ||
|colspan="3"|??? | |||
|- | |- | ||
|colspan="2"| | !rowspan="3"|55 | ||
|colspan="2"|'''Scroll rectangle''' | |||
|rowspan="2"|1.1 | |||
|- | |- | ||
|'''Data in:''' ''None'' | |||
|''' | |'''Data out:''' ''None'' | ||
|- | |- | ||
|colspan=" | |colspan="3"|??? | ||
|- | |- | ||
!rowspan=" | !rowspan="3"|5E | ||
|''' | |colspan="2"|'''Draw single-colour pattern''' | ||
|1.1 | |rowspan="2"|1.1 | ||
|- | |- | ||
| | |'''Data in:''' ''None'' | ||
|'''Data out:''' ''None'' | |||
|- | |- | ||
|colspan="3"|??? | |||
|- | |- | ||
|colspan="2"| | !rowspan="3"|5F | ||
|colspan="2"|'''Draw pattern rect''' | |||
|rowspan="2"|1.1 | |||
|- | |- | ||
|'''Data in:''' ''None'' | |||
|''' | |'''Data out:''' ''None'' | ||
|- | |- | ||
|colspan=" | |colspan="3"|??? | ||
|} | |} | ||
Revision as of 07:50, 7 April 2011
USB Disco Dance Floor v1 Firmware | |
---|---|
Created | 2011-03-31 |
Members | DMI |
Project Status | Prototyping |
Introduction
The firmware will be responsible for listening for serial commands, and then acting upon them. This will primarily involve changing the display.
Data types
Colour spec
The board reports the number of colours it supports at reset time. The colour(s) in a one-colour board will be referred to as R, in a three-colour board as RGB, and in a four-colour board as RGBU. This is because of the suggested LED choices of Red, Green, Blue, and Ultraviolet. The board also reports the number of bits (n) that it can use for setting the brightness of each colour LED.
A colour spec consists of n bits of R, followed by n bits of G, B, and U (as appropriate). If the total number of bits is not a multiple of 8, it will be right-padded with zeroes.
Examples:
- 4 bpc and 4 colours would lead to a bit pattern of: RRRRGGGG BBBBUUUU.
- 4 bpc and 3 colours would have a bit pattern of: RRRRGGGG BBBB0000
- 12 bpc and 3 colours would have a bit pattern of: RRRRRRRR RRRRGGGG GGGGGGGG BBBBBBBB BBBB0000
- 3 bpc and 3 colours would have a bit pattern of: RRRGGGBB B0000000
Co-ordinate
A co-ordinate consists of four two-bit values packed into a single byte, with the bit pattern: xxyywwhh. Co-ordinates of (0,0) are at the top-left of the module, and increase downwards and rightwards. Note that the ww and hh bits may be ignored.
Scroll spec
A scroll spec consists of two two-bit values and two one-bit values packed into a single byte, with the bit pattern: xxyy0w0h. The number of pixels to scroll along the X and Y axes is specified by xx and yy, and the direction is negative along the X/Y axis if w or h are set, respectively.
Commands
Commands start with a one-byte identifier, followed by zero or more data bytes. The number of data bytes is command-specific. The device should not output any data unless specified below. Note that "data in" and "data out" are from the point of view of the device.
Status/Diagnostic Commands
Command | Details | Min version | |
---|---|---|---|
00 | Reset | 1.0 | |
Data in: None | Data out: 6 bytes: hardware version (2), firmware version (2), capabilities (2) | ||
Resets the board to an initial state, with all pixels off. The board sends four bytes representing its hardware and firmware versions (2 bytes each), followed by 2 bytes for hardware details. This command also resets the board ID to 0xFFFF (i.e. unset).
The high nybble of the first hardware info byte is the number of different colours supported (0x1, 0x3, or 0x4) and the low nybble is whether sensors are supported (0x1 for yes). The high nybble of the second byete specifies the number of bits needed to specify LED brightness. If this is different for different colours, the firmware will handle scaling. 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). | |||
01 | Identify | 1.0 | |
Data in: 2 bytes: board ID | Data out: 1 byte: 0x00 | ||
Informs the board of its two-byte board ID for this session. Note that board IDs 0x0000 and 0xFFFF are reserved. The board will respond with 0x00 (success). | |||
02 | Ping | 1.0 | |
Data in: None | Data out: 3 bytes: 0x00, board ID (2) | ||
Checks connectivity with the board. The board will respond with 0x00 (success) followed by its two-byte board ID. | |||
03 | Query neighbours | 1.2? | |
Data in: None | Data out: 8 bytes: top neighbour ID, right ID, bottom ID, left ID | ||
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 | 1.0 | |
Data in: 1 byte: pattern to display | Data out: 1 byte: 0x00 | ||
A static test pattern will be displayed, as selected by the one-byte argument. A list of patterns is given below:
| |||
0F | Display animated test pattern | 1.0 | |
Data in: 1 byte: pattern to display | Data out: 1 byte: 0x00 | ||
An animated test pattern will be displayed, as selected by the one-byte argument. A list of patterns is given below:
|
Simple Display Commands
Command | Details | Min version | |
---|---|---|---|
10 | Clear floor | 1.0 | |
Data in: None | Data out: None | ||
??? | |||
11 | Write floor | 1.0 | |
Data in: None | Data out: None | ||
??? | |||
18 | Clear row | 1.0 | |
Data in: None | Data out: None | ||
??? | |||
19 | Write row | 1.0 | |
Data in: None | Data out: None | ||
??? |
Complex Display Commands
Command | Details | Min version | |
---|---|---|---|
50 | Set pixel | 1.1 | |
Data in: None | Data out: None | ||
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. | |||
51 | Draw line | 1.1 | |
Data in: None | Data out: None | ||
??? | |||
52 | Draw hollow rectangle | 1.1 | |
Data in: None | Data out: None | ||
??? | |||
53 | Draw filled rectangle | 1.1 | |
Data in: None | Data out: None | ||
??? | |||
54 | Scroll floor | 1.1 | |
Data in: None | Data out: None | ||
??? | |||
55 | Scroll rectangle | 1.1 | |
Data in: None | Data out: None | ||
??? | |||
5E | Draw single-colour pattern | 1.1 | |
Data in: None | Data out: None | ||
??? | |||
5F | Draw pattern rect | 1.1 | |
Data in: None | Data out: None | ||
??? |