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