BetaBrite Sign¶
We have an LED sign in the office! Its protocol documentation is available either at http://support.adaptivedisplays.com/Documentation/questions.php?questionid=149 or a local mirror (not public since we lack redistribution rights!) is available in AFS file:///afs/acm.jhu.edu/group/admins/scratch/Alpha%20Sign%20Communication%20Protocol%20(PN%2097088061).pdf .
Wiring¶
As shown on page 105 of the above, our sign uses a six-pin RJ connector. It should be cabled up as per the cable named 1088-9108 on page 103.
For the current, hackish, cabling harness, that means that the following connections should be made. Pin labels are as will be connected to a
white/orage | pin 5 | Ground |
blue | pin 2 | Sign TX / Host RX |
white/green | pin 3 | Sign RX / Host TX |
Basic Communication Examples¶
First, you will want to set the baud rate and raw mode of the serial port. The sign supports both 7E2 and 8N1 serial streams, apparently, so pick your favorite one of
stty -F ${SERIAL_PORT_DEVICE} 9600 cs7 cstopb parenb -parodd clocal raw
stty -F ${SERIAL_PORT_DEVICE} 9600 cs8 -cstopb -parenb clocal raw
You will probably want, as well, to set
COMM_PREFIX="\0\0\0\0\0\001Z00\x02"
COMM_SUFFIX="\x04"
which carries the synchronizing stream of nulls, the start of header character, th esign type code (any sign), the broadcast address, and the start of text character.
Set TEXT File¶
The sign is really quite amazing internally, but most of its time is spent displaying one of 26 text messages, named ‘A’ to ‘Z’. To set a message, use the “Write TEXT file” command (page 18, section 6.1.1), for example
echo -ne ${COMM_PREFIX}'AQtesting 1 2 3'${COMM_SUFFIX} >${SERIAL_PORT_DEVICE}
will set text message ‘Q’ to be ‘this is a test’. Usually, our sign displays message ‘A’, but that can be changed.
Use Special Commands¶
TEXT files can contain control characters (see appendix G) to do funny things like display the date or time. For example
echo -ne ${COMM_PREFIX}'AQ\x0B9 \x19'${COMM_SUFFIX} >${SERIAL_PORT_DEVICE}
will set the TEXT file Q to display something like “FRI. 12:03 PM”, which is nicely informative.
Fonts (0x1A
), character attributes (0x1D
), spacings (0x1E
),
speed (0x15
- 0x19
), and color control (0x1C
) are also available
using this mechanism. This example specifies mode and mixes fonts and
colors:
echo -ne ${COMM_PREFIX}'AA\x1B b\x1A1\x1C1\x0B9 \x1A7\x1C2\x13'${COMM_SUFFIX} >${SERIAL_PORT_DEVICE}
Use Modes¶
TEXT files can have “modes” set on them, which determines how they appear on the display. If no modes are specified, the so-called automode table is used (see section 7.13.5). Mode fields begin with an ESCape character at the start of a text file
echo -ne ${COMM_PREFIX}'AQ\x1b athis is a test'${COMM_SUFFIX} >${SERIAL_PORT_DEVICE}
will cause “this is a test” to scroll by. See section 7.9.1 and 7.9.2 for more on modes.
SMALL DOTS PICUTRE¶
Be sure that memory is configured correctly (see below).
One can then load in a SMALL DOTS PICTURE:
echo -ne ${COMM_PREFIX}'I!050501010\x0D10101\x0D01010\x0D10101\x0D01010\x0D'${COMM_SUFFIX} >${SERIAL_PORT_DEVICE}
And call out to it:
echo -ne ${COMM_PREFIX}'AA\x1B b\x14!'${COMM_SUFFIX} >${SERIAL_PORT_DEVICE}
Set Time of Day¶
Set the current time with
echo -ne ${COMM_PREFIX}'E '`date +%H%M`${COMM_SUFFIX} >${SERIAL_PORT_DEVICE}
And day of week
echo -ne ${COMM_PREFIX}'E&'$(((`date +%u` + 1) % 7))${COMM_SUFFIX} >${SERIAL_PORT_DEVICE}
And date
echo -ne ${COMM_PREFIX}'E;'`date +%m%d%y`${COMM_SUFFIX} >${SERIAL_PORT_DEVICE}
Note that the sign is not a real-time clock (it will lose track of the date,
apparently) and is only capable of representing years 1994 through 2009.
00
corresponds to 2000, 94
to 1994, and 09
to 2009, but 93
to 2007, 92
to 2006, 10
to 1994 … this seems to be a firmware
“feature” which renders the sign’s understanding of the date pretty useless.
Reading Back¶
A command like od -t x1 -w1 -v -a ${SERIAL_PORT_DEVICE}
can be used to view
bytes as they come back from the sign. This is useful for reading back messages
or configuration data.
To read back text file ‘A’, run (page 19):
echo -ne ${COMM_PREFIX}'BA'${COMM_SUFFIX} >${SERIAL_PORT_DEVICE}
You’ll get back something like
nul ... null soh 0 0 0 stx A A t e s t i n g sp 1 sp 2 sp 3 etx 0 4 7 B eot
which is seen to be a synchronization burst, an addres indicating response (the first “0”) from the broadcast address (the next two “0”s) containing a message “AAtesting 1 2 3” with a trailing checksum (printed using upper-case hex letters).
Other possibly interesting read-backs include (swap out BA
above with the
contents of the parenthesis below):
(F )
(F space) – the time of day(F")
general information about the sign(F$)
memory configuration
Memory Configuration¶
The sign is authoritative for its own configuration, of course, but we have
set it up so that files A
and Q
are TEXT files of up to 0xFF bytes,
!
is a 5x5 8-color DOTS PICTURE, and the rest are unassigned. We did so
by the following command:
echo -ne ${COMM_PREFIX}'E$AAL00FFFF00QAL00FFFF00!DL05058000'${COMM_SUFFIX} >${SERIAL_PORT_DEVICE}