Proposal - Support for infield start address programming.
For this proposal each device in a customer's installation will be assigned a unique 16 bit address. This value
can be programmed during the re-flash of their firmware (it would be required to make use of this protocol),
or after the fact using a special "Program Serial Number command".
During normal operation a DMX packet contains a "Start Code" (aka "Channel zero data"). This code is/must be
0x00 for normal dimming operation. Any other value, and the DMX packet should be ignored. We aren't currently looking
at the value, but *should* be doing so. This is the key to the protocols operation.
Make use of the start code to create "program address", and "re-program serial number" messages. The PC (or hand-held programmer) is set to transmit these alternate StartCode messages. Note to do this "properly" we should be using SC 0x91 plus a 2-byte "manufacturer's ID (MFID)". (see first post in this thread)
The DMX stream then becomes
0x91 <MFID-HIGH> <MFID-LOW> <PAYLOAD>
(note MFID= 0x586D )
For ProgAddress (CMD=<0x01>)
0x91 <MFID-HIGH> <MFID-LOW> <0x01> <SERIAL-HI> <SERIAL-LOW> <DMXADDR-H> <DMXADDR-L> <CHECKSUM>
For ProgSerialNo (CMD=<0x02>)
0x91 <MFID-HIGH> <MFID-LOW> <0x02> <NEW_SERIAL-HI> <NEW_SERIAL-LOW> <CHECKSUM>
(typically used in a point-to-point communication - as it would cause *ALL* devices connected to the stream
to reprogram to the same Serial Number. Suitable warnings to prevent the user doing this inadvertently must be included.)
So use of the ProgAddress would allow for someone at the PC to remotely update the start address on any device in their network.
The firmware implementation, once the manufacturer's ID is known, is almost trivial. I've even included a checksum in their, to
reduce the chances of false detection.(Which would have to be pretty slim to begin with as in the worst case we would have to
transmit a minimum 4 byte pattern by accident (1 in 4 million chance), with the checksum we reduce that even further.
Bookmarks