hippyau / jands-cardbus

Arduino/CPP code for the Jands Cardbus interface, varieties of which used in many of older Jands lighting consoles, including Jands 408, Jands Hog1K, Stage 12, and ESP-II consoles.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

jands-cardbus

CPP/Arduino code to master the Jands Card Bus interface, and code to access several interface cards.

YouTube Video---> Video

Overview

The Card Bus is common to several types of old (discontinued) Jands lighting consoles, including Jands Event4, Jands Hog Echelon, Stage, and ESP series consoles.

This code has so far been proven on the Event4 and Echelon 1K series.

This is a hack job, not nice c++, it's arduino based.... but it works!

Jands Event4 Palette Card

The Jands Event4 Palette Card.

Here is a video showing the manual toggling of bits on the Palette card during development... [https://vimeo.com/419880334]

Important to note

Not all Jands Card Busses are created equal. DO NOT directly connect an ESP or Stage series card to the Event 4 / Echelon series bus (the one I present here), it is a different pinout, but seems to be very similar operation and a simple adapter could be made. [tbc]

It seems there are different pinouts for some different Card Busses, depending on the series of console. See Issue below. #1

The Event 4 and Echelon series are the same pinout, but some card addresses overlap.

Using the wrong pinout for the card you are working with will potentially damage the card and/or master interface!

Firmware Command Line Interface

There is a CLI available, which helps in reading and working out the card bus...

JCB >> reboot
Soft Reboot...
Found ECHMENU2 Card @ 0x00
Not Found ECHMENU2 Card @ 0x10
Not Found - Playback Card @ 0x80
Not Found - Playback Card @ 0x90
Not Found - Program Card @ 0xF0
help
Available commands: (command with arguments provide usage help when no arguments given)

version - print firmware version
run     - enable cardbus update loop
stop    - disable cardbus update loop
stat    - print cardbus statistics
reboot  - reboot

Debug commands:

set     - select hex bus [address 0x00..0xFF] (aka ALEL) where high nibble is card addres, low nibble is device on the card
mux     - set a mux [hex address] (aka ALEH) for the currently selected card & device
write   - select hex bus [address] and write hex [data]
read    - read bus at current address, or option [hex address] also selects device 

------ Jands Card Bus Master CLI
JCB >> 

Coverage

So far, the Event4xx series Assign, Pallete, Master and Preset cards are supported, with all LCDs, buttons, faders (with filtering) and encoders. Also the Echelon 1000 Menu, Program, and Playback cards are supported, though be aware some addresses overlap the Event4 series.

Then Echelon 1K series also includes some USB Keyboard emulation support for the Program card.

Jands EVENT408

Currently, on the EVENT Assign card, the levels of the faders are shown, along with a pseudo command-line display (which is pretty useless ATM) based on pressed Master card buttons and a state.

Entire surface state optionally gets transmitted over a WizNet Ethernet chip (#define USE_ETHERNET) on UDP port 8888 to (static IPAddress trg(192,168, 1, 49); // Where we are sending to) in the packet format described in (void inline sendSurfaceState())

There is a GUI app, based on Dear ImGui, which can recieve these packets. Jands EVENT4 GUI

The Arduino code provided is targeted at a Teensy2.0++ at the moment, but not hard to change.

Note the pinout uses pins 0,1 which are used on most Arduinos as RX and TX for code upload. Again, not hard to change, but used here because the pins where on a consecutive port of the AT micro, which improved bus speed significantly over using digitalWrite() calls.

You can disable this behaviour here...

// comment out for using arduino pin mapping where, on boards where the data bus is not consective pins (like Leonardo)
#define NO_PIN_MAPPING // use direct port commands

#define NO_PIN_MAPPING // use direct port commands

You can change the PINS here... (but the D0..D7 must be consecutive)

// data bus are pins 0..7
#define BUS 0 // first of 8 consecutive bus pins                D0-D7 on teensy++ 2.0

// master bus transiever - 74hc245)
#define DIR 8 // bus direction, low = read, high = write        E0 on teensy++ 2.0
#define BUF 9 // bus enable, low is enabled (usually keep low)  E1 on teensy++ 2.0

// bus signals
#define MUX 10 // aka ALEH, normally high                C0 on teensy++2.0
#define ALE 11 // normally high                          C1 on teensy++2.0
#define DS 12  // pulse to select device                 C2 on teensy++2.0
#define RW 13  // low (normal) is write, high is read    C3 on teensy++2.0

// data bus are pins 0..7

About

Arduino/CPP code for the Jands Cardbus interface, varieties of which used in many of older Jands lighting consoles, including Jands 408, Jands Hog1K, Stage 12, and ESP-II consoles.


Languages

Language:C++ 72.1%Language:C 24.7%Language:Objective-C++ 1.7%Language:Makefile 0.6%Language:Objective-C 0.5%Language:Batchfile 0.2%Language:CMake 0.1%Language:HTML 0.1%Language:GLSL 0.0%Language:Shell 0.0%