Prolite Protocol (ROM 5.24Q)

This page contains advanced protocol information for communicating with the Pro-Lite PL-M2014R message board over the RS-232 port. (This is very easy to do with Linux.)

The Basic Pro-Lite ASCII-Series Version 5.25 information is available in Word format ( bytes) format from the manufacturer. It is not be accurate for the PL-M2014R, but it is pretty.

The sign can only accept commands up to 1,023 bytes in length. This includes packet headers and trailers, leaving the maximum command length of 1016 characters for all text and attributes.

With 26 pages, each approximately 1,024 bytes long (accounting for internal overhead), this leaves 26,624 characters of text that the unit can hold, not counting trivia usage.

Long messages must be stored in multiple pages, and a timer created (most likely with a value of "always") to put the pages in a display sequence.

Note that text gets into the sign's memory one of two ways. The first is entering the text from the remote control. The second is from the RS232 port. Input from the RS232 port is subject to pre-processing. This means if you want the text "<CA>" in your text, the RS232 is going to interpret that as a color code, while the remote control will not.

While communication is bi-directional, you can only receive acknowledgements the sign received a command. You can not obtain the message in the sign, you can not download the graphics or character shapes, you can not ask the time, you can not read the timers, you can not determine which page is running, you can not tell when the message scrolling by ends.

Apparently with the 5.24Q rom, if you send a lot of garbage to the sign that it does not recognize, the sign will stop responding to commands. The only way to clear it seems to be unplugging the sign, waiting a moment, and plugging it back in. You'll see a brief "CHECKING..." message.

Unit Identification

Each unit is given an ID number from its setup mode using the remote. Apparently it is possible to chain 255 units together.

The protocol can talk to an individual unit, or all units, but not a group of unit IDs. I doubt it is a good idea to give more than one unit the same ID number, since each unit sends back a reply when it is sent a unit-specific command.

Protocol Structure

<IDxx>...TEXT/COMMAND.. cr lf

<IDxx>Packet header also severed as destination identifier

<, >are really '<' (0x3C) and '>' (0x3D)
IDis the string "ID" (0x49,0x44) The must be in uppercase
xx This is the unit ID represent as a two digit hex number in ASCII, using a leading zero if necessary.
    00 = all units (Note: no display units will reply on a global request)
    01 = display unit 1
    02 = display unit 2
    0A = display unit 10
    10 = display unit 16
    FE = display unit 254
    FF = display unit 255

...TEXT/COMMAND...Packet body either Display Data or Command
cr lfAll packets end with a Character Return and Line Feed
    cr = 0x0D
    lf = 0x0A
Important Notes:
    If the sign has been idle (not received any communication) for over one minute, it must be sent the protocol header <IDxx> cr lf to wake up. The protocol header can be thought of as being similiar to the AT command for Hayes modems, which wake up the modem putting it into command mode and prefixing all modem commands.

    When a sign accepts a wake up or command, it will respond back with the same protocol header: <IDxx> cr lf to signal the sign is awake.

    Each packet(s) must consist of a unique ID number, except SET CLOCK command (see Command section).

    An <IDxx> will answer from the sign if sign receives the data unless they are SET CLOCK command and global call.

Display Text Pages

The sign has the ability to store 26 messages, each partition is called a page. A page is identified by a letter from A to Z (in uppercase). The length of each page is dynamic. A page can contain text, graphics, and European characters in various colors and sizes using different presentation techniques.


    <Pn>denotes which page this message belongs to
    <,P,>are ASCII characters "<" "P" & ">" respectively
    nis the page number in ASCII character, i.e.
      A = Page A
      B = Page B
      Y = Page Y
      Z = Page Z
    ...MSG...Contents message data of this page including color informations, character size informations & display functions etc.

    The text of the message may be any text in free format, consisting of alphabetics, numerics, and symbols. Only characters 0x20 to 0x7F are supported.

Important Notes:
    If <Pn> is not specified, page A is assumed as default.

    If no page content is provided, the page is not made empty. It is treated as a NOP (no-operation). To blank a page, use a space (which will scroll a space), or delete the page.

European Characters

European characters can be displayed in the board using a syntax that is similar to HTML tags.

