LanBox

From NURDspace
Revision as of 04:53, 19 February 2015 by Zmatt (talk | contribs)
LanBox-LCX
NoPicture.png
Owner User:zmatt
Status Infrastructure
Hostname lanbox
Tool
Tool category

LanBox-LCX Property "Tool Image" (as page type) with input value "File:{{{Picture}}}" contains invalid characters or is incomplete and therefore can cause unexpected results during a query or annotation process. {{{Picture}}} {{{InventoryOwner}}}Property "Tool Owner" (as page type) with input value "{{{InventoryOwner}}}" contains invalid characters or is incomplete and therefore can cause unexpected results during a query or annotation process. {{{Location}}}Property "Tool Location" (as page type) with input value "{{{Location}}}" contains invalid characters or is incomplete and therefore can cause unexpected results during a query or annotation process.

Description

This networked box controls the DMX lights which illuminate the space. The LanBox-LCX gets its commands from SpaceBot.


Applications


Features

The LanBox is typically controlled via a simple ascii protocol via TCP port 777 (max 5 connections), USB-serial, or MIDI-SysEx. If the last firmware upload was done via USB then it will consider that to be its console stream, otherwise it has a separate console on TCP port 778 (1 connection).

It also supports a variety of other MIDI messages and can broadcast/receive data via UDP. It supports up to 31 layers, each with an independent sequencer. Up to 3072 channels can be enabled across all layers combined, each with an independent fader. The layers are merged into the mixer buffer according to their configured mix-mode, and up to 512 channels can be output via DMX (freely selectable from the mixer buffer and with post-processing such as curve-mapping and slope-limiting).

DMX in and UDP in can be mapped to a layer or directly into the mixer. Some misc other stuff can optionally also be mapped into the mixer, such as its 8 analog inputs, clock (NTP), and MIDI timecode, and its 8 digital outputs can be controlled directly by mixer channels. The sequencers can set channels (with or without fade), control other layers, send arbitrary MIDI messages, bit-bang serial data over some or all of the digital outputs (independently), etc.

Internals

The firmware is based on a Forth system which you can enter by sending the command *b7# on its console stream. For symmetry, there's also a Forth word called *b7# which gets you back into the normal command mode. Entering the Forth console does not affect other streams or normal operation (as long as you don't mess anything up).

The LanBox-LCX Forth system is fairly complete, with integrated help (not very complete unfortunately), assembler, disassembler, debugger, etc. Although the processor is 16-bit with segmented addressing, the Forth system is 32-bit with flat addressing for convenience. Several key routines of the firmware are written in assembly for performance.

The firmware has several callback hooks (set to nop by default) to allow custom code to be run at various relevant moments:

' nop VALUE 'StartTick    \ called in "start" after initialization, before the frame timer is started
' nop VALUE 'StopTick     \ called in "stop" after frame timer has halted but before any cleanup
' nop VALUE 'PreMixTick   \ called for every dmx frame before the sequence-fade-mix loop
' nop VALUE 'PostMixTick  \ called after mixer buffer is updated but before postprocessing

It's also quite easy to patch dispatch tables to hook custom commands on e.g. MIDI messages.

With some care you can directly manipulate internal buffers and structures (e.g. in 'PostMixTick you can manipulate the updated mixer buffer before anything else gets to see it), and many serial commands also have an equivalent high-level Forth word, for example:

( 44 ) EnConfigure  ( layerID destlayerID -- ok? )
( 44 ) EnConfigureWithOptions  ( layerID destlayerID newlayerID flags cuelist cuestep -- ok? )
( 56 ) EnGo  ( layerID cuelist cuestep -- ok? )
( 57 ) EnClear  ( layerID -- ok? )
( 73 ) EnNextCue  ( layerID -- ok? )