HDMICEC : add new plugin
[vuplus_dvbapp] / lib / python / Plugins / SystemPlugins / HDMICEC / plugin.py
1 # -*- coding: utf-8 -*-
2
3 # maintainer: <plnick@vuplus-support.org>
4
5 #This plugin is free software, you are allowed to
6 #modify it (if you keep the license),
7 #but you are not allowed to distribute/publish
8 #it without source code (this version and your modifications).
9 #This means you also have to distribute
10 #source code of your modifications.
11
12
13
14 from Screens.Screen import Screen
15 from Screens.MessageBox import MessageBox
16 from Plugins.Plugin import PluginDescriptor
17 from Components.ActionMap import ActionMap,NumberActionMap
18 from enigma import eActionMap
19 from Components.config import config, getConfigListEntry, ConfigInteger, ConfigSubsection, ConfigSelection, ConfigText, ConfigYesNo, NoSave, ConfigNothing
20 from Components.ConfigList import ConfigListScreen
21 from Components.HdmiCec import HdmiCec
22 from Components.Sources.StaticText import StaticText
23 from Tools import Notifications
24 import struct
25 from enigma import eHdmiCEC
26 from os import system
27 from __init__ import _
28 from Components.InputDevice import iInputDevices
29
30 class HdmiCecPlugin(Screen,ConfigListScreen):
31         skin = """
32                 <screen name="HDMICEC" position="center,center" size="700,400" title="HDMI-CEC Plugin" >
33                         <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
34                         <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" alphatest="on" />
35                         <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" alphatest="on" />
36                         <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" alphatest="on" />
37                         <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ececec" backgroundColor="#9f1313" transparent="1" />
38                         <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ececec" backgroundColor="#1f771f" transparent="1" />
39                         <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ececec" backgroundColor="#1f771f" transparent="1" />
40                         <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ececec" backgroundColor="#1f771f" transparent="1" />
41                         <widget name="config" zPosition="2" position="5,50" size="650,300" scrollbarMode="showOnDemand" transparent="1" />
42                 </screen>"""
43         def __init__(self, session):
44                 Screen.__init__(self, session)
45                 
46                 
47                 config.hdmicec.input_address = ConfigText(default = "0", visible_width = 50, fixed_size = False)
48                 config.hdmicec.input_value1 = ConfigText(default = "0", visible_width = 50, fixed_size = False)
49                 config.hdmicec.input_value2 = ConfigText(default = "", visible_width = 50, fixed_size = False)
50                 config.hdmicec.input_value3 = ConfigText(default = "", visible_width = 50, fixed_size = False)
51                 config.hdmicec.input_value4 = ConfigText(default = "", visible_width = 50, fixed_size = False)
52                 config.hdmicec.avvolup = NoSave(ConfigNothing())
53                 config.hdmicec.avvoldown = NoSave(ConfigNothing())
54                 config.hdmicec.avvolmute = NoSave(ConfigNothing())
55                 config.hdmicec.avpwroff = NoSave(ConfigNothing())
56                 config.hdmicec.avpwron = NoSave(ConfigNothing())
57                 config.hdmicec.tvpwroff = NoSave(ConfigNothing())
58                 config.hdmicec.tvpwron = NoSave(ConfigNothing())
59                 self["key_red"] = StaticText(_("Close"))
60                 self["key_green"] = StaticText(_("Save"))
61                 self["key_yellow"] = StaticText(_("Connect"))
62                 self["key_blue"] = StaticText(_("Disconnect"))
63                 self["shortcuts"] = ActionMap(["ShortcutActions", "SetupActions", "NumberActions" ],
64                 {
65                         "ok": self.keyOk,
66                         "cancel": self.keyCancel,
67                         "red": self.keyCancel,
68                         "green": self.keySave,
69                         "yellow": self.keyConnect,
70                         "blue": self.keyDisconnect,
71                 }, -2)
72                 self.list = []
73                 ConfigListScreen.__init__(self, self.list,session = session)
74                 self.createSetup()
75
76         def createSetup(self):
77                 self.list = []
78                 self.hdmienabled = getConfigListEntry(_(_("HDMI CEC enabled:")), config.hdmicec.enabled)
79                 self.hdmiactivesourcereply = getConfigListEntry(_(_("Active Source Reply On:")), config.hdmicec.active_source_reply)
80                 self.hdmitvstandby = getConfigListEntry(_("VU standby => TV activity:"), config.hdmicec.standby_message)
81                 self.hdmitvdeepstandby = getConfigListEntry(_("VU deepstandby => TV activity:"), config.hdmicec.deepstandby_message)
82                 self.hdmitvwakeup = getConfigListEntry(_("VU on => TV activity:"), config.hdmicec.wakeup_message)
83                 self.hdmivustandby = getConfigListEntry(_("TV standby => VU+ activity:"), config.hdmicec.vustandby_message)
84                 self.hdmivuwakeup = getConfigListEntry(_("TV on => VU+ activity:"), config.hdmicec.vuwakeup_message)
85                 self.hdmitvinput = getConfigListEntry(_("Choose TV HDMI input:"), config.hdmicec.tvinput)
86                 self.hdmiavinput = getConfigListEntry(_("Choose A/V-Receiver HDMI input:"), config.hdmicec.avinput)
87                 self.hdmiavvolup = getConfigListEntry(_("A/V-Receiver volume up:"), config.hdmicec.avvolup)
88                 self.hdmiavvoldown = getConfigListEntry(_("A/V-Receiver volume down:"), config.hdmicec.avvoldown)
89                 self.hdmiavvolmute = getConfigListEntry(_("A/V-Receiver toggle mute:"), config.hdmicec.avvolmute)
90                 self.hdmiavpwron = getConfigListEntry(_("A/V-Receiver power on:"), config.hdmicec.avpwron)
91                 self.hdmiavpwroff = getConfigListEntry(_("A/V-Receiver power off:"), config.hdmicec.avpwroff)
92                 self.hdmitvpwron = getConfigListEntry(_("TV power on:"), config.hdmicec.tvpwron)
93                 self.hdmitvpwroff = getConfigListEntry(_("TV power off:"), config.hdmicec.tvpwroff)
94                 self.hdmienabletvrc = getConfigListEntry(_("Use TV remotecontrol:"), config.hdmicec.enabletvrc)
95                 self.hdmidevicename = getConfigListEntry(_("Set VU device name:"), config.hdmicec.devicename)
96                 self.hdmiinputaddress = getConfigListEntry(_("Address (0~FF):"), config.hdmicec.input_address)
97                 self.hdmiinputvalue1 = getConfigListEntry("Value 1 (message):", config.hdmicec.input_value1)
98                 self.hdmiinputvalue2 = getConfigListEntry("Value 2 (optional):", config.hdmicec.input_value2)
99                 self.hdmiinputvalue3 = getConfigListEntry("Value 3 (optional):", config.hdmicec.input_value3)
100                 self.hdmiinputvalue4 = getConfigListEntry("Value 4 (optional):", config.hdmicec.input_value4)
101                 self.hdmilogenabledfile = getConfigListEntry("Log to file enabled :", config.hdmicec.logenabledfile)
102                 self.hdmilogenabledserial = getConfigListEntry("Serial log enabled :", config.hdmicec.logenabledserial)
103 #               self.list.append( self.hdmiinputaddress )
104 #               self.list.append( self.hdmiinputvalue1 )
105 #               self.list.append( self.hdmiinputvalue2 )
106 #               self.list.append( self.hdmiinputvalue3 )
107 #               self.list.append( self.hdmiinputvalue4 )
108 #               self.list.append( self.hdmilogenabledfile )
109                 self.list.append( self.hdmienabled )
110                 if config.hdmicec.enabled.value is True:
111                         self.list.append( self.hdmidevicename )
112                         self.list.append( self.hdmitvinput )
113                         self.list.append( self.hdmiavinput )
114                         self.list.append( self.hdmivuwakeup )
115                         self.list.append( self.hdmivustandby )
116                         self.list.append( self.hdmitvwakeup )
117                         self.list.append( self.hdmitvstandby )
118                         self.list.append( self.hdmitvdeepstandby )
119                         if config.hdmicec.avinput.value is not "0":
120                                 self.list.append( self.hdmiavvolup )
121                                 self.list.append( self.hdmiavvoldown )
122                                 self.list.append( self.hdmiavvolmute )
123                                 self.list.append( self.hdmiavpwron )
124                                 self.list.append( self.hdmiavpwroff )
125                         self.list.append( self.hdmitvpwron )
126                         self.list.append( self.hdmitvpwroff )
127                         self.list.append( self.hdmienabletvrc )
128                         self.list.append( self.hdmiactivesourcereply )
129                         self.list.append( self.hdmilogenabledserial )
130                 self["config"].list = self.list
131                 self["config"].l.setList(self.list)
132                 
133         def keyDisconnect(self):
134                 cmd = None
135                 logcmd = None
136                 physaddress1 = int("0x" + str(config.hdmicec.tvinput.value) + str(config.hdmicec.avinput.value),16)
137                 physaddress2 = int("0x00",16)
138                 address = int('0',16)
139                 cecmessage = int('0x9D',16)
140                 cecmessagetwo = physaddress1
141                 cecmessagethree = physaddress2
142                 cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
143                 logcmd = "[HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)
144
145                 if cmd:
146                         eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
147                         
148                 if logcmd:
149                         if config.hdmicec.logenabledserial.value:
150                                 print logcmd
151                                 if config.hdmicec.logenabledfile.value:
152                                         filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
153                                         system(filelog)
154
155         def keySend(self):
156                 cmd = None
157                 logcmd = None
158                 addresstmp=config.hdmicec.input_address.value
159                 tmp1=config.hdmicec.input_value1.value
160                 tmp2=config.hdmicec.input_value2.value
161                 tmp3=config.hdmicec.input_value3.value
162                 tmp4=config.hdmicec.input_value4.value
163                 address=int(addresstmp,16)
164                 if address not in range(0,256):
165                                 address = 255
166                 if tmp4:
167                         val1=int(tmp1,16)
168                         val2=int(tmp2,16)
169                         val3=int(tmp3,16)
170                         val4=int(tmp4,16)
171                         if val1 not in range(0,256):
172                                 val1 = 00
173                         if val2 not in range(0,256):
174                                 val2 = 00
175                         if val3 not in range(0,256):
176                                 val3 = 00
177                         if val4 not in range(0,256):
178                                 val4 = 00
179                         cmd = struct.pack('BBBB',val1,val2,val3,val4)
180                         logcmd = "[HDMI-CEC] ** Test Message ** Send message value: %x:%x:%x:%x to address %x" % (val1,val2,val3,val4,address)
181                 else:
182
183                         if tmp3:
184                                 val1=int(tmp1,16)
185                                 val2=int(tmp2,16)
186                                 val3=int(tmp3,16)
187                                 if val1 not in range(0,256):
188                                         val1 = 00
189                                 if val2 not in range(0,256):
190                                         val2 = 00
191                                 if val3 not in range(0,256):
192                                         val3 = 00
193                                 cmd = struct.pack('BBB',val1,val2,val3)
194                                 logcmd = "[HDMI-CEC] ** Test Message ** Send message value: %x:%x:%x to address %x" % (val1,val2,val3,address)
195                         else:
196                           
197                                 if tmp2:
198                                         val1=int(tmp1,16)
199                                         val2=int(tmp2,16)
200                                         if val1 not in range(0,256):
201                                                 val1 = 00
202                                         if val2 not in range(0,256):
203                                                 val2 = 00
204                                         cmd = struct.pack('BB',val1,val2)
205                                         logcmd = "[HDMI-CEC] ** Test Message ** Send message value: %x:%x to address %x" % (val1,val2,address)
206                                 else:
207                                         val1=int(tmp1,16)
208                                         if val1 not in range(0,256):
209                                                 val1 = 00
210                                         cmd = struct.pack('B',val1)
211                                         logcmd = "[HDMI-CEC] ** Test Message ** Send message value: %x to address %x" % (val1, address)
212
213                 if cmd:
214                         eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
215                         
216                 if logcmd:
217                         if config.hdmicec.logenabledserial.value:
218                                 print logcmd
219                                 if config.hdmicec.logenabledfile.value:
220                                         filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
221                                         system(filelog)
222                 
223         def keyOk(self):
224                 cmd = None
225                 logcmd = None
226                 if self["config"].getCurrent() == self.hdmiavvolup:
227                         address = int("5",16)
228                         cecmessage = int("44",16)
229                         cecmessagetwo = int("41",16)
230                         cmd = struct.pack('BB',cecmessage,cecmessagetwo)
231                         logcmd = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
232                 elif self["config"].getCurrent() == self.hdmiavvoldown:
233                         address = int("5",16)
234                         cecmessage = int("44",16)
235                         cecmessagetwo = int("42",16)
236                         cmd = struct.pack('BB',cecmessage,cecmessagetwo)
237                         logcmd = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
238                 elif self["config"].getCurrent() == self.hdmiavvolmute:
239                         address = int("5",16)
240                         cecmessage = int("44",16)
241                         cecmessagetwo = int("43",16)
242                         cmd = struct.pack('BB',cecmessage,cecmessagetwo)
243                         logcmd = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
244                 elif self["config"].getCurrent() == self.hdmiavpwron:
245                         address = int("5",16)
246                         cecmessage = int("44",16)
247                         cecmessagetwo = int("6D",16)
248                         cmd = struct.pack('BB',cecmessage,cecmessagetwo)
249                         logcmd = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
250                 elif self["config"].getCurrent() == self.hdmiavpwroff:
251                         address = int("5",16)
252                         cecmessage = int("44",16)
253                         cecmessagetwo = int("6C",16)
254                         cmd = struct.pack('BB',cecmessage,cecmessagetwo)
255                         logcmd = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
256                 elif self["config"].getCurrent() == self.hdmitvpwroff:
257                         address = int("0",16)
258                         cecmessage = int("36",16)
259                         cmd = struct.pack('B',cecmessage)
260                         logcmd = "[HDMI-CEC] send cec message %x to %x" % (cecmessage,address)
261                 elif self["config"].getCurrent() == self.hdmitvpwron:
262                         address = int("0",16)
263                         cecmessage = int("04",16)
264                         cmd = struct.pack('B',cecmessage)
265                         logcmd = "[HDMI-CEC] send cec message %x to %x" % (cecmessage,address)
266                 else:
267                         ConfigListScreen.keySave(self)
268                 if cmd:
269                         eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
270                         messagecmd = int("45",16)
271
272                 if logcmd:
273                         if config.hdmicec.logenabledserial.value:
274                                 print logcmd
275                                 if config.hdmicec.logenabledfile.value:
276                                         filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
277                                         system(filelog)
278
279         def keyConnect(self):
280                         address = 0
281                         message = 0x85
282                         messageReceived(address, message)
283         
284         def keyLeft(self):
285                 ConfigListScreen.keyLeft(self)
286                 if self["config"].getCurrent() == self.hdmienabled:
287                         self.createSetup()
288                 if self["config"].getCurrent() == self.hdmiavinput:
289                         self.createSetup()
290
291         def keyRight(self):
292                 ConfigListScreen.keyRight(self)
293                 if self["config"].getCurrent() == self.hdmienabled:
294                         self.createSetup()
295                 if self["config"].getCurrent() == self.hdmiavinput:
296                         self.createSetup()
297
298         def keyCancel(self):
299                 self.close()
300
301         def keySave(self):
302                 ConfigListScreen.keySave(self)
303
304 def openconfig(session, **kwargs):
305         session.open(HdmiCecPlugin)
306         
307 def autostart(reason, **kwargs):
308         global session
309         if kwargs.has_key("session") and reason == 0:
310                 session = kwargs["session"]
311                 eHdmiCEC.getInstance().messageReceived.get().append(messageReceived)
312                 eHdmiCEC.getInstance().messageReceivedKey.get().append(messageReceivedKey)
313
314 def Plugins(**kwargs):
315         return [PluginDescriptor(name=_("HDMI-CEC"), description="HDMI-CEC Configuration", where = PluginDescriptor.WHERE_PLUGINMENU, icon="hdmicec.png", needsRestart = True, fnc=openconfig),
316                 PluginDescriptor(where = [PluginDescriptor.WHERE_SESSIONSTART, PluginDescriptor.WHERE_AUTOSTART], fnc = autostart)]
317                 
318 def messageReceived(address, message):
319         logcmd = "[HDMI-CEC] received cec message %x from %x" % (message, address)
320         if logcmd:
321                 if config.hdmicec.logenabledserial.value:
322                         print logcmd
323                         if config.hdmicec.logenabledfile.value:
324                                 filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
325                                 system(filelog)
326
327         if config.hdmicec.enabled.value is True:
328                 from Screens.Standby import inStandby
329                 from Screens.Standby import Standby
330
331                 cmd = None
332                 cmdtwo = None
333                 addresstwo = None
334                 logcmd = None
335                 logcmdtwo = None
336
337                 physaddress1 = int("0x" + str(config.hdmicec.tvinput.value) + str(config.hdmicec.avinput.value),16)
338                 physaddress2 = int("0x00",16)
339
340                 addresstv = int("0x00",16)
341                 addressav = int("0x05",16)
342                 addressglobal = int("0x0F",16)
343
344                 powerstatereportmessage = int("0x90",16)
345                 powerstate = int("0x00",16)
346
347                 physaddressmessage = int('0x84',16)
348                 devicetypmessage = int('0x03',16)
349
350                 activesourcemessage = int('0x82',16)
351
352                 menuonmessage = int('0x8E',16)
353                 menustatemessage = int('0x00',16)
354
355                 setnamemessage = int('0x47',16)
356
357                 sendkeymessage = int("44",16)
358                 sendkeypwronmessage = int("6D",16)
359                 sendkeypwroffmessage = int("6C",16)
360
361                 if message == 0x8f: # request power state
362                         address = addresstv
363                         cecmessage = powerstatereportmessage
364                         cecmessagetwo = powerstate
365                         cmd = struct.pack('BB',cecmessage,cecmessagetwo)
366                         logcmd = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
367
368                 elif message == 0x83: # request physical address
369                         address = addressglobal
370                         cecmessage = physaddressmessage
371                         cecmessagetwo = physaddress1
372                         cecmessagethree = physaddress2
373                         cecmessagefour = devicetypmessage
374                         cmd = struct.pack('BBBB',cecmessage,cecmessagetwo,cecmessagethree,cecmessagefour)
375                         logcmd = "[HDMI-CEC] send cec message %x:%x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,cecmessagefour,address)
376
377                 elif message == 0x86: # request streampath
378                         address = addressglobal
379                         cecmessage = activesourcemessage
380                         cecmessagetwo = physaddress1
381                         cecmessagethree = physaddress2
382                         cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
383                         logcmd = "[HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)
384
385                         if config.hdmicec.enabletvrc.value:
386                                         addresstwo = addresstv
387                                         cecmessage = menuonmessage
388                                         cecmessagetwo = menustatemessage
389                                         cmdtwo = struct.pack('BB',cecmessage,cecmessagetwo)
390                                         logcmdtwo = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
391
392                 elif message == 0x8d: # request menu state
393                         if config.hdmicec.enabletvrc.value:
394                                 address = addresstv
395                                 cecmessage = menuonmessage
396                                 cecmessagetwo = menustatemessage
397                                 cmd = struct.pack('BB',cecmessage,cecmessagetwo)
398                                 logcmd = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
399
400                 elif message == 0x46: # request device name
401                         address = addresstv
402                         cecmessage = setnamemessage
403                         if config.hdmicec.devicename.value == "vuduo":
404                                 cecmessagetwo ="VU+ Duo"
405                                 cmd = struct.pack('B8s',cecmessage,cecmessagetwo)
406                         elif config.hdmicec.devicename.value == "vusolo":
407                                 cecmessagetwo ="VU+ Solo"
408                                 cmd = struct.pack('B9s',cecmessage,cecmessagetwo)
409                         elif config.hdmicec.devicename.value == "vuuno":
410                                 cecmessagetwo ="VU+ Uno"
411                                 cmd = struct.pack('B8s',cecmessage,cecmessagetwo)
412                         elif config.hdmicec.devicename.value == "vuultimo":
413                                 cecmessagetwo ="VU+ Ultimo"
414                                 cmd = struct.pack('B8s',cecmessage,cecmessagetwo)
415                         else:
416                                 cecmessagetwo ="VU+"
417                                 cmd = struct.pack('B4s',cecmessage,cecmessagetwo)
418                         logcmd = "[HDMI-CEC] send cec message %x:%s to %x" % (cecmessage,cecmessagetwo,address)
419
420                 elif message == 0x85: # request active source
421                         if not inStandby:
422                                 address = addressglobal
423                                 cecmessage = activesourcemessage
424                                 cecmessagetwo = physaddress1
425                                 cecmessagethree = physaddress2
426                                 cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
427                                 logcmd = "[HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)
428
429                                 if config.hdmicec.enabletvrc.value:
430                                         addresstwo = addresstv
431                                         cecmessage = menuonmessage
432                                         cecmessagetwo = menustatemessage
433                                         cmdtwo = struct.pack('BB',cecmessage,cecmessagetwo)
434                                         logcmdtwo = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
435
436                         elif inStandby:
437                                 if config.hdmicec.vuwakeup_message.value == "vuwakeup":
438                                         inStandby.Power()
439                                         address = addressglobal
440                                         cecmessage = activesourcemessage
441                                         cecmessagetwo = physaddress1
442                                         cecmessagethree = physaddress2
443                                         cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
444                                         logcmd = "[HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)
445                                         
446                                         if config.hdmicec.enabletvrc.value:
447                                                 addresstwo = addresstv
448                                                 cecmessage = menuonmessage
449                                                 cecmessagetwo = menustatemessage
450                                                 cmdtwo = struct.pack('BB',cecmessage,cecmessagetwo)
451                                                 logcmdtwo = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
452
453                 elif message == 0x36:
454                         if config.hdmicec.vustandby_message.value == "vustandby":
455                                 if inStandby == None:
456                                         logcmd = "[HDMI-CEC] VU+ STB goto standby"
457                                         session.open(Standby)
458                         elif config.hdmicec.vustandby_message.value == "vudeepstandby":
459                                 import Screens.Standby
460                                 logcmd = "[HDMI-CEC] VU+ STB goto deepstandby"
461                                 session.open(Screens.Standby.TryQuitMainloop,1)
462
463                 if cmd:
464                         eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
465                 if cmdtwo:
466                         eHdmiCEC.getInstance().sendMessage(addresstwo, len(cmdtwo), str(cmdtwo))
467
468                 if logcmd:
469                         if config.hdmicec.logenabledserial.value:
470                                 print logcmd
471                                 if config.hdmicec.logenabledfile.value:
472                                         filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
473                                         system(filelog)
474                 if logcmdtwo:
475                         if config.hdmicec.logenabledserial.value:
476                                 print logcmdtwo
477                                 if config.hdmicec.logenabledfile.value:
478                                         filelog = "echo %s >> /tmp/hdmicec.log" % (logcmdtwo)
479                                         system(filelog)
480
481 def messageReceivedKey(address, message):
482         logcmd = "[HDMI-CEC] received cec message part two %x from %x" % (message, address)
483         if logcmd:
484                 if config.hdmicec.logenabledserial.value:
485                         print logcmd
486                         if config.hdmicec.logenabledfile.value:
487                                 filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
488                                 system(filelog)
489         if config.hdmicec.enabled.value is True:
490                 rcdevicename = iInputDevices.getDeviceName('event0') # hschang : get rc device name, /dev/input/event0
491                 keyaction = eActionMap.getInstance()
492                 key = None
493 #start translate keycodes
494                 if message == 0x32 or message == 0x09: #key menu
495                         key = int(139)
496                 elif message == 0x20: #key 0
497                         key = int(11)
498                 elif message == 0x21: #key 1
499                         key = int(2)
500                 elif message == 0x22: #key 2
501                         key = int(3)
502                 elif message == 0x23: #key 3
503                         key = int(4)
504                 elif message == 0x24: #key 4
505                         key = int(5)
506                 elif message == 0x25: #key 5
507                         key = int(6)
508                 elif message == 0x26: #key 6
509                         key = int(7)
510                 elif message == 0x27: #key 7
511                         key = int(8)
512                 elif message == 0x28: #key 8
513                         key = int(9)
514                 elif message == 0x29: #key 10
515                         key = int(10)
516                 elif message == 0x30: #key bouquet up
517                         key = int(402)
518                 elif message == 0x31: #key bouquet down
519                         key = int(403)
520                 elif message == 0x53: #key info/epg
521                         key = int(358)
522                 elif message == 0x00: #key ok
523                         key = int(352)
524                 elif message == 0x03: #key left
525                         key = int(105)
526                 elif message == 0x04: #key right
527                         key = int(106)
528                 elif message == 0x01: #key up
529                         key = int(103)
530                 elif message == 0x02: #key down
531                         key = int(108)
532                 elif message == 0x0d: #key exit
533                         key = int(174)
534                 elif message == 0x72: #key red
535                         key = int(398)
536                 elif message == 0x71: #key blue
537                         key = int(401)
538                 elif message == 0x73: #key green
539                         key = int(399)
540                 elif message == 0x74: #key yellow
541                         key = int(400)
542                 elif message == 0x44: #key play
543                         if rcdevicename.find("advanced"):
544                                 key = int(164) # KEY_PLAYPAUSE
545                         else:
546                                 key = int(207) # KEY_PLAY
547                 elif message == 0x46: #key pause
548                         if rcdevicename.find("advanced"):
549                                 key = int(164) # KEY_PLAYPAUSE
550                         else:
551                                 key = int(119) # KEY_PAUSE
552                 elif message == 0x45: #key stop
553                         key = int(128)
554                 elif message == 0x47: #key record
555                         key = int(167)
556                 elif message == 0x49: #fast forward
557                         if rcdevicename.find("advanced"):
558                                 key = int(163) # KEY_NEXTSONG
559                         else:
560                                 key = int(208) # KEY_FASTFORWARD
561                 elif message == 0x48: #rewind
562                         if rcdevicename.find("advanced"):
563                                 key = int(165) # KEY_NEXTSONG
564                         else:
565                                 key = int(168) # KEY_FASTFORWARD
566                 elif message == 0x60: #play 2
567                         key = int(207)
568                 elif message == 0x61: #key pause 2
569                         if rcdevicename.find("advanced"):
570                                 key = int(164) # KEY_PLAYPAUSE
571                         else:
572                                 key = int(119) # KEY_PAUSE
573                 elif message == 0x64: #key stop 2
574                         key = int(128)
575                 elif message == 0x62: #key record 2
576                         key = int(167)
577 #end translate keycodes
578                 if key:
579                         keyaction.keyPressed(rcdevicename, key, int(0))
580                         keyaction.keyPressed(rcdevicename, key, int(1))