From 9b5a7241e88f8147a391f1bb79ce01593a02d443 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 24 Mar 2015 16:02:48 +0100 Subject: input: remove Linux joystick support Why did this exist in the first place? Other than being completely useless, this even caused some regressions in the past. For example, there was the case of a laptop exposing its accelerometer as joystick device, which led to extremely fun things due to the default mappings of axis movement being mapped to seeking. I suppose those who really want to use their joystick to control a media player (???) can configure it as mouse device or so. --- DOCS/man/mpv.rst | 2 +- DOCS/man/options.rst | 6 -- DOCS/mplayer-changes.rst | 1 - etc/input.conf | 14 --- etc/mplayer-input.conf | 16 ---- input/input.c | 9 -- input/input.h | 1 - input/joystick.c | 216 ----------------------------------------------- input/keycodes.c | 36 -------- input/keycodes.h | 37 -------- old-configure | 3 - old-makefile | 1 - options/options.c | 1 - wscript | 5 -- wscript_build.py | 1 - 15 files changed, 1 insertion(+), 348 deletions(-) delete mode 100644 input/joystick.c diff --git a/DOCS/man/mpv.rst b/DOCS/man/mpv.rst index df25af40c7..74750673dd 100644 --- a/DOCS/man/mpv.rst +++ b/DOCS/man/mpv.rst @@ -32,7 +32,7 @@ INTERACTIVE CONTROL =================== mpv has a fully configurable, command-driven control layer which allows you -to control mpv using keyboard, mouse, joystick or remote control (there is no +to control mpv using keyboard, mouse, or remote control (there is no LIRC support - configure remotes as input devices instead). See the ``--input-`` options for ways to customize it. diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index 458ec87fca..763e0c832a 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -2358,12 +2358,6 @@ Input driver. Necessary to use the OSC, or to select the buttons in DVD menus. Support depends on the VO in use. -``--input-joystick``, ``--no-input-joystick`` - Enable/disable joystick support. Disabled by default. - -``--input-js-dev`` - Specifies the joystick device to use (default: ``/dev/input/js0``). - ``--input-media-keys=`` (OS X only) Enable/disable media keys support. Enabled by default (except for libmpv). diff --git a/DOCS/mplayer-changes.rst b/DOCS/mplayer-changes.rst index 97892a4232..bd803e41f3 100644 --- a/DOCS/mplayer-changes.rst +++ b/DOCS/mplayer-changes.rst @@ -241,7 +241,6 @@ Command Line Switches ``-noar`` ``--no-input-appleremote`` ``-noautosub`` ``--no-sub-auto`` ``-noconsolecontrols`` ``--no-input-terminal`` - ``-nojoystick`` ``--no-input-joystick`` ``-nosound`` ``--no-audio`` ``-osdlevel`` ``--osd-level`` ``-panscanrange`` ``--video-zoom``, ``--video-pan-x/y`` diff --git a/etc/input.conf b/etc/input.conf index f30eb977c5..02b396956f 100644 --- a/etc/input.conf +++ b/etc/input.conf @@ -159,20 +159,6 @@ #AR_VDOWN add volume -2 #AR_VDOWN_HOLD add chapter -1 -# Joystick section -# WARNING: joystick support has to be explicitly enabled at -# compiletime with --enable-joystick -# - -#JOY_AXIS0_PLUS seek 10 -#JOY_AXIS0_MINUS seek -10 -#JOY_AXIS1_MINUS seek 60 -#JOY_AXIS1_PLUS seek -60 -#JOY_BTN0 cycle pause -#JOY_BTN1 cycle osd -#JOY_BTN2 add volume 2 -#JOY_BTN3 add volume -2 - # For dvdnav:// and bdnav:// # navigation controls during playback diff --git a/etc/mplayer-input.conf b/etc/mplayer-input.conf index 0837039fe3..de60fdcca9 100644 --- a/etc/mplayer-input.conf +++ b/etc/mplayer-input.conf @@ -74,22 +74,6 @@ l cycle tv-channel -1 n cycle tv-norm #b tv_step_chanlist -## -## Joystick section -## WARNING: joystick support has to be explicitly enabled at -## compiletime with --enable-joystick -## - -JOY_RIGHT seek 10 -JOY_LEFT seek -10 -JOY_UP seek 60 -JOY_DOWN seek -60 -JOY_BTN0 cycle pause -JOY_BTN1 osd -JOY_BTN2 add volume 1 -JOY_BTN3 add volume -1 -#JOY_BTN4 set_menu main - ## ## Apple Remote section ## diff --git a/input/input.c b/input/input.c index b6719fc297..6bbba907d1 100644 --- a/input/input.c +++ b/input/input.c @@ -163,8 +163,6 @@ struct input_opts { // Autorepeat config (be aware of mp_input_set_repeat_info()) int ar_delay; int ar_rate; - char *js_dev; - int use_joystick; int use_alt_gr; int use_appleremote; int use_media_keys; @@ -182,11 +180,9 @@ const struct m_sub_options input_config = { OPT_INT("ar-rate", ar_rate, CONF_GLOBAL), OPT_PRINT("keylist", mp_print_key_list), OPT_PRINT("cmdlist", mp_print_cmd_list), - OPT_STRING("js-dev", js_dev, CONF_GLOBAL), OPT_FLAG("default-bindings", default_bindings, CONF_GLOBAL), OPT_FLAG("test", test, CONF_GLOBAL), OPT_INTRANGE("doubleclick-time", doubleclick_time, 0, 0, 1000), - OPT_FLAG("joystick", use_joystick, CONF_GLOBAL), OPT_FLAG("right-alt-gr", use_alt_gr, CONF_GLOBAL), OPT_INTRANGE("key-fifo-size", key_fifo_size, CONF_GLOBAL, 2, 65000), OPT_FLAG("cursor", enable_mouse_movements, CONF_GLOBAL), @@ -1244,11 +1240,6 @@ void mp_input_load(struct input_ctx *ictx) MP_VERBOSE(ictx, "Falling back on default (hardcoded) input config\n"); } -#if HAVE_JOYSTICK - if (input_conf->use_joystick) - mp_input_joystick_add(ictx, input_conf->js_dev); -#endif - if (input_conf->use_alt_gr) { ictx->using_alt_gr = true; } diff --git a/input/input.h b/input/input.h index b684903ef5..c26273088f 100644 --- a/input/input.h +++ b/input/input.h @@ -257,7 +257,6 @@ void mp_input_run_cmd(struct input_ctx *ictx, const char **cmd); void mp_input_set_repeat_info(struct input_ctx *ictx, int rate, int delay); void mp_input_pipe_add(struct input_ctx *ictx, const char *filename); -void mp_input_joystick_add(struct input_ctx *ictx, char *dev); struct mp_ipc_ctx; struct mp_client_api; diff --git a/input/joystick.c b/input/joystick.c deleted file mode 100644 index e3df106735..0000000000 --- a/input/joystick.c +++ /dev/null @@ -1,216 +0,0 @@ -/* - * This file is part of MPlayer. - * - * MPlayer is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * MPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with MPlayer; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "input.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "common/common.h" -#include "common/msg.h" -#include "keycodes.h" - -#ifndef JOY_AXIS_DELTA -#define JOY_AXIS_DELTA 500 -#endif - -#ifndef JS_DEV -#define JS_DEV "/dev/input/js0" -#endif - -#include - -struct ctx { - struct mp_log *log; - int axis[256]; - int btns; - int fd; -}; - -static int close_js(void *ctx, int fd) -{ - close(fd); - talloc_free(ctx); - return 0; -} - -static struct ctx *joystick_init(struct input_ctx *ictx, struct mp_log *log, char *dev) -{ - int fd,l=0; - int initialized = 0; - struct js_event ev; - - mp_verbose(log, "Opening joystick device %s\n",dev ? dev : JS_DEV); - - fd = open( dev ? dev : JS_DEV , O_RDONLY | O_NONBLOCK ); - if(fd < 0) { - mp_err(log, "Can't open joystick device %s: %s\n",dev ? dev : JS_DEV, - mp_strerror(errno)); - return NULL; - } - - struct ctx *ctx = talloc_ptrtype(NULL, ctx); - *ctx = (struct ctx) {.log = log}; - - while(! initialized) { - l = 0; - while((unsigned int)l < sizeof(struct js_event)) { - int r = read(fd,((char*)&ev)+l,sizeof(struct js_event)-l); - if(r < 0) { - if(errno == EINTR) - continue; - else if(errno == EAGAIN) { - initialized = 1; - break; - } - MP_ERR(ctx, "Error while reading joystick device: %s\n", - mp_strerror(errno)); - close(fd); - talloc_free(ctx); - return NULL; - } - l += r; - } - if((unsigned int)l < sizeof(struct js_event)) { - if(l > 0) - MP_WARN(ctx, "Joystick: We lose %d bytes of data\n",l); - break; - } - if(ev.type == JS_EVENT_BUTTON) - ctx->btns |= (ev.value << ev.number); - if(ev.type == JS_EVENT_AXIS) - ctx->axis[ev.number] = ev.value; - } - - ctx->fd = fd; - return ctx; -} - -static int mp_input_joystick_read(void *pctx, int fd) { - struct ctx *ctx = pctx; - struct js_event ev; - int l=0; - - while((unsigned int)l < sizeof(struct js_event)) { - int r = read(fd,((char*)&ev)+l,sizeof(struct js_event)-l); - if(r <= 0) { - if(errno == EINTR) - continue; - else if(errno == EAGAIN) - return 0; - if( r < 0) { - MP_ERR(ctx, "Error while reading joystick device: %s\n", - mp_strerror(errno)); - } else { - MP_ERR(ctx, "Error while reading joystick device: %s\n","EOF"); - } - return -1; - } - l += r; - } - - if((unsigned int)l < sizeof(struct js_event)) { - if(l > 0) - MP_WARN(ctx, "Joystick: We lose %d bytes of data\n",l); - return 0; - } - - if(ev.type & JS_EVENT_INIT) { - MP_WARN(ctx, "Joystick: warning init event, we have lost sync with driver.\n"); - ev.type &= ~JS_EVENT_INIT; - if(ev.type == JS_EVENT_BUTTON) { - int s = (ctx->btns >> ev.number) & 1; - if(s == ev.value) // State is the same : ignore - return 0; - } - if(ev.type == JS_EVENT_AXIS) { - if( ( ctx->axis[ev.number] == 1 && ev.value > JOY_AXIS_DELTA) || - (ctx->axis[ev.number] == -1 && ev.value < -JOY_AXIS_DELTA) || - (ctx->axis[ev.number] == 0 && ev.value >= -JOY_AXIS_DELTA && ev.value <= JOY_AXIS_DELTA) - ) // State is the same : ignore - return 0; - } - } - - if(ev.type & JS_EVENT_BUTTON) { - ctx->btns &= ~(1 << ev.number); - ctx->btns |= (ev.value << ev.number); - if(ev.value == 1) - return (MP_JOY_BTN0 + ev.number) | MP_KEY_STATE_DOWN; - else - return (MP_JOY_BTN0 + ev.number) | MP_KEY_STATE_UP; - } else if(ev.type & JS_EVENT_AXIS) { - if(ev.value < -JOY_AXIS_DELTA && ctx->axis[ev.number] != -1) { - ctx->axis[ev.number] = -1; - return (MP_JOY_AXIS0_MINUS+(2*ev.number)) | MP_KEY_STATE_DOWN; - } else if(ev.value > JOY_AXIS_DELTA && ctx->axis[ev.number] != 1) { - ctx->axis[ev.number] = 1; - return (MP_JOY_AXIS0_PLUS+(2*ev.number)) | MP_KEY_STATE_DOWN; - } else if(ev.value <= JOY_AXIS_DELTA && ev.value >= -JOY_AXIS_DELTA && ctx->axis[ev.number] != 0) { - int r = ctx->axis[ev.number] == 1 ? MP_JOY_AXIS0_PLUS+(2*ev.number) : MP_JOY_AXIS0_MINUS+(2*ev.number); - ctx->axis[ev.number] = 0; - return r | MP_KEY_STATE_UP; - } else - return 0; - } else { - MP_WARN(ctx, "Joystick warning unknown event type %d\n",ev.type); - return -1; - } - - return 0; -} - -static void read_joystick_thread(struct mp_input_src *src, void *param) -{ - int wakeup_fd = mp_input_src_get_wakeup_fd(src); - struct ctx *ctx = joystick_init(src->input_ctx, src->log, param); - - if (!ctx) - return; - - mp_input_src_init_done(src); - - while (1) { - struct pollfd fds[2] = { - { .fd = ctx->fd, .events = POLLIN }, - { .fd = wakeup_fd, .events = POLLIN }, - }; - poll(fds, 2, -1); - if (!(fds[0].revents & POLLIN)) - break; - int r = mp_input_joystick_read(ctx, ctx->fd); - if (r < 0) - break; - if (r > 0) - mp_input_put_key(src->input_ctx, r); - } - - close_js(ctx, ctx->fd); -} - -void mp_input_joystick_add(struct input_ctx *ictx, char *dev) -{ - mp_input_add_thread_src(ictx, (void *)dev, read_joystick_thread); -} diff --git a/input/keycodes.c b/input/keycodes.c index 012fd006ce..ce59bd7e9b 100644 --- a/input/keycodes.c +++ b/input/keycodes.c @@ -118,42 +118,6 @@ static const struct key_name key_names[] = { { MP_MOUSE_BTN17_DBL, "MOUSE_BTN17_DBL" }, { MP_MOUSE_BTN18_DBL, "MOUSE_BTN18_DBL" }, { MP_MOUSE_BTN19_DBL, "MOUSE_BTN19_DBL" }, - { MP_JOY_AXIS1_MINUS, "JOY_UP" }, - { MP_JOY_AXIS1_PLUS, "JOY_DOWN" }, - { MP_JOY_AXIS0_MINUS, "JOY_LEFT" }, - { MP_JOY_AXIS0_PLUS, "JOY_RIGHT" }, - - { MP_JOY_AXIS0_PLUS, "JOY_AXIS0_PLUS" }, - { MP_JOY_AXIS0_MINUS, "JOY_AXIS0_MINUS" }, - { MP_JOY_AXIS1_PLUS, "JOY_AXIS1_PLUS" }, - { MP_JOY_AXIS1_MINUS, "JOY_AXIS1_MINUS" }, - { MP_JOY_AXIS2_PLUS, "JOY_AXIS2_PLUS" }, - { MP_JOY_AXIS2_MINUS, "JOY_AXIS2_MINUS" }, - { MP_JOY_AXIS3_PLUS, "JOY_AXIS3_PLUS" }, - { MP_JOY_AXIS3_MINUS, "JOY_AXIS3_MINUS" }, - { MP_JOY_AXIS4_PLUS, "JOY_AXIS4_PLUS" }, - { MP_JOY_AXIS4_MINUS, "JOY_AXIS4_MINUS" }, - { MP_JOY_AXIS5_PLUS, "JOY_AXIS5_PLUS" }, - { MP_JOY_AXIS5_MINUS, "JOY_AXIS5_MINUS" }, - { MP_JOY_AXIS6_PLUS, "JOY_AXIS6_PLUS" }, - { MP_JOY_AXIS6_MINUS, "JOY_AXIS6_MINUS" }, - { MP_JOY_AXIS7_PLUS, "JOY_AXIS7_PLUS" }, - { MP_JOY_AXIS7_MINUS, "JOY_AXIS7_MINUS" }, - { MP_JOY_AXIS8_PLUS, "JOY_AXIS8_PLUS" }, - { MP_JOY_AXIS8_MINUS, "JOY_AXIS8_MINUS" }, - { MP_JOY_AXIS9_PLUS, "JOY_AXIS9_PLUS" }, - { MP_JOY_AXIS9_MINUS, "JOY_AXIS9_MINUS" }, - - { MP_JOY_BTN0, "JOY_BTN0" }, - { MP_JOY_BTN1, "JOY_BTN1" }, - { MP_JOY_BTN2, "JOY_BTN2" }, - { MP_JOY_BTN3, "JOY_BTN3" }, - { MP_JOY_BTN4, "JOY_BTN4" }, - { MP_JOY_BTN5, "JOY_BTN5" }, - { MP_JOY_BTN6, "JOY_BTN6" }, - { MP_JOY_BTN7, "JOY_BTN7" }, - { MP_JOY_BTN8, "JOY_BTN8" }, - { MP_JOY_BTN9, "JOY_BTN9" }, { MP_AR_PLAY, "AR_PLAY" }, { MP_AR_PLAY_HOLD, "AR_PLAY_HOLD" }, diff --git a/input/keycodes.h b/input/keycodes.h index 7df93af6f4..44d71b3872 100644 --- a/input/keycodes.h +++ b/input/keycodes.h @@ -97,43 +97,6 @@ #define MP_KEY_KPDEL (MP_KEY_KEYPAD+12) #define MP_KEY_KPENTER (MP_KEY_KEYPAD+13) - -// Joystick input module -#define MP_JOY_BASE (MP_KEY_BASE+0x70) -#define MP_JOY_AXIS0_PLUS (MP_JOY_BASE+0) -#define MP_JOY_AXIS0_MINUS (MP_JOY_BASE+1) -#define MP_JOY_AXIS1_PLUS (MP_JOY_BASE+2) -#define MP_JOY_AXIS1_MINUS (MP_JOY_BASE+3) -#define MP_JOY_AXIS2_PLUS (MP_JOY_BASE+4) -#define MP_JOY_AXIS2_MINUS (MP_JOY_BASE+5) -#define MP_JOY_AXIS3_PLUS (MP_JOY_BASE+6) -#define MP_JOY_AXIS3_MINUS (MP_JOY_BASE+7) -#define MP_JOY_AXIS4_PLUS (MP_JOY_BASE+8) -#define MP_JOY_AXIS4_MINUS (MP_JOY_BASE+9) -#define MP_JOY_AXIS5_PLUS (MP_JOY_BASE+10) -#define MP_JOY_AXIS5_MINUS (MP_JOY_BASE+11) -#define MP_JOY_AXIS6_PLUS (MP_JOY_BASE+12) -#define MP_JOY_AXIS6_MINUS (MP_JOY_BASE+13) -#define MP_JOY_AXIS7_PLUS (MP_JOY_BASE+14) -#define MP_JOY_AXIS7_MINUS (MP_JOY_BASE+15) -#define MP_JOY_AXIS8_PLUS (MP_JOY_BASE+16) -#define MP_JOY_AXIS8_MINUS (MP_JOY_BASE+17) -#define MP_JOY_AXIS9_PLUS (MP_JOY_BASE+18) -#define MP_JOY_AXIS9_MINUS (MP_JOY_BASE+19) - -#define MP_JOY_BTN_BASE ((MP_KEY_BASE+0x90)|MP_NO_REPEAT_KEY) -#define MP_JOY_BTN0 (MP_JOY_BTN_BASE+0) -#define MP_JOY_BTN1 (MP_JOY_BTN_BASE+1) -#define MP_JOY_BTN2 (MP_JOY_BTN_BASE+2) -#define MP_JOY_BTN3 (MP_JOY_BTN_BASE+3) -#define MP_JOY_BTN4 (MP_JOY_BTN_BASE+4) -#define MP_JOY_BTN5 (MP_JOY_BTN_BASE+5) -#define MP_JOY_BTN6 (MP_JOY_BTN_BASE+6) -#define MP_JOY_BTN7 (MP_JOY_BTN_BASE+7) -#define MP_JOY_BTN8 (MP_JOY_BTN_BASE+8) -#define MP_JOY_BTN9 (MP_JOY_BTN_BASE+9) - - // Mouse events from VOs #define MP_MOUSE_BASE ((MP_KEY_BASE+0xA0)|MP_NO_REPEAT_KEY|MP_KEY_EMIT_ON_UP) #define MP_MOUSE_BTN0 (MP_MOUSE_BASE+0) diff --git a/old-configure b/old-configure index be271aaa9c..3773cfcc05 100755 --- a/old-configure +++ b/old-configure @@ -164,7 +164,6 @@ options_state_machine() { opt_yes_no _libguess "libguess" opt_yes_no _termios "termios database for key codes" opt_yes_no _iconv "iconv for encoding conversion" - opt_yes_no _joystick "joystick support" no opt_yes_no _vm "X video mode extensions" opt_yes_no _dvb "DVB input" opt_yes_no _tv "TV interface (TV/DVB grabbers)" yes @@ -838,8 +837,6 @@ if test "$_vapoursynth" = no && test "$_vapoursynth_lazy" = no ; then fi check_trivial "VapourSynth core" $_vapoursynth_core VAPOURSYNTH_CORE -check_trivial "joystick" $_joystick JOYSTICK - check_trivial "encoding" $_encoding ENCODING # needs dlopen on unix diff --git a/old-makefile b/old-makefile index 4eda62fa54..883c2f60bd 100644 --- a/old-makefile +++ b/old-makefile @@ -73,7 +73,6 @@ SOURCES-$(GL_WAYLAND) += video/out/wayland_common.c \ video/out/gl_wayland.c SOURCES-$(JACK) += audio/out/ao_jack.c -SOURCES-$(JOYSTICK) += input/joystick.c SOURCES-$(OPENAL) += audio/out/ao_openal.c SOURCES-$(OSS_AUDIO) += audio/out/ao_oss.c SOURCES-$(PULSE) += audio/out/ao_pulse.c diff --git a/options/options.c b/options/options.c index f806643ad0..20876c0e4a 100644 --- a/options/options.c +++ b/options/options.c @@ -616,7 +616,6 @@ const m_option_t mp_opts[] = { OPT_REPLACED("noar", "no-input-appleremote"), OPT_REPLACED("noautosub", "no-sub-auto"), OPT_REPLACED("noconsolecontrols", "no-input-terminal"), - OPT_REPLACED("nojoystick", "no-input-joystick"), OPT_REPLACED("nosound", "no-audio"), OPT_REPLACED("osdlevel", "osd-level"), OPT_REMOVED("panscanrange", "use --video-zoom, --video-pan-x/y"), diff --git a/wscript b/wscript index c03c9d1cb3..df0c02a676 100644 --- a/wscript +++ b/wscript @@ -308,11 +308,6 @@ iconv support use --disable-iconv.", 'name' : '--encoding', 'desc' : 'Encoding', 'func': check_true, - }, { - 'name' : '--joystick', - 'desc' : 'joystick', - 'func': check_cc(header_name='linux/joystick.h'), - 'default': 'disable' }, { 'name': '--libbluray', 'desc': 'Bluray support', diff --git a/wscript_build.py b/wscript_build.py index 06e0048b7c..3396bd5d06 100644 --- a/wscript_build.py +++ b/wscript_build.py @@ -184,7 +184,6 @@ def build(ctx): ( "input/ipc.c", "!mingw" ), ( "input/keycodes.c" ), ( "input/pipe-win32.c", "waio" ), - ( "input/joystick.c", "joystick" ), ## Misc ( "misc/bstr.c" ), -- cgit v1.2.3