Midi router

I have build the router and… its working!!! all poorts are sending from and to with on an off. IIC2 its sending chn.<9 to INT0 and >9 to IIC0 and IIC1, thats all right. But the keybord on IIC3 DON’T split anyway its sending all notes to same . I have software versie from midi_router_v1.1c. (v1.1b working de rotary/encoder not good)

please help :sad:

Best Regards, Troek

First of all, please don’t cross post. It won’t get you any more responses.

I must say i don’t have any experience with the midibox router project. However the info you provide is quite minimal.

Have you checked the following page?:

http://www.ucapps.de/howto_debug_midi.html

Also did you check all the boards have the correct voltages?

Cross post deleted (I kept the one in the netherlands-section, doesn’t count as a cross-post) and thread moved to a more fitting board.

Cross post deleted (I kept the one in the netherlands-section, doesn’t count as a cross-post) and thread moved to a more fitting board.

Ok, but i am not going to answer there in dutch :laugh:

hi

i’m sorry for the crossing

The router works great except the note splitting on the last input. All midi signals on input 5 is going directly to output 4 and 5 without the note and following channel split.

Port #3 is working like intended - from router.c:

void ROUTER_Rx_IIC3(unsigned char ptype, unsigned char evnt0, unsigned char evnt1, unsigned char evnt2) __wparam
{
unsigned char transposed_note;

// IIC3: connected to my Yamaha AN1x

// lock/release this routing path on SysEx streams
ROUTER_LockPathOnSysEx(PORT_IIC3, ptype);

// filter clock
if( evnt0 == 0xf8 )
return;

if( ptype >= 0x08 && ptype <= 0x0e ) {

// check if channel should be forced to specific value
if( router_flags.IIC3_FWD_FORCE_CHN ) {
evnt0 = (evnt0 & 0xf0) | (router_iic3_fwd_force_channel & 0xf);
}

// check if note should be transposed
if( router_iic3_fwd_transpose != 8 && ptype <= 0x09 ) {
if( router_iic3_fwd_transpose >= 8 ) {
evnt1 += (router_iic3_fwd_transpose-8)*12;
// if value >= 0x80, decrement 12 until we have reached the range <= 0x7f again
while( evnt1 & 0x80 ) evnt1 -= 12;
} else {
evnt1 -= (8-router_iic3_fwd_transpose)*12;
// if value < 0, add 12 until we have reached the range >= 0 again
while( evnt1 & 0x80 ) evnt1 += 12;
}
}

if( router_flags.IIC3_FWD_MBSID )
ROUTER_Tx_IIC0(ptype, evnt0, evnt1, evnt2);

if( router_flags.IIC3_FWD_MBFM )
ROUTER_Tx_IIC1(ptype, evnt0, evnt1, evnt2);

if( router_flags.IIC3_FWD_MBSEQ )
ROUTER_Tx_IIC2(ptype, evnt0, evnt1, evnt2);
}

// forward data (also) to the Core MIDI OUT
#if 1
// if no FE
if( evnt0 != 0xfe )
#endif
if( !router_flags.IIC3_FWD_MBSID && !router_flags.IIC3_FWD_MBFM && !router_flags.IIC3_FWD_MBSEQ )
ROUTER_Tx_INT0(ptype, evnt0, evnt1, evnt2);
}
[/code]




If you want a similar behaviour like for IIC2 (note splitting; just replace the code of ROUTER_Rx_IIC3 by the code you will find in ROUTER_Rx_IIC2
[code]  
void ROUTER\_Rx\_IIC2(unsigned char ptype, unsigned char evnt0, unsigned char evnt1, unsigned char evnt2) \_\_wparam  
{  
 // IIC2: connected to my MIDIbox SEQ  
  
 // lock/release this routing path on SysEx streams  
 ROUTER\_LockPathOnSysEx(PORT\_IIC2, ptype);  
  
 // forward MIDI clock/start/stop/continue to all IIC modules  
 if( evnt0 \>= 0xf8 && evnt0 \<= 0xfc ) {  
 ROUTER\_Tx\_IIC0(ptype, evnt0, evnt1, evnt2);  
 ROUTER\_Tx\_IIC1(ptype, evnt0, evnt1, evnt2);  
 ROUTER\_Tx\_IIC2(ptype, evnt0, evnt1, evnt2);  
 ROUTER\_Tx\_IIC3(ptype, evnt0, evnt1, evnt2);  
 }  
  
 // if IIC2\_FWD\_CHN8\_16 flag set:  
 if( router\_flags.IIC2\_FWD\_CHN8\_16 && (ptype \>= 0x08 && ptype \<= 0x0e) && ((evnt0 & 0x0f) \>= MIDI\_CHN9) ) {  
 // directly forward MIDI channel #9..#16 messages to MIDIbox SID and MIDIbox FM only  
 ROUTER\_Tx\_IIC0(ptype, evnt0, evnt1, evnt2);  
 ROUTER\_Tx\_IIC1(ptype, evnt0, evnt1, evnt2);  
 } else {  
 // forward all other events to the Core MIDI OUT  
 ROUTER\_Tx\_INT0(ptype, evnt0, evnt1, evnt2);  
 }  
}  

or create your own “routing logic” - by changing the source code this MIDI Router is completely configurable! :slight_smile:

Best Regards, Thorsten.

hi thanks for the fast respons :thumbsup: but its not what i was looking for :unsure:

on the site i’ve found a block diagram which says on input iic3 -> only channel 16 -> split notes <c-4 or >=c-4 and then change the channel and send them to ouputs iic3 an iic2. I can’t find this in the code.

It might be possible that the code has changed without changing the diagram

grtz

Yes, the released code always contains the current routing I’m using by myself.

I don’t see a need for keeping the diagram up-to-date, since every user would adapt the routing for his own requirements anyhow.

I’m not sure if you are asking for somebody who programs the code for you, or if you just only wanted to mention the differences. If you need a different implementation, you could consider to customize the routing as you really need it - the routing in the diagram is only an example, there are many more possibilities.

Best Regards, Thorsten.

Hi,

Very tricky from me :shocked: ,But do you have some old code ??? with that function that whe can experince? C programs is not my thing. :blush:

thanks

No, I don’t have the old code anymore !!!

But probably it looked somehow like this one ???

void ROUTER_Rx_IIC3(unsigned char ptype, unsigned char evnt0, unsigned char evnt1, unsigned char evnt2) __wparam
{
unsigned char transposed_note;

// IIC3: connected to my Yamaha AN1x

// lock/release this routing path on SysEx streams
ROUTER_LockPathOnSysEx(PORT_IIC3, ptype);

// filter clock
if( evnt0 == 0xf8 )
return;

// apply exactly the routing as documented under http://www.ucapps.de/midi_router/midi_router_default.gif
// note: parameters selectable on the UI are not taken into account here
// if this is desired, replace constants by router_flags.* variables as in the original router.c file
if( ptype >= 0x08 && ptype <= 0x09 ) {

if( (evnt0 & 0x0f) == MIDI_CHN16 ) {
if( evnt1 < 0x3c ) {
ROUTER_Tx_IIC0(ptype, (evnt0 & 0xf0) | MIDI_CHN9, evnt1, evnt2);

transposed_note = evnt1 + 2*12;
// if value >= 0x80, decrement 12 until we have reached the range <= 0x7f again
while( transposed_note & 0x80 ) transposed_note -= 12;
ROUTER_Tx_IIC2(ptype, (evnt0 & 0xf0) | MIDI_CHN1, transposed_note, evnt2);
} else {
ROUTER_Tx_IIC1(ptype, (evnt0 & 0xf0) | MIDI_CHN13, evnt1, evnt2);
}
}
}

// forward data (also) to the Core MIDI OUT
#if 1
// if no FE
if( evnt0 != 0xfe )
#endif
ROUTER_Tx_INT0(ptype, evnt0, evnt1, evnt2);
}
[/code]









Best Regards, Thorsten.

Thanks a lot

It works great.

Thanks