Activy Fernbedienungen

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(XMZgcyyKLpAG)
Zeile 1: Zeile 1:
==Einleitung==
+
YMMD with that awnesr! TX
Die Fernbedienung der [[Activy]] folgt einem anderen Prinzip als es die sonst gebräuchlichen Lösungen verfolgen.
+
Hierbei werden die von der Fernbedienung ausgesandten Infrarotsignale direkt von der Hardware des Rechners in Scancodes umgewandelt und an den Tastaturport geleitet.
+
Es liegen also für eine gedrückte Taste direkt Scancodes vor, die unter Linux auswertbar sind.
+
{| border=0 cellpadding=2 cellspacing=0
+
|[[Bild:Activy300_GrosseFB.jpg|thumb|none|Die große Fernbedienung der 300]]
+
|[[Bild:Activy300_KleineFB.jpg|thumb|none|90px|Die kleine Fernbedienung der 300]]
+
|[[Bild:Small_remote_activy_300.JPG|thumb|none|160px|Nochmal die kleine Fernbedienung der 300]]
+
|[[Bild:Activy_3x0_FB.jpg|thumb|none|60px|Die Fernbedienung der 3x0]]
+
|}
+
Die Scancodes der einzelnen Fernbedienungs-Modelle sind leider unterschiedlich.
+
So sendet die "kleine" Fernbedienung Scancodes herkömmlicher Tasten, sie kann also sofort angelernt werden.
+
Die Tasten der "großen" Fernbedienung erzeugen Scancodes von Sondertasten (0xe0 Prefix), für die erst die korrespondieren Keycodes definiert werden müssen.
+
 
+
Daraus resultiert leider auch, dass ein Mischbetrieb aus großer und kleiner Ausführung nur sehr eingeschränkt möglich ist, denn die Tasten der großen müssen auf den gleichen Keycode gelegt werden, wie die der kleinen, was zum Teil auch Buchstabentasten der normalen Keyboards sind. Diese Tasten sind dann nicht mehr sinnvoll zur Eingabe, zum Beispiel in Titeln und Namen, nutzbar.
+
 
+
Die silberne Fernbedienung der 3x0 Modelle verhält sich genauso wie die die "kleine" , bietet allerdings ein paar zusätzliche Tasten,
+
darunter auch ein paar Anlernbare.
+
 
+
==Verwendete Scancodes==
+
Die Fernbedienung erzeugt laut "<code>showkey -s</code>" folgende Scancodes für die Tasten der "Oberseite" der aufklappbaren Version:
+
{| border=1 cellpadding=2 cellspacing=0 valign="top"
+
|- bgcolor=#efefef valign="top"
+
|Scancode||Taste auf der Fernbedienung
+
|-
+
|0xe0 0x21 0xe0 0xa1|| Up
+
|-
+
|0xe0 0x14 0xe0 0x94||Down
+
|-
+
|0xe0 0x13 0xe0 0x93||Left
+
|-
+
|0xe0 0x06 0xe0 0x86||Right
+
|-
+
|0xe0 0x69 0xe0 0xe9||OK
+
|-
+
|0xe0 0x1f 0xe0 0x9f||Channel +
+
|-
+
|0xe0 0x1e 0xe0 0x9e||Channel -
+
|-
+
|0xe0 0x02 0xe0 0x82||Volume +
+
|-
+
|0xe0 0x5a 0xe0 0xda||Volume -
+
|-
+
|0xe0 0x59 0xe0 0xd9||Stop
+
|-
+
|0xe0 0x0f 0xe0 0x8f||Play/Pause
+
|-
+
|0xe0 0x30 0xe0 0xb0||Mute
+
|-
+
|0xe0 0x05 0xe0 0x85||Back
+
|-
+
|0xe0 0x31 0xe0 0xb1||?
+
|-
+
|0xe0 0x16 0xe0 0x96||Scroll Up
+
|-
+
|0xe0 0x2c 0xe0 0xac||Scroll Down
+
|-
+
|0xe0 0x10 0xe0 0x90||On/Off
+
|-
+
|0xe0 0x07 0xe0 0x87||Eject
+
|-
+
|0xe0 0x23 0xe0 0xa3||Record
+
|-
+
|0xe0 0x04 0xe0 0x84||"Figur"
+
|-
+
|0xe0 0x68 0xe0 0xe8||"Keyboard"
+
|-
+
|0xe0 0x2f 0xe0 0xaf||"Home"
+
|-
+
|0xe0 0x2e 0xe0 0xae||"Buch"
+
|-
+
|0xe0 0x67 0xe0 0xe7||bgcolor=#ff0000|Rot
+
|-
+
|0xe0 0x03 0xe0 0x83||bgcolor=#00ff00|Gelb
+
|-
+
|0xe0 0x39 0xe0 0xb9||bgcolor=#ffff00|Grün
+
|-
+
|0xe0 0x11 0xe0 0x91||bgcolor=#0000ff|Blau
+
|-
+
|0xe0 0x42 0xe0 0xc2||0
+
|-
+
|0xe0 0x43 0xe0 0xc3||1
+
|-
+
|0xe0 0x41 0xe0 0xc1||2
+
|-
+
|0xe0 0x3f 0xe0 0xbf||3
+
|-
+
|0xe0 0x3d 0xe0 0xbd||4
+
|-
+
|0xe0 0x3b 0xe0 0xbb||5
+
|-
+
|0xe0 0x3c 0xe0 0xbc||6
+
|-
+
|0xe0 0x58 0xe0 0xd8||7
+
|-
+
|0xe0 0x64 0xe0 0xe4||8
+
|-
+
|0xe0 0x44 0xe0 0xc4||9
+
|}
+
 
+
Die Bedeutung dieser Zahlengruppen wird an einem Beispiel für die Taste "Up" deutlich:
+
 
+
{| border=1 cellpadding=2 cellspacing=0 valign="top"
+
|- bgcolor=#efefef valign="top"
+
|Scancode||Erklärung
+
|-
+
|0xe0||Escape Scancode für erweiterten Bereich
+
|-
+
|0x21||der eigentliche Scancode, Bit 7 nicht gesetzt für "Taste gedrückt"
+
|-
+
|0xe0||Escape Scancode für erweiterten Bereich
+
|-
+
|0xa1||der Scancode von vorher nochmal, nur mit gesetztem 7. Bit für "Taste losgelassen"
+
|}
+
 
+
Es wird deutlich, dass die regulären Tasten der Fernbedienung nicht als "gedrückt gehalten" erkannt werden können, da sofort ein Scancode für "losgelassen" erzeugt wird.
+
Bei längerem Halten tritt eine Wiederholung der Taste ein.
+
 
+
{| border=0 cellpadding=2 cellspacing=0
+
|[[Bild:Activy300_Fernbedienung_gross_aussen.png|thumb|none|Die Scancodes der Oberseite in einer grafischen Übersicht]]
+
|[[Bild:Fernbedienung_gross_innen.png|thumb|none|Die Scancodes der Innenseite in einer grafischen Übersicht]]
+
|}
+
 
+
==Keycodes==
+
Die erzeugten Scancodes müssen nun in Keycodes umgewandelt werden. Diese Keycodes repräsentieren bekannte Tasten. Auf diese Weise erreicht man eine Verknüpfung der realen Taste der Tastatur mit der Tastenfunktion des Betriebssystems.
+
 
+
Für eine Verarbeitung könnte Beispielsweise folgende Zuordnung dienen. Es werden dabei nur die Scancodes für die gedrückte Taste berücksichtigt und diese gleich im Format des setkey Befehls notiert:
+
 
+
{| border=1 cellpadding=2 cellspacing=0 valign="top"
+
|- bgcolor=#efefef valign="top"
+
|Key auf der Fernbedienung||Scancode||Keycode||Tastenfunktion
+
|-
+
|Up||e021||72||KEYPAD_8
+
|-
+
|Down||e014||80||KEYPAD_2
+
|-
+
|Left||e013||75||KEYPAD_4
+
|-
+
|Right||e006||77||KEYPAD_6
+
|-
+
|OK||e069||28||ENTER
+
|-
+
|Channel +||e01f||52||.
+
|-
+
|Channel -||e01e||51||,
+
|-
+
|Volume +||e002||78||KEYPAD_ADD
+
|-
+
|Volume -||e05a||74||KEYPAD_SUBSTRACT
+
|-
+
|Stop||e059||67||F9
+
|-
+
|Play/Pause||e00f||57||SPACE
+
|-
+
|Mute||e030||50||m
+
|-
+
|Back||e005||79||KEYPAD_1
+
|-
+
|?||e031||35||h
+
|-
+
|Scroll Up||e016||27||PLUS
+
|-
+
|Scroll Down||e02c||26||AT
+
|-
+
|On/Off||e010|| 68 || F10
+
|-
+
|Eject||e007||119||PAUSE
+
|-
+
|Record||e023||65||F7
+
|-
+
|"Figur"||e004||19||r
+
|-
+
|"Keyboard"||e068||12||BACKSLASH
+
|-
+
|"Home"||e02f||41||ASCIICIRCUM
+
|-
+
|"Buch"||e02e||71||KEYPAD_7
+
|-
+
|bgcolor=#ff0000|Rot||e067||59||F1
+
|-
+
|bgcolor=#ffff00|Gelb||e003||60||F2
+
|-
+
|bgcolor=#00ff00|Grün||e039||61||F3
+
|-
+
|bgcolor=#0000ff|Blau||e011||62||F4
+
|-
+
|0||e042||11||0
+
|-
+
|1||e043||2||1
+
|-
+
|2||e041||3||2
+
|-
+
|3||e03f||4||3
+
|-
+
|4||e03d||5||4
+
|-
+
|5||e03b||6||5
+
|-
+
|6||e03c||7||6
+
|-
+
|7||e058||8||7
+
|-
+
|8||e064||9||8
+
|-
+
|9||e044||10||9
+
|}
+
 
+
==Tasten festlegen==
+
Die Belegung der einzelnen Tasten könnte wie in diesem Beispielskript erfolgen.
+
 
+
<pre>
+
#!/bin/bash
+
 
+
setkeycodes e010 16;# Power
+
setkeycodes e024 16;# Power FP
+
setkeycodes e021 72;# Up
+
setkeycodes e024 72;# Up Frontpanel
+
setkeycodes e014 80;# Down
+
setkeycodes e032 80;# Down Frontpanel
+
setkeycodes e02e 71;# Menu
+
setkeycodes e069 28;# Ok
+
setkeycodes e028 28;# Ok Frontpanel
+
setkeycodes e005 79;# Back
+
setkeycodes e013 75;# Left
+
setkeycodes e00c 75;# Left Frontpanel
+
setkeycodes e006 77;# Right
+
setkeycodes e019 77;# Right Frontpanel
+
setkeycodes e067 59;# Red
+
setkeycodes e003 60;# Green
+
setkeycodes e039 61;# Yellow
+
setkeycodes e011 62;# Blue
+
setkeycodes e042 11;# 0
+
setkeycodes e043 2;# 1
+
setkeycodes e041 3;# 2
+
setkeycodes e03f 4;# 3
+
setkeycodes e03d 5;# 4
+
setkeycodes e03b 6;# 5
+
setkeycodes e03c 7;# 6
+
setkeycodes e058 8;# 7
+
setkeycodes e064 9;# 8
+
setkeycodes e044 10;# 9
+
setkeycodes e002 78;# Vol+
+
setkeycodes e05a 74;# Vol-
+
setkeycodes e030 50;# Mute
+
setkeycodes e01f 52;# Ch+
+
setkeycodes e01e 51;# Ch-
+
setkeycodes e016 27 ;#Scroll UP (PageUp)
+
setkeycodes e02c 26 ;#Scroll Down (PageDown)
+
setkeycodes e068 12 ;#Keyboard
+
setkeycodes e02f 41 ;#Home
+
setkeycodes e004 19 ;#Run ???
+
setkeycodes e031 35 ;#?
+
setkeycodes e06a 63 ;#<<
+
setkeycodes e00f 57 ;#Play/Pause
+
setkeycodes e008 64 ;#>>
+
setkeycodes e023 65 ;#Record
+
setkeycodes e022 66 ;#|<
+
setkeycodes e059 67 ;#Stop
+
setkeycodes e015 68 ;#>|
+
setkeycodes e007 119 ;#Eject
+
</pre>
+
 
