aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornox <nox@FreeBSD.org>2011-03-27 03:19:38 +0800
committernox <nox@FreeBSD.org>2011-03-27 03:19:38 +0800
commit5f0f2df63d4c7d509fcc6ff31a618be3b8d618a5 (patch)
tree1f4bb3c60470af29daef2459c05ac98e40175d26
parent0de9ee4af2a7f4498e75519d5bbab1a94ac3f7d4 (diff)
downloadfreebsd-ports-gnome-5f0f2df63d4c7d509fcc6ff31a618be3b8d618a5.tar.gz
freebsd-ports-gnome-5f0f2df63d4c7d509fcc6ff31a618be3b8d618a5.tar.zst
freebsd-ports-gnome-5f0f2df63d4c7d509fcc6ff31a618be3b8d618a5.zip
http://www.linuxtv.org/vdrwiki/index.php/Remote-plugin
This plugin extends the remote control capabilities of vdr. The following remote control devices are supported: (a) linux input device driver ('/dev/input/eventX', X=0,1,2,...) (currently not supported on FreeBSD) (b) keyboard (tty driver): /dev/console, /dev/ttyX (c) TCP connection (telnet) (d) LIRC (e) some(?) FreeBSD uhid(4) devices (experimental support added by this port) To use, add something like this to vdr_flags: '-Premote -h /dev/uhid0', (re)start vdr, then the osd should ask you to configure the remote by pressing the buttons you want to assign. Note: If your remote is detected as a keyboard you'll have to tell ukbd(4) to ignore it first by doing (as root) something like: usbconfig add_dev_quirk_vplh 0x1241 0xe000 0 0xffff UQ_KBD_IGNORE (and possibly unplug it for a moment or reset it via usbconfig, 0x1241 there is the vendor id, 0xe000 the product id of the device, you can get yours by doing usbconfig -d 1.2 dump_device_desc and looking for idVendor and idProduct, -d 1.2 there corresponds to ugen1.2 listed by usbconfig w/o args.) You can check with: usbconfig show_ifdrv if the device is then listed as ugen...: uhid... you're good to go. 2nd note: If vdr cannot open your uhid device check it is not claimed by xorg: fstat |grep uhid If it is you may need an xorg.conf(5) with manually defined InputDevice sections for mouse and keyboard and Option "AutoAddDevices" "False" in the ServerFlags section. And if for some reason you want to reassign the buttons on the remote you can stop vdr and do: touch /usr/local/etc/vdr/channels.conf and/or remove uhid entries from /usr/local/etc/vdr/remote.conf . When you then start vdr again it should ask to configure the remote again. WWW: http://escape-edv.de/endriss/vdr
-rw-r--r--multimedia/Makefile1
-rw-r--r--multimedia/vdr-plugin-remote/Makefile35
-rw-r--r--multimedia/vdr-plugin-remote/distinfo2
-rw-r--r--multimedia/vdr-plugin-remote/files/patch-Makefile22
-rw-r--r--multimedia/vdr-plugin-remote/files/patch-uhid1255
-rw-r--r--multimedia/vdr-plugin-remote/pkg-descr64
-rw-r--r--multimedia/vdr-plugin-remote/pkg-plist1
7 files changed, 380 insertions, 0 deletions
diff --git a/multimedia/Makefile b/multimedia/Makefile
index 663264d2ab0f..2288eaf8682f 100644
--- a/multimedia/Makefile
+++ b/multimedia/Makefile
@@ -342,6 +342,7 @@
SUBDIR += vdr-plugin-iptv
SUBDIR += vdr-plugin-osdpip
SUBDIR += vdr-plugin-osdteletext
+ SUBDIR += vdr-plugin-remote
SUBDIR += vic
SUBDIR += vlc
SUBDIR += vodcatcher
diff --git a/multimedia/vdr-plugin-remote/Makefile b/multimedia/vdr-plugin-remote/Makefile
new file mode 100644
index 000000000000..ba6d23978e25
--- /dev/null
+++ b/multimedia/vdr-plugin-remote/Makefile
@@ -0,0 +1,35 @@
+# New ports collection makefile for: vdr-plugin-remote
+# Date created: Sun Aug 29 18:11:42 CEST 2010
+# Whom: Juergen Lock <nox@freebsd.org>
+#
+# $FreeBSD$
+#
+
+PORTNAME= vdr-plugin-remote
+PORTVERSION= 0.4.0
+PORTREVISION= 6
+CATEGORIES= multimedia
+MASTER_SITES= http://www.escape-edv.de/endriss/vdr/
+DISTNAME= ${PORTNAME:S/-plugin-/-/}-${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}
+EXTRACT_SUFX= .tgz
+
+MAINTAINER= nox@FreeBSD.org
+COMMENT= Video Disk Recorder - remote control plugin
+
+PATCH_STRIP= -p1
+HAVE_CONFIGURE= yes
+PORTDOCS= COPYING README
+MAKE_JOBS_SAFE= yes
+WRKSRC= ${WRKDIR}/${PLUGIN}-${DISTVERSION}
+
+.include "${.CURDIR}/../vdr/Makefile.plugins"
+
+post-patch: post-patch-plugin
+
+post-install:
+.if !defined(NOPORTDOCS)
+ ${MKDIR} ${DOCSDIR}
+ (cd ${WRKSRC} && ${INSTALL_DATA} ${PORTDOCS} ${DOCSDIR})
+.endif
+
+.include <bsd.port.mk>
diff --git a/multimedia/vdr-plugin-remote/distinfo b/multimedia/vdr-plugin-remote/distinfo
new file mode 100644
index 000000000000..ade02509b0c9
--- /dev/null
+++ b/multimedia/vdr-plugin-remote/distinfo
@@ -0,0 +1,2 @@
+SHA256 (vdr/vdr-remote-0.4.0.tgz) = 402178a5ca34796621ec248fbc459c41d86e7ce7f226080b507aad3e054512bf
+SIZE (vdr/vdr-remote-0.4.0.tgz) = 28397
diff --git a/multimedia/vdr-plugin-remote/files/patch-Makefile b/multimedia/vdr-plugin-remote/files/patch-Makefile
new file mode 100644
index 000000000000..40b6fef3d4de
--- /dev/null
+++ b/multimedia/vdr-plugin-remote/files/patch-Makefile
@@ -0,0 +1,22 @@
+--- a/Makefile
++++ b/Makefile
+@@ -54,6 +54,12 @@ DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I
+ DEFINES += -DREMOTE_FEATURE_LIRC
+ DEFINES += -DREMOTE_FEATURE_TCPIP
+
++ifeq ($(OSTYPE),FreeBSD)
++DEFINES += -DREMOTE_FEATURE_UHID
++else
++DEFINES += -DREMOTE_FEATURE_DEVINPUT
++endif
++
+ ### The object files (add further files here):
+
+ OBJS = $(PLUGIN).o ttystatus.o
+@@ -126,3 +132,6 @@ dist: clean
+ clean:
+ @-rm -f $(PODIR)/*.mo $(PODIR)/*.pot
+ @-rm -f *.o $(DEPFILE) *.so *.tgz core* *~
++
++install:
++ ${INSTALL_PROGRAM} $(LIBDIR)/libvdr-$(PLUGIN).so.$(APIVERSION) $(PREFIX)/lib/vdr/libvdr-$(PLUGIN).so.$(APIVERSION)
diff --git a/multimedia/vdr-plugin-remote/files/patch-uhid1 b/multimedia/vdr-plugin-remote/files/patch-uhid1
new file mode 100644
index 000000000000..b14f4fb36fbd
--- /dev/null
+++ b/multimedia/vdr-plugin-remote/files/patch-uhid1
@@ -0,0 +1,255 @@
+--- a/remote.c
++++ a/remote.c
+@@ -15,7 +15,9 @@
+ #include <sys/fcntl.h>
+ #include <getopt.h>
+ #include <termios.h>
++#ifdef REMOTE_FEATURE_DEVINPUT
+ #include <linux/input.h>
++#endif
+ #include "i18n.h"
+ #include "remote.h"
+ #ifdef REMOTE_FEATURE_TCPIP
+@@ -25,6 +27,9 @@
+
+
+ #define NUMREMOTES 10 // maximum number of remote control devices
++#ifdef REMOTE_FEATURE_UHID
++#define UHID_DEFAULT_READSIZE 8 // default size of uhid reads
++#endif
+
+ #define AV7110_KEYMAP_DEVICE "/proc/av7110_ir"
+ #if 0
+@@ -183,6 +188,7 @@ void cRemoteGeneric::Action(void)
+ int identifyInputDevice(const int fh, char *name)
+ // ---------------------------------------------------------------------------
+ {
++#ifdef REMOTE_FEATURE_DEVINPUT
+ char description[256];
+
+ // check name of input device
+@@ -196,11 +202,13 @@ int identifyInputDevice(const int fh, ch
+
+ if (strstr(description, "DVB") || strstr(description, "dvb"))
+ return 2;
++#endif
+
+ return 0;
+ }
+
+
++#ifdef REMOTE_FEATURE_DEVINPUT
+ // ---------------------------------------------------------------------------
+ bool cRemoteDevInput::loadKeymap(const char *devname, uint32_t options)
+ // ---------------------------------------------------------------------------
+@@ -454,6 +462,68 @@ bool cRemoteDevInput::keyPressed(uint64_
+ {
+ return (code & 0xFFFF00000000ULL);
+ }
++#endif // REMOTE_FEATURE_DEVINPUT
++
++
++/*****************************************************************************/
++
++
++#ifdef REMOTE_FEATURE_UHID
++// ---------------------------------------------------------------------------
++cRemoteUhid::cRemoteUhid(const char *name, int f, char *d, int size)
++ :cRemoteGeneric(name, f, d)
++// ---------------------------------------------------------------------------
++{
++ Start();
++
++ readsize = size;
++ repeatcode = 0;
++ fcntl(f, F_SETFL, O_NONBLOCK);
++}
++
++
++// ---------------------------------------------------------------------------
++bool cRemoteUhid::Initialize()
++// ---------------------------------------------------------------------------
++{
++ return true;
++}
++
++
++// ---------------------------------------------------------------------------
++uint64_t cRemoteUhid::getKey(void)
++// ---------------------------------------------------------------------------
++{
++ int n;
++ uint64_t code = 0;
++
++ // XXX handle short reads properly on big-endian
++ n = read(fh, &code, readsize);
++ if (n <= 0) {
++ if (n < 0 && (errno == EAGAIN || errno == EINTR))
++ code = repeatcode;
++ else {
++ code = INVALID_KEY;
++ repeatcode = 0;
++ }
++ } else {
++ repeatcode = code;
++#if 1 //def PRINTFDEBUGGING
++ printf("code %jx\n", code);
++#endif
++ }
++
++ return code;
++}
++
++
++// ---------------------------------------------------------------------------
++bool cRemoteUhid::keyPressed(uint64_t code)
++// ---------------------------------------------------------------------------
++{
++ return ((code & ~0xffULL) != 0LL);
++}
++#endif // REMOTE_FEATURE_UHID
+
+
+ /*****************************************************************************/
+@@ -557,6 +627,9 @@ private:
+ int devcnt;
+ char devtyp[NUMREMOTES];
+ char *devnam[NUMREMOTES];
++#ifdef REMOTE_FEATURE_UHID
++ int devsize[NUMREMOTES];
++#endif
+ int fh[NUMREMOTES];
+ public:
+ cPluginRemote(void);
+@@ -604,6 +677,10 @@ const char *cPluginRemote::CommandLineHe
+ // ---------------------------------------------------------------------------
+ {
+ return " -i dev, --input=dev input device (/dev/input/... | autodetect)\n"
++#ifdef REMOTE_FEATURE_UHID
++ " -h dev, --uhid=dev uhid(4) device (/dev/uhidX)\n"
++ " -s size, --uhidsize=size uhid device read size\n"
++#endif
+ #ifdef REMOTE_FEATURE_LIRC
+ " -l dev, --lirc=dev lirc device (/dev/lircd)\n"
+ #endif
+@@ -624,6 +701,10 @@ bool cPluginRemote::ProcessArgs(int argc
+ {
+ static struct option long_options[] =
+ { { "input", required_argument, NULL, 'i' },
++#ifdef REMOTE_FEATURE_UHID
++ { "uhid", required_argument, NULL, 'h' },
++ { "uhidsize", required_argument, NULL, 's' },
++#endif
+ { "lirc", required_argument, NULL, 'l' },
+ { "port", required_argument, NULL, 'p' },
+ { "tty", required_argument, NULL, 't' },
+@@ -631,11 +712,20 @@ bool cPluginRemote::ProcessArgs(int argc
+ { NULL } };
+ int c;
+
++#ifndef REMOTE_FEATURE_UHID
+ while ((c = getopt_long(argc, argv, "i:l:p:t:T:", long_options, NULL)) != -1)
++#else
++ while ((c = getopt_long(argc, argv, "i:h:s:l:p:t:T:", long_options, NULL)) != -1)
++#endif
+ {
++#ifdef REMOTE_FEATURE_UHID
++ int size;
++#endif
++
+ switch (c)
+ {
+ case 'i':
++ case 'h':
+ case 'l':
+ case 'p':
+ case 't':
+@@ -647,8 +737,27 @@ bool cPluginRemote::ProcessArgs(int argc
+ }
+ devtyp[devcnt] = c;
+ devnam[devcnt] = optarg;
++#ifdef REMOTE_FEATURE_UHID
++ devsize[devcnt] = UHID_DEFAULT_READSIZE;
++#endif
+ devcnt++;
+ break;
++#ifdef REMOTE_FEATURE_UHID
++ case 's':
++ if (!devcnt || devcnt > NUMREMOTES)
++ {
++ esyslog("%s: uhidsize must come after uhid device", Name());
++ return false;
++ }
++ size = atoi(optarg);
++ if (size <= 0 || size_t(size) > sizeof (int64_t))
++ {
++ esyslog("%s: bad uhidsize %s", Name(), optarg);
++ return false;
++ }
++ devsize[devcnt] = size;
++ break;
++#endif
+
+ default:
+ esyslog("%s: invalid argument", Name());
+@@ -671,6 +780,7 @@ bool cPluginRemote::Start(void)
+ RegisterI18n(remotePhrases);
+ #endif
+
++#ifdef REMOTE_FEATURE_DEVINPUT
+ // no device specified by the user, set default
+ if (devcnt == 0)
+ {
+@@ -719,6 +829,7 @@ bool cPluginRemote::Start(void)
+ if (devtyp[i] == 'i' && strcmp(devnam[i], "autodetect") == 0)
+ devnam[i] = "/dev/input/ir";
+ } // for i
++#endif
+
+ for (int i = 0; i < devcnt; i++)
+ {
+@@ -769,9 +880,17 @@ bool cPluginRemote::Start(void)
+
+ switch (devtyp[i])
+ {
++#ifdef REMOTE_FEATURE_DEVINPUT
+ case 'i':
+ new cRemoteDevInput(nam,fh[i],devnam[i]);
+ break;
++#endif
++
++#ifdef REMOTE_FEATURE_UHID
++ case 'h':
++ new cRemoteUhid(nam,fh[i],devnam[i],devsize[i]);
++ break;
++#endif
+
+ #ifdef REMOTE_FEATURE_LIRC
+ case 'l':
+--- a/remote.h
++++ a/remote.h
+@@ -82,6 +82,24 @@ public:
+
+
+
++#ifdef REMOTE_FEATURE_UHID
++/*****************************************************************************/
++class cRemoteUhid : protected cRemoteGeneric
++/*****************************************************************************/
++{
++private:
++ uint64_t repeatcode;
++ int readsize;
++protected:
++ virtual uint64_t getKey(void);
++ virtual bool keyPressed(uint64_t code);
++public:
++ cRemoteUhid(const char *name, int f, char *d, int size);
++ virtual bool Initialize(void);
++};
++#endif
++
++
+ #ifdef REMOTE_FEATURE_LIRCOLD
+ /*****************************************************************************/
+ class cRemoteDevLirc : protected cRemoteGeneric
diff --git a/multimedia/vdr-plugin-remote/pkg-descr b/multimedia/vdr-plugin-remote/pkg-descr
new file mode 100644
index 000000000000..ffa594ea486e
--- /dev/null
+++ b/multimedia/vdr-plugin-remote/pkg-descr
@@ -0,0 +1,64 @@
+http://www.linuxtv.org/vdrwiki/index.php/Remote-plugin
+
+This plugin extends the remote control capabilities of vdr.
+The following remote control devices are supported:
+
+(a) linux input device driver ('/dev/input/eventX', X=0,1,2,...)
+ (currently not supported on FreeBSD)
+
+(b) keyboard (tty driver): /dev/console, /dev/ttyX
+
+(c) TCP connection (telnet)
+
+(d) LIRC
+
+(e) some(?) FreeBSD uhid(4) devices (experimental support added by this port)
+ To use, add something like this to vdr_flags: '-Premote -h /dev/uhid0',
+ (re)start vdr, then the osd should ask you to configure the
+ remote by pressing the buttons you want to assign.
+
+ Note: If your remote is detected as a keyboard you'll have to
+ tell ukbd(4) to ignore it first by doing (as root) something like:
+
+ usbconfig add_dev_quirk_vplh 0x1241 0xe000 0 0xffff UQ_KBD_IGNORE
+
+ (and possibly unplug it for a moment or reset it via usbconfig,
+ 0x1241 there is the vendor id, 0xe000 the product id of the
+ device, you can get yours by doing
+
+ usbconfig -d 1.2 dump_device_desc
+
+ and looking for idVendor and idProduct, -d 1.2 there corresponds
+ to ugen1.2 listed by usbconfig w/o args.)
+
+ You can check with:
+
+ usbconfig show_ifdrv
+
+ if the device is then listed as ugen...: uhid... you're good to go.
+
+ 2nd note: If vdr cannot open your uhid device check it is not claimed
+ by xorg:
+
+ fstat |grep uhid
+
+ If it is you may need an xorg.conf(5) with manually defined
+ InputDevice sections for mouse and keyboard and
+
+ Option "AutoAddDevices" "False"
+
+ in the ServerFlags section.
+
+ And if for some reason you want to reassign the buttons on the
+ remote you can stop vdr and do:
+
+ touch /usr/local/etc/vdr/channels.conf
+
+ and/or remove uhid entries from
+
+ /usr/local/etc/vdr/remote.conf .
+
+ When you then start vdr again it should ask to configure the
+ remote again.
+
+WWW: http://escape-edv.de/endriss/vdr
diff --git a/multimedia/vdr-plugin-remote/pkg-plist b/multimedia/vdr-plugin-remote/pkg-plist
new file mode 100644
index 000000000000..288c94e46137
--- /dev/null
+++ b/multimedia/vdr-plugin-remote/pkg-plist
@@ -0,0 +1 @@
+lib/vdr/libvdr-remote.so.1.7.17