audio/lsmi: Added (map device input to ALSA MIDI sequencer events)

Signed-off-by: Robby Workman <rworkman@slackbuilds.org>
This commit is contained in:
B. Watson 2013-06-03 16:24:41 -05:00 committed by Robby Workman
parent 995fe8e3c4
commit bf4ab6962d
10 changed files with 758 additions and 0 deletions

16
audio/lsmi/README Normal file
View file

@ -0,0 +1,16 @@
lsmi (map keyboard/mouse/joystick input to ALSA MIDI sequencer events)
These simple user-space drivers support using certain homemade,
repurposed, or commercial devices as MIDI controllers on Linux, even
though the devices themselves are not capable of generating MIDI messages;
this does not include things like MIDI-over-serial or PIC based projects,
which are true MIDI devices.
Reasons for using this software include: achieving MIDI entry on machines
without MIDI ports, reusing old hardware, pure frugality, and fun.
This package uses POSIX filesystem capabilities to execute with
elevated privileges (required for realtime audio processing). This
may be considered a security/stability risk. Please read
http://www.slackbuilds.org/caps/ for more information. To disable
capabilities, pass SETCAP=no to the script.

110
audio/lsmi/lsmi.SlackBuild Normal file
View file

@ -0,0 +1,110 @@
#!/bin/bash
# Slackware build script for lsmi
# Written by B. Watson (yalhcru@gmail.com)
# Licensed under the WTFPL. See http://sam.zoy.org/wtfpl/ for details.
PRGNAM=lsmi
VERSION=${VERSION:-0.1}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i486 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG/usr/bin $OUTPUT
cd $TMP
rm -rf $PRGNAM
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
-exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
# all this seddery could have been done with a diff, I just felt like
# using sed today for some reason.
# use our flags and install to our directory.
sed -i \
-e "s/-g/$SLKCFLAGS/" \
-e "s,/usr/local/bin,$PKG/usr/bin," \
-e "s,install ,install -s -m0755 ," \
Makefile
# fix typo in --help output
sed -i 's/thrree/three/' lsmi-mouse.c
# make keyhack's --help actually work
sed -i 's/fprintf.*Help.*/usage();/' lsmi-keyhack.c
# fix possible segfault
sed -i 's/\(char *prog_buf\)\[4\]/\1[5]/' lsmi-keyhack.c
# As shipped, only lsmi-monterey supports POSIX realtime scheduling. This
# patch (by the SlackBuild author) adds the -R option to the other lsmi-*
# binaries.
patch -p1 < $CWD/rtprio.diff
make
make install
# man pages came from the Musix project:
# ftp://musix.ourproject.org/pub/musix/deb/lsmi_0.1-1_i386.deb
# Modified a bit: fixed a typo, rewrote section
# about realtime scheduling so it applies to Slackware.
mkdir -p $PKG/usr/man/man1
cd $CWD/man
for i in *; do
gzip -9c < $i > $PKG/usr/man/man1/$i.gz
done
cd -
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a README $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
if [ "${SETCAP:-yes}" = "yes" ]; then
cat $CWD/setcap.sh >> $PKG/install/doinst.sh
for i in lsmi-joystick lsmi-keyhack lsmi-monterey lsmi-mouse; do
chown root:audio $PKG/usr/bin/$i
chmod 0750 $PKG/usr/bin/$i
done
fi
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

10
audio/lsmi/lsmi.info Normal file
View file

@ -0,0 +1,10 @@
PRGNAM="lsmi"
VERSION="0.1"
HOMEPAGE="http://lsmi-all.sourceforge.net/"
DOWNLOAD="http://downloads.sourceforge.net/project/lsmi-all/lsmi-all/lsmi-0.1/lsmi-0.1.tar.gz"
MD5SUM="42e988a854dfc36810193de6c5469f78"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="B. Watson"
EMAIL="yalhcru@gmail.com"

View file