<U#>É <UA>Ç <UB>Broken <UC>Broken <UD>O overlaid with ×
<UE>ü <UF>upsidedown V <UG>three bars <UH>pi <UI>ï
<UJ>sum <UK>¥ <UL>¢ <UM>Broken <UN>Broken
<UO>Ò <UP>Ù <UQ>ê <UR>û <US>two tall skiny F's
<UT>î <UU>Omega <UV>Broken <UW>ë <UX>Broken
<UY>ô <UZ>Broken
<U$>Ø <Ua>Ä <Ub>Broken <Uc>Broken <Ud>Ó
<Ue>Å <Uf>Í <Ug>Ú <Uh>Þ <Ui>similar to ç
<Uj>þ <Uk>Р<Ul>ð <Um>Broken <Un>Broken
<Uo>umlat G <Up>Ö <Uq>Æ <Ur>Ü <Us>á
<Ut>í <Uu>like ç but with S <Uv>Broken <Uw>ú <Ux>Broken
<Uy>ô <Uz>Broken
<U0>à <U1>¡ <U2>é <U3>È <U4>£
<U5>lower Psi <U6>upper Phi <U7>è <U8>ì <U9>ç
<U@>ê <U%>ø <U^>umlat Y <U&>ý <U*>å
<U(>ß <U)>bared ã <U->lower gamma <U+>á <U_>bar Ñ
<U=>â <U`>ó <U~>¤ <U!>æ <U{>bar ñ
<U}>upside down ? <U[>upper gamma <U]>upper delta <U:>ö <U">ä
<U:>ö <U">lower alpha <U:>null, no text <U'>ä <U'>ß
<U\>Not defined <U|>Not defined <U,>Not defined <U.>Not defined <U/>Not defined
<U?>Not defined

Important Notes:

    This particular listing is believed to be very accurate, unlike other sources of documentation for the PL-M2014R.

    Apparently the following table codes do not work: B, C, M, N, V, X, Z, b, c, m, n, v, x, and z

    In addition undocumented symbols have been presented here, and while these characters can show up in the character set, it is undetermined why. For instance <U:> by itself shows nothing, but as Xxx<U:>Yyy it shows up as a ö; <U;> by itself shows up as a lowercase Greek alpha, but as ZZ<U:>ZZ the command won't even get accepted. The behavior seems very much based on position.

Graphic Blocks

There are 26 reprogramable graphic blocks.
<BA>Telephone <BB>Glasses <BC>Tap <BD>Rocket <BE>Monster
<BF>Key <BG>Shirt <BH>Helicopter <BI>Car <BJ>Tank
<BK>House <BL>Teapot <BM>Knife & Fork <BN>Duck <BO>Motorcycle
<BP>Bicycle <BQ>Crown <BR>Sweet Heart <BS>Arrow Right <BT>Arrow Left
<BU>Arrow Down-Left <BV>Arrow Up-Left <BW>Mug of Beer <BX>Chair <BY>High-heeled Shoes
<BZ>Wine Glass

The Monster and Chair are pretty lame. These are good candidates for experimenting with replacement graphics. If you've blown your board's graphics away, simply disconnecting the power and reconnecting will restore the graphics or use the delete all command.


There are 26 color modes.
<CA>Dim Red <CB>Red <CC>Bright Red
<CD>Orange <CE>Bright Orange <CF>Light Yellow
<CG>Yellow <CH>Bright Yellow <CI>Lime
<CJ>Dim Lime <CK>Bright Lime <CL>Bright Green
<CM>Green <CN>Dim Green <CO>Yellow/Green/Red
<CP>Rainbow (Default) <CQ>Red/Green 3D <CR>Red/Yellow 3D
<CS>Green/Red 3D <CT>Green/Yellow 3D <CU>Green on Red
<CV>Red on Green <CW>Orange on Green 3D <CX>Lime on Red 3D
<CY>Green on Red 3D <CZ>Red on Green 3D

Some of these color combinations look so bad that they should require a permit.

To define a color, the attribute code must be placed before the text. There is no "I'm done with the color" code, just switch to a different one.

Character Sizes

<SA>Normal (Default) <SE>Flashing Normal
<SB>Bold (Wide) <SF>Flashing Bold (Wide)
<SC>Italic <SG>Flashing Italic
<SD>Bold Italic (Wide) <SH>Flashing Bold Italic (Wide)

To define a size, the attribute code must be placed before the text. There is no "I'm done with the size" code, just switch to a different one.

Display Functions

Random color & presentation
<-- Open from Center -->
<-- Covers Text -->
Instantly replaces text
Rolling Colors
Blank screen right to left
 <FG>CLOSE -->
Blank screen left to right
 <FH>CLOSE --><--
Blank screen outter to center
Scroll up from bottom
Scroll down from top
Two layers slide together to form text
Falling dots form text
Random creature walking
Sign beeps
Short delay of motion
Blank screen until the next timer activates
Random dots appear forming text
 <FS>SHIFT <--
Roll message right to left (Default)
Show time and date, no choice of formatting
Change text color each time
Cursive "Thank you"
Cursive "Welcome"
AUTO, OPEN <-- -->, COVER <-- -->, APPEAR, CYCLING, SCROLL UP, SCROLL DOWN, RANDOM, and MAGIC terminate their behavior by either another function or when the screen is full of text.

For best effect, CLOSE operations should happen after text has been displayed, not as the start of a presentation.

Timer Scheduling

Aside from being able to play a specific page, the message board has 10 timers. Each timer has an ordered sequence from 1 to 32 pages to display associated with it, there may be duplicates.

A timer may be thought of a request such as: "when the time of day matches my timer settings, display this sequence of message pages. For example, at 1:PM display pages A, B, and C; while at 5:PM display page A twice, then page D, then page A again, then page E.

Note that if there are two timers that would both be active, the page sequence appears to be randomly selected, and the timers are not checked again until after the whole sequence has been displayed at least once.

Once a timer is set, it can be replaced or deleted. To use the timers, it is important to set the clock in the message board.

<IDxx><Tn> lf

    <Tn> denotes the Timer n, where n = A to J
      <,T & > are ASCII character "<" "T" & ">" respectively n is the Timer (schedule) number in ASCII character, i.e.
        A = Timer A
        B = Timer B
        I = Timer I
        J = Timer J
      W denotes the day of week where this schedule activates, the valid values are as follow (in a single ASCII character form):
        * = Every day of the week
        0 = Sunday
        1 = Monday
        5 = Friday
        6 = Saturday
      HH denotes the Hour when this schedule activates, the valid values are as follow (in two ASCII character form, 24 hour notation with leading zeros):
        ** = Every hour of the day
        00 = midnight
        01 = 1:AM
        13 = 1:PM
        18 = 6:PM
        23 = 11:PM
      MM denotes the minute when this schedule activates, the valid values are as follow (in two ASCII character form, with leading zeros):
        ** = Every minute of the hour
        00 to 59 = specific minutes to start
      PPP.... denotes the Page sequence in this schedule, the length of the sequence is dynamic upto 32 entries, the valid page number ranges from A to Z. Duplicate pages are allowd.
    Note: Timers are treated as start times for a message to display. Timers are checked once a minute.

Reprogramming a Graphic Block

There are 26 (A - Z) user alterable graphic blocks available, the basic format is as follow:

<Gn> lf

    <Gn> = ASCII "<","G" & ">"

      n= Block graphic number in ONE ASCII character (A - Z)

    ...CCC... is a bit pattern specifying the color information of the graphic block in a fixed length of 126 bytes.

A graphic block consists a matric of 18 dots wide by 7 rows tall. Each cell can be either Red, Yellow, Green, or unlit as Black.

Byte 1 ->
Byte 19 ->
Byte 37 ->
Byte 55 ->
Byte 73 ->
Byte 91 ->
Byte 109 ->
<-- Byte 18
<-- Byte 36
<-- Byte 54
<-- Byte 72
<-- Byte 90
<-- Byte 108
<-- Byte 126

For each byte it can either be "R" (red), "G" (green), "Y" (yellow) or "B" (black) . Any characters other than "R","G","Y" & "B" are treated as Black.
The above picture could be represented with the following command, which would update graphic block X on display board 01:
    This line was too long to fit on the screen, it is contiguous when sent to the sign.
If any more than 126 bytes are sent, specifying the graphic block, the request will be ignored.


Delete Page(s)

<IDxx><DPn>cr lf

    <,D,P& > = ASCII "<","D","P" & ">"
      n Page number in ASCII character (A - Z & *)
        <DP*> = Delete All pages
        <DPA> = Delete page A
        <DPZ> = Delete page Z

Delete Timer(s)

<IDxx><DTn>cr lf

    <,D,T& > = ASCII "<","D","T" & ">"
      n Timer (Schedule) number in ASCII character (A - J & *)
        <DT*> = Delete ALL timers
        <DTA> = Delete TIMER A
        <DTJ> = Delete TIMER J

Delete Graphic block(s)

<IDxx><DGn>cr lf

    <,D,G& > = ASCII "<","D","G" & ">"
      n Graphic block number in ASCII character (A - Z & *)
        <DP*> = Delete All graphics
        <DPA> = Delete Graphic block A
        <DPZ> = Delete Graphic block Z

Delete ALL

This command will delete all Page(s), Timer(s) and restore all default Graphic blocks.

<IDxx><D*>cr lf

    <,D,*& > = ASCII "<","D","*" & ">"

Run Page Now

<IDXX><RPn>cr lf

    <,R,P & > = ASCII "<","R","P" & ">"
      n Page in ASCII character (A - Z & *)
        <RP*> = Resume display of interrupted timer
        <RPA> = Run Page A
        <RPZ> = Run Page Z
    Note: Running a page (A-Z) stops the timer check from happening. This is useful for interrupting a timer sequence to display an important piece of information.

Set Clock

This is a special command to sync. or set the relative/real time clock of the display unit(s) and it is the only GLOBAL command in this set of protocol. You do not prefix this command with an <IDxx> header. The format as shown below:

<TYYMMDDWhhmmss>cr lf

    <, T & > ASCII "<", "T" & ">"
      YY Year (00 - 99)
      MM Month (01 - 12)
      DD Day (01 - 31)
      W Day of week (0 - 6)
      hh Hour (in 24 hour format, 00 - 23)
      mm Minute (00 - 59)
      ss Second (00 - 59)

Trivia Mode

Triva mode divides the 32K into two 16K banks, and it operates by displaying a trivia question, your message, a trivia answer, your message, another trivia question, your message, another trivia answer, your message, and so on.

By deleting the trivia from the message board, the full memory may be used.

<IDxx><Q+>cr lf
<IDxx>trivia text questioncr lf
<IDxx>trivia text answercr lf
...repeat the above as desired

    xx = unit ID (it is recommended you use 00) Important Notes:
      There is no reason your trivia messages can't be complex with color codes and presentations. While you are loading trivia text, no trivia will display. Additionally, you do not need to limit yourself to trivia or to pairs of lines. The sign will display the first line, the message, then the next line, then the message, and so on.

      Not specifying any trivia questions/answers will delete the trivia from the sign, thus making the 32K available for your messages.

      If you do not have PC or cable to delete the Trivia you can open the sign from the left and remove the RAM chip for 3 seconds. This deletes all the memory in the sign.

      There are three chips in sockets: two small and one large. The small with label is the EPROM. The other small without a label is the RAM (this is the one you want to remove). The arge without label is the CPU; removing it is a bad idea.

      To get the trivia back, either reset the unit, or load a Generic Trivia file or use the software that you can order.


    <ID01>cr lf Wake up unit 1
    <ID01><PA>Hello World cr lf Display the words Hello World on unit 1
    <ID00><Q+>cr lf
    <ID00><Q->cr lf
    Erase Trivia on all units
    <ID00><FX>cr lf With no text, the display halts the scrolling

Note: Alec Bennet <wrybread at gmail dot com> claims that sending the sign a <IDxx><RST> command will set reset the sign.

    And by the way, a quick note on controlling the thing from a Windows command line:

    ECHO ^<ID01^>^<PA^> whatever message > COM1

Alec is the author of the Wrybread Utilities for the sign.

This page last updated