eXtreme Feedback Device

At work, we used to run a CruiseControl.NET continuous integration server (until 2018 - this text is old ;-) ). Even before it was up and running, I heard about eXtreme Feedback Devices (XFD), so I decided we need one, too.

Requirements:

I decided to use a three-color LED Scrolling sign, available in Germany at Conrad Electronic: McCrypt LED Lauflicht 3-farbig. It seems to be also available under different names (Pro-Lite, Velleman). Search the web for "<ID00><PA><L1>" to find devices using the same protocol. Three colors: Red, Green, Orange (Red+Green), cheap (120€), serial and USB connection.

Some protocol reverse engineering later, a small .NET 2 application was running. It connects via HTTP to the build server and queries the project status. It can display custom messages that are read from a file, which can be placed on the Intranet to build up a decent mobbing culture. Click here to download the C# source code (VS2005 project, but code works with Mono). You can freely use the code as a starting point for your LED-Scroller XFD. Grab the code from the Attachments section at the end of the page.

Links to some other XFDs:

 

Protocol description (not every feature was reverse engineered like custom characters, but everything necessary for XFDs works):

Example telegram:

<ID00><BE>05<E>

<ID00><L1><PA><FL><Ma><WC><FD><AC><CS>eXtreme Feedback11<E>

<ID00><BF>06<E>

Serial Parms: 9600 8N1

Frame:

<*DISPLAYID*><*COMMAND*>*ARGS**CHKSUM*<E>

*CHKSUM*:    2 Chars Hex XOR without <*DISPLAYID*> and <E>

*DISPLAYID*: ID + Number: ID00

Commands:

Begin TextLines: BE

End TextLines:   BF

Text Line1:      L1 Args: Textargs

Set Clock:       SC Args: YY??MMDDHHMMSS

Brightness 100%: BA

Brightness  75%: BB

Brightness  50%: BC

Brightness  25%: BD

Link Pages:      TA Args: 00010100009912302359*PAGELIST*

Run Page:        RP + Page

Special case Text: Command BeginTextLines, Command TextLine, Command EndTextLines

Textargs:

<*PAGE*><*OPENEFFECT*><*MOVESPEED*><*DISPLAYTIME*><*CLOSINGEFFECT*>*TEXTBODY*

*PAGE*:     P + PageId ([A-Z]): z.B. PA

*OPENEFFECT* (+: also *CLOSINGEFFECT*)

+Immediate: FA

+Xopen:     FB

+CurtainUp: FC

+CurtainDn: FD

+ScrollL:   FE

+ScrollR:   FF

+Vopen:     FG

+VClose:    FH

+ScrollU:   FI

+ScrollD:   FJ

+Hold:      FK

 Snow:      FL

 Twinkle:   FM

 BlockMove: FN

 Random:    FP

DISPLAYTIME:

0,5: WA

1:   WB

2:   WC

...

25:  WZ

MOVESPEED:

0: Mq

1: Ma

2: MQ

3: MA

*TEXTBODY*: Text with Text Modifiers

Text Modifiers:

Font4x7: <AC>

Font5x7: <AA>

Font6x7: <AB>

Red:     <CA>

Green:   <CD>

Orange:  <CH>

IRed:    <CL>

IGreen:  <CM>

IOrange: <CN>

RoG:     <CP>

GoR:     <CQ>

RYG:     <CR>

Rainbow: <CS>

Date:    <KD>

Time:    <KT>

Bell0.5: <BA>

Bell1:   <BB>

Bell1.5: <BC>

Bell2:   <BD>

Checksum (C# code):

public string CreateCommand(string commandBody)

{

 string result = "<ID" + _deviceId + ">" + commandBody;

 byte checksum = 0;

 foreach(char c in commandBody)

 {

  checksum = (byte)(checksum ^ (byte)c);

 }

 result += checksum.ToString("X02");

   

 return result + "<E>";

}