summaryrefslogtreecommitdiffstats
path: root/core/input/appleir.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-11-05 17:02:04 +0100
committerwm4 <wm4@nowhere>2012-11-12 20:06:14 +0100
commitd4bdd0473d6f43132257c9fb3848d829755167a3 (patch)
tree8021c2f7da1841393c8c832105e20cd527826d6c /core/input/appleir.c
parentbd48deba77bd5582c5829d6fe73a7d2571088aba (diff)
downloadmpv-d4bdd0473d6f43132257c9fb3848d829755167a3.tar.bz2
mpv-d4bdd0473d6f43132257c9fb3848d829755167a3.tar.xz
Rename directories, move files (step 1 of 2) (does not compile)
Tis drops the silly lib prefixes, and attempts to organize the tree in a more logical way. Make the top-level directory less cluttered as well. Renames the following directories: libaf -> audio/filter libao2 -> audio/out libvo -> video/out libmpdemux -> demux Split libmpcodecs: vf* -> video/filter vd*, dec_video.* -> video/decode mp_image*, img_format*, ... -> video/ ad*, dec_audio.* -> audio/decode libaf/format.* is moved to audio/ - this is similar to how mp_image.* is located in video/. Move most top-level .c/.h files to core. (talloc.c/.h is left on top- level, because it's external.) Park some of the more annoying files in compat/. Some of these are relicts from the time mplayer used ffmpeg internals. sub/ is not split, because it's too much of a mess (subtitle code is mixed with OSD display and rendering). Maybe the organization of core is not ideal: it mixes playback core (like mplayer.c) and utility helpers (like bstr.c/h). Should the need arise, the playback core will be moved somewhere else, while core contains all helper and common code.
Diffstat (limited to 'core/input/appleir.c')
-rw-r--r--core/input/appleir.c155
1 files changed, 155 insertions, 0 deletions
diff --git a/core/input/appleir.c b/core/input/appleir.c
new file mode 100644
index 0000000000..c64bc9648d
--- /dev/null
+++ b/core/input/appleir.c
@@ -0,0 +1,155 @@
+/*
+ * Linux Apple IR Remote input interface
+ *
+ * Copyright (C) 2008 Benjamin Zores <ben at geexbox dot org>
+ *
+ * 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 "config.h"
+
+#include "ar.h"
+#include "input.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include <linux/types.h>
+#include <linux/input.h>
+
+#include "mp_msg.h"
+
+// keycodes.h defines would conflict with linux/input.h ones
+#define AR_DEFINES_ONLY
+#include "keycodes.h"
+
+#define EVDEV_MAX_EVENTS 32
+
+/* ripped from AppleIR driver */
+#define USB_VENDOR_APPLE 0x05ac
+#define USB_DEV_APPLE_IR 0x8240
+#define USB_DEV_APPLE_IR_2 0x8242
+
+/* Apple IR Remote evdev mapping */
+#define APPLE_IR_MINUS KEY_VOLUMEDOWN
+#define APPLE_IR_PLUS KEY_VOLUMEUP
+#define APPLE_IR_MENU KEY_MENU
+#define APPLE_IR_FORWARD KEY_NEXTSONG
+#define APPLE_IR_PLAY KEY_PLAYPAUSE
+#define APPLE_IR_BACKWARD KEY_PREVIOUSSONG
+
+static const struct {
+ int linux_keycode;
+ int value;
+ int mp_keycode;
+} apple_ir_mapping[] = {
+ { APPLE_IR_PLAY, 1, AR_PLAY },
+ { APPLE_IR_PLAY, 2, AR_PLAY_HOLD },
+ { APPLE_IR_FORWARD, 1, AR_NEXT },
+ { APPLE_IR_FORWARD, 2, AR_NEXT_HOLD },
+ { APPLE_IR_BACKWARD, 1, AR_PREV },
+ { APPLE_IR_BACKWARD, 2, AR_PREV_HOLD },
+ { APPLE_IR_MENU, 1, AR_MENU },
+ { APPLE_IR_MENU, 2, AR_MENU_HOLD },
+ { APPLE_IR_PLUS, 1, AR_VUP },
+ { APPLE_IR_MINUS, 1, AR_VDOWN },
+ { -1, -1, -1 }
+};
+
+int mp_input_appleir_init (char *dev)
+{
+ int i, fd;
+
+ if (dev)
+ {
+ mp_tmsg (MSGT_INPUT, MSGL_V, "Initializing Apple IR on %s\n", dev);
+ fd = open (dev, O_RDONLY | O_NONBLOCK);
+ if (fd < 0)
+ {
+ mp_tmsg (MSGT_INPUT, MSGL_ERR,
+ "Can't open Apple IR device: %s\n", strerror (errno));
+ return -1;
+ }
+
+ return fd;
+ }
+ else
+ {
+ /* look for a valid AppleIR device on system */
+ for (i = 0; i < EVDEV_MAX_EVENTS; i++)
+ {
+ struct input_id id;
+ char file[64];
+
+ sprintf (file, "/dev/input/event%d", i);
+ fd = open (file, O_RDONLY | O_NONBLOCK);
+ if (fd < 0)
+ continue;
+
+ ioctl (fd, EVIOCGID, &id);
+ if (id.bustype == BUS_USB &&
+ id.vendor == USB_VENDOR_APPLE &&
+ (id.product == USB_DEV_APPLE_IR ||id.product == USB_DEV_APPLE_IR_2))
+ {
+ mp_tmsg (MSGT_INPUT, MSGL_V, "Detected Apple IR on %s\n", file);
+ return fd;
+ }
+ close (fd);
+ }
+
+ mp_tmsg (MSGT_INPUT, MSGL_ERR,
+ "Can't open Apple IR device: %s\n", strerror (errno));
+ }
+
+ return -1;
+}
+
+int mp_input_appleir_read(void *ctx, int fd)
+{
+ struct input_event ev;
+ int i, r;
+
+ r = read (fd, &ev, sizeof (struct input_event));
+ if (r <= 0 || r < sizeof (struct input_event))
+ return MP_INPUT_NOTHING;
+
+ /* check for key press only */
+ if (ev.type != EV_KEY)
+ return MP_INPUT_NOTHING;
+
+ /* EvDev Key values:
+ * 0: key release
+ * 1: key press
+ * 2: key auto-repeat
+ */
+ if (ev.value == 0)
+ return MP_INPUT_NOTHING;
+
+ /* find Linux evdev -> MPlayer keycode mapping */
+ for (i = 0; apple_ir_mapping[i].linux_keycode != -1; i++)
+ if (apple_ir_mapping[i].linux_keycode == ev.code &&
+ apple_ir_mapping[i].value == ev.value)
+ return apple_ir_mapping[i].mp_keycode;
+
+ return MP_INPUT_NOTHING;
+}