@ -0,0 +1,83 @@
.\" Hey, EMACS: -*- nroff -*-
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH LSMI-JOYSTICK 1 "May 15, 2012"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
.\" .nh disable hyphenation
.\" .hy enable hyphenation
.\" .ad l left justify
.\" .ad b justify to both left and right margins
.\" .nf disable filling
.\" .fi enable filling
.\" .br insert line break
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
lsmi-joystick \- Linux Pseudo MIDI Input -- Joystick
.SH SYNOPSIS
.B lsmi-joystick
.RI [ options ] " files" ...
.SH DESCRIPTION
This driver allows any joystick supported by the Linux joydev interface to
be used as a MIDI pitch/modulation controller. Of course, some joysticks are
more suitable than others. I use an old analog flight stick. Holding down
button 1 causes the vertical axis to send pitchbend messages, while button 2
causes the vertical axis to send modulation messages. Holding down both
buttons causes the vertical axis to send pitchbend messages and the
horizontal axis to send modulation messages.
.SH USAGE
Distribution specific init scripts are not included. The drivers may be
started from init, your .bashrc, by qjackctl, etc. In order to be run by a
non-root user the drivers must have access to the device files in /dev/input.
This may be accomplished by adding a group 'input', adding desired users to
this group, and configuring udev to assign the appropriate ownership to files
in /dev/input. It should be perfectly safe to run the drivers as root,
however.
For realtime scheduling (the \-R option), either use set_rlimits, or set the
appropriate POSIX capabilities on the executable:
.P
/sbin/setcap cap_ipc_lock,cap_sys_nice=ep /usr/bin/lsmi-joystick
.P
The lsmi.SlackBuild script already includes RT scheduling support.
.SH OPTIONS
.TP
.B \-h, \-\-help
Show summary of options.
.TP
.B \-d, \-\-device specialfile
Event device to use (instead of js0).
.TP
.B \-R, \-\-realtime rtprio
Use realtime priority 'rtprio' (requires privs).
.TP
.B \-v, \-\-verbose
Be verbose (show note events).
.TP
.B \-p, \-\-port client:port
Connect to ALSA Sequencer client on startup.
.TP
.B \-n, \-\-no-hold
Send controller data even when no joystick button is held.
.TP
.B \-z, \-\-daemon
Fork and don't print anything to stdout.
.SH SEE ALSO
.BR lsmi-keyhack (1),
.BR lsmi-monterey (1),
.BR lsmi-mouse (1).
.br
.SH AUTHOR
lsmi was written by Jonathan Moore Liles.
.PP
This manual page was written by Ariel Errera <ariel@musix.org.ar>,
for the Debian project (but may be used by others). It was then modified
by B. Watson for the SlackBuilds.org project.

View file

@ -0,0 +1,90 @@
.\" Hey, EMACS: -*- nroff -*-
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH LSMI-KEYHACK 1 "May 15, 2012"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
.\" .nh disable hyphenation
.\" .hy enable hyphenation
.\" .ad l left justify
.\" .ad b justify to both left and right margins
.\" .nf disable filling
.\" .fi enable filling
.\" .br insert line break
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
lsmi-keyhack \- Linux Pseudo MIDI Input -- Keyboard Hack
.SH SYNOPSIS
.B lsmi-keyhack
.RI [ options ] " files" ...
.SH DESCRIPTION
This driver is for a hacked AT / PS/2 keyboard functioning as a MIDI
controller.
It is somewhat specific to the author's own hardware, but, since it relies a learning
capability rather than a fixed keymap, it should be equally useful for
others wishing to build their own fake MIDI keyboard. Of course, such a
keyboard will not be velocity sensitive, but this project is a good way to
salvage both an old QWERTY keyboard and a manual from a decrepit analog
organ or cheap PCM noise-maker.
The driver supports up to 88 musical keys, three footswitches, and several
additional buttons for control and data entry. It has the rather unfortunate
side-effect of rendering the console useless, unless, of course you have
another (USB) keyboard to type on.
.SH USAGE
Distribution specific init scripts are not included. The drivers may be
started from init, your .bashrc, by qjackctl, etc. In order to be run by a
non-root user the drivers must have access to the device files in /dev/input.
This may be accomplished by adding a group 'input', adding desired users to
this group, and configuring udev to assign the appropriate ownership to files
in /dev/input. It should be perfectly safe to run the drivers as root,
however.
For realtime scheduling (the \-R option), either use set_rlimits, or set the
appropriate POSIX capabilities on the executable:
.P
/sbin/setcap cap_ipc_lock,cap_sys_nice=ep /usr/bin/lsmi-joystick
.P
The lsmi.SlackBuild script already includes RT scheduling support.
.SH OPTIONS
.TP
.B \-h, \-\-help
Show summary of options.
.TP
.B \-d, \-\-device specialfile
Event device to use (instead of event0).
.TP
.B \-R, \-\-realtime rtprio
Use realtime priority 'rtprio' (requires privs).
.TP
.B \-v, \-\-verbose
Be verbose (show note events).
.TP
.B \-c, \-\-channel n
Initial MIDI channel.
.TP
.B \-p, \-\-port client:port
Connect to ALSA Sequencer client on startup.
.TP
.B \-k, \-\-keydata file
Name file to read/write key mappings (instead of ~/.keydb).
.SH SEE ALSO
.BR lsmi-joystick (1),
.BR lsmi-monterey (1),
.BR lsmi-mouse (1).
.br
.SH AUTHOR
lsmi was written by Jonathan Moore Liles.
.PP
This manual page was written by Ariel Errera <ariel@musix.org.ar>,
for the Debian project (but may be used by others). It was then modified
by B. Watson for the SlackBuilds.org project.

