mirror of https://github.com/ericonr/sndio.git
Add support for FreeBSD raw usb-midi devices. Bits from Tobias
Kortkamp <t@tobik.me> plus configure script tweaks.
This commit is contained in:
parent
9cb5193ca7
commit
2606d3f24e
|
@ -20,6 +20,8 @@ Usage: configure [options]
|
||||||
--disable-sun disable sun audio backend
|
--disable-sun disable sun audio backend
|
||||||
--enable-rmidi enable character device midi backend [$rmidi]
|
--enable-rmidi enable character device midi backend [$rmidi]
|
||||||
--disable-rmidi disable character device midi backend
|
--disable-rmidi disable character device midi backend
|
||||||
|
--enable-umidi enable usb-midi backend [$umidi]
|
||||||
|
--disable-umidi disable usb-midi backend
|
||||||
--with-libbsd use the libbsd rather than bsd-compat/*
|
--with-libbsd use the libbsd rather than bsd-compat/*
|
||||||
--without-libbsd don't use libbsd
|
--without-libbsd don't use libbsd
|
||||||
END
|
END
|
||||||
|
@ -34,6 +36,7 @@ alsa=no # do we want alsa support ?
|
||||||
sun=no # do we want sun support ?
|
sun=no # do we want sun support ?
|
||||||
oss=no # do we want oss support ?
|
oss=no # do we want oss support ?
|
||||||
rmidi=no # do we want support for raw char dev ?
|
rmidi=no # do we want support for raw char dev ?
|
||||||
|
umidi=no # do we want support for umidi ?
|
||||||
precision=16 # aucat/sndiod arithmetic precision
|
precision=16 # aucat/sndiod arithmetic precision
|
||||||
user=_sndio # non-privileged user for sndio daemon
|
user=_sndio # non-privileged user for sndio daemon
|
||||||
libbsd=no # use libbsd?
|
libbsd=no # use libbsd?
|
||||||
|
@ -73,6 +76,7 @@ case `uname` in
|
||||||
-DHAVE_STRLCAT -DHAVE_STRLCPY -DHAVE_STRTONUM'
|
-DHAVE_STRLCAT -DHAVE_STRLCPY -DHAVE_STRTONUM'
|
||||||
;;
|
;;
|
||||||
DragonFly|FreeBSD)
|
DragonFly|FreeBSD)
|
||||||
|
umidi=yes
|
||||||
user=_sndio
|
user=_sndio
|
||||||
so="$so libsndio.so"
|
so="$so libsndio.so"
|
||||||
defs='-DHAVE_ARC4RANDOM -DHAVE_ISSETUGID \\\
|
defs='-DHAVE_ARC4RANDOM -DHAVE_ISSETUGID \\\
|
||||||
|
@ -133,6 +137,12 @@ for i; do
|
||||||
--disable-rmidi)
|
--disable-rmidi)
|
||||||
rmidi=no
|
rmidi=no
|
||||||
shift;;
|
shift;;
|
||||||
|
--enable-umidi)
|
||||||
|
umidi=yes
|
||||||
|
shift;;
|
||||||
|
--disable-umidi)
|
||||||
|
umidi=no
|
||||||
|
shift;;
|
||||||
--privsep-user=*)
|
--privsep-user=*)
|
||||||
user="${i#--privsep-user=}"
|
user="${i#--privsep-user=}"
|
||||||
shift;;
|
shift;;
|
||||||
|
@ -168,6 +178,13 @@ includedir="${includedir:-$prefix/include}"
|
||||||
libdir="${libdir:-$prefix/lib}"
|
libdir="${libdir:-$prefix/lib}"
|
||||||
mandir="${mandir:-$prefix/share/man}"
|
mandir="${mandir:-$prefix/share/man}"
|
||||||
|
|
||||||
|
#
|
||||||
|
# umidi implies rmidi
|
||||||
|
#
|
||||||
|
if [ $umidi = yes ]; then
|
||||||
|
rmidi=yes
|
||||||
|
fi
|
||||||
|
|
||||||
#
|
#
|
||||||
# if using ALSA, add corresponding parameters
|
# if using ALSA, add corresponding parameters
|
||||||
#
|
#
|
||||||
|
@ -197,6 +214,13 @@ if [ $rmidi = yes ]; then
|
||||||
defs="$defs -DUSE_RMIDI"
|
defs="$defs -DUSE_RMIDI"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# if using usb-midi raw devices for midi, add corresponding parameters
|
||||||
|
#
|
||||||
|
if [ $umidi = yes ]; then
|
||||||
|
defs="$defs -DUSE_UMIDI"
|
||||||
|
fi
|
||||||
|
|
||||||
#
|
#
|
||||||
# if using libbsd, add corresponding parameters
|
# if using libbsd, add corresponding parameters
|
||||||
#
|
#
|
||||||
|
@ -242,6 +266,7 @@ alsa..................... $alsa
|
||||||
oss...................... $oss
|
oss...................... $oss
|
||||||
sun...................... $sun
|
sun...................... $sun
|
||||||
rmidi.................... $rmidi
|
rmidi.................... $rmidi
|
||||||
|
umidi.................... $umidi
|
||||||
|
|
||||||
Do "make && make install" to compile and install sndio
|
Do "make && make install" to compile and install sndio
|
||||||
|
|
||||||
|
|
|
@ -31,10 +31,19 @@
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "mio_priv.h"
|
#include "mio_priv.h"
|
||||||
|
|
||||||
|
#ifdef USE_UMIDI
|
||||||
|
#define DEVPATH_PREFIX "/dev/umidi"
|
||||||
|
#define DEVPATH_MAX (1 + \
|
||||||
|
sizeof(DEVPATH_PREFIX) - 1 + \
|
||||||
|
sizeof(int) * 3 + \
|
||||||
|
1 + \
|
||||||
|
sizeof(int) * 3)
|
||||||
|
#else
|
||||||
#define DEVPATH_PREFIX "/dev/rmidi"
|
#define DEVPATH_PREFIX "/dev/rmidi"
|
||||||
#define DEVPATH_MAX (1 + \
|
#define DEVPATH_MAX (1 + \
|
||||||
sizeof(DEVPATH_PREFIX) - 1 + \
|
sizeof(DEVPATH_PREFIX) - 1 + \
|
||||||
sizeof(int) * 3)
|
sizeof(int) * 3)
|
||||||
|
#endif
|
||||||
|
|
||||||
struct mio_rmidi_hdl {
|
struct mio_rmidi_hdl {
|
||||||
struct mio_hdl mio;
|
struct mio_hdl mio;
|
||||||
|
@ -63,6 +72,9 @@ mio_rmidi_getfd(const char *str, unsigned int mode, int nbio)
|
||||||
const char *p;
|
const char *p;
|
||||||
char path[DEVPATH_MAX];
|
char path[DEVPATH_MAX];
|
||||||
unsigned int devnum;
|
unsigned int devnum;
|
||||||
|
#ifdef USE_UMIDI
|
||||||
|
unsigned int subdevnum = 0;
|
||||||
|
#endif
|
||||||
int fd, flags;
|
int fd, flags;
|
||||||
|
|
||||||
p = _sndio_parsetype(str, "rmidi");
|
p = _sndio_parsetype(str, "rmidi");
|
||||||
|
@ -79,11 +91,37 @@ mio_rmidi_getfd(const char *str, unsigned int mode, int nbio)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
p = _sndio_parsenum(p, &devnum, 255);
|
p = _sndio_parsenum(p, &devnum, 255);
|
||||||
if (p == NULL || *p != '\0') {
|
if (p == NULL) {
|
||||||
DPRINTF("mio_rmidi_getfd: %s: number expected after '/'\n", str);
|
DPRINTF("mio_rmidi_getfd: %s: number expected after '/'\n", str);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#ifdef USE_UMIDI
|
||||||
|
switch (*p) {
|
||||||
|
case '.':
|
||||||
|
p++;
|
||||||
|
p = _sndio_parsenum(p, &subdevnum, 255);
|
||||||
|
if (p == NULL) {
|
||||||
|
DPRINTF("mio_rmidi_getfd: %s: "
|
||||||
|
"number expected after '.'\n", str);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '\0':
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DPRINTF("mio_rmidi_getfd: %s: '.' expected\n", str);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (*p != '\0') {
|
||||||
|
DPRINTF("mio_rmidi_getfd: junk at end of string: %s\n", p);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#ifdef USE_UMIDI
|
||||||
|
snprintf(path, sizeof(path), DEVPATH_PREFIX "%u.%u", devnum, subdevnum);
|
||||||
|
#else
|
||||||
snprintf(path, sizeof(path), DEVPATH_PREFIX "%u", devnum);
|
snprintf(path, sizeof(path), DEVPATH_PREFIX "%u", devnum);
|
||||||
|
#endif
|
||||||
if (mode == (MIO_IN | MIO_OUT))
|
if (mode == (MIO_IN | MIO_OUT))
|
||||||
flags = O_RDWR;
|
flags = O_RDWR;
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue