physical design two jacks each side (one in one out)/two jacks on left (one in one out), 2 jacks (one in one out) + 2 din on right dins could be top and bottom I guess top <-||<- ->||-> bottom both jack sockets have a switch 3 position switch on top, learn,lock, auto 1 button start auto detect 2 led's led 1 indicates configured, led 2 indicates power. use trs jack to be compatible with simple cheap extension cables s = power r = data t = ground this should allow hot plug with minimal risk use midi protocol compatible serial signalling, this would allow us to link multiple units using midi cabling for physical separation if we desired, this also allows us to convert to standard midi signalling easily for sending to device to be controlled, potential host side application to read device configuration sysex if switch = auto bottom top meaning F F isolated, start at channel 1 output your own channels only, write chan 1 to eeprom F T end unit on chain, output to bottom socket (use switch to redirect to bottom socket on left electrically), wait for sysex from unit on right, this will define all currently used channels pick next sequential, build and transmit onwards sysex to left, write start channel to eeprom, set configured flag T F Righthand unit transmit on channel 1 + send sysex on power up or "start auto detect", write channel 1 to eeprom, if button start auto is pressed send configuration sysex, set configured flag. T T mid span unit, wait for sysex from unit on right, this will define all currently used channels pick next sequential, build and transmit onwards sysex to left, write start channel to eeprom, set configured flag if switch = lock set configured flag read channel data from eeprom, if sysex revived or auto config button pressed whilst right hand unit transmit channel configuration information but don't change eeprom value if switch = learn set channel as per next revived midi message, set configured flag when configured flag is set light led 1 if top = true revive sequential channel data from channel on right, append own data and transmit out to left unit software configuration specific to input hardware done via define define covers, input device type: analogue voltage, digital switch, quadrature encoder, absolute encoder etc signal generated by device, eg note, controller,pitch bend etc pin(s)/adc to read, number and type governed by device type, shouldn't prevent an analogue signal generating notes if so desired analogue scaling method: (low bits, high bits) not mutually exclusive, eg bits could be used to drive two different controller messages (use bit masking?), divide by factor. sequence number, for internal use in device to define order controller work with inside device sysex generated from above, only channel numbers should need to be recalculated on the fly main loop, read inputs, in sequence generate output messages, place in buffer, order of midi messages insignificant so place at start of buffer area isr timer 1 if channel = 1 send current data else return to main isr received data read incoming data into lowest available slot in buffer (can be allocated at compile time, configuration is known), transmit full buffer. return to main interface unit(to avoid cost of two dins + voltage --> current loop signaling chip/hardware per unit) 2 jacks left side, two standard midi din right side, use of an interface unit would require some changes to the way the auto detect logic works <-||= ->||=