Merge branch 'vuplus_experimental' of code.vuplus.com:/opt/repository/dvbapp into...
[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 Components.InputDevice import iInputDevices
28
29 class HdmiCecPlugin(Screen,ConfigListScreen):
30         skin =  """
31                 <screen position="center,center" size="590,320" title="HDMI-CEC Plugin" >
32                         <ePixmap pixmap="skin_default/buttons/red.png" position="20,0" size="140,40" alphatest="on" />
33                         <ePixmap pixmap="skin_default/buttons/green.png" position="160,0" size="140,40" alphatest="on" />
34                         <ePixmap pixmap="skin_default/buttons/yellow.png" position="300,0" size="140,40" alphatest="on" />
35                         <ePixmap pixmap="skin_default/buttons/blue.png" position="440,0" size="140,40" alphatest="on" />
36
37                         <widget source="key_red" render="Label" position="20,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#9f1313" transparent="1" />
38                         <widget source="key_green" render="Label" position="160,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#1f771f" transparent="1" />
39                         <widget source="key_yellow" render="Label" position="300,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#a08500" transparent="1" />
40                         <widget source="key_blue" render="Label" position="440,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" foregroundColor="#ffffff" backgroundColor="#18188b" transparent="1" />
41
42                         <widget name="config" zPosition="2" position="30,50" size="540,270" scrollbarMode="showOnDemand" transparent="1" />
43                 </screen>
44                 """
45         def __init__(self, session):
46                 Screen.__init__(self, session)
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, 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                         name_len = len(config.hdmicec.devicename.value)
404                         if name_len == 0:
405                                 cecmessagetwo ="VU+"
406                                 cmd = struct.pack('B4s',cecmessage,cecmessagetwo)
407                         else:
408                                 cecmessagetwo = config.hdmicec.devicename.value
409                                 cmd = struct.pack('B'+str(name_len+1)+'s',cecmessage,cecmessagetwo)
410                         logcmd = "[HDMI-CEC] send cec message %x:%s to %x" % (cecmessage,cecmessagetwo,address)
411
412                 elif message == 0x85: # request active source
413                         if not inStandby:
414                                 address = addressglobal
415                                 cecmessage = activesourcemessage
416                                 cecmessagetwo = physaddress1
417                                 cecmessagethree = physaddress2
418                                 cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
419                                 logcmd = "[HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)
420
421                                 if config.hdmicec.enabletvrc.value:
422                                         addresstwo = addresstv
423                                         cecmessage = menuonmessage
424                                         cecmessagetwo = menustatemessage
425                                         cmdtwo = struct.pack('BB',cecmessage,cecmessagetwo)
426                                         logcmdtwo = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
427
428                         elif inStandby:
429                                 if config.hdmicec.vuwakeup_message.value == "vuwakeup":
430                                         inStandby.Power()
431                                         address = addressglobal
432                                         cecmessage = activesourcemessage
433                                         cecmessagetwo = physaddress1
434                                         cecmessagethree = physaddress2
435                                         cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
436                                         logcmd = "[HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)
437                                         
438                                         if config.hdmicec.enabletvrc.value:
439                                                 addresstwo = addresstv
440                                                 cecmessage = menuonmessage
441                                                 cecmessagetwo = menustatemessage
442                                                 cmdtwo = struct.pack('BB',cecmessage,cecmessagetwo)
443                                                 logcmdtwo = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
444
445                 elif message == 0x36:
446                         if config.hdmicec.vustandby_message.value == "vustandby":
447                                 if inStandby == None:
448                                         logcmd = "[HDMI-CEC] VU+ STB goto standby"
449                                         session.open(Standby)
450                         elif config.hdmicec.vustandby_message.value == "vudeepstandby":
451                                 import Screens.Standby
452                                 logcmd = "[HDMI-CEC] VU+ STB goto deepstandby"
453                                 session.open(Screens.Standby.TryQuitMainloop,1)
454
455                 if cmd:
456                         eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
457                 if cmdtwo:
458                         eHdmiCEC.getInstance().sendMessage(addresstwo, len(cmdtwo), str(cmdtwo))
459
460                 if logcmd:
461                         if config.hdmicec.logenabledserial.value:
462                                 print logcmd
463                                 if config.hdmicec.logenabledfile.value:
464                                         filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
465                                         system(filelog)
466                 if logcmdtwo:
467                         if config.hdmicec.logenabledserial.value:
468                                 print logcmdtwo
469                                 if config.hdmicec.logenabledfile.value:
470                                         filelog = "echo %s >> /tmp/hdmicec.log" % (logcmdtwo)
471                                         system(filelog)
472
473 def messageReceivedKey(address, message):
474         logcmd = "[HDMI-CEC] received cec message part two %x from %x" % (message, address)
475         if logcmd:
476                 if config.hdmicec.logenabledserial.value:
477                         print logcmd
478                         if config.hdmicec.logenabledfile.value:
479                                 filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
480                                 system(filelog)
481         if config.hdmicec.enabled.value is True:
482                 rcdevicename = iInputDevices.getDeviceName('event0') # hschang : get rc device name, /dev/input/event0
483                 keyaction = eActionMap.getInstance()
484                 key = None
485 #start translate keycodes
486                 if message == 0x32 or message == 0x09: #key menu
487                         key = int(139)
488                 elif message == 0x20: #key 0
489                         key = int(11)
490                 elif message == 0x21: #key 1
491                         key = int(2)
492                 elif message == 0x22: #key 2
493                         key = int(3)
494                 elif message == 0x23: #key 3
495                         key = int(4)
496                 elif message == 0x24: #key 4
497                         key = int(5)
498                 elif message == 0x25: #key 5
499                         key = int(6)
500                 elif message == 0x26: #key 6
501                         key = int(7)
502                 elif message == 0x27: #key 7
503                         key = int(8)
504                 elif message == 0x28: #key 8
505                         key = int(9)
506                 elif message == 0x29: #key 10
507                         key = int(10)
508                 elif message == 0x30: #key bouquet up
509                         key = int(402)
510                 elif message == 0x31: #key bouquet down
511                         key = int(403)
512                 elif message == 0x53: #key info/epg
513                         key = int(358)
514                 elif message == 0x00: #key ok
515                         key = int(352)
516                 elif message == 0x03: #key left
517                         key = int(105)
518                 elif message == 0x04: #key right
519                         key = int(106)
520                 elif message == 0x01: #key up
521                         key = int(103)
522                 elif message == 0x02: #key down
523                         key = int(108)
524                 elif message == 0x0d: #key exit
525                         key = int(174)
526                 elif message == 0x72: #key red
527                         key = int(398)
528                 elif message == 0x71: #key blue
529                         key = int(401)
530                 elif message == 0x73: #key green
531                         key = int(399)
532                 elif message == 0x74: #key yellow
533                         key = int(400)
534                 elif message == 0x44: #key play
535                         if rcdevicename.find("advanced"):
536                                 key = int(164) # KEY_PLAYPAUSE
537                         else:
538                                 key = int(207) # KEY_PLAY
539                 elif message == 0x46: #key pause
540                         if rcdevicename.find("advanced"):
541                                 key = int(164) # KEY_PLAYPAUSE
542                         else:
543                                 key = int(119) # KEY_PAUSE
544                 elif message == 0x45: #key stop
545                         key = int(128)
546                 elif message == 0x47: #key record
547                         key = int(167)
548                 elif message == 0x49: #fast forward
549                         if rcdevicename.find("advanced"):
550                                 key = int(163) # KEY_NEXTSONG
551                         else:
552                                 key = int(208) # KEY_FASTFORWARD
553                 elif message == 0x48: #rewind
554                         if rcdevicename.find("advanced"):
555                                 key = int(165) # KEY_NEXTSONG
556                         else:
557                                 key = int(168) # KEY_FASTFORWARD
558                 elif message == 0x60: #play 2
559                         key = int(207)
560                 elif message == 0x61: #key pause 2
561                         if rcdevicename.find("advanced"):
562                                 key = int(164) # KEY_PLAYPAUSE
563                         else:
564                                 key = int(119) # KEY_PAUSE
565                 elif message == 0x64: #key stop 2
566                         key = int(128)
567                 elif message == 0x62: #key record 2
568                         key = int(167)
569 #end translate keycodes
570                 if key:
571                         keyaction.keyPressed(rcdevicename, key, int(0))
572                         keyaction.keyPressed(rcdevicename, key, int(1))