View file

@ -0,0 +1,172 @@
.\" Hey, EMACS: -*- nroff -*-
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH LSMI-MONTEREY 1 "May 15, 2012"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
.\" .nh disable hyphenation
.\" .hy enable hyphenation
.\" .ad l left justify
.\" .ad b justify to both left and right margins
.\" .nf disable filling
.\" .fi enable filling
.\" .br insert line break
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
lsmi-monterey \- Linux Pseudo MIDI Input -- Monterey
.SH SYNOPSIS
.B lsmi-monterey
.RI [ options ] " files" ...
.SH DESCRIPTION
Monterey is a userspace driver for Monterey
International MK-9500 / K617W reversible keyboard.
This device consists of a 104 QWERTY AT computer keyboard on one side and a
37 key, velocity sensitive musical keyboard on the other. In addition to
flipping the unit over, one must flip a switch on the right side in order to
change the mode.
The keyboard interface is standard, except that the musical side sends
two-scancode packets for each piano key press and release ('make' codes
only). The first scancode indicates the note, the second the velocity: 7
being the lowest, 1 the highest, and 0 representing a release (or sometimes
a very very light keypress). The musical side also has buttons for keys F1
through F9, left and right arrow keys, and return--all generating 'make'
codes only with no way to register release.
This driver creates an ALSA Sequencer port and attempts to fill it with
realtime MIDI data representing input from the musical side of the keyboard,
while passing regular textual data through the uinput interface and on to
Linux console or X Window System. There is no need to load a special
application or even run X in order to generate MIDI events: simply flip the
keyboard over and go nuts. The driver doesn't interfere at all with
multiple/international layouts. You can even use it along
side another (merged input) keyboard (ie. plugged into a laptop) and the
driver should be able to sort everything out (provided that you refrain from
typing on both keyboards simultaneously).
.SH FUNCTION KEYS
There's no reliable way to distinguish the function keys on the musical
side from those on the QWERTY side in order to map them to channel,
program change and so on. One solution is to interpret any function key
(including arrows and return) pressed within two seconds of the 'quaver'
key (F9) as a MIDI event.
.TP
.B Program Change
The first four keys (I-IV) function as patch pages, each page able to
address 32 patches. To change to program number 2 (GM Bright Acoustic
Piano), first press QUAVER, then function key I, then press the second
piano key from the left (the first black key).
.TP
.B Bank Change
Keys V-VIII work similarly to program change, but alter current bank
instead. Note that you won't see any effect until you change patches as
well.
.TP
.B Channel Change and Octave Change
The arrow keys are used to change channel or octave. To lower or raise
the octave (from that of middle C) the octave, press QUAVER followed by
the appropriate arrow key. QUAVER may be ommitted between subsequent
arrow presses, if they occur within 2 seconds of each other. To change
the channel, press QUAVER followed by 'R' (return), then an arrow key.
All of these heuristics are timing critical and might fail to operate under
heavy system loads. To ensure proper performance, use a high realtime
priority, like 99 (and it wouldn't hurt to do the same for your keyboard
controller's IRQ).
.SH KNOWN ISSUES
.TP
.B Events
For some reason the kernel event layer drops KEY events, mostly when
switching between a piano key and its associated text key. I believe this
is a due to a bug in the repeat state tracking code, exposed here because
the keyboard generates only 'make' scancodes on the musical side. The
driver works around this by tracking the MSC_SCAN events instead, but it's
kind of a hack and requires massaging the events more than I'm comfortable
with (might not work with PS2->USB adaptors, etc.)
.TP
.B Repeat Rate
To prevent frustrating "stuck" repeats in X (the console doesn't appear to
suffer from this problem) the driver converts all REPEAT events it passes
to PRESSes.
.TP
.B LEDs
The LEDs don't work. This little driver is the only example of a real
uinput filter I've seen. I'm not sure the kernel developers anticipated
the problem of managing the LEDs. Ideally it would be transparent. As it
is, it would probably take a large amount of code to get the keyboard LEDs
working again--which seems silly.
.SH PREREQUISITES
2.6 series kernel with evdev and uinput modules loaded.
ALSA Sequencer drivers and library.
An MK-9500 or K617W keyboard...
.SH USAGE
Distribution specific init scripts are not included. The drivers may be
started from init, your .bashrc, by qjackctl, etc. In order to be run by a
non-root user the drivers must have access to the device files in /dev/input.
This may be accomplished by adding a group 'input', adding desired users to
this group, and configuring udev to assign the appropriate ownership to files
in /dev/input. It should be perfectly safe to run the drivers as root,
however.
For realtime scheduling (the \-R option), either use set_rlimits, or set the
appropriate POSIX capabilities on the executable:
.P
/sbin/setcap cap_ipc_lock,cap_sys_nice=ep /usr/bin/lsmi-joystick
.P
The lsmi.SlackBuild script already includes RT scheduling support.
.SH OPTIONS
.TP
.B \-h, \-\-help
Show summary of options.
.TP
.B \-d, \-\-device specialfile
Event device to use (instead of event0).
.TP
.B \-v, \-\-verbose
Be verbose (show note events).
.TP
.B \-p, \-\-port client:port
Connect to ALSA Sequencer client on startup.
.TP
.B \-R, \-\-realtime rtprio
Use realtime priority 'rtprio' (requires privs).
.TP
.B \-n, \-\-no-velocity
Ignore velocity information from keyboard.
.TP
.B \-c, \-\-channel n
Initial MIDI channel.
.TP
.B \-z, \-\-daemon
Fork and don't print anything to stdout.
.SH SEE ALSO
.BR lsmi-joystick (1),
.BR lsmi-keyhack (1),
.BR lsmi-mouse (1).
.br
.SH AUTHOR
lsmi was written by Jonathan Moore Liles.
.PP
This manual page was written by Ariel Errera <ariel@musix.org.ar>,
for the Debian project (but may be used by others). It was then modified
by B. Watson for the SlackBuilds.org project.

100
audio/lsmi/man/lsmi-mouse.1 Normal file
View file

@ -0,0 +1,100 @@
.\" Hey, EMACS: -*- nroff -*-
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH LSMI-MOUSE 1 "May 15, 2012"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
.\" .nh disable hyphenation
.\" .hy enable hyphenation
.\" .ad l left justify
.\" .ad b justify to both left and right margins
.\" .nf disable filling
.\" .fi enable filling
.\" .br insert line break
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
lsmi-mouse \- Linux Pseudo MIDI Input -- Mouse
.SH SYNOPSIS
.B lsmi-mouse
.RI [ options ] " files" ...
.SH DESCRIPTION
This driver is capable of generating a stream of MIDI controller and/or note
events from the state of mouse buttons. I have a MouseSystems serial mouse
controller board with footswitches wired to each of its three buttons. You
must have evdev and the kernel driver for your mouse type loaded (in my
case, this is sermouse). Mouse axes, wheels, or additional buttons are not
used (if you can think of something to do with them [rotary encoders for
filter and resonance?], then, by all means, let me know).
I use this device to control Freewheeling and various softsynths. Much
cheaper than a real MIDI pedalboard, of this I assure you.
.SH EXAMPLE
Use mouse device "/dev/input/event4", mapping left button
to Controller #64, middle button to Note #36, and
right button to Note #37 (all on Channel #1):
.br
.B lsmi-mouse -d /dev/input/event4 -1 c:1:64 -2 n:1:36 -3 n:1:37
.SH USAGE
Distribution specific init scripts are not included. The drivers may be
started from init, your .bashrc, by qjackctl, etc. In order to be run by a
non-root user the drivers must have access to the device files in /dev/input.
This may be accomplished by adding a group 'input', adding desired users to
this group, and configuring udev to assign the appropriate ownership to files
in /dev/input. It should be perfectly safe to run the drivers as root,
however.
For realtime scheduling (the \-R option), either use set_rlimits, or set the
appropriate POSIX capabilities on the executable:
.P
/sbin/setcap cap_ipc_lock,cap_sys_nice=ep /usr/bin/lsmi-joystick
.P
The lsmi.SlackBuild script already includes RT scheduling support.
.SH OPTIONS
.TP
.B \-h, \-\-help
Show summary of options.
.TP
.B \-d, \-\-device specialfile
Event device to use (instead of event0).
.TP
.B \-R, \-\-realtime rtprio
Use realtime priority 'rtprio' (requires privs).
.TP
.B \-v, \-\-verbose
Be verbose (show note events).
.TP
.B \-p, \-\-port client:port
Connect to ALSA Sequencer client on startup.
.TP
.B \-1, \-\-button-one 'c'|'n':n:n
Button mapping.
.TP
.B \-2, \-\-button-two 'c'|'n':n:n
Button mapping.
.TP
.B \-3, \-\-button-thrree 'c'|'n':n:n
Button mapping.
.TP
.B \-z, \-\-daemon
Fork and don't print anything to stdout.
.SH SEE ALSO
.BR lsmi-joystick (1),
.BR lsmi-keyhack (1),
.BR lsmi-monterey (1).
.br
.SH AUTHOR
lsmi was written by Jonathan Moore Liles.
.PP
This manual page was written by Ariel Errera <ariel@musix.org.ar>,
for the Debian project (but may be used by others). It was then modified
by B. Watson for the SlackBuilds.org project.

153
audio/lsmi/rtprio.diff Normal file
View file

@ -0,0 +1,153 @@
diff -Naur lsmi/lsmi-joystick.c lsmi.patched//lsmi-joystick.c
--- lsmi/lsmi-joystick.c 2012-05-14 20:08:19.000000000 -0400
+++ lsmi.patched//lsmi-joystick.c 2012-05-14 20:15:16.000000000 -0400
@@ -46,6 +46,7 @@
#include <sys/time.h>
#include <signal.h>
#include <getopt.h>
+#include <sched.h>
#include "seq.h"
#include "sig.h"
@@ -99,6 +100,7 @@
"Options:\n\n"
" -h | --help Show this message\n"
" -d | --device specialfile Event device to use (instead of js0)\n"
+ " -R | --realtime rtprio Use realtime priority 'rtprio' (requires privs)\n"
" -v | --verbose Be verbose (show note events)\n"
" -p | --port client:port Connect to ALSA Sequencer client on startup\n"
" -n | --no-hold Send controller data even when no joystick button is held\n" );
@@ -121,6 +123,7 @@
{ "verbose", no_argument, NULL, 'v' },
{ "device", required_argument, NULL, 'd' },
{ "no-hold", no_argument, NULL, 'n' },
+ { "realtime", required_argument, NULL, 'R' },
{ "daemon", no_argument, NULL, 'z' },
{ NULL, 0, NULL, 0 }
};
@@ -164,6 +167,23 @@
case 'z':
daemonize = 1;
break;
+ case 'R':
+ {
+ struct sched_param sp;
+
+ sp.sched_priority = atoi( optarg );
+
+ if ( sched_setscheduler( 0, SCHED_FIFO, &sp ) < 0 )
+ {
+ perror( "sched_setscheduler()" );
+ fprintf( stderr, "Failed to get realtime priority!\n" );
+ exit( 1 );
+ }
+
+ fprintf( stderr, "Using realtime priority %i.\n",
+ sp.sched_priority );
+ }
+ break;
}
}
diff -Naur lsmi/lsmi-keyhack.c lsmi.patched//lsmi-keyhack.c
--- lsmi/lsmi-keyhack.c 2012-05-14 20:08:19.000000000 -0400
+++ lsmi.patched//lsmi-keyhack.c 2012-05-14 20:14:07.000000000 -0400
@@ -111,6 +111,7 @@
#include <getopt.h>
#include <linux/input.h>
+#include <sched.h>
#include <stdint.h>
#include "seq.h"
@@ -261,6 +262,7 @@
" -h | --help Show this message\n"
" -d | --device specialfile Event device to use (instead of event0)\n"
" -v | --verbose Be verbose (show note events)\n"
+ " -R | --realtime rtprio Use realtime priority 'rtprio' (requires privs)\n"
" -c | --channel n Initial MIDI channel\n"
" -p | --port client:port Connect to ALSA Sequencer client on startup\n"
" -k | --keydata file Name file to read/write key mappings (instead of ~/.keydb)\n"
@@ -281,6 +283,7 @@
{ "channel", required_argument, NULL, 'c' },
{ "device", required_argument, NULL, 'd' },
{ "keydata", required_argument, NULL, 'k' },
+ { "realtime", required_argument, NULL, 'R' },
{ "verbose", no_argument, NULL, 'v' },
{ NULL, 0, NULL, 0 }
};
@@ -320,6 +323,23 @@
case 'v':
verbose = 1;
break;
+ case 'R':
+ {
+ struct sched_param sp;
+
+ sp.sched_priority = atoi( optarg );
+
+ if ( sched_setscheduler( 0, SCHED_FIFO, &sp ) < 0 )
+ {
+ perror( "sched_setscheduler()" );
+ fprintf( stderr, "Failed to get realtime priority!\n" );
+ exit( 1 );
+ }
+
+ fprintf( stderr, "Using realtime priority %i.\n",
+ sp.sched_priority );
+ }
+ break;
}
}
diff -Naur lsmi/lsmi-mouse.c lsmi.patched//lsmi-mouse.c
--- lsmi/lsmi-mouse.c 2012-05-14 20:08:19.000000000 -0400
+++ lsmi.patched//lsmi-mouse.c 2012-05-14 20:11:08.000000000 -0400
@@ -55,6 +55,7 @@
#include <sys/ioctl.h>
#include <sys/time.h>
+#include <sched.h>
#include <stdint.h>
#include <getopt.h>
@@ -144,6 +145,7 @@
" -h | --help Show this message\n"
" -d | --device specialfile Event device to use (instead of event0)\n"
" -v | --verbose Be verbose (show note events)\n"
+ " -R | --realtime rtprio Use realtime priority 'rtprio' (requires privs)\n"
" -p | --port client:port Connect to ALSA Sequencer client on startup\n"
" -1 | --button-one 'c'|'n':n:n Button mapping\n"
@@ -169,6 +171,7 @@
{ "button-one", required_argument, NULL, '1' },
{ "button-two", required_argument, NULL, '2' },
{ "button-three", required_argument, NULL, '3' },
+ { "realtime", required_argument, NULL, 'R' },
{ "daemon", no_argument, NULL, 'z' },
{ NULL, 0, NULL, 0 }
};
@@ -202,6 +205,23 @@
case '3':
parse_map( 2, optarg );
break;
+ case 'R':
+ {
+ struct sched_param sp;
+
+ sp.sched_priority = atoi( optarg );
+
+ if ( sched_setscheduler( 0, SCHED_FIFO, &sp ) < 0 )
+ {
+ perror( "sched_setscheduler()" );
+ fprintf( stderr, "Failed to get realtime priority!\n" );
+ exit( 1 );
+ }
+
+ fprintf( stderr, "Using realtime priority %i.\n",
+ sp.sched_priority );
+ }
+ break;
case 'z':
daemonize = 1;
break;

5
audio/lsmi/setcap.sh Normal file
View file

@ -0,0 +1,5 @@
if [ -x /sbin/setcap ]; then
for i in lsmi-joystick lsmi-keyhack lsmi-monterey lsmi-mouse; do
/sbin/setcap cap_ipc_lock,cap_sys_nice=ep usr/bin/$i
done
fi

19
audio/lsmi/slack-desc Normal file
View file

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.
# Line up the first '|' above the ':' following the base package name, and
# the '|' on the right side marks the last column you can put a character in.
# You must make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
lsmi: lsmi (map keyboard/mouse/joystick input to ALSA MIDI sequencer events)
lsmi:
lsmi: These simple user-space drivers support using certain homemade,
lsmi: repurposed, or commercial devices as MIDI controllers on Linux, even
lsmi: though the devices themselves are not capable of generating MIDI
lsmi: messages; this does not include things like MIDI-over-serial or PIC
lsmi: based projects, which are true MIDI devices.
lsmi:
lsmi: Reasons for using this software include: achieving MIDI entry on
lsmi: machines without MIDI ports, reusing old hardware, pure frugality,
lsmi: and fun.