Windows7 x64 USB Behringer driver always change port name

4 posts / 0 new
Last post
burningreggae
burningreggae's picture
Windows7 x64 USB Behringer driver always change port name

Hi to everbody!

I have currently 2x BCF2000 running.
Windows7 64 bit, 2x BCF2000 Firmware 1.10,USB Mode 3 for both, Mackie Emulation, Behringer USB Driver 1.0.10.0, BCFView (2 Instances in different directories),Cubase 5 & Cubase 8, Sonar.  All 16 Channels are running

The only annoying problem is that there must be a driver bug in the midi-port-names. eq. 3-BCF2000à port 1,4-BCF2000È port 1.
The 10-character is always changing on driver-restart.(power on) which makes cubase always loose the connection. Does anyone have a solution?

Does anybody mave have a newer driver (Behringer, 15.12.2009, Version 1.0.10.0) Or is it maybe a firmware problem?
A workaround is to install 2 virtual midi-loopbacks and a virtual midi-through and a setup routine which is not very elegant and doesn't work always.
any help is appreciated!

Irie Christmas!
burning

Mark van den Berg
Mark van den Berg's picture

As far as I know, this problem only occurs with the Behringer 1.0.10 USB MIDI driver: I've never seen it with any of the other drivers I discuss in section 4, subsection 4 of the BC Manager manual (downloadable from https://mountainutilities.eu/bcmanager). ("Windows USB drivers for BCc2000.pdf" (downloadable from https://mountainutilities.eu/bc2000) is an (old) "reprint" of this section.)
So the problem is definitely not caused by the BCF2000's firmware.

I've run into this problem from time to time ever since I started using this driver in Windows 7 (64-bit). I've often wondered why nobody(?) else has complained about it. IIRC I mentioned it once in the Yahoo BC2000 forum maybe five years ago, but nothing came of that.
Since I haven't used my BCF2000 and BCR2000 very much in the last five years, I've never actively investigated this problem.
However, now that you've brought it up, lots of questions are popping into my head:

  • Does the problem only occur with the 64-bit edition of the 1.0.10 driver or also with the 32-bit edition? (Obviously one would need a 32-bit Windows edition to test this.)
  • Does the problem only occur with Windows 7, or also with other Windows versions (in particular 8 and 10)?
  • What is the exact set of spurious characters that can appear? (This might give us a clue about the exact cause of the problem. Perhaps it's a string length error due to a confusion between ANSI and Unicode?)
  • You state that the problem "always" occurs after "driver-restart (power on)". Are you talking here about a Windows reboot or about switching a BCF2000 off and on again? And does it indeed always happen?
  • Does the Operating Mode (U-1/2/3/4) of the BCF/R2000(s) matter? (This might be the case, because the different modes generate different numbers of USB ports.)
  • Does the number of switched-on BCF/R2000s matter?
  • Does it matter to which USB ports the BCF/R2000s are connected? (When I first ran into this problem, I assumed it was because I had plugged my BCF/R2000 into a different USB port. Gradually I've started to suspect that this doesn't matter, and your report seems to confirm this.)
  • How do these USB devices end up in the Windows registry? Would it be possible to "clean" the registry (before or after reboot) in such a way that the problem doesn't occur? (A somewhat related story: in the past (I'm not sure if this is still the case), references to USB drivers for Roland audio/MIDI hardware could exhaust the maximum number of USB devices registered in the Windows registry (particularly if you connected your Roland hardware to different USB ports). IIRC Roland even released a utility to clear these references.)

One "solution" would be to uninstall the Behringer 1.0.10 driver and start using the generic Microsoft "USB Audio Device" driver. However, as discussed in the documents I mentioned above, this driver has its own problems, which might be even worse.

Off-topic: instead of BCFView, you might consider using BC Manager: this gives you customizable "BCFView-compatible" monitor windows for up to 16 BCF2000s in Mackie emulation modes. (It also gives you up to 4 "generic" (non-BCF2000 specific) Mackie monitor windows).

burningreggae
burningreggae's picture

Thanks for reply!

"Does the problem only occur with Windows 7"
I don't have any 32-bit windows anymore (since 2010?) but from what i can remember this is only an x64 problem. I also don't know about win8/10.

"Perhaps it's a string length error due to a confusion between ANSI and Unicode?"
For me it also has something to do with string building. (maybe not Multibyte<->Unicode related)
Every virtual midi connection just gets the letter after BCF2000 increased ( binary+1). but he forgot to initalize the memory. so it starts in a random way.
that's all;-) would take 3 minutes to fix if i had the drivers source code...

Does the number of switched-on BCF/R2000s matter? Does it matter to which USB ports the BCF/R2000s are connected?
Yes!. [Sarcasm on]: On a clean&fresh windows and only 1 time plugged in usb device and never change usb-ports windows manage to find the device again..
[/Sarcasm off]. You have this problem with all windows-usb devices (as you already mentioned) and the registry. It tend's to forget the previous connections and overflow the registry. ( bluetooth also).. usb hubs,hibernate etc. add another layers of problems. [i worked professionally on that topic. on the fly register&connect is more for linux.. but that's what i want to do. plug&play. btw. xbox can to this in it's usb-stack. reconnect usb-devices ].
 

"Does it matter to which USB ports the BCF/R2000s are connected?"
Yes but only the first digits are affected. "1-BCF2000 port1" get's to "4-BCF2000 port1" if you change ports. that'ok. (even i don't like windows usb enumerating...)

btw. BC Manager also has problems with the names and remembering midiport's with the weird names. (sonar&cubase also). What i do in my source code.. and i believe bcfviewer also.. is just ignoring the full name, and do like a strstr("BCF2000") do get the port number... (very ugly..)

BCFManager & Mackie Monitor
I tried it many times during the years but didn't manage to get it right with 2x BCF2000. ( of course behringer problem). Although i like ( and need) a bigger font for the Mackie Control Display i currently use BCView, because it can open the port again after restarting...

cheers
burning

burningreggae
burningreggae's picture

inspired by the idea it maybe a multibyte/unicode problem i dumped the Ansi/Unicode midiOutGetDevCaps on my machine.
I have windows 7 english, system locale English(United State) but with region german.
And you are also right!. the wrong unicode string causes troubles!

I detected an interseting behavior. Behringer driver seams to initialize the weird character with 0x100 and later on with "device.1" or something else.
(unitialized  local variable?).

So if you query the device with Unicode version and use just the name as 0-terminated string you are in trouble..

MIDIOUTCAPS2W cout;
memset(&cout,0,sizeof(cout));
midiOutGetDevCapsW(i, (MIDIOUTCAPSW*)&cout, sizeof(cout));

-        szPname    0x000000000012f718 L"4- BCF2000Ā port 1"    wchar_t[0x00000020]
        [0x00000000]    0x0034 '4'    wchar_t
        [0x00000001]    0x002d '-'    wchar_t
        [0x00000002]    0x0020 ' '    wchar_t
        [0x00000003]    0x0042 'B'    wchar_t
        [0x00000004]    0x0043 'C'    wchar_t
        [0x00000005]    0x0046 'F'    wchar_t
        [0x00000006]    0x0032 '2'    wchar_t
        [0x00000007]    0x0030 '0'    wchar_t
        [0x00000008]    0x0030 '0'    wchar_t
        [0x00000009]    0x0030 '0'    wchar_t
        [0x0000000a]    0x0100 'Ā'    wchar_t          <-- classic overflow or big endian?
        [0x0000000b]    0x0020 ' '    wchar_t
        [0x0000000c]    0x0070 'p'    wchar_t
        [0x0000000d]    0x006f 'o'    wchar_t
        [0x0000000e]    0x0072 'r'    wchar_t
        [0x0000000f]    0x0074 't'    wchar_t
        [0x00000010]    0x0020 ' '    wchar_t
        [0x00000011]    0x0031 '1'    wchar_t
        [0x00000012]    0x0000 '\0'    wchar_t
        [0x00000013]    0xbaad '몭'    wchar_t          <--- unicode shows bad character  
        [0x00000014]    0xf00d ''    wchar_t
        [0x00000015]    0xbaad '몭'    wchar_t
        [0x00000016]    0xf00d ''    wchar_t
        [0x00000017]    0xbaad '몭'    wchar_t
        [0x00000018]    0xf00d ''    wchar_t
        [0x00000019]    0xbaad '몭'    wchar_t
        [0x0000001a]    0xf00d ''    wchar_t
        [0x0000001b]    0xbaad '몭'    wchar_t
        [0x0000001c]    0xf00d ''    wchar_t
        [0x0000001d]    0xbaad '몭'    wchar_t
        [0x0000001e]    0xf00d ''    wchar_t
        [0x0000001f]    0xbaad '몭'    wchar_t   <-- not 0 terminated!

MIDIOUTCAPS2A cout;
memset(&cout,0,sizeof(cout));
midiOutGetDevCapsA(i, (MIDIOUTCAPSA*)&cout, sizeof(cout));
        
-        szPname    0x000000000019f728 "4- BCF2000A port 1"    char[0x00000020]
        [0x00000000]    0x34 '4'    char
        [0x00000001]    0x2d '-'    char
        [0x00000002]    0x20 ' '    char
        [0x00000003]    0x42 'B'    char
        [0x00000004]    0x43 'C'    char
        [0x00000005]    0x46 'F'    char
        [0x00000006]    0x32 '2'    char
        [0x00000007]    0x30 '0'    char
        [0x00000008]    0x30 '0'    char
        [0x00000009]    0x30 '0'    char
        [0x0000000a]    0x41 'A'    char             <--- here overflow would be ok... defaults to 'A' , or device 4 port 1?!?
        [0x0000000b]    0x20 ' '    char
        [0x0000000c]    0x70 'p'    char
        [0x0000000d]    0x6f 'o'    char
        [0x0000000e]    0x72 'r'    char
        [0x0000000f]    0x74 't'    char
        [0x00000010]    0x20 ' '    char
        [0x00000011]    0x31 '1'    char
        [0x00000012]    0x00 '\0'    char         <-- windows conversion cleans out bad unicode string
        [0x00000013]    0x00 '\0'    char
        [0x00000014]    0x00 '\0'    char
        [0x00000015]    0x00 '\0'    char
        [0x00000016]    0x00 '\0'    char
        [0x00000017]    0x00 '\0'    char
        [0x00000018]    0x00 '\0'    char
        [0x00000019]    0x00 '\0'    char
        [0x0000001a]    0x00 '\0'    char
        [0x0000001b]    0x00 '\0'    char
        [0x0000001c]    0x00 '\0'    char
        [0x0000001d]    0x9d ''    char
        [0x0000001e]    0x00 '\0'    char
        [0x0000001f]    0x00 '\0'    char
        
Unicode
-        szPname    0x000000000024f8a8 L"3- BCF2000́ port 1"    wchar_t[0x00000020]
        [0x00000000]    0x0033 '3'    wchar_t
        [0x00000001]    0x002d '-'    wchar_t
        [0x00000002]    0x0020 ' '    wchar_t
        [0x00000003]    0x0042 'B'    wchar_t
        [0x00000004]    0x0043 'C'    wchar_t
        [0x00000005]    0x0046 'F'    wchar_t
        [0x00000006]    0x0032 '2'    wchar_t
        [0x00000007]    0x0030 '0'    wchar_t
        [0x00000008]    0x0030 '0'    wchar_t
        [0x00000009]    0x0030 '0'    wchar_t
        [0x0000000a]    0x0301 '́'    wchar_t     <- does this mean device 3 port 1 ?!?
        [0x0000000b]    0x0020 ' '    wchar_t
        [0x0000000c]    0x0070 'p'    wchar_t
        [0x0000000d]    0x006f 'o'    wchar_t
        [0x0000000e]    0x0072 'r'    wchar_t
        [0x0000000f]    0x0074 't'    wchar_t
        [0x00000010]    0x0020 ' '    wchar_t
        [0x00000011]    0x0031 '1'    wchar_t
        [0x00000012]    0x0000 '\0'    wchar_t
        [0x00000013]    0xbaad '몭'    wchar_t       <-- again bad character
        [0x00000014]    0xf00d ''    wchar_t
        [0x00000015]    0xbaad '몭'    wchar_t
        [0x00000016]    0xf00d ''    wchar_t
        [0x00000017]    0xbaad '몭'    wchar_t
        [0x00000018]    0xf00d ''    wchar_t
        [0x00000019]    0xbaad '몭'    wchar_t
        [0x0000001a]    0xf00d ''    wchar_t
        [0x0000001b]    0xbaad '몭'    wchar_t
        [0x0000001c]    0xf00d ''    wchar_t
        [0x0000001d]    0xbaad '몭'    wchar_t
        [0x0000001e]    0xf00d ''    wchar_t
        [0x0000001f]    0xbaad '몭'    wchar_t

        
Ansi        
-        szPname    0x000000000019f728 "3- BCF2000´ port 1"    char[0x00000020]
        [0x00000000]    0x33 '3'    char
        [0x00000001]    0x2d '-'    char
        [0x00000002]    0x20 ' '    char
        [0x00000003]    0x42 'B'    char
        [0x00000004]    0x43 'C'    char
        [0x00000005]    0x46 'F'    char
        [0x00000006]    0x32 '2'    char
        [0x00000007]    0x30 '0'    char
        [0x00000008]    0x30 '0'    char
        [0x00000009]    0x30 '0'    char
        [0x0000000a]    0xb4 '´'    char          <-- bad again
        [0x0000000b]    0x20 ' '    char
        [0x0000000c]    0x70 'p'    char
        [0x0000000d]    0x6f 'o'    char
        [0x0000000e]    0x72 'r'    char
        [0x0000000f]    0x74 't'    char
        [0x00000010]    0x20 ' '    char
        [0x00000011]    0x31 '1'    char
        [0x00000012]    0x00 '\0'    char
        [0x00000013]    0x00 '\0'    char
        [0x00000014]    0x00 '\0'    char
        [0x00000015]    0x00 '\0'    char
        [0x00000016]    0x00 '\0'    char
        [0x00000017]    0x00 '\0'    char
        [0x00000018]    0x00 '\0'    char
        [0x00000019]    0x00 '\0'    char
        [0x0000001a]    0x00 '\0'    char
        [0x0000001b]    0x00 '\0'    char
        [0x0000001c]    0x00 '\0'    char
        [0x0000001d]    0x9d ''    char
        [0x0000001e]    0x00 '\0'    char
        [0x0000001f]    0x00 '\0'    char

Unicode for port 2        

-        szPname    0x000000000024f8a8 L"3- BCF2000́ port 2"    wchar_t[0x00000020]
        [0x00000000]    0x0033 '3'    wchar_t
        [0x00000001]    0x002d '-'    wchar_t
        [0x00000002]    0x0020 ' '    wchar_t
        [0x00000003]    0x0042 'B'    wchar_t
        [0x00000004]    0x0043 'C'    wchar_t
        [0x00000005]    0x0046 'F'    wchar_t
        [0x00000006]    0x0032 '2'    wchar_t
        [0x00000007]    0x0030 '0'    wchar_t
        [0x00000008]    0x0030 '0'    wchar_t
        [0x00000009]    0x0030 '0'    wchar_t
        [0x0000000a]    0x0301 '́'    wchar_t        <--- stays on 3.1
        [0x0000000b]    0x0020 ' '    wchar_t
        [0x0000000c]    0x0070 'p'    wchar_t
        [0x0000000d]    0x006f 'o'    wchar_t
        [0x0000000e]    0x0072 'r'    wchar_t
        [0x0000000f]    0x0074 't'    wchar_t
        [0x00000010]    0x0020 ' '    wchar_t
        [0x00000011]    0x0032 '2'    wchar_t
        [0x00000012]    0x0000 '\0'    wchar_t
        [0x00000013]    0xbaad '몭'    wchar_t
        [0x00000014]    0xf00d ''    wchar_t
        [0x00000015]    0xbaad '몭'    wchar_t
        [0x00000016]    0xf00d ''    wchar_t
        [0x00000017]    0xbaad '몭'    wchar_t
        [0x00000018]    0xf00d ''    wchar_t
        [0x00000019]    0xbaad '몭'    wchar_t
        [0x0000001a]    0xf00d ''    wchar_t
        [0x0000001b]    0xbaad '몭'    wchar_t
        [0x0000001c]    0xf00d ''    wchar_t
        [0x0000001d]    0xbaad '몭'    wchar_t
        [0x0000001e]    0xf00d ''    wchar_t
        [0x0000001f]    0xbaad '몭'    wchar_t