New USB MIDI driver for FreeBSD

Hans Petter Selasky hselasky at c2i.net
Tue Apr 24 20:54:17 UTC 2007


On Tuesday 24 April 2007 22:15, Rasmus Kaj wrote:
> >>>>> "HPS" == Hans Petter Selasky <hselasky at c2i.net> wrote on 2006-08-27:
>
>  HPS> During the past week I have been working on USB MIDI support for
>  HPS> FreeBSD. I choose the simplest approach, and that was to create
>  HPS> a raw/direct MIDI device.
>
> Hi!  Thanks for giving me some hope regarding MIDI on FreeBSD again!
>
>  HPS> svn --username anonsvn --password anonsvn \
>  HPS>       checkout svn://svn.turbocat.net/i4b
>
> What version of FreeBSD was this supposed to work with?  I was able to
> run it with releng_6 as of about a week ago, but not talk to my midi
> device [1], so I thought I'd try it with current.  Unfortunatley,
> there seems to have been some changes (in bus_setup_intr and
> cam_sim_alloc, possibly more) in current that this code does not
> reflect.

Currently FreeBSD 6.x stable. You can get it working with FreeBSD 7.x also, 
but you need to work a little bit then.

>
> Is there a more up-to-date version somewhere else?  Should I go back
> to releng_6 and try to insert some "magic numbers" (device id) for my
> device?  Or is (relevant parts of) this included in current by now?
> Maybe current just needs some device ids?

No, the SVN version is the latest.

>
> By the way, what does the MIDI support have in common with the ISDN
> support?

Not much, except that there are USB ISDN adapters :-)

By the way, when you go into the "FreeBSD.usb" folder you don't install any 
ISDN stuff. Also don't forget editing and running the "install_uaudio.sh".

I'm just looking forward till all of my code gets committed to FreeBSD. Then 
you don't have to worry any more.

> [1] I've got a "MIDI Mate", it is a simple gateway between a USB
> connector in one end an a single pair (in / out) of midi connectors in
> the other, that identifies as follows on FreeBSD current:

Same here, but there are some notes. When I implemented the USB MIDI support 
there was no MIDI API in the kernel, so I created my own. That means you get 
some raw devices, /dev/umidiX.X, which I have created some utilities for in 
my SVN repo.

So there might be some work to do, if you want to use your MIDI mate with 
ordinary MIDI applications.

>
> ugen0: <Ego Systems Inc XP MIDI mate, class 0/0, rev 1.10/1.01, addr
> 2> on uhub1
> Unknown USB device: vendor 0x0a92 product 0x1000 bus uhub1

Do a "svn update", make a new package, install it, and compile a new kernel.

If you use FreeBSD 7.x, then:

In /sys/dev/usb/usb_port.h, use the following:

/* preliminary fix for a bug in msleep on FreeBSD,
 * which cannot sleep with Giant:
 */
#undef msleep
#define msleep(i,m,p,w,t) _sleep(i,(((m) == &Giant) ? \
  NULL : &(m)->mtx_object),p,w,t)

After this patch you have to insert a NULL argument, to all bus_setup_intr() 
functions you find in the files /sys/dev/usb/*pci.c like shown below ?

        error = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_TTY,
-                              si_intr, sc, &ih);
+                              NULL, si_intr, sc, &ih);

Also please find attached the "/usr/src/sys/dev/sound/usb/uaudioxxx" 
and "/usr/src/sys/dev/sound/pcm/mixerxxx" files you need.

--HPS


More information about the freebsd-multimedia mailing list