+
==Hinweise==
+
===Ein/Austaste===
+
Man beachte, dass der Power-Knopf auf der Fernbedienung nicht als normale Taste gehandhabt wird, sondern ein ACPI-Event erzeugt, dh wird auf der Fernbedienung der Power-Button gedrückt, fährt der Rechner herunter, ohne VDR die Möglichkeit zu lassen, eventuell anstehende Aufnahmen als Wakeup-Events zu speichern. <code>acpid</code> lauscht an <code>/proc/acpi/event</code> und führt ein Skript aus, sobald eine Veränderung an <code>/proc/acpi/event</code> festgestellt wurde. Defaultmäßig liegt das Skript unter <code>/etc/acpi</code>. Eine Möglichkeit, die Activy dennoch aufwachen zu lassen, ist, den nächsten Timerevent per [[SVDRP]] in diesem Skript abzufragen und einzutragen. Dazu dient [[SVDRP|svdrpsend.pl]] (je nach Distribution wohl schon im Pfad vorhanden. Wenn VDR von Hand kompiliert wurde, findet sich [[SVDRP|svdrpsend.pl]] im <code>$VDR</code>-Verzeichnis). Folgendes funktioniert bei mir auf einer Slackware 10.1-Installation mit 2.4.29-Kernel:
+
 
+
<pre>
+
#!/bin/sh
+
# Default acpi script that takes an entry for all actions
+
 
+
IFS=${IFS}/
+
set $@
+
 
+
case "$1" in
+
  button)
+
    case "$2" in
+
      power)
+
NEXTWAKEUP=`/pfad/zu/svdrpsend.pl NEXT abs | grep 250 | sed -e 's/250 \([[:digit:]]\) //g' -e 's/\r//g'`
+
ABSTIME=$(($NEXTWAKEUP-120)) # zwei minuten frueher aufwachen
+
WAKEUP=`date -d "1970-01-01 UTC $ABSTIME seconds" +"%Y-%m-%d %R:%S"`
+
echo $WAKEUP > /proc/acpi/alarm
+
echo $WAKEUP > /proc/acpi/alarm
+
logger "Next wakeup: $WAKEUP"
+
/sbin/init 0
+
        ;;
+
      *) logger "ACPI action $2 is not defined"
+
        ;;
+
    esac
+
    ;;
+
  *)
+
    logger "ACPI group $1 / action $2 is not defined"
+
    ;;
+
esac
+
</pre>
+
Vorsicht, whitespaces sind nicht immer egal und es gibt auch einen Unterschied zwischen ' und ` ... Außerdem nicht vergessen, <code>localhost</code> per [[SVDRP]] auf VDR zugreifen zu lassen. Dies ist in [[svdrphosts.conf]] konfigurierbar.
+
<pre>
+
127.0.0.1      # localhost
+
192.168.0.0/24 # lokales netz
+
</pre>
+
Eventuell kann es Probleme geben, wenn andere Addons zum Einsatz kommen, die ebenfalls [[SVDRP|svdrpsend.pl]] verwenden, da VDR maximal eine Verbindung pro Host erlaubt (glaube ich zumindest gehört zu haben).
+
 
+
===keyboard proxy===
+
Zur Zeit befindet sich noch ein Zusatzprogramm zur Interpretation von Tastendrücken unabhängig vom VDR in der Erprobung: http://www.vdr-portal.de/board/thread.php?threadid=41834&sid=
+
 
+
===Nutzung der Fernbedienungen mit Lirc===
+
Die Fernbedienungen nutzen das RCMM-Protokoll, ein Anlernen mit normalem Lirc Emfänger wird deshalb nicht gelingen.
+
Mit dieser [http://lirc.sourceforge.net/remotes/fujitsu_siemens/KWR3020 lircd.conf] sollte sie aber problemlos arbeiten.
+
 
+
Sicher lässt sich die Reichweite verbessern wenn man einen an RCMM angepassten Empfängerbaustein benutzt:
+
[http://audio.neora.ru/docs/IR.pdf IR-Datenblatt von Vishay]
+
 
+
==Links==
+
# [http://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html#ss1.1 Keyboard Scancodes]
+
# [http://www.tldp.org/HOWTO/Keyboard-and-Console-HOWTO.html The Linux keyboard and console HOWTO]
+
# [http://www.vdr-portal.de/board/thread.php?threadid=2478 Infos und Skript zum Teil aus diesem Thread entnommen]
+
 
+
[[Kategorie:Fernbedienungen]]
+
[[Kategorie:Activy]]
+

Version vom 17. April 2011, 17:20 Uhr

YMMD with that awnesr! TX