Support turbo2.
[vuplus_dvbapp] / lib / python / Tools / KeyBindings.py
1
2 keyBindings = { }
3
4 from keyids import KEYIDS
5 from Components.config import config
6
7 deviceName = None
8
9 keyDescriptions = [{
10                 KEYIDS["BTN_0"]: ("UP", "fp"),
11                 KEYIDS["BTN_1"]: ("DOWN", "fp"),
12                 KEYIDS["KEY_OK"]: ("OK", ""),
13                 KEYIDS["KEY_UP"]: ("UP",),
14                 KEYIDS["KEY_DOWN"]: ("DOWN",),
15                 KEYIDS["KEY_POWER"]: ("POWER",),
16                 KEYIDS["KEY_RED"]: ("RED",),
17                 KEYIDS["KEY_BLUE"]: ("BLUE",),
18                 KEYIDS["KEY_GREEN"]: ("GREEN",),
19                 KEYIDS["KEY_YELLOW"]: ("YELLOW",),
20                 KEYIDS["KEY_MENU"]: ("MENU",),
21                 KEYIDS["KEY_LEFT"]: ("LEFT",),
22                 KEYIDS["KEY_RIGHT"]: ("RIGHT",),
23                 KEYIDS["KEY_VIDEO"]: ("PVR",),
24                 KEYIDS["KEY_INFO"]: ("INFO",),
25                 KEYIDS["KEY_AUDIO"]: ("YELLOW",),
26                 KEYIDS["KEY_TV"]: ("TV",),
27                 KEYIDS["KEY_RADIO"]: ("RADIO",),
28                 KEYIDS["KEY_TEXT"]: ("TEXT",),
29                 KEYIDS["KEY_NEXT"]: ("ARROWRIGHT",),
30                 KEYIDS["KEY_PREVIOUS"]: ("ARROWLEFT",),
31                 KEYIDS["KEY_PREVIOUSSONG"]: ("REWIND",),
32                 KEYIDS["KEY_PLAYPAUSE"]: ("PLAYPAUSE",),
33                 KEYIDS["KEY_PLAY"]: ("PLAY",),
34                 KEYIDS["KEY_NEXTSONG"]: ("FORWARD",),
35                 KEYIDS["KEY_CHANNELUP"]: ("BOUQUET+",),
36                 KEYIDS["KEY_CHANNELDOWN"]: ("BOUQUET-",),
37                 KEYIDS["KEY_0"]: ("0",),
38                 KEYIDS["KEY_1"]: ("1",),
39                 KEYIDS["KEY_2"]: ("2",),
40                 KEYIDS["KEY_3"]: ("3",),
41                 KEYIDS["KEY_4"]: ("4",),
42                 KEYIDS["KEY_5"]: ("5",),
43                 KEYIDS["KEY_6"]: ("6",),
44                 KEYIDS["KEY_7"]: ("7",),
45                 KEYIDS["KEY_8"]: ("8",),
46                 KEYIDS["KEY_9"]: ("9",),
47                 KEYIDS["KEY_EXIT"]: ("EXIT",),
48                 KEYIDS["KEY_STOP"]: ("STOP",),
49                 KEYIDS["KEY_RECORD"]: ("RECORD",),
50                 KEYIDS["KEY_SUBTITLE"]: ("SUBTITLE",),
51                 KEYIDS["KEY_EDIT"]: ("KEY_EDIT",)
52         },
53         {
54                 KEYIDS["BTN_0"]: ("UP", "fp"),
55                 KEYIDS["BTN_1"]: ("DOWN", "fp"),
56                 KEYIDS["KEY_OK"]: ("OK", ""),
57                 KEYIDS["KEY_UP"]: ("UP",),
58                 KEYIDS["KEY_DOWN"]: ("DOWN",),
59                 KEYIDS["KEY_POWER"]: ("POWER",),
60                 KEYIDS["KEY_RED"]: ("RED",),
61                 KEYIDS["KEY_BLUE"]: ("BLUE",),
62                 KEYIDS["KEY_GREEN"]: ("GREEN",),
63                 KEYIDS["KEY_YELLOW"]: ("YELLOW",),
64                 KEYIDS["KEY_MENU"]: ("MENU",),
65                 KEYIDS["KEY_LEFT"]: ("LEFT",),
66                 KEYIDS["KEY_RIGHT"]: ("RIGHT",),
67                 KEYIDS["KEY_VIDEO"]: ("VIDEO",),
68                 KEYIDS["KEY_INFO"]: ("INFO",),
69                 KEYIDS["KEY_AUDIO"]: ("AUDIO",),
70                 KEYIDS["KEY_TV"]: ("TV",),
71                 KEYIDS["KEY_RADIO"]: ("RADIO",),
72                 KEYIDS["KEY_TEXT"]: ("TEXT",),
73                 KEYIDS["KEY_NEXT"]: ("ARROWRIGHT",),
74                 KEYIDS["KEY_PREVIOUS"]: ("ARROWLEFT",),
75                 KEYIDS["KEY_PREVIOUSSONG"]: ("BLUE", "SHIFT"),
76                 KEYIDS["KEY_PLAYPAUSE"]: ("YELLOW", "SHIFT"),
77                 KEYIDS["KEY_PLAY"]: ("PLAY",),
78                 KEYIDS["KEY_NEXTSONG"]: ("RED", "SHIFT"),
79                 KEYIDS["KEY_CHANNELUP"]: ("BOUQUET+",),
80                 KEYIDS["KEY_CHANNELDOWN"]: ("BOUQUET-",),
81                 KEYIDS["KEY_0"]: ("0",),
82                 KEYIDS["KEY_1"]: ("1",),
83                 KEYIDS["KEY_2"]: ("2",),
84                 KEYIDS["KEY_3"]: ("3",),
85                 KEYIDS["KEY_4"]: ("4",),
86                 KEYIDS["KEY_5"]: ("5",),
87                 KEYIDS["KEY_6"]: ("6",),
88                 KEYIDS["KEY_7"]: ("7",),
89                 KEYIDS["KEY_8"]: ("8",),
90                 KEYIDS["KEY_9"]: ("9",),
91                 KEYIDS["KEY_EXIT"]: ("EXIT",),
92                 KEYIDS["KEY_STOP"]: ("TV", "SHIFT"),
93                 KEYIDS["KEY_RECORD"]: ("RECORD",),
94                 KEYIDS["KEY_SUBTITLE"]: ("SUBTITLE",),
95                 KEYIDS["KEY_EDIT"]: ("EDIT",)
96         },
97         {
98                 KEYIDS["KEY_POWER"]: ("POWER",),
99                 KEYIDS["KEY_TEXT"]: ("TEXT",),
100                 KEYIDS["KEY_SUBTITLE"]: ("SUBTITLE",),
101                 KEYIDS["KEY_HELP"]: ("HELP",),
102                 KEYIDS["KEY_0"]: ("0",),
103                 KEYIDS["KEY_1"]: ("1",),
104                 KEYIDS["KEY_2"]: ("2",),
105                 KEYIDS["KEY_3"]: ("3",),
106                 KEYIDS["KEY_4"]: ("4",),
107                 KEYIDS["KEY_5"]: ("5",),
108                 KEYIDS["KEY_6"]: ("6",),
109                 KEYIDS["KEY_7"]: ("7",),
110                 KEYIDS["KEY_8"]: ("8",),
111                 KEYIDS["KEY_9"]: ("9",),
112                 KEYIDS["KEY_PREVIOUS"]: ("ARROWLEFT",),
113                 KEYIDS["KEY_NEXT"]: ("ARROWRIGHT",),
114                 KEYIDS["KEY_RED"]: ("RED",),
115                 KEYIDS["KEY_GREEN"]: ("GREEN",),
116                 KEYIDS["KEY_YELLOW"]: ("YELLOW",),
117                 KEYIDS["KEY_BLUE"]: ("BLUE",),
118                 KEYIDS["KEY_VIDEO"]: ("VIDEO",),
119                 KEYIDS["KEY_MENU"]: ("MENU",),
120                 KEYIDS["KEY_OK"]: ("OK", ""),
121                 KEYIDS["KEY_UP"]: ("UP",),
122                 KEYIDS["KEY_DOWN"]: ("DOWN",),
123                 KEYIDS["KEY_LEFT"]: ("LEFT",),
124                 KEYIDS["KEY_RIGHT"]: ("RIGHT",),
125                 KEYIDS["KEY_INFO"]: ("INFO",),
126                 KEYIDS["KEY_EXIT"]: ("EXIT",),
127                 KEYIDS["KEY_VOLUMEUP"]: ("VOL+",),
128                 KEYIDS["KEY_VOLUMEDOWN"]: ("VOL-",),
129                 KEYIDS["KEY_AUDIO"]: ("AUDIO",),
130                 KEYIDS["KEY_MUTE"]: ("MUTE",),
131                 KEYIDS["KEY_EDIT"]: ("TIMER",),
132                 KEYIDS["KEY_TV"]: ("TV",),
133                 KEYIDS["KEY_RADIO"]: ("RADIO",),
134                 KEYIDS["KEY_CHANNELUP"]: ("CH+",),
135                 KEYIDS["KEY_CHANNELDOWN"]: ("CH-",),
136                 KEYIDS["KEY_PREVIOUSSONG"]: ("REWIND",),
137                 KEYIDS["KEY_PLAY"]: ("PLAY",),
138                 KEYIDS["KEY_PLAYPAUSE"]: ("PAUSE",),
139                 KEYIDS["KEY_NEXTSONG"]: ("FASTFORWARD",),
140                 KEYIDS["KEY_TV"]: ("TV",),
141                 KEYIDS["KEY_RECORD"]: ("RECORD",),
142                 KEYIDS["KEY_STOP"]: ("STOP",),
143                 KEYIDS["KEY_RADIO"]: ("RADIO",),
144         }
145 ]
146 def getRCUName():
147         rcu_name = None
148         f = open("/proc/bus/input/devices")
149         for line in f:
150                 if line.startswith("N: Name="):
151                         try:
152                                 line = line.strip()
153                                 name = line.split("=")[1][1:-1]
154                                 if name.find("remote control (native)"):
155                                         rcu_name = name
156                         except:
157                                 rcu_name = None
158         return rcu_name
159
160 def addKeyBinding(domain, key, context, action, flags, device):
161         keyBindings.setdefault((context, action), []).append((key, domain, flags, device))
162
163 # returns a list of (key, flags) for a specified action
164 def queryKeyBinding(context, action):
165         global deviceName
166
167         if deviceName == None:
168                 deviceName = getRCUName()
169
170         buttons = []
171         if (context, action) in keyBindings:
172                 for x in keyBindings[(context, action)]:
173                         if x[3] == deviceName or x[3] == "generic":
174                                 buttons.append((x[0],x[2]))
175                 return buttons
176         else:
177                 return [ ]
178
179 def getKeyDescription(key):
180         if key in keyDescriptions[config.misc.rcused.value]:
181                 return keyDescriptions[config.misc.rcused.value].get(key, [ ])
182
183 def removeKeyBindings(domain):
184         # remove all entries of domain 'domain'
185         for x in keyBindings:
186                 keyBindings[x] = filter(lambda e: e[1] != domain, keyBindings[x])