Using "LC Power LC-USB-DVBT" remote with vdr/webcamd (af9015.c
patch)
Juergen Lock
nox at jelal.kn-bremen.de
Sun Jan 23 00:29:08 UTC 2011
Hi!
Someone on irc pointed me to the "remote=" module parameter for the
dvb-usb-af9015 Linux driver so I tested it with this "LC Power
LC-USB-DVBT" tuner I got for a little more than ¤ 20 and indeed,
a value of 4 got the remote do something. [1]
I then looked at the driver and found it has a table of device eprom
checksums to assign a default remote, so I added mine: [2]
http://people.freebsd.org/~nox/dvb/webcamd/patch-af9015.c.txt
(patch also the end of this mail, it also has the pidfilter flag
I needed for my other dvb-t tuner that I talked about here:
http://lists.freebsd.org/pipermail/freebsd-multimedia/2010-December/011509.html
)
This tuner's remote attaches as an usb keyboard sendig mostly digits
and control characters, to use it with vdr on FreeBSD I did basically
the same as I did for the (bigger) usb remote that I originally
patched the vdr remote plugin for as I posted here:
http://lists.freebsd.org/pipermail/freebsd-multimedia/2010-September/011240.html
(and also noted in the remote plugin's pkg-descr in the vdr shar),
i.e. I forced it to uhid(4) by adding a quirk UQ_KBD_IGNORE via
usbconfig:
usbconfig add_dev_quirk_vplh 0x15a4 0x9016 0 0xffff UQ_KBD_IGNORE
and instead of unplugging it for a moment I then did an:
usbconfig -d 5.3 reset
(of course replace 5.3 with whatever bus/addr your tuner comes up at.)
My vdr's /usr/local/etc/vdr/remote.conf already had the config
for the other remote so with vdr stopped I backed that up,
removed the lines starting with remote-uhid0, touch(1)'ed
/usr/local/etc/vdr/channels.conf and then started vdr with
'-Premote -h /dev/uhid0'
added to its args, started vdr-sxfe and tried to configure the
remote. It's credit-card size and doesn't have up/down/left/right/menu/ok
and red/green/yellow/blue buttons so I had to use others for those
functions and I skipped a lot of less important other buttons too,
but at least it seems to work so far. (When I originally tested
the remote I sometimes had a button `stuck on repeat' until i pressed
another one but for some reason that hasn't happened anymore at
least today...)
I'll have to think more about a good mapping that makes the best
of the existing buttons and uses all the remaining ones that I
skipped, if anyone wants a remote.conf for this tuner I guess I
should do that first.
And as mentioned in the remote plugin's pkg-descr you may need to
use an xorg.conf with
Option "AutoAddDevices" "False"
in Section "ServerFlags" (and possibly explicit InputDevice sections
for keyboard and mouse) to stop xorg from grabbing /dev/uhid0 too.
(Or maybe it also won't if you make sure vdr always starts before
xorg, but I guess then you can't restart vdr or plug in the tuner
later. Or it's also possible you can set some hald(1) config to
make xorg ignore the remote...)
Enjoy, :)
Juergen
[1] webcamd doesn't handle runtime module parameters yet(?) so if
you want to do this on FreeBSD without my patch or with a different
module parameter or tuner you'll have to look up the module_param_named()
line in the driver source and set the variable named in the second
arg appropriately, i.e. in this case look for:
module_param_named(remote, dvb_usb_af9015_remote, int, 0644);
and change the line
static int dvb_usb_af9015_remote;
to
static int dvb_usb_af9015_remote = 4;
[2] I also looked if I maybe should send the eprom checksum diff
upstream to the Linux v4l-dvb folks but found they now seem to use
a different git location:
http://git.linuxtv.org/media_build.git
and the remote stuff in there has changed a bit. Maybe I should look
at this again later...
And here comes the /usr/ports/multimedia/webcamd/files/patch-af9015.c :
--- v4l-dvb/linux/drivers/media/dvb/dvb-usb/af9015.c.orig
+++ v4l-dvb/linux/drivers/media/dvb/dvb-usb/af9015.c
@@ -832,6 +836,9 @@ static const struct af9015_setup af9015_
{ 0x9b7dc64e,
ir_codes_af9015_table_mygictv, ARRAY_SIZE(ir_codes_af9015_table_mygictv),
af9015_ir_table_mygictv, ARRAY_SIZE(af9015_ir_table_mygictv) },
+ { 0x5d49e3db,
+ ir_codes_af9015_table_digittrade, ARRAY_SIZE(ir_codes_af9015_table_digittrade),
+ af9015_ir_table_digittrade, ARRAY_SIZE(af9015_ir_table_digittrade) },
{ }
};
@@ -1465,6 +1472,9 @@ static struct dvb_usb_device_properties
.adapter = {
{
.caps = DVB_USB_ADAP_HAS_PID_FILTER |
+#if 1
+ DVB_USB_ADAP_NEED_PID_FILTERING |
+#endif
DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
.pid_filter_count = 32,
More information about the freebsd-multimedia
mailing list