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
|
||||
--enable-rmidi enable character device midi backend [$rmidi]
|
||||
--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/*
|
||||
--without-libbsd don't use libbsd
|
||||
END
|
||||
|
@ -34,6 +36,7 @@ alsa=no # do we want alsa support ?
|
|||
sun=no # do we want sun support ?
|
||||
oss=no # do we want oss support ?
|
||||
rmidi=no # do we want support for raw char dev ?
|
||||
umidi=no # do we want support for umidi ?
|
||||
precision=16 # aucat/sndiod arithmetic precision
|
||||
user=_sndio # non-privileged user for sndio daemon
|
||||
libbsd=no # use libbsd?
|
||||
|
@ -73,6 +76,7 @@ case `uname` in
|
|||
-DHAVE_STRLCAT -DHAVE_STRLCPY -DHAVE_STRTONUM'
|
||||
;;
|
||||
DragonFly|FreeBSD)
|
||||
umidi=yes
|
||||
user=_sndio
|
||||
so="$so libsndio.so"
|
||||
defs='-DHAVE_ARC4RANDOM -DHAVE_ISSETUGID \\\
|
||||
|
@ -133,6 +137,12 @@ for i; do
|
|||
--disable-rmidi)
|
||||
rmidi=no
|
||||
shift;;
|
||||
--enable-umidi)
|
||||
umidi=yes
|
||||
shift;;
|
||||
--disable-umidi)
|
||||
umidi=no
|
||||
shift;;
|
||||
--privsep-user=*)
|
||||
user="${i#--privsep-user=}"
|
||||
shift;;
|
||||
|
@ -168,6 +178,13 @@ includedir="${includedir:-$prefix/include}"
|
|||
libdir="${libdir:-$prefix/lib}"
|
||||
mandir="${mandir:-$prefix/share/man}"
|
||||
|
||||
#
|
||||
# umidi implies rmidi
|
||||
#
|
||||
if [ $umidi = yes ]; then
|
||||
rmidi=yes
|
||||
fi
|
||||
|
||||
#
|
||||
# if using ALSA, add corresponding parameters
|
||||
#
|
||||
|
@ -197,6 +214,13 @@ if [ $rmidi = yes ]; then
|
|||
defs="$defs -DUSE_RMIDI"
|
||||
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
|
||||
#
|
||||
|
@ -242,6 +266,7 @@ alsa..................... $alsa
|
|||
oss...................... $oss
|
||||
sun...................... $sun
|
||||
rmidi.................... $rmidi
|
||||
umidi.................... $umidi
|
||||
|
||||
Do "make && make install" to compile and install sndio
|
||||
|
||||
|
|
|
@ -31,10 +31,19 @@
|
|||
#include "debug.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_MAX (1 + \
|
||||
sizeof(DEVPATH_PREFIX) - 1 + \
|
||||
sizeof(int) * 3)
|
||||
#endif
|
||||
|
||||
struct mio_rmidi_hdl {
|
||||
struct mio_hdl mio;
|
||||
|
@ -63,6 +72,9 @@ mio_rmidi_getfd(const char *str, unsigned int mode, int nbio)
|
|||
const char *p;
|
||||
char path[DEVPATH_MAX];
|
||||
unsigned int devnum;
|
||||
#ifdef USE_UMIDI
|
||||
unsigned int subdevnum = 0;
|
||||
#endif
|
||||
int fd, flags;
|
||||
|
||||
p = _sndio_parsetype(str, "rmidi");
|
||||
|
@ -79,11 +91,37 @@ mio_rmidi_getfd(const char *str, unsigned int mode, int nbio)
|
|||
return -1;
|
||||
}
|
||||
p = _sndio_parsenum(p, &devnum, 255);
|
||||
if (p == NULL || *p != '\0') {
|
||||
if (p == NULL) {
|
||||
DPRINTF("mio_rmidi_getfd: %s: number expected after '/'\n", str);
|
||||
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);
|
||||
#endif
|
||||
if (mode == (MIO_IN | MIO_OUT))
|
||||
flags = O_RDWR;
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue