[megoldva] Lirc - Hauppauge WinTV-HVR1110 DVB-T/Hybrid

Fórumok

Adott a címben említett tv tuner. 2.6.38-gentoo-r6 és korábbi kernelekkel tökéletesen működik a távírányítója is, 3.0.6, valamint későbbi kernelekkel már nem. Az irrecord alkalmazással lehet rögzíteni az IR kódokat, viszont a lircd démon nem működik. Az eszközt figyelve (cat /dev/input/eventX) látható, hogy maga az eszköz működőképes.

Mikor régebben irrecord-oztam az eszközt, ilyen kódokat generált:

power 0x0400040000003D 0x01007400000001
go 0x0400040000003B 0x01016100000001
tv 0x0400040000001C 0x01017900000001
videos 0x04000400000018 0x01018900000001
music 0x04000400000019 0x01018800000001
pictures 0x0400040000001A 0x01016F00000001
guide 0x0400040000001B 0x01016D00000001
radio 0x0400040000000C 0x01018100000001
vol+ 0x04000400000010 0x01007300000001
vol- 0x04000400000011 0x01007200000001
rewind 0x04000400000032 0x0100A800000001
play 0x04000400000035 0x0100CF00000001
forward 0x04000400000034 0x0100D000000001
pause 0x04000400000030 0x01007700000001
1 0x04000400000001 0x01000200000001
2 0x04000400000002 0x01000300000001
3 0x04000400000003 0x01000400000001
4 0x04000400000004 0x01000500000001
5 0x04000400000005 0x01000600000001
6 0x04000400000006 0x01000700000001
7 0x04000400000007 0x01000800000001
8 0x04000400000008 0x01000900000001
9 0x04000400000009 0x01000A00000001
...

3.0.6-os kernel alatt irrecord-ozva a második oszlop számsora végig nulla, használhatatlan a távirányító.

Az egyetlen használható dolog amit találtam:
http://www.mail-archive.com/linux-media@vger.kernel.org/msg40575.html

Viszont ez sem jelent teljes megoldást, eleve a patch-elni sem tudtam (rejected), így kénytelen voltam én gányolni a forrásban. Az eredmény így egy félmegoldás lett, néhány gomb már működik, néhány nem, "patch" után újra irrecordozva (pár gombnál már stimmel a második számsor is, azok a gombok működnek lircd démonnal is):


power 0x0400040000003D 0x00000000000000
go 0x0400040000003B 0x00000000000000
tv 0x0400040000001C 0x00000000000000
video 0x04000400000018 0x00000000000000
music 0x04000400000019 0x00000000000000
pictures 0x0400040000001A 0x00000000000000
guide 0x0400040000001B 0x00000000000000
radio 0x0400040000000C 0x01018100000001
vol+ 0x04000400000010 0x01007300000001
vol- 0x04000400000011 0x01007200000001
rewind 0x04000400000032 0x00000000000000
play 0x04000400000035 0x00000000000000
forward 0x04000400000034 0x00000000000000
pause 0x04000400000030 0x00000000000000
1 0x04000400000001 0x01000200000001
2 0x04000400000002 0x01000300000001
3 0x04000400000003 0x01000400000001
4 0x04000400000004 0x01000500000001
5 0x04000400000005 0x01000600000001
6 0x04000400000006 0x01000700000001
7 0x04000400000007 0x01000800000001
8 0x04000400000008 0x01000900000001
9 0x04000400000009 0x01000A00000001

Ha valaki tudna a probléma megoldásában segíteni, esetleg bugreport ügyben irányítani/segíteni (az angolom elég passzív, ráadásul konyhaangol) azt megköszönném. Ha kell végigzongorázom, hogy melyik kernelben jött olyan változás ahol bukik az egész, viszont szeretnék megoldást találni a problémára.

Hozzászólások

Uhh, erre ráment egy délelőttöm mire kiderítettem. Az a probléma, hogy a devinput driver átkerült a kernelbe a lircből, rendes billentyűzetként működik a távirányító, ha lekapcsolod a lircet, akkor a hangerőnek meg a számgomboknak kapásból működnie kell. Lirccel annyi beconfigolni, hogy a /usr/share/lirc/remotes/devinput/lircd.conf-ot kell a lircd-be másolni, viszont a gombok nagyrészét máshogy nevezik.
A hardveres beállítások nálam így néznek ki:
LIRC_DEVICE="/dev/input/dvb_remote"
LIRC_DRIVER="devinput"
ahol a /dev/input/dvb_remote egy symlink a megfelelő devinputra, amit az udev daemon csinál (nálam néha megvariálódnak az input számok).

Volt még egy bug régebben a default configban, mostanra már orvosolták (arch-on), de itt van a bugreportom, ha nálad még a régi van. A mostani config fájlra már ez nem érvényes, a problémás sor most így néz ki nálam:
* rc-hauppauge hauppauge

Mondjuk nálam most 3.1.5 kernel van, de valamikor 2.6.38 környékén variálták így meg, napi rendszerességgel használom, szóval szerintem a 3.0.6-tal is mennie kellene.

Ja még annyi, hogy 1100-as kártyából kétféle van, az enyém a teljes magasságú (nem háromszög, nem félmagas), de szerintem minden 2.5-ös jack-es 45 gombos távos kártyával mennie kell.

Remélem mindent leírtam.

A te kártyád akkor gondolom az MCE, az enyém 1100-as dobozban szállított, 1110-es háromszög alakú (retail) kártya.

http://www.hauppauge.com/site/press/press_pictures_hvr_europe.html#pres…
http://linuxtv.org/wiki/index.php/Hauppauge_WinTV-HVR-1110

Holnam mindenképp megnézek pár dolgot az alapján amit írtál, ma már nem állok neki. Viszont ahogy észrevettem, eddig is működött lirc/lircd mellett is sima billentyűzetként az eszköz (valamint irrecord -n kapcsolója pont arra szolgálna, hogy úgy nevezze/használja az ember a gombokat ahogy jól esik):

cat /var/log/Xorg.0.log|grep -i hvr\ 1110
[ 50.975] (II) config/udev: Adding input device i2c IR (HVR 1110) (/dev/input/event6)
[ 50.975] (**) i2c IR (HVR 1110): Applying InputClass "evdev keyboard catchall"
[ 50.975] (**) i2c IR (HVR 1110): Applying InputClass "keyboard-all"
[ 50.975] (II) Using input driver 'evdev' for 'i2c IR (HVR 1110)'
[ 50.975] (**) i2c IR (HVR 1110): always reports core events
[ 50.975] (**) i2c IR (HVR 1110): Device: "/dev/input/event6"
[ 50.975] (--) i2c IR (HVR 1110): Found keys
[ 50.975] (II) i2c IR (HVR 1110): Configuring as keyboard
[ 50.975] (II) XINPUT: Adding extended input device "i2c IR (HVR 1110)" (type: KEYBOARD, id 11)

Nem MCE, az enyém ilyen:
http://linuxtv.org/wiki/index.php/Hauppauge_WinTV-HVR-1100
Bocs, félreolvastam, látom neked 1110, de szerintem ez a rész ugyanaz.
A Xorg.log nekem is nagyon hasonló, ez bíztató, valószínűleg csak a lircd.conf-ot kell majd lecserélned, meg a megváltozott gomboknak megfelelően módosítani a configokat.
Amúgy egy ideig azt hiszem nekem is úgy ment, hogy alapból billentyűzet volt, viszont ha valami lirc-en keresztül használta, akkor azok a funkciók éltek. Most valamiért nem megy, lehet, hogy azért, mert tvtime-ot irexeccel vezérlem, és néha benn ragad a process.
Holnap, ha nem boldogulsz, dobj nyugodtan egy emailt, mert valószínűleg egész nap gépközelben leszek, de nem közvetlen előtte, ugyanis épp költözködéshez pakolok.

Csak nem bírtam aludni, dolgoztam a problémán. Ar rc_maps.cfg -s probléma elméletileg nem feltétlenül probléma, mivel nálam a v4l-utils csomag nem is volt telepítve, eddig is ment nélküle tökéletesen a távirányító. A távírányítónak is létezik többféle változata, még a szürke, 45 gombos kiszerelésen belül is.

Mindenesetre sikerült megoldanom a problémát, az rc-hauppauge driver átírásával (a keycode-okat a régebbi config segítségével totóztam ki, jelenleg tökéletesen működik 3.1.5-gentoo alatt):

--- drivers/media/rc/keymaps/rc-hauppauge.c.old 2011-10-24 09:10:05.000000000 +0200
+++ drivers/media/rc/keymaps/rc-hauppauge.c 2011-12-29 04:26:14.000000000 +0100
@@ -186,17 +186,45 @@ static struct rc_map_table rc5_hauppauge
* This one also uses RC-5 protocol
* Keycodes start with address = 0x00
*/
- { 0x001f, KEY_TV },
- { 0x0020, KEY_CHANNELUP },
+ { 0x003b, KEY_SELECT }, /* GO / house symbol */
+ { 0x003d, KEY_POWER2 }, /* system power (green button) */
+
+ { 0x001c, KEY_TV },
+ { 0x0018, KEY_VIDEO }, /* Videos*/
+ { 0x0019, KEY_AUDIO }, /* Music */
+ { 0x001a, KEY_CAMERA }, /* Pictures */
+
+ { 0x001b, KEY_EPG }, /* Guide */
{ 0x000c, KEY_RADIO },

- { 0x0011, KEY_VOLUMEDOWN },
- { 0x002e, KEY_ZOOM }, /* full screen */
+ { 0x0014, KEY_UP },
+ { 0x0015, KEY_DOWN },
+ { 0x0016, KEY_LEFT },
+ { 0x0017, KEY_RIGHT },
+ { 0x0025, KEY_OK }, /* OK */
+
+ { 0x001f, KEY_EXIT }, /* back/exit */
+ { 0x000d, KEY_MENU },
+
{ 0x0010, KEY_VOLUMEUP },
+ { 0x0011, KEY_VOLUMEDOWN },
+
+ { 0x0012, KEY_PREVIOUS }, /* previous channel */
+ { 0x000F, KEY_MUTE },
+
+ { 0x0020, KEY_CHANNELUP }, /* channel / program + */
+ { 0x0021, KEY_CHANNELDOWN }, /* channel / program - */

- { 0x000d, KEY_MUTE },
- { 0x0021, KEY_CHANNELDOWN },
- { 0x0022, KEY_VIDEO }, /* source */
+ { 0x0037, KEY_RECORD }, /* recording */
+ { 0x0036, KEY_STOP },
+
+ { 0x0032, KEY_REWIND }, /* backward << */
+ { 0x0035, KEY_PLAY },
+ { 0x0034, KEY_FASTFORWARD }, /* forward >> */
+
+ { 0x0024, KEY_PREVIOUSSONG }, /* replay |< */
+ { 0x0030, KEY_PAUSE }, /* pause */
+ { 0x001e, KEY_NEXTSONG }, /* skip >| */

{ 0x0001, KEY_1 },
{ 0x0002, KEY_2 },
@@ -210,9 +238,14 @@ static struct rc_map_table rc5_hauppauge
{ 0x0008, KEY_8 },
{ 0x0009, KEY_9 },

- { 0x001e, KEY_RED }, /* Reserved */
+ { 0x000a, KEY_TEXT }, /* keypad asterisk as well */
{ 0x0000, KEY_0 },
- { 0x0026, KEY_SLEEP }, /* Minimize */
+ { 0x000e, KEY_SUBTITLE }, /* also the Pound key (#) */
+
+ { 0x000b, KEY_RED }, /* red button */
+ { 0x002e, KEY_GREEN }, /* green button */
+ { 0x0038, KEY_YELLOW } /* yellow button */,
+ { 0x0029, KEY_BLUE }, /* blue button */
};

static struct rc_map_list rc5_hauppauge_new_map = {

A kérdés az, hogy érdemes lenne e megnézni, hogy git linux/kernel -nél mi a helyzet, esetleg a modul szerzőjének elküldeni a diff-et?

/* rc-hauppauge.c - Keytable for Hauppauge Remote Controllers
*
* keymap imported from ir-keymaps.c
*
* This map currently contains the code for four different RCs:
* - New Hauppauge Gray;
* - Old Hauppauge Gray (with a golden screen for media keys);
* - Hauppauge Black;
* - DSR-0112 remote bundled with Haupauge MiniStick.

Elméletileg 4 klülönböző hauppauge távirányító támogattot. A te távirányítód, vagy az első, vagy a második lehet a felsorolás szerint, vagyis a keycode-jaid 0x1e, vagy 0x1f címen/címmel kezdődnek. Az én távirányítóm keycode-jai viszont 0x00-on. Ezt elméletileg a régi, 21 gombos fekete távirányító használja (http://images10.newegg.com/productimage/15-116-602-03.JPG).
Viszont nekem szürke, 45 gombos távirányítóm van és csak azok a gombok működnek rajta, aminek a keycode-jai megegyeznek a régi fekete távirányítóéval (21 gomb).
A már közzétett diffem annyit tesz, hogy kipótolja/lecseréli a 0x00 címmel induló kódokat, így megy nálam is mind a 45 gomb.
Ha valaki otthon van kernel buherálás terén, javítson ki, ha hülyeséget irogatok ide.

Igen, látom, értem is. Csak annyit mondok, hogy szerintem van olyan módja a drivernek, hogy a scan kód->billentyű fordításhoz szükséges adatokat egy /etc-ben lévő config fájl tartalmazza. Ugyanúgy ott vannak benne azok a 0x00 kódok, amik a te diffedben jórészt - sorok.

Az /etc/rc_keymaps/haupp fileban a 0x1e keycode-ok vannak, az /etc/rc_keymaps/hauppauge -ben pedig 0x1e 0x1f 0x1d, valamint a 0x00 -ból az a 21, ami működik. Véleményem szerint ez akkor sem számít, mivel a távirányítónak akkor is működnie kell, ha a v4l-utils csomag nincs telepítve. Ahol linux < 3.0.x ott tökéletesen működik is a távirányítóm v4l-utils csomag nélkül, ahol linux >= 3.0.x ott csak a már említett 21 gomb.

Nem tudom, a te rendszereden mennyire függ bármely más csomag a v4l-utils-tól, de érdemes lenne megpróbálnod, hogy eltávolítod a csomagot (/etc-ben lévő config file-okkal együtt), majd megnézed hogy úgy mennyire működik a távirányító. Ha fut a lircd daemon, akkor irw -vel is lehet tesztelni.