示例#1
0
	def sendCmd(self):
		if len(self.queue):
			(address, cmd, data) = self.queue.pop(0)
			if config.hdmicec.debug.value:
				self.CECdebug('Tx', address, cmd, data, len(data))
			eHdmiCEC.getInstance().sendMessage(address, cmd, data, len(data))
			self.wait.start(int(config.hdmicec.minimum_send_interval.value), True)
示例#2
0
 def keyEvent(self, keyCode, keyEvent):
     if not self.volumeForwardingEnabled: return
     cmd = 0
     data = ''
     if keyEvent == 0:
         if keyCode == 115:
             cmd = 0x44
             data = str(struct.pack('B', 0x41))
         if keyCode == 114:
             cmd = 0x44
             data = str(struct.pack('B', 0x42))
         if keyCode == 113:
             cmd = 0x44
             data = str(struct.pack('B', 0x43))
     if keyEvent == 2:
         if keyCode == 115:
             cmd = 0x44
             data = str(struct.pack('B', 0x41))
         if keyCode == 114:
             cmd = 0x44
             data = str(struct.pack('B', 0x42))
         if keyCode == 113:
             cmd = 0x44
             data = str(struct.pack('B', 0x43))
     if keyEvent == 1:
         if keyCode == 115 or keyCode == 114 or keyCode == 113:
             cmd = 0x45
     if cmd:
         eHdmiCEC.getInstance().sendMessage(
             self.volumeForwardingDestination, cmd, data, len(data))
         return 1
     else:
         return 0
示例#3
0
	def keyEvent(self, keyCode, keyEvent):
		if not self.volumeForwardingEnabled: return
		cmd = 0
		data = ''
		if keyEvent == 0:
			if keyCode == 115:
				cmd = 0x44
				data = str(struct.pack('B', 0x41))
			if keyCode == 114:
				cmd = 0x44
				data = str(struct.pack('B', 0x42))
			if keyCode == 113:
				cmd = 0x44
				data = str(struct.pack('B', 0x43))
		if keyEvent == 2:
			if keyCode == 115:
				cmd = 0x44
				data = str(struct.pack('B', 0x41))
			if keyCode == 114:
				cmd = 0x44
				data = str(struct.pack('B', 0x42))
			if keyCode == 113:
				cmd = 0x44
				data = str(struct.pack('B', 0x43))
		if keyEvent == 1:
			if keyCode == 115 or keyCode == 114 or keyCode == 113:
				cmd = 0x45
		if cmd:
			eHdmiCEC.getInstance().sendMessage(self.volumeForwardingDestination, cmd, data, len(data))
			return 1
		else:
			return 0
示例#4
0
 def setFixedPhysicalAddress(self, address):
     if address != config.hdmicec.fixed_physical_address.value:
         config.hdmicec.fixed_physical_address.value = address
         config.hdmicec.fixed_physical_address.save()
     hexstring = address[0] + address[2] + address[4] + address[6]
     eHdmiCEC.getInstance().setFixedPhysicalAddress(
         int(float.fromhex(hexstring)))
示例#5
0
    def __init__(self):
        assert not HdmiCec.instance, "only one HdmiCec instance is allowed!"
        HdmiCec.instance = self

        self.wait = eTimer()
        self.wait.timeout.get().append(self.sendCmd)
        self.repeat = eTimer()
        self.repeat.timeout.get().append(self.wakeupMessages)
        self.queue = []

        eHdmiCEC.getInstance().messageReceived.get().append(
            self.messageReceived)
        config.misc.standbyCounter.addNotifier(self.onEnterStandby,
                                               initial_call=False)
        config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby,
                                            initial_call=False)
        self.setFixedPhysicalAddress(
            config.hdmicec.fixed_physical_address.value)

        self.volumeForwardingEnabled = False
        self.volumeForwardingDestination = 0
        eActionMap.getInstance().bindAction('', -maxint - 1, self.keyEvent)
        config.hdmicec.volume_forwarding.addNotifier(
            self.configVolumeForwarding)
        config.hdmicec.enabled.addNotifier(self.configVolumeForwarding)
        if config.hdmicec.enabled.value and config.hdmicec.handle_deepstandby_events.value and not getFPWasTimerWakeup(
        ):
            self.onLeaveStandby()
示例#6
0
	def __init__(self):
		assert not HdmiCec.instance, "only one HdmiCec instance is allowed!"
		HdmiCec.instance = self

		self.wait = eTimer()
		self.wait.timeout.get().append(self.sendCmd)
		self.waitKeyEvent = eTimer()
		self.waitKeyEvent.timeout.get().append(self.sendKeyEvent)
		self.queueKeyEvent = []
		self.repeat = eTimer()
		self.repeat.timeout.get().append(self.wakeupMessages)
		self.queue = []

		self.delay = eTimer()
		self.delay.timeout.get().append(self.sendStandbyMessages)
		self.useStandby = True

		eHdmiCEC.getInstance().messageReceived.get().append(self.messageReceived)
		config.misc.standbyCounter.addNotifier(self.onEnterStandby, initial_call = False)
		config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby, initial_call = False)
		self.setFixedPhysicalAddress(config.hdmicec.fixed_physical_address.value)

		self.volumeForwardingEnabled = False
		self.volumeForwardingDestination = 0
		self.wakeup_from_tv = False
		eActionMap.getInstance().bindAction('', -maxint - 1, self.keyEvent)
		config.hdmicec.volume_forwarding.addNotifier(self.configVolumeForwarding)
		config.hdmicec.enabled.addNotifier(self.configVolumeForwarding)
		if config.hdmicec.enabled.value:
			if config.hdmicec.report_active_menu.value:
				if config.hdmicec.report_active_source.value and NavigationInstance.instance and not NavigationInstance.instance.isRestartUI():
					self.sendMessage(0, "sourceinactive")
				self.sendMessage(0, "menuactive")
			if config.hdmicec.handle_deepstandby_events.value and (not getFPWasTimerWakeup() or (config.usage.startup_to_standby.value == "no" and config.misc.prev_wakeup_time_type.value == 3)):
				self.onLeaveStandby()
示例#7
0
	def keyEvent(self, keyCode, keyEvent):
		if not self.volumeForwardingEnabled:
			return
		cmd = 0
		address = keyEvent
		data = ''
		if keyEvent in (0, 2):
			if keyCode == 115:
				cmd = 0x44
				data = str(struct.pack('B', 0x41))
			elif keyCode == 114:
				cmd = 0x44
				data = str(struct.pack('B', 0x42))
			elif keyCode == 113:
				cmd = 0x44
				data = str(struct.pack('B', 0x43))
		elif keyEvent == 1 and keyCode in (113, 114, 115):
			cmd = 0x45
		if cmd:
			if config.hdmicec.debug.value:
				self.CECdebug('Tx', address, cmd, data, len(data))
			eHdmiCEC.getInstance().sendMessage(self.volumeForwardingDestination, cmd, data, len(data))
			return 1
		else:
			return 0
示例#8
0
	def __init__(self):
		if config.hdmicec.enabled.value:
			try:
				if HdmiCec.instance:
					raise AssertionError("only one HdmiCec instance is allowed!")
			except:
				pass
			HdmiCec.instance = self

			self.wait = eTimer()
			self.wait.timeout.get().append(self.sendCmd)
			self.queue = []
			self.messages = []

			self.handleTimer = eTimer()
			self.stateTimer = eTimer()
			self.stateTimer.callback.append(self.stateTimeout)
			self.repeatTimer = eTimer()
			self.repeatTimer.callback.append(self.repeatMessages)
			self.cmdPollTimer = eTimer()
			self.cmdPollTimer.callback.append(self.CECcmdline)
			self.cmdWaitTimer = eTimer()
			self.repeatCounter = 0
			self.what = ''
			self.tv_lastrequest = ''
			self.tv_powerstate = 'unknown'
			self.tv_skip_messages = False
			self.activesource = False
			self.firstrun = True
			self.standbytime = 0
			self.disk_full = False
			self.start_log = True

			self.sethdmipreemphasis()
			self.checkifPowerupWithoutWakingTv() # initially write 'False' to file, see below

			eHdmiCEC.getInstance().messageReceived.get().append(self.messageReceived)
			config.misc.standbyCounter.addNotifier(self.onEnterStandby, initial_call=False)
			config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby, initial_call=False)
			self.setFixedPhysicalAddress(config.hdmicec.fixed_physical_address.value)

			self.volumeForwardingEnabled = False
			self.volumeForwardingDestination = 0
			eActionMap.getInstance().bindAction('', -maxsize - 1, self.keyEvent)
			config.hdmicec.volume_forwarding.addNotifier(self.configVolumeForwarding, initial_call=False)
			config.hdmicec.enabled.addNotifier(self.configVolumeForwarding)

			#workaround for needless messages after cancel settings
			self.old_configReportActiveMenu = config.hdmicec.report_active_menu.value
			self.old_configTVstate = config.hdmicec.check_tv_state.value or (config.hdmicec.tv_standby_notinputactive.value and config.hdmicec.control_tv_standby.value)
			#
			config.hdmicec.report_active_menu.addNotifier(self.configReportActiveMenu, initial_call=False)
			config.hdmicec.check_tv_state.addNotifier(self.configTVstate, initial_call=False)
			config.hdmicec.tv_standby_notinputactive.addNotifier(self.configTVstate, initial_call=False)
			config.hdmicec.control_tv_standby.addNotifier(self.configTVstate, initial_call=False)

			config.hdmicec.commandline.addNotifier(self.CECcmdstart)

			self.checkTVstate('firstrun')
示例#9
0
文件: HdmiCec.py 项目: zukon/enigma2
 def sendKeyEventQ(self):
     if len(self.queueKeyEvent):
         (msgaddress, cmd, data) = self.queueKeyEvent.pop(0)
         # print("[HdmiCEC][sendKeyEventQ]: msgaddress=%s, cmd=%X, data=%s" % (msgaddress, cmd, data))
         eHdmiCEC.getInstance().sendMessage(msgaddress, cmd, data,
                                            len(data))
         self.waitKeyEvent.start(
             int(config.hdmicec.minimum_send_interval.value), True)
示例#10
0
 def sendCECMessage(self, cmd, addressvalue, logcmd, delay=0):
     eHdmiCEC.getInstance().sendMessage(addressvalue, len(cmd), str(cmd))
     if config.hdmicec.logenabledserial.value:
         print logcmd
         if config.hdmicec.logenabledfile.value:
             filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
             system(filelog)
     time.sleep(delay)
示例#11
0
 def quit(self):
     # remove rx routine from list
     index = eHdmiCEC.getInstance().messageReceived.get().index(
         self.messageReceived)
     eHdmiCEC.getInstance().messageReceived.get().pop(index)
     # push back Components.HdmiCec to list
     if self.queryHdmiCec() is None:
         self.activateHdmiCec()
     self.close()
示例#12
0
文件: HdmiCec.py 项目: zukon/enigma2
 def sendMsgQ(self):
     if len(self.queue):
         (msgaddress, cmd, data) = self.queue.pop(0)
         CECcmd = cmdList.get(cmd, "<Polling Message>")
         # print("[HdmiCEC][sendMsgQ1]: msgaddress=%s, CECcmd=%s cmd=%X,data=%s \n" % (msgaddress, CECcmd, cmd, data))
         eHdmiCEC.getInstance().sendMessage(msgaddress, cmd, data,
                                            len(data))
         self.wait.start(int(config.hdmicec.minimum_send_interval.value),
                         True)
示例#13
0
文件: HdmiCec.py 项目: zukon/enigma2
 def packDevAddr(self, devicetypeSend=False):
     physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
     if devicetypeSend:
         devicetype = eHdmiCEC.getInstance().getDeviceType()
         return struct.pack("BBB", int(physicaladdress // 256),
                            int(physicaladdress % 256), devicetype)
     else:
         return struct.pack("BB", int(physicaladdress // 256),
                            int(physicaladdress % 256))
示例#14
0
	def sendMessages(self, messages):
		for message in messages.split(','):
			cmd = None
			logcmd = None
			addressvaluebroadcast = int("0F",16)
			addressvalue = int("0",16)
			addressvalueav = int("5",16)
			wakeupmessage = int("04",16)
			standbymessage=int("36",16)
			activesourcemessage=int("82",16)
			inactivesourcemessage=int("9D",16)
			sendkeymessage = int("44",16)
			sendkeypwronmessage = int("6D",16)
			sendkeypwroffmessage = int("6C",16)
			activevumessage=int("85",16)
			physaddress1 = int("0x" + str(config.hdmicec.tvinput.value) + str(config.hdmicec.avinput.value),16)
			physaddress2 = int("0x00",16)

			if message == "wakeup":
				cmd = struct.pack('B', wakeupmessage)
				logcmd = "[HDMI-CEC] ** WakeUpMessage ** send message: %x to address %x" % (wakeupmessage, addressvalue)
			elif message == "active":
				addressvalue = addressvaluebroadcast
				cmd = struct.pack('BBB', activesourcemessage,physaddress1,physaddress2)
				logcmd = "[HDMI-CEC] ** ActiveSourceMessage ** send message: %x:%x:%x to address %x" % (activesourcemessage,physaddress1,physaddress2,addressvalue)
			elif message == "standby":
				cmd = struct.pack('B', standbymessage)
				logcmd = "[HDMI-CEC] ** StandByMessage ** send message: %x to address %x" % (standbymessage, addressvalue)
			elif message == "inactive":
				addressvalue = addressvaluebroadcast
				cmd = struct.pack('BBB', inactivesourcemessage,physaddress1,physaddress2)
				logcmd = "[HDMI-CEC] ** InActiveSourceMessage ** send message: %x:%x:%x to address %x" % (inactivesourcemessage,physaddress1,physaddress2,addressvalue)
			elif message == "avpwron":
				cmd = struct.pack('BB', sendkeymessage,sendkeypwronmessage)
				addressvalue = addressvalueav
				logcmd = "[HDMI-CEC] ** Power on A/V ** send message: %x:%x to address %x" % (sendkeymessage, sendkeypwronmessage, addressvalue)
			elif message == "avdeeppwroff":
				cmd = struct.pack('BB',sendkeymessage,sendkeypwroffmessage)
				addressvalue = addressvalueav
				logcmd = "[HDMI-CEC] ** Standby A/V (Deepstandby)** send message: %x:%x to address %x" % (sendkeymessage,sendkeypwroffmessage, addressvalue)
			elif message == "avpwroff":
				addressvalue = addressvalueav
				cmd = struct.pack('BB',sendkeymessage,sendkeypwroffmessage)
				logcmd = "[HDMI-CEC] ** Standby A/V ** send message: %x:%x to address %x" % (sendkeymessage,sendkeypwroffmessage, addressvalue)
			elif message == "activevu":
				addressvalue = addressvaluebroadcast
				cmd = struct.pack('B', activevumessage)
				logcmd = "[HDMI-CEC] ** Active VU Message ** send message: %x to address %x" % (activevumessage,addressvalue)
			if cmd:
				eHdmiCEC.getInstance().sendMessage(addressvalue, len(cmd), str(cmd))
				time.sleep(1)
			if logcmd:
				if config.hdmicec.logenabledserial.value:
					print logcmd
					if config.hdmicec.logenabledfile.value:
						filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
						system(filelog)
示例#15
0
    def __init__(self, session):
        Screen.__init__(self, session)
        self.setup_title = _("HdmiTest")

        self.HDMICEC = None
        for routine in eHdmiCEC.getInstance().messageReceived.get():
            if str(routine).find("Components.HdmiCec.HdmiCec"):
                index = eHdmiCEC.getInstance().messageReceived.get().index(
                    routine)
                self.HDMICEC = eHdmiCEC.getInstance().messageReceived.get(
                ).pop(index)
                self.activateHdmiCec()

        self['address'] = Label()
        self['sendto'] = Label()
        self.mainMenu()
        self.onChangedEntry = []
        ConfigListScreen.__init__(self,
                                  self.HdmiTestMenuList,
                                  session=session,
                                  on_change=self.changedEntry)

        self["actions"] = ActionMap(
            ["SetupActions", "ColorActions", "NumberActions", "MenuActions"], {
                "cancel": self.quit,
                "green": self.send,
                "ok": self.send,
                "red": self.quit,
                "blue": self.wakeup,
                "yellow": self.rxMonitor,
                "0": self.standbyN,
                "1": self.wakeupN,
                "5": self.clear,
                "7": self.active_sourceN,
                "9": self.inactive_sourceN,
                "menu": self.options,
            }, -2)

        self["key_green"] = Label(_("Send"))
        self["key_red"] = Label(_("Cancel"))
        self["key_yellow"] = Label(_("Monitor"))
        self["key_blue"] = Label(_("Wakeup TV"))

        self["help"] = Label(
            _("'0/1'\tStandby/WakeUp\n'5'\tClear\n'7/9'\tSource active/inactive"
              ))
        self["ltx"] = Label(_("Tx:"))
        self["lrx"] = Label(_("Rx:"))

        self['txtext'] = Label()
        self['rxtext'] = Label()

        self.txline = 0
        self.rxline = 0

        self.onLayoutFinish.append(self.layoutFinished)
示例#16
0
 def setData(self, devicetypeSend=False):
     physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
     if devicetypeSend:
         devicetype = eHdmiCEC.getInstance().getDeviceType()
         return str(
             struct.pack('BBB', int(physicaladdress / 256),
                         int(physicaladdress % 256), devicetype))
     return str(
         struct.pack('BB', int(physicaladdress / 256),
                     int(physicaladdress % 256)))
示例#17
0
	def keyOk(self):
		cmd = None
		logcmd = None
		if self["config"].getCurrent() == self.hdmiavvolup:
			address = int("5",16)
			cecmessage = int("44",16)
			cecmessagetwo = int("41",16)
			cmd = struct.pack('BB',cecmessage,cecmessagetwo)
			logcmd = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
		elif self["config"].getCurrent() == self.hdmiavvoldown:
			address = int("5",16)
			cecmessage = int("44",16)
			cecmessagetwo = int("42",16)
			cmd = struct.pack('BB',cecmessage,cecmessagetwo)
			logcmd = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
		elif self["config"].getCurrent() == self.hdmiavvolmute:
			address = int("5",16)
			cecmessage = int("44",16)
			cecmessagetwo = int("43",16)
			cmd = struct.pack('BB',cecmessage,cecmessagetwo)
			logcmd = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
		elif self["config"].getCurrent() == self.hdmiavpwron:
			address = int("5",16)
			cecmessage = int("44",16)
			cecmessagetwo = int("6D",16)
			cmd = struct.pack('BB',cecmessage,cecmessagetwo)
			logcmd = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
		elif self["config"].getCurrent() == self.hdmiavpwroff:
			address = int("5",16)
			cecmessage = int("44",16)
			cecmessagetwo = int("6C",16)
			cmd = struct.pack('BB',cecmessage,cecmessagetwo)
			logcmd = "[HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
		elif self["config"].getCurrent() == self.hdmitvpwroff:
			address = int("0",16)
			cecmessage = int("36",16)
			cmd = struct.pack('B',cecmessage)
			logcmd = "[HDMI-CEC] send cec message %x to %x" % (cecmessage,address)
		elif self["config"].getCurrent() == self.hdmitvpwron:
			address = int("0",16)
			cecmessage = int("04",16)
			cmd = struct.pack('B',cecmessage)
			logcmd = "[HDMI-CEC] send cec message %x to %x" % (cecmessage,address)
		else:
			ConfigListScreen.keySave(self)
		if cmd:
			eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
			messagecmd = int("45",16)

		if logcmd:
			if config.hdmicec.logenabledserial.value:
				print logcmd
				if config.hdmicec.logenabledfile.value:
					filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
					system(filelog)
示例#18
0
    def __init__(self):
        if config.hdmicec.enabled.value:
            assert not HdmiCec.instance, "only one HdmiCec instance is allowed!"
            HdmiCec.instance = self

            self.wait = eTimer()
            self.wait.timeout.get().append(self.sendCmd)
            self.queue = []
            self.messages = []

            self.handleTimer = eTimer()
            self.stateTimer = eTimer()
            self.stateTimer.callback.append(self.stateTimeout)
            self.repeatTimer = eTimer()
            self.repeatTimer.callback.append(self.repeatMessages)
            self.repeatCounter = 0
            self.messageCounter = 0
            self.what = ''
            self.tv_lastrequest = ''
            self.tv_powerstate = 'unknown'
            self.tv_skip_messages = False
            self.activesource = False
            self.firstrun = True

            self.sethdmipreemphasis()
            self.checkifPowerupWithoutWakingTv(
            )  # initially write 'False' to file, see below

            eHdmiCEC.getInstance().messageReceived.get().append(
                self.messageReceived)
            config.misc.standbyCounter.addNotifier(self.onEnterStandby,
                                                   initial_call=False)
            config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby,
                                                initial_call=False)
            self.setFixedPhysicalAddress(
                config.hdmicec.fixed_physical_address.value)

            self.volumeForwardingEnabled = False
            self.volumeForwardingDestination = 0
            eActionMap.getInstance().bindAction('', -maxint - 1, self.keyEvent)
            config.hdmicec.volume_forwarding.addNotifier(
                self.configVolumeForwarding, initial_call=False)
            config.hdmicec.enabled.addNotifier(self.configVolumeForwarding)

            config.hdmicec.report_active_menu.addNotifier(
                self.configReportActiveMenu, initial_call=False)
            config.hdmicec.check_tv_state.addNotifier(self.configTVstate,
                                                      initial_call=False)
            config.hdmicec.tv_standby_notinputactive.addNotifier(
                self.configTVstate, initial_call=False)
            config.hdmicec.control_tv_standby.addNotifier(self.configTVstate,
                                                          initial_call=False)

            self.checkTVstate('firstrun')
示例#19
0
def autostart(reason, **kwargs):
	global session
	if kwargs.has_key("session") and reason == 0:
		if config.hdmicec.enabled.value:
			session = kwargs["session"]
			if config.hdmicec.avvolumecontrol.value:
				## from InfoBarGenerics.py
				eActionMap.getInstance().bindAction('', -0x7FFFFFFF, volumekeyPressed)
				##
			eHdmiCEC.getInstance().messageReceived.get().append(messageReceived)
			eHdmiCEC.getInstance().messageReceivedKey.get().append(messageReceivedKey)
示例#20
0
 def hdmi1(self):
     try:
         from enigma import eHdmiCEC
         cmd = struct.pack('BBB', int("82", 16), int("10", 16), 0)
         addressvaluebroadcast = int("0F", 16)
         eHdmiCEC.getInstance().sendMessage(addressvaluebroadcast, len(cmd),
                                            str(cmd))
         cmd = struct.pack('B', int("85", 16))
         eHdmiCEC.getInstance().sendMessage(addressvaluebroadcast, len(cmd),
                                            str(cmd))
     except:
         pass
示例#21
0
 def sendMessages(self, address, messages):
     for message in messages.split(','):
         cmd = None
         if message == "wakeup":
             cmd = struct.pack('B', 0x04)
         elif message == "active":
             cmd = struct.pack('B', 0x82)
         elif message == "standby":
             cmd = struct.pack('B', 0x36)
         elif message == "inactive":
             cmd = struct.pack('B', 0x9e)
         if cmd:
             eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
示例#22
0
	def sendMessages(self, address, messages):
		for message in messages.split(','):
			cmd = None
			if message == "wakeup":
				cmd = struct.pack('B', 0x04)
			elif message == "active":
				cmd = struct.pack('B', 0x82)
			elif message == "standby":
				cmd = struct.pack('B', 0x36)
			elif message == "inactive":
				cmd = struct.pack('B', 0x9e)
			if cmd:
				eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
示例#23
0
    def address2data(self, full=False):
        if cfg.realphysicaladdress.value:
            physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
            hi = int(physicaladdress / 256)
            lo = int(physicaladdress % 256)
        else:
            hi = 16 * int(cfg.hh.value) + int(cfg.hl.value)
            lo = 16 * int(cfg.lh.value) + int(cfg.ll.value)

        if full:
            devicetype = eHdmiCEC.getInstance().getDeviceType()
            return str(struct.pack('BBB', hi, lo, devicetype))
        return str(struct.pack('BB', hi, lo))
示例#24
0
    def __init__(self):
        try:
            if HdmiCec.instance:
                raise AssertionError("only one HdmiCec instance is allowed!")
        except:
            pass
        HdmiCec.instance = self

        self.wait = eTimer()
        self.wait.timeout.get().append(self.sendCmd)
        self.waitKeyEvent = eTimer()
        self.waitKeyEvent.timeout.get().append(self.sendKeyEvent)
        self.queueKeyEvent = []
        self.repeat = eTimer()
        self.repeat.timeout.get().append(self.wakeupMessages)
        self.queue = []

        self.delay = eTimer()
        self.delay.timeout.get().append(self.sendStandbyMessages)
        self.useStandby = True

        self.handlingStandbyFromTV = False

        eHdmiCEC.getInstance().messageReceived.get().append(
            self.messageReceived)
        config.misc.standbyCounter.addNotifier(self.onEnterStandby,
                                               initial_call=False)
        config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby,
                                            initial_call=False)
        self.setFixedPhysicalAddress(
            config.hdmicec.fixed_physical_address.value)

        self.volumeForwardingEnabled = False
        self.volumeForwardingDestination = 0
        self.wakeup_from_tv = False
        eActionMap.getInstance().bindAction('', -sys.maxsize - 1,
                                            self.keyEvent)
        config.hdmicec.volume_forwarding.addNotifier(
            self.configVolumeForwarding)
        config.hdmicec.enabled.addNotifier(self.configVolumeForwarding)
        if config.hdmicec.enabled.value:
            if config.hdmicec.report_active_menu.value:
                if config.hdmicec.report_active_source.value and NavigationInstance.instance and not NavigationInstance.instance.isRestartUI(
                ):
                    self.sendMessage(0, "sourceinactive")
                self.sendMessage(0, "menuactive")
            if config.hdmicec.handle_deepstandby_events.value and (
                    not getFPWasTimerWakeup() or
                (config.usage.startup_to_standby.value == "no"
                 and config.misc.prev_wakeup_time_type.value == 3)):
                self.onLeaveStandby()
示例#25
0
文件: plugin.py 项目: ostende/test2
def autostart(reason, **kwargs):
    global session
    if kwargs.has_key("session") and reason == 0:
        if config.hdmicec.enabled.value:
            session = kwargs["session"]
            if config.hdmicec.avvolumecontrol.value:
                ## from InfoBarGenerics.py
                eActionMap.getInstance().bindAction('', -0x7FFFFFFF,
                                                    volumekeyPressed)
                ##
            eHdmiCEC.getInstance().messageReceived.get().append(
                messageReceived)
            eHdmiCEC.getInstance().messageReceivedKey.get().append(
                messageReceivedKey)
示例#26
0
    def __init__(self):
        assert not HdmiCec.instance, "only one HdmiCec instance is allowed!"
        HdmiCec.instance = self

        self.wait = eTimer()
        self.wait.timeout.get().append(self.sendCmd)
        self.repeat = eTimer()
        self.repeat.timeout.get().append(self.wakeupMessages)
        self.queue = []

        eHdmiCEC.getInstance().messageReceived.get().append(
            self.messageReceived)
        config.misc.standbyCounter.addNotifier(self.onEnterStandby,
                                               initial_call=False)
        config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby,
                                            initial_call=False)
        self.setFixedPhysicalAddress(
            config.hdmicec.fixed_physical_address.value)
        self.logicaladdress = eHdmiCEC.getInstance().getLogicalAddress()

        self.saveVolUp = None
        self.saveVolDown = None
        self.saveVolMute = None
        self.volumeForwardingDestination = 0
        config.hdmicec.volume_forwarding.addNotifier(
            self.configVolumeForwarding)
        config.hdmicec.enabled.addNotifier(self.configVolumeForwarding)
        uptime = float(open("/proc/uptime", "r").read().split()[0])
        if config.hdmicec.enabled.value and config.hdmicec.handle_deepstandby_events.value and uptime < 120:
            filename = Directories.resolveFilename(Directories.SCOPE_CONFIG,
                                                   "timers.xml")
            try:
                doc = xml.etree.cElementTree.parse(filename)
            except:
                doc = None
            if doc:
                root = doc.getroot()
                for timer in root.findall("timer"):
                    begin = int(timer.get("begin"))
                    disabled = long(timer.get("disabled") or "0")
                    justplay = long(timer.get("justplay") or "0")
                    always_zap = long(timer.get("always_zap") or "0")
                    if begin < time() or begin > time(
                    ) + 360 or disabled or justplay or always_zap:
                        continue
                    if Standby.inStandby is None:
                        Notifications.AddNotification(Standby.Standby)
                    return
            self.onLeaveStandby()
示例#27
0
文件: HdmiCec.py 项目: zukon/enigma2
 def __init__(self):
     assert HdmiCec.instance is None, "only one HdmiCec instance is allowed!"
     HdmiCec.instance = self
     self.wait = eTimer()
     self.wait.timeout.get().append(self.sendMsgQ)
     self.queue = [
     ]  # if config.hdmicec.minimum_send_interval.value != "0" queue send message ->  (sendMsgQ)
     self.waitKeyEvent = eTimer()
     self.waitKeyEvent.timeout.get().append(self.sendKeyEventQ)
     self.queueKeyEvent = [
     ]  # if config.hdmicec.minimum_send_interval.value != "0" queue key event -> sendKeyEventQ
     self.repeat = eTimer()
     self.repeat.timeout.get().append(self.sendWakeupMessages)
     self.delay = eTimer()
     self.delay.timeout.get().append(self.sendStandbyMessages)
     self.useStandby = True
     self.handlingStandbyFromTV = False
     if config.hdmicec.enabled.value and config.hdmicec.fixed_physical_address.value[
             1:3] != ".0":
         print("[HdmiCEC][init]phsyical address changed by setup value:",
               config.hdmicec.fixed_physical_address.value)
         setFixedPhysicalAddress(
             config.hdmicec.fixed_physical_address.value)
     else:
         print("[HdmiCEC][init] no set physical address ")
         setFixedPhysicalAddress(
             "0.0.0.0"
         )  # no fixed physical address send 0 to eHdmiCec C++ driver
     eHdmiCEC.getInstance().messageReceived.get().append(
         self.messageReceived)
     config.misc.standbyCounter.addNotifier(self.onEnterStandby,
                                            initial_call=False)
     #		config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby, initial_call=False)
     self.volumeForwardingEnabled = False
     self.volumeForwardingDestination = 0
     self.wakeup_from_tv = False
     eActionMap.getInstance().bindAction("", -maxsize - 1, self.keyEvent)
     config.hdmicec.volume_forwarding.addNotifier(
         self.configVolumeForwarding)
     config.hdmicec.enabled.addNotifier(self.configVolumeForwarding)
     if config.hdmicec.enabled.value:
         if config.hdmicec.report_active_menu.value:
             if config.hdmicec.report_active_source.value and NavigationInstance.instance and not NavigationInstance.instance.isRestartUI(
             ):
                 self.sendMessage(0, "sourceinactive")
             self.sendMessage(0, "menuactive")
         if config.hdmicec.handle_deepstandby_events.value and not getFPWasTimerWakeup(
         ):
             self.onLeaveStandby()
示例#28
0
	def __init__(self):
		if config.hdmicec.enabled.value:
			assert not HdmiCec.instance, "only one HdmiCec instance is allowed!"
			HdmiCec.instance = self

			self.wait = eTimer()
			self.wait.timeout.get().append(self.sendCmd)
			self.queue = []
			self.messages = []

			self.handleTimer = eTimer()
			self.stateTimer = eTimer()
			self.stateTimer.callback.append(self.stateTimeout)
			self.repeatTimer = eTimer()
			self.repeatTimer.callback.append(self.repeatMessages)
			self.repeatCounter = 0
			self.what = ''
			self.tv_lastrequest = ''
			self.tv_powerstate = 'unknown'
			self.tv_skip_messages = False
			self.activesource = False
			self.firstrun = True
			self.standbytime = 0

			self.sethdmipreemphasis()
			self.checkifPowerupWithoutWakingTv() # initially write 'False' to file, see below

			eHdmiCEC.getInstance().messageReceived.get().append(self.messageReceived)
			config.misc.standbyCounter.addNotifier(self.onEnterStandby, initial_call = False)
			config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby, initial_call = False)
			self.setFixedPhysicalAddress(config.hdmicec.fixed_physical_address.value)

			self.volumeForwardingEnabled = False
			self.volumeForwardingDestination = 0
			eActionMap.getInstance().bindAction('', -maxint - 1, self.keyEvent)
			config.hdmicec.volume_forwarding.addNotifier(self.configVolumeForwarding, initial_call = False)
			config.hdmicec.enabled.addNotifier(self.configVolumeForwarding)

			#workaround for needless messages after cancel settings
			self.old_configReportActiveMenu = config.hdmicec.report_active_menu.value
			self.old_configTVstate = config.hdmicec.check_tv_state.value or (config.hdmicec.tv_standby_notinputactive.value and config.hdmicec.control_tv_standby.value)
			#
			config.hdmicec.report_active_menu.addNotifier(self.configReportActiveMenu, initial_call = False)
			config.hdmicec.check_tv_state.addNotifier(self.configTVstate, initial_call = False)
			config.hdmicec.tv_standby_notinputactive.addNotifier(self.configTVstate, initial_call = False)
			config.hdmicec.control_tv_standby.addNotifier(self.configTVstate, initial_call = False)

			self.checkTVstate('firstrun')
示例#29
0
 def hdmiStandby(self):
     try:
         import Components.HdmiCec
         Components.HdmiCec.hdmi_cec.standbyMessages()
     except:
         pass
     try:
         from enigma import eHdmiCEC
         addressvalue = int("0", 16)
         standbymessage = int("36", 16)
         cmd = struct.pack('B', standbymessage)
         eHdmiCEC.getInstance().sendMessage(addressvalue, len(cmd),
                                            str(cmd))
         print "AQPlayer go Standby"
     except:
         pass
示例#30
0
文件: HdmiCec.py 项目: kingvuplus/New
 def activeSource(self):
     if config.hdmicec.enabled.value is True:
         physadress1 = "0x" + str(config.hdmicec.tvinput.value) + str(config.hdmicec.avinput.value)
         physadress2 = "0x00"
         cecmessage = int("0x82", 16)
         address = int("0x0F", 16)
         valuethree = int(physadress1, 16)
         valuefour = int(physadress2, 16)
         cmd = struct.pack("BBB", cecmessage, valuethree, valuefour)
         eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
         if config.hdmicec.enabletvrc.value:
             cecmessage = int("0x8E", 16)
             address = int("0", 16)
             valuethree = int("0", 16)
             cmd = struct.pack("BB", cecmessage, valuethree)
             eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
示例#31
0
	def __init__(self):
		assert not HdmiCec.instance, "only one HdmiCec instance is allowed!"
		HdmiCec.instance = self

		eHdmiCEC.getInstance().messageReceived.get().append(self.messageReceived)
		config.misc.standbyCounter.addNotifier(self.onEnterStandby, initial_call = False)
		config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby, initial_call = False)
		self.setFixedPhysicalAddress(config.hdmicec.fixed_physical_address.getValue())

		self.volumeForwardingEnabled = False
		self.volumeForwardingDestination = 0
		eRCInput.getInstance().pyKeyEvent.get().append(self.keyEvent)
		config.hdmicec.volume_forwarding.addNotifier(self.configVolumeForwarding)
		if config.hdmicec.handle_deepstandby_events.getValue():
			if not getFPWasTimerWakeup():
				self.wakeupMessages()
示例#32
0
	def activeSource(self):
		if config.hdmicec.enabled.value is True:
			physadress1 = "0x" + str(config.hdmicec.tvinput.value) + str(config.hdmicec.avinput.value)
			physadress2 = "0x00"
			cecmessage = int('0x82',16)
			address = int('0x0F',16)
			valuethree = int(physadress1,16)
			valuefour = int(physadress2,16)
			cmd = struct.pack('BBB',cecmessage,valuethree,valuefour)
			eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
			if config.hdmicec.enabletvrc.value:
					cecmessage = int('0x8E',16)
					address = int('0',16)
					valuethree = int('0',16)
					cmd = struct.pack('BB',cecmessage,valuethree)
					eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
示例#33
0
	def CECwritedebug(self, debugtext, debugprint = False):
		if debugprint and not config.hdmicec.debug.value:
			print debugtext
			return
		log_path = config.crash.debug_path.value
		if pathExists(log_path):
			stat = os.statvfs(log_path)
			disk_free = stat.f_bavail * stat.f_bsize / 1024
			if self.disk_full:
				self.start_log = True
			if not self.disk_full and disk_free < 500:
				print "[HdmiCec] write debug file failed - disk full!"
				self.disk_full = True
				return
			elif not self.disk_full and disk_free < 1000:
				self.disk_full = True
			elif disk_free >= 1000:
				self.disk_full = False
			else:
				return
			now = datetime.datetime.now()
			debugfile = os.path.join(log_path, now.strftime("Enigma2-hdmicec-%Y%m%d.log"))
			timestamp = now.strftime("%H:%M:%S.%f")[:-2]
			debugtext = "%s %s%s\n" %(timestamp, ("[   ] " if debugprint else ""), debugtext.replace("[HdmiCec] ", ""))
			if self.start_log:
				self.start_log = False
				la = eHdmiCEC.getInstance().getLogicalAddress()
				debugtext = "%s  +++  start logging  +++  physical address: %s  -  logical address: %d  -  device type: %s\n%s" %(timestamp, self.getPhysicalAddress(), la, CECaddr.get(la, "<unknown>"), debugtext)
			if self.disk_full:
				debugtext += "%s  +++  stop logging  +++  disk full!\n" % timestamp
			self.CECwritefile(debugfile, "a", debugtext)
		else:
			print "[HdmiCec] write debug file failed - log path (%s) not found!" %log_path
示例#34
0
 def hdmiWakeup(self):
     try:
         import Components.HdmiCec
         Components.HdmiCec.hdmi_cec.wakeupMessages()
     except:
         pass
     try:
         from enigma import eHdmiCEC
         addressvalue = int("0", 16)
         wakeupmessage = int("04", 16)
         cmd = struct.pack('B', wakeupmessage)
         eHdmiCEC.getInstance().sendMessage(addressvalue, len(cmd),
                                            str(cmd))
         reactor.callLater(1, self.hdmi1)
         print "AQPlayer go Wakeup"
     except:
         pass
示例#35
0
 def sendMessage(self, address, message):
     cmd = 0
     data = ''
     if message == "wakeup":
         cmd = 0x04
     elif message == "sourceactive":
         address = 0x0f  # use broadcast for active source command
         cmd = 0x82
         physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
         data = str(
             struct.pack('BB', int(physicaladdress / 256),
                         int(physicaladdress % 256)))
     elif message == "standby":
         cmd = 0x36
     elif message == "sourceinactive":
         address = 0x0f  # use broadcast for inactive source command
         physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
         cmd = 0x9d
         data = str(
             struct.pack('BB', int(physicaladdress / 256),
                         int(physicaladdress % 256)))
     elif message == "menuactive":
         cmd = 0x8e
         data = str(struct.pack('B', 0x00))
     elif message == "menuinactive":
         cmd = 0x8e
         data = str(struct.pack('B', 0x01))
     elif message == "givesystemaudiostatus":
         cmd = 0x7d
         address = 0x05
     elif message == "setsystemaudiomode":
         cmd = 0x70
         address = 0x05
         physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
         data = str(
             struct.pack('BB', int(physicaladdress / 256),
                         int(physicaladdress % 256)))
     elif message == "osdname":
         cmd = 0x47
         data = os.uname()[1]
         data = data[:14]
     elif message == "poweractive":
         cmd = 0x90
         data = str(struct.pack('B', 0x00))
     elif message == "powerinactive":
         cmd = 0x90
         data = str(struct.pack('B', 0x01))
     elif message == "reportaddress":
         address = 0x0f  # use broadcast address
         cmd = 0x84
         physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
         devicetype = eHdmiCEC.getInstance().getDeviceType()
         data = str(
             struct.pack('BBB', int(physicaladdress / 256),
                         int(physicaladdress % 256), devicetype))
     elif message == "vendorid":
         cmd = 0x87
         data = '\x00\x00\x00'
     if cmd:
         eHdmiCEC.getInstance().sendMessage(address, cmd, data, len(data))
示例#36
0
文件: HdmiCec.py 项目: sodo13/EG-gui
 def __init__(self):
     if config.hdmicec.enabled.value:
         HdmiCec.instance = self
         self.wait = eTimer()
         self.wait.timeout.get().append(self.sendCmd)
         self.queue = []
         eHdmiCEC.getInstance().messageReceived.get().append(self.messageReceived)
         config.misc.standbyCounter.addNotifier(self.onEnterStandby, initial_call=False)
         config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby, initial_call=False)
         self.setFixedPhysicalAddress(config.hdmicec.fixed_physical_address.value)
         self.volumeForwardingEnabled = False
         self.volumeForwardingDestination = 0
         eActionMap.getInstance().bindAction('', -maxint - 1, self.keyEvent)
         config.hdmicec.volume_forwarding.addNotifier(self.configVolumeForwarding)
         config.hdmicec.enabled.addNotifier(self.configVolumeForwarding)
         if config.hdmicec.handle_deepstandby_events.value:
             if not getFPWasTimerWakeup():
                 self.wakeupMessages()
         dummy = self.checkifPowerupWithoutWakingTv()
示例#37
0
文件: HdmiCec.py 项目: vucec/hdmicec
	def sendCECMessage(self, delay = True):
		self.delayTimer.stop()
		if len(self.cecmessage_queue):
			cmd, addressvalue, logcmd = self.cecmessage_queue.pop(0)
			eHdmiCEC.getInstance().sendMessage(addressvalue, len(cmd), str(cmd))
			if config.hdmicec.logenabledserial.value:
				vtilog("[HDMICEC] "+logcmd)
				#if config.hdmicec.logenabledfile.value:
				#	filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
				#	system(filelog)
			if self.log:
				self.log.info( lineno() + logcmd )
			if len(self.cecmessage_queue):
				if not delay:
					messagedelay = float(config.hdmicec.message_delay.value)/10.0
					time.sleep(messagedelay)
					self.sendCECMessage(delay = False)
				else:
					self.delayTimer.start(self.delayTimer_intervall, True)
示例#38
0
 def keyEvent(self, keyCode, keyEvent):
     if not self.volumeForwardingEnabled:
         return
     cmd = 0
     data = ''
     if keyEvent == 0:
         if keyCode == 115:
             cmd = 0x44
             data = str(struct.pack('B', 0x41))
         if keyCode == 114:
             cmd = 0x44
             data = str(struct.pack('B', 0x42))
         if keyCode == 113:
             cmd = 0x44
             data = str(struct.pack('B', 0x43))
     if keyEvent == 2:
         if keyCode == 115:
             cmd = 0x44
             data = str(struct.pack('B', 0x41))
         if keyCode == 114:
             cmd = 0x44
             data = str(struct.pack('B', 0x42))
         if keyCode == 113:
             cmd = 0x44
             data = str(struct.pack('B', 0x43))
     if keyEvent == 1:
         if keyCode == 115 or keyCode == 114 or keyCode == 113:
             cmd = 0x45
     if cmd:
         if config.hdmicec.minimum_send_interval.value != "0":
             self.queueKeyEvent.append(
                 (self.volumeForwardingDestination, cmd, data))
             if not self.waitKeyEvent.isActive():
                 self.waitKeyEvent.start(
                     int(config.hdmicec.minimum_send_interval.value), True)
         else:
             eHdmiCEC.getInstance().sendMessage(
                 self.volumeForwardingDestination, cmd, data, len(data))
         if config.hdmicec.debug.value in ["2", "3"]:
             self.debugTx(self.volumeForwardingDestination, cmd, data)
         return 1
     else:
         return 0
示例#39
0
	def sendMessage(self, address, message):
		cmd = 0
		data = ''
		if message == "wakeup":
			cmd = 0x04
		elif message == "sourceactive":
			address = 0x0f # use broadcast for active source command
			cmd = 0x82
			physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
			data = str(struct.pack('BB', int(physicaladdress/256), int(physicaladdress%256)))
		elif message == "standby":
			cmd = 0x36
		elif message == "sourceinactive":
			address = 0x0f # use broadcast for inactive source command
			physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
			cmd = 0x9d
			data = str(struct.pack('BB', int(physicaladdress/256), int(physicaladdress%256)))
		elif message == "menuactive":
			cmd = 0x8e
			data = str(struct.pack('B', 0x00))
		elif message == "menuinactive":
			cmd = 0x8e
			data = str(struct.pack('B', 0x01))
		elif message == "givesystemaudiostatus":
			cmd = 0x7d
			address = 0x05
		elif message == "setsystemaudiomode":
			cmd = 0x70
			address = 0x05
			physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
			data = str(struct.pack('BB', int(physicaladdress/256), int(physicaladdress%256)))
		elif message == "osdname":
			cmd = 0x47
			data = os.uname()[1]
			data = data[:14]
		elif message == "poweractive":
			cmd = 0x90
			data = str(struct.pack('B', 0x00))
		elif message == "powerinactive":
			cmd = 0x90
			data = str(struct.pack('B', 0x01))
		elif message == "reportaddress":
			address = 0x0f # use broadcast address
			cmd = 0x84
			physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
			devicetype = eHdmiCEC.getInstance().getDeviceType()
			data = str(struct.pack('BBB', int(physicaladdress/256), int(physicaladdress%256), devicetype))
		elif message == "vendorid":
			cmd = 0x87
			data = '\x00\x00\x00'
		elif message == "keypoweron":
			cmd = 0x44
			data = str(struct.pack('B', 0x6d))
		elif message == "keypoweroff":
			cmd = 0x44
			data = str(struct.pack('B', 0x6c))
		if cmd:
			eHdmiCEC.getInstance().sendMessage(address, cmd, data, len(data))
示例#40
0
	def __init__(self):
		assert not HdmiCec.instance, "only one HdmiCec instance is allowed!"
		HdmiCec.instance = self

		self.wait = eTimer()
		self.wait.timeout.get().append(self.sendCmd)
		self.repeat = eTimer()
		self.repeat.timeout.get().append(self.wakeupMessages)
		self.queue = []

		eHdmiCEC.getInstance().messageReceived.get().append(self.messageReceived)
		config.misc.standbyCounter.addNotifier(self.onEnterStandby, initial_call = False)
		config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby, initial_call = False)
		self.setFixedPhysicalAddress(config.hdmicec.fixed_physical_address.value)
		self.logicaladdress = eHdmiCEC.getInstance().getLogicalAddress()

		self.saveVolUp = None
		self.saveVolDown = None
		self.saveVolMute = None
		self.volumeForwardingDestination = 0
		config.hdmicec.volume_forwarding.addNotifier(self.configVolumeForwarding)
		config.hdmicec.enabled.addNotifier(self.configVolumeForwarding)
		uptime = float(open("/proc/uptime", "r").read().split()[0])
		if config.hdmicec.handle_deepstandby_events.value and uptime < 120:
			filename = Directories.resolveFilename(Directories.SCOPE_CONFIG, "timers.xml")
			try:
				doc = xml.etree.cElementTree.parse(filename)
			except:
				doc = None
			if doc:
				root = doc.getroot()
				for timer in root.findall("timer"):
					begin = int(timer.get("begin"))
					disabled = long(timer.get("disabled") or "0")
					justplay = long(timer.get("justplay") or "0")
					always_zap = long(timer.get("always_zap") or "0")
					if begin < time() or begin > time() + 360 or disabled or justplay or always_zap:
						continue
					if Standby.inStandby is None:
						Notifications.AddNotification(Standby.Standby)
					return
			self.onLeaveStandby()
示例#41
0
	def __init__(self):
		config.hdmicec = ConfigSubsection()
		config.hdmicec.enabled = ConfigYesNo(default = True)
		config.hdmicec.active_source_reply = ConfigYesNo(default = True)
		config.hdmicec.standby_message = ConfigSelection(
			choices = {
			"inactive,standby": _("TV standby"),
			"inactive": _("Source inactive"),
			"nothing": _("Nothing"),
			},
			default = "inactive,standby")
		config.hdmicec.wakeup_message = ConfigSelection(
			choices = {
			"wakeup,active": _("TV wakeup"),
			"active": _("Source active"),
			"nothing": _("Nothing"),
			},
			default = "wakeup,active")

		eHdmiCEC.getInstance().messageReceived.get().append(self.messageReceived)
		config.misc.standbyCounter.addNotifier(self.enterStandby, initial_call = False)
示例#42
0
	def keyDisconnect(self):
		cmd = None
		logcmd = None
		physaddress1 = int("0x" + str(config.hdmicec.tvinput.value) + str(config.hdmicec.avinput.value),16)
		physaddress2 = int("0x00",16)
		address = int('0',16)
		cecmessage = int('0x9D',16)
		cecmessagetwo = physaddress1
		cecmessagethree = physaddress2
		cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
		logcmd = "[VTI HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)

		if cmd:
			eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
			
		if logcmd:
			if config.hdmicec.logenabledserial.value:
				print logcmd
				if config.hdmicec.logenabledfile.value:
					filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
					system(filelog)
示例#43
0
def volumekeyPressed(key, flag):
	if config.hdmicec.avvolumecontrol.value and config.hdmicec.enabled.value and config.hdmicec.avinput.value != "0":
		if key == 113 or key == 114 or key == 115:
			address = int("5",16)
			cecmessagesendkey = int("44",16)
			cecmessagekeyevent = None
			if flag == 1:
				cecmessagekeybreak = int("45",16)
				cmd = struct.pack('B',cecmessagekeybreak)
			else:
				if key == 113:
					cecmessagekeyevent = int("43",16)
				elif key == 114:
					cecmessagekeyevent = int("42",16)
				elif key == 115:
					cecmessagekeyevent = int("41",16)
				if cecmessagekeyevent:
					cmd = struct.pack('BB',cecmessagesendkey,cecmessagekeyevent)
			if cmd:
				eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
			return 1
	return 0
示例#44
0
	def __init__(self):
		assert not HdmiCec.instance, "only one HdmiCec instance is allowed!"
		HdmiCec.instance = self

		self.wait = eTimer()
		self.wait.timeout.get().append(self.sendCmd)
		self.repeat = eTimer()
		self.repeat.timeout.get().append(self.wakeupMessages)
		self.queue = []

		eHdmiCEC.getInstance().messageReceived.get().append(self.messageReceived)
		config.misc.standbyCounter.addNotifier(self.onEnterStandby, initial_call = False)
		config.misc.DeepStandby.addNotifier(self.onEnterDeepStandby, initial_call = False)
		self.setFixedPhysicalAddress(config.hdmicec.fixed_physical_address.value)

		self.volumeForwardingEnabled = False
		self.volumeForwardingDestination = 0
		eActionMap.getInstance().bindAction('', -maxint - 1, self.keyEvent)
		config.hdmicec.volume_forwarding.addNotifier(self.configVolumeForwarding)
		config.hdmicec.enabled.addNotifier(self.configVolumeForwarding)
		if config.hdmicec.enabled.value and config.hdmicec.handle_deepstandby_events.value and not getFPWasTimerWakeup():
			self.onLeaveStandby()
示例#45
0
	def keyEvent(self, keyCode, keyEvent):
		if not self.volumeForwardingEnabled: return
		cmd = 0
		data = ''
		if keyEvent == 0:
			if keyCode == 115:
				cmd = 0x44
				data = str(struct.pack('B', 0x41))
			if keyCode == 114:
				cmd = 0x44
				data = str(struct.pack('B', 0x42))
			if keyCode == 113:
				cmd = 0x44
				data = str(struct.pack('B', 0x43))
		if keyEvent == 2:
			if keyCode == 115:
				cmd = 0x44
				data = str(struct.pack('B', 0x41))
			if keyCode == 114:
				cmd = 0x44
				data = str(struct.pack('B', 0x42))
			if keyCode == 113:
				cmd = 0x44
				data = str(struct.pack('B', 0x43))
		if keyEvent == 1:
			if keyCode == 115 or keyCode == 114 or keyCode == 113:
				cmd = 0x45
		if cmd:
			if config.hdmicec.minimum_send_interval.value != "0":
				self.queueKeyEvent.append((self.volumeForwardingDestination, cmd, data))
				if not self.waitKeyEvent.isActive():
					self.waitKeyEvent.start(int(config.hdmicec.minimum_send_interval.value), True)
			else:
				eHdmiCEC.getInstance().sendMessage(self.volumeForwardingDestination, cmd, data, len(data))
			if config.hdmicec.debug.value in["2","3"]:
				self.debugTx(self.volumeForwardingDestination, cmd, data)
			return 1
		else:
			return 0
示例#46
0
	def getPhysicalAddress(self):
		physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
		hexstring = '%04x' % physicaladdress
		return hexstring[0] + '.' + hexstring[1] + '.' + hexstring[2] + '.' + hexstring[3]
示例#47
0
def messageReceived(address, message):

		logcmd = "[VTI HDMI-CEC] received cec message %x from %x" % (message, address)
		if logcmd:
			if config.hdmicec.logenabledserial.value:
				print logcmd
				if config.hdmicec.logenabledfile.value:
					filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
					system(filelog)

		if config.hdmicec.enabled.value:
			from Screens.Standby import inStandby
			from Screens.Standby import Standby

			cmd = None
			cmdtwo = None
			addresstwo = None
			logcmd = None
			logcmdtwo = None

			physaddress1 = int("0x" + str(config.hdmicec.tvinput.value) + str(config.hdmicec.avinput.value),16)
			physaddress2 = int("0x00",16)

			addresstv = int("0x00",16)
			addressav = int("0x05",16)
			addressglobal = int("0x0F",16)

			powerstatereportmessage = int("0x90",16)
			powerstate = int("0x00",16)

			physaddressmessage = int('0x84',16)
			devicetypmessage = int('0x03',16)

			activesourcemessage = int('0x82',16)

			menuonmessage = int('0x8E',16)
			menustatemessage = int('0x00',16)

			setnamemessage = int('0x47',16)

			sendkeymessage = int("44",16)
			sendkeypwronmessage = int("6D",16)
			sendkeypwroffmessage = int("6C",16)

			if message == 0x8f: # request power state
				address = addresstv
				cecmessage = powerstatereportmessage
				cecmessagetwo = powerstate
				cmd = struct.pack('BB',cecmessage,cecmessagetwo)
				logcmd = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)

			elif message == 0x83: # request physical address
				address = addressglobal
				cecmessage = physaddressmessage
				cecmessagetwo = physaddress1
				cecmessagethree = physaddress2
				cecmessagefour = devicetypmessage
				cmd = struct.pack('BBBB',cecmessage,cecmessagetwo,cecmessagethree,cecmessagefour)
				logcmd = "[VTI HDMI-CEC] send cec message %x:%x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,cecmessagefour,address)

			elif message == 0x86: # request streampath
				if (inStandby) and (config.hdmicec.vuwakeup_message.value == "vuwakeup"):
					inStandby.Power()
				address = addressglobal
				cecmessage = activesourcemessage
				cecmessagetwo = physaddress1
				cecmessagethree = physaddress2
				cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
				logcmd = "[VTI HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)

				if config.hdmicec.enabletvrc.value:
					addresstwo = addresstv
					cecmessage = menuonmessage
					cecmessagetwo = menustatemessage
					cmdtwo = struct.pack('BB',cecmessage,cecmessagetwo)
					logcmdtwo = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)

			elif message == 0x8d: # request menu state
				if config.hdmicec.enabletvrc.value:
					address = addresstv
					cecmessage = menuonmessage
					cecmessagetwo = menustatemessage
					cmd = struct.pack('BB',cecmessage,cecmessagetwo)
					logcmd = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)

			elif message == 0x46: # request device name
				address = addresstv
				cecmessage = setnamemessage
				name_len = len(config.hdmicec.device_name.value)
				if name_len == 0:
					cecmessagetwo ="VU+"
					cmd = struct.pack('B4s',cecmessage,cecmessagetwo)
				else:
					cecmessagetwo = config.hdmicec.device_name.value
					cmd = struct.pack('B'+str(name_len+1)+'s',cecmessage,cecmessagetwo)
				logcmd = "[VTI HDMI-CEC] send cec message %x:%s to %x" % (cecmessage,cecmessagetwo,address)

			elif message == 0x85: # request active source
				if not inStandby:
					if config.hdmicec.active_source_reply.value or hdmi_cec.initial_active_source_call == True:
						address = addressglobal
						cecmessage = activesourcemessage
						cecmessagetwo = physaddress1
						cecmessagethree = physaddress2
						cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
						logcmd = "[VTI HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)

					if config.hdmicec.enabletvrc.value:
						addresstwo = addresstv
						cecmessage = menuonmessage
						cecmessagetwo = menustatemessage
						cmdtwo = struct.pack('BB',cecmessage,cecmessagetwo)
						logcmdtwo = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)

				elif inStandby:
					if config.hdmicec.vuwakeup_message.value == "vuwakeup":
						inStandby.Power()
						address = addressglobal
						cecmessage = activesourcemessage
						cecmessagetwo = physaddress1
						cecmessagethree = physaddress2
						cmd = struct.pack('BBB',cecmessage,cecmessagetwo,cecmessagethree)
						logcmd = "[VTI HDMI-CEC] send cec message %x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,address)
						
						if config.hdmicec.enabletvrc.value:
							addresstwo = addresstv
							cecmessage = menuonmessage
							cecmessagetwo = menustatemessage
							cmdtwo = struct.pack('BB',cecmessage,cecmessagetwo)
							logcmdtwo = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)

			elif message == 0x36:
				if config.hdmicec.vustandby_message.value == "vustandby":
					if inStandby == None:
						logcmd = "[VTI HDMI-CEC] VU+ STB goto standby"
						session.open(Standby)
				elif config.hdmicec.vustandby_message.value == "vudeepstandby":
					import Screens.Standby
					logcmd = "[VTI HDMI-CEC] VU+ STB goto deepstandby"
					session.open(Screens.Standby.TryQuitMainloop,1)

			if inStandby == None:
				if cmd:
					eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
				if cmdtwo:
					eHdmiCEC.getInstance().sendMessage(addresstwo, len(cmdtwo), str(cmdtwo))

				if logcmd:
					if config.hdmicec.logenabledserial.value:
						print logcmd
						if config.hdmicec.logenabledfile.value:
							filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
							system(filelog)
				if logcmdtwo:
					if config.hdmicec.logenabledserial.value:
						print logcmdtwo
						if config.hdmicec.logenabledfile.value:
							filelog = "echo %s >> /tmp/hdmicec.log" % (logcmdtwo)
							system(filelog)
示例#48
0
	def sendCmd(self):
		if len(self.queue):
			(address, cmd, data) = self.queue.pop(0)
			eHdmiCEC.getInstance().sendMessage(address, cmd, data, len(data))
			self.wait.start(int(config.hdmicec.minimum_send_interval.getValue()), True)
示例#49
0
	def messageReceived(self, message):
		if config.hdmicec.enabled.getValue():
			from Screens.Standby import inStandby
			cmd = message.getCommand()
			data = 16 * '\x00'
			length = message.getData(data, len(data))
			if cmd == 0x00: # feature abort
				if data[0] == '\x44':
					print 'eHdmiCec: volume forwarding not supported by device %02x'%(message.getAddress())
					self.volumeForwardingEnabled = False;
			elif cmd == 0x46: # request name
				self.sendMessage(message.getAddress(), 'osdname')
			elif cmd == 0x7e or cmd == 0x72: # system audio mode status
				if data[0] == '\x01':
					self.volumeForwardingDestination = 5; # on: send volume keys to receiver
				else:
					self.volumeForwardingDestination = 0; # off: send volume keys to tv
				if config.hdmicec.volume_forwarding.getValue():
					print 'eHdmiCec: volume forwarding to device %02x enabled'% self.volumeForwardingDestination
					self.volumeForwardingEnabled = True;
			elif cmd == 0x8f: # request power status
				if inStandby:
					self.sendMessage(message.getAddress(), 'powerinactive')
				else:
					self.sendMessage(message.getAddress(), 'poweractive')
			elif cmd == 0x83: # request address
				self.sendMessage(message.getAddress(), 'reportaddress')
			elif cmd == 0x86: # request streaming path
				physicaladdress = ord(data[0]) * 256 + ord(data[1])
				ouraddress = eHdmiCEC.getInstance().getPhysicalAddress()
				if physicaladdress == ouraddress:
					if not inStandby:
						if config.hdmicec.report_active_source.getValue():
							self.sendMessage(message.getAddress(), 'sourceactive')
			elif cmd == 0x85: # request active source
				if not inStandby:
					if config.hdmicec.report_active_source.getValue():
						self.sendMessage(message.getAddress(), 'sourceactive')
			elif cmd == 0x8c: # request vendor id
				self.sendMessage(message.getAddress(), 'vendorid')
			elif cmd == 0x8d: # menu request
				requesttype = ord(data[0])
				if requesttype == 2: # query
					if inStandby:
						self.sendMessage(message.getAddress(), 'menuinactive')
					else:
						self.sendMessage(message.getAddress(), 'menuactive')

			# handle standby request from the tv
			if cmd == 0x36 and config.hdmicec.handle_tv_standby.getValue():
				self.standby()

			# handle wakeup requests from the tv
			if config.hdmicec.handle_tv_wakeup.getValue():
				if cmd == 0x04 and config.hdmicec.tv_wakeup_detection.getValue() == "wakeup":
					self.wakeup()
				elif cmd == 0x84 and config.hdmicec.tv_wakeup_detection.getValue() == "tvreportphysicaladdress":
					if (ord(data[0]) * 256 + ord(data[1])) == 0 and ord(data[2]) == 0:
						self.wakeup()
				elif cmd == 0x85 and config.hdmicec.tv_wakeup_detection.getValue() == "sourcerequest":
					self.wakeup()
				elif cmd == 0x86 and config.hdmicec.tv_wakeup_detection.getValue() == "streamrequest":
					physicaladdress = ord(data[0]) * 256 + ord(data[1])
					ouraddress = eHdmiCEC.getInstance().getPhysicalAddress()
					if physicaladdress == ouraddress:
						self.wakeup()
				elif cmd == 0x46 and config.hdmicec.tv_wakeup_detection.getValue() == "osdnamerequest":
					self.wakeup()
				elif cmd != 0x36 and config.hdmicec.tv_wakeup_detection.getValue() == "activity":
					self.wakeup()
示例#50
0
	def sendMessage(self, address, message):
		if config.hdmicec.enabled.value:
			cmd = 0
			data = ''
			if message == "wakeup":
				cmd = 0x04
			elif message == "sourceactive":
				address = 0x0f # use broadcast for active source command
				cmd = 0x82
				physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
				data = str(struct.pack('BB', int(physicaladdress/256), int(physicaladdress%256)))
			elif message == "standby":
				cmd = 0x36
			elif message == "sourceinactive":
				physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
				cmd = 0x9d
				data = str(struct.pack('BB', int(physicaladdress/256), int(physicaladdress%256)))
			elif message == "menuactive":
				cmd = 0x8e
				data = str(struct.pack('B', 0x00))
			elif message == "menuinactive":
				cmd = 0x8e
				data = str(struct.pack('B', 0x01))
			elif message == "givesystemaudiostatus":
				cmd = 0x7d
				address = 0x05
			elif message == "setsystemaudiomode":
				cmd = 0x70
				address = 0x05
				physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
				data = str(struct.pack('BB', int(physicaladdress/256), int(physicaladdress%256)))
			elif message == "osdname":
				cmd = 0x47
				data = os.uname()[1]
				data = data[:14]
			elif message == "poweractive":
				cmd = 0x90
				data = str(struct.pack('B', 0x00))
			elif message == "powerinactive":
				cmd = 0x90
				data = str(struct.pack('B', 0x01))
			elif message == "reportaddress":
				address = 0x0f # use broadcast address
				cmd = 0x84
				physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
				devicetype = eHdmiCEC.getInstance().getDeviceType()
				data = str(struct.pack('BBB', int(physicaladdress/256), int(physicaladdress%256), devicetype))
			elif message == "vendorid":
				cmd = 0x87
				data = '\x00\x00\x00'
			elif message == "keypoweron":
				cmd = 0x44
				data = str(struct.pack('B', 0x6d))
			elif message == "keypoweroff":
				cmd = 0x44
				data = str(struct.pack('B', 0x6c))
			if cmd:
				if config.hdmicec.minimum_send_interval.value != "0" and message != "standby": # Use no interval time when message is standby. usefull for Panasonic TV
					self.queue.append((address, cmd, data))
					if not self.wait.isActive():
						self.wait.start(int(config.hdmicec.minimum_send_interval.value), True)
				else:
					eHdmiCEC.getInstance().sendMessage(address, cmd, data, len(data))
示例#51
0
	def sendKeyEvent(self):
		if len(self.queueKeyEvent):
			(address, cmd, data) = self.queueKeyEvent.pop(0)
			eHdmiCEC.getInstance().sendMessage(address, cmd, data, len(data))
			self.waitKeyEvent.start(int(config.hdmicec.minimum_send_interval.value), True)
示例#52
0
	def setData(self, devicetypeSend=False):
		physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
		if devicetypeSend:
			devicetype = eHdmiCEC.getInstance().getDeviceType()
			return str(struct.pack('BBB', int(physicaladdress/256), int(physicaladdress%256), devicetype))
		return str(struct.pack('BB', int(physicaladdress/256), int(physicaladdress%256)))
示例#53
0
	def messageReceived(self, message):
		if config.hdmicec.enabled.value:
			from Screens.Standby import inStandby
			cmd = message.getCommand()
			data = 16 * '\x00'
			length = message.getData(data, len(data))

			if config.hdmicec.debug.value != "0":
				self.debugRx(length, cmd, data)
			if cmd == 0x00:
				if length == 0: # only polling message ( it's some as ping )
					print "eHdmiCec: received polling message"
				else:
					# feature abort
					if data[0] == '\x44':
						print 'eHdmiCec: volume forwarding not supported by device %02x'%(message.getAddress())
						self.volumeForwardingEnabled = False
			elif cmd == 0x46: # request name
				self.sendMessage(message.getAddress(), 'osdname')
			elif cmd == 0x7e or cmd == 0x72: # system audio mode status
				if data[0] == '\x01':
					self.volumeForwardingDestination = 5 # on: send volume keys to receiver
				else:
					self.volumeForwardingDestination = 0 # off: send volume keys to tv
				if config.hdmicec.volume_forwarding.value:
					print 'eHdmiCec: volume forwarding to device %02x enabled'%(self.volumeForwardingDestination)
					self.volumeForwardingEnabled = True
			elif cmd == 0x8f: # request power status
				if inStandby:
					self.sendMessage(message.getAddress(), 'powerinactive')
				else:
					self.sendMessage(message.getAddress(), 'poweractive')
			elif cmd == 0x83: # request address
				self.sendMessage(message.getAddress(), 'reportaddress')
			elif cmd == 0x86: # request streaming path
				physicaladdress = ord(data[0]) * 256 + ord(data[1])
				ouraddress = eHdmiCEC.getInstance().getPhysicalAddress()
				if physicaladdress == ouraddress:
					if not inStandby:
						if config.hdmicec.report_active_source.value:
							self.sendMessage(message.getAddress(), 'sourceactive')
			elif cmd == 0x85: # request active source
				if not inStandby:
					if config.hdmicec.report_active_source.value:
						self.sendMessage(message.getAddress(), 'sourceactive')
			elif cmd == 0x8c: # request vendor id
				self.sendMessage(message.getAddress(), 'vendorid')
			elif cmd == 0x8d: # menu request
				requesttype = ord(data[0])
				if requesttype == 2: # query
					if inStandby:
						self.sendMessage(message.getAddress(), 'menuinactive')
					else:
						self.sendMessage(message.getAddress(), 'menuactive')
			elif cmd == 0x90: # receive powerstatus report
				if ord(data[0]) == 0: # some box is powered
					self.useStandby = False
					print "[HDMI-CEC] powered box found"
			elif cmd == 0x9F: # request get CEC version
				self.sendMessage(message.getAddress(), 'sendcecversion')

			# handle standby request from the tv
			if cmd == 0x36 and config.hdmicec.handle_tv_standby.value:
				self.standby()

			# handle wakeup requests from the tv
			if inStandby and config.hdmicec.handle_tv_wakeup.value:
				if cmd == 0x04 and config.hdmicec.tv_wakeup_detection.value == "wakeup":
					self.wakeup()
				elif cmd == 0x83 and config.hdmicec.tv_wakeup_detection.value == "requestphysicaladdress":
						self.wakeup()
				elif cmd == 0x84 and config.hdmicec.tv_wakeup_detection.value == "tvreportphysicaladdress":
					if (ord(data[0]) * 256 + ord(data[1])) == 0 and ord(data[2]) == 0:
						self.wakeup()
				elif cmd == 0x85 and config.hdmicec.tv_wakeup_detection.value == "sourcerequest":
					self.wakeup()
				elif cmd == 0x86 and config.hdmicec.tv_wakeup_detection.value == "streamrequest":
					physicaladdress = ord(data[0]) * 256 + ord(data[1])
					ouraddress = eHdmiCEC.getInstance().getPhysicalAddress()
					if physicaladdress == ouraddress:
						self.wakeup()
				elif cmd == 0x8C and config.hdmicec.tv_wakeup_detection.value == "requestvendor":
						self.wakeup()
				elif cmd == 0x46 and config.hdmicec.tv_wakeup_detection.value == "osdnamerequest":
					self.wakeup()
				elif cmd != 0x36 and config.hdmicec.tv_wakeup_detection.value == "activity":
					self.wakeup()
示例#54
0
	def sendMessage(self, address, message):
		cmd = 0
		data = ''
		if message == "wakeup":
			cmd = 0x04
		elif message == "sourceactive":
			address = 0x0f # use broadcast for active source command
			cmd = 0x82
			data = self.setData()
		elif message == "standby":
			cmd = 0x36
		elif message == "sourceinactive":
			cmd = 0x9d
			data = self.setData()
		elif message == "menuactive":
			cmd = 0x8e
			data = str(struct.pack('B', 0x00))
		elif message == "menuinactive":
			cmd = 0x8e
			data = str(struct.pack('B', 0x01))
		elif message == "givesystemaudiostatus":
			cmd = 0x7d
			address = 0x05
		elif message == "setsystemaudiomode":
			cmd = 0x70
			address = 0x05
			data = self.setData()
		elif message == "osdname":
			cmd = 0x47
			data = os.uname()[1]
			data = data[:14]
		elif message == "poweractive":
			cmd = 0x90
			data = str(struct.pack('B', 0x00))
		elif message == "powerinactive":
			cmd = 0x90
			data = str(struct.pack('B', 0x01))
		elif message == "reportaddress":
			address = 0x0f # use broadcast address
			cmd = 0x84
			data = self.setData(True)
		elif message == "vendorid":
			cmd = 0x87
			data = '\x00\x00\x00'
		elif message == "keypoweron":
			cmd = 0x44
			data = str(struct.pack('B', 0x6d))
		elif message == "keypoweroff":
			cmd = 0x44
			data = str(struct.pack('B', 0x6c))
		elif message == "sendcecversion":
			cmd = 0x9E
			data = str(struct.pack('B', 0x04)) # v1.3a
		elif message == "requestactivesource":
			address = 0x0f # use broadcast address
			cmd = 0x85
		elif message == "getpowerstatus":
			self.useStandby = True;
			address = 0x0f # use broadcast address => boxes will send info
			cmd = 0x8f

		if cmd:
			if config.hdmicec.minimum_send_interval.value != "0" and message != "standby": # Use no interval time when message is standby. usefull for Panasonic TV
				self.queue.append((address, cmd, data))
				if not self.wait.isActive():
					self.wait.start(int(config.hdmicec.minimum_send_interval.value), True)
			else:
				eHdmiCEC.getInstance().sendMessage(address, cmd, data, len(data))
			if config.hdmicec.debug.value in["1","3"]:
				self.debugTx(address, cmd, data)
示例#55
0
	def setFixedPhysicalAddress(self, address):
		if address != config.hdmicec.fixed_physical_address.value:
			config.hdmicec.fixed_physical_address.value = address
			config.hdmicec.fixed_physical_address.save()
		hexstring = address[0] + address[2] + address[4] + address[6]
		eHdmiCEC.getInstance().setFixedPhysicalAddress(int(float.fromhex(hexstring)))
示例#56
0
	def keySend(self):
		cmd = None
		logcmd = None
		addresstmp=config.hdmicec.input_address.value
		tmp1=config.hdmicec.input_value1.value
		tmp2=config.hdmicec.input_value2.value
		tmp3=config.hdmicec.input_value3.value
		tmp4=config.hdmicec.input_value4.value
		address=int(addresstmp,16)
		if address not in range(0,256):
				address = 255
		if tmp4:
			val1=int(tmp1,16)
			val2=int(tmp2,16)
			val3=int(tmp3,16)
			val4=int(tmp4,16)
			if val1 not in range(0,256):
				val1 = 00
			if val2 not in range(0,256):
				val2 = 00
			if val3 not in range(0,256):
				val3 = 00
			if val4 not in range(0,256):
				val4 = 00
			cmd = struct.pack('BBBB',val1,val2,val3,val4)
			logcmd = "[VTI HDMI-CEC] ** Test Message ** Send message value: %x:%x:%x:%x to address %x" % (val1,val2,val3,val4,address)
		else:

			if tmp3:
				val1=int(tmp1,16)
				val2=int(tmp2,16)
				val3=int(tmp3,16)
				if val1 not in range(0,256):
					val1 = 00
				if val2 not in range(0,256):
					val2 = 00
				if val3 not in range(0,256):
					val3 = 00
				cmd = struct.pack('BBB',val1,val2,val3)
				logcmd = "[VTI HDMI-CEC] ** Test Message ** Send message value: %x:%x:%x to address %x" % (val1,val2,val3,address)
			else:

				if tmp2:
					val1=int(tmp1,16)
					val2=int(tmp2,16)
					if val1 not in range(0,256):
						val1 = 00
					if val2 not in range(0,256):
						val2 = 00
					cmd = struct.pack('BB',val1,val2)
					logcmd = "[VTI HDMI-CEC] ** Test Message ** Send message value: %x:%x to address %x" % (val1,val2,address)
				else:
					val1=int(tmp1,16)
					if val1 not in range(0,256):
						val1 = 00
					cmd = struct.pack('B',val1)
					logcmd = "[VTI HDMI-CEC] ** Test Message ** Send message value: %x to address %x" % (val1, address)

		if cmd:
			eHdmiCEC.getInstance().sendMessage(address, len(cmd), str(cmd))
			
		if logcmd:
			if config.hdmicec.logenabledserial.value:
				print logcmd
				if config.hdmicec.logenabledfile.value:
					filelog = "echo %s >> /tmp/hdmicec.log" % (logcmd)
					system(filelog)
示例#57
0
	def messageReceived(self, message):
		if config.hdmicec.enabled.value:
			checkstate = self.stateTimer.isActive()
			data = 16 * '\x00'
			cmd = message.getCommand()
			length = message.getData(data, len(data))
			address = message.getAddress()

			#// workaround for wrong address vom driver (e.g. hd51, message comes from tv -> address is only sometimes 0, dm920, same tv -> address is always 0)
			if address > 15:
				address = 0
				print "[HdmiCec] workaround for wrong received address data enabled"
			#//

			if cmd == 0x00: # feature abort
				if data[0] == '\x44':
					print 'eHdmiCec: volume forwarding not supported by device %02x'%(address)
					self.volumeForwardingEnabled = False
			elif cmd == 0x46: # request name
				self.sendMessage(address, 'osdname')
			elif cmd in (0x7e, 0x72): # system audio mode status
				if data[0] == '\x01':
					self.volumeForwardingDestination = 5 # on: send volume keys to receiver
				else:
					self.volumeForwardingDestination = 0 # off: send volume keys to tv
				if config.hdmicec.volume_forwarding.value:
					print 'eHdmiCec: volume forwarding to device %02x enabled'% self.volumeForwardingDestination
					self.volumeForwardingEnabled = True
			elif cmd == 0x8f: # request power status
				if Screens.Standby.inStandby:
					self.sendMessage(address, 'powerinactive')
				else:
					self.sendMessage(address, 'poweractive')
			elif cmd == 0x83: # request address
				self.sendMessage(address, 'reportaddress')
			elif cmd == 0x85: # request active source
				if not Screens.Standby.inStandby and config.hdmicec.report_active_source.value:
					self.sendMessage(address, 'sourceactive')
			elif cmd == 0x8c: # request vendor id
				self.sendMessage(address, 'vendorid')
			elif cmd == 0x8d: # menu request
				requesttype = ord(data[0])
				if requesttype == 2: # query
					if Screens.Standby.inStandby:
						self.sendMessage(address, 'menuinactive')
					else:
						self.sendMessage(address, 'menuactive')
			elif address == 0 and cmd == 0x90: # report power state from the tv
				if data[0] == '\x00':
					self.tv_powerstate = "on"
				elif data[0] == '\x01':
					self.tv_powerstate = "standby"
				elif data[0] == '\x02':
					self.tv_powerstate = "get_on"
				elif data[0] == '\x03':
					self.tv_powerstate = "get_standby"
				if checkstate and not self.firstrun:
					self.checkTVstate('powerstate')
				elif self.firstrun and not config.hdmicec.handle_deepstandby_events.value:
					self.firstrun = False
				else:
					self.checkTVstate()
			elif address == 0 and cmd == 0x36: # handle standby request from the tv
				if config.hdmicec.handle_tv_standby.value != 'disabled':
					self.handleTVRequest('tvstandby')
				self.checkTVstate('tvstandby')
			elif cmd == 0x80: # routing changed
				oldaddress = ord(data[0]) * 256 + ord(data[1])
				newaddress = ord(data[2]) * 256 + ord(data[3])
				ouraddress = eHdmiCEC.getInstance().getPhysicalAddress()
				active = (newaddress == ouraddress)
				hexstring = '%04x' % oldaddress
				oldaddress = hexstring[0] + '.' + hexstring[1] + '.' + hexstring[2] + '.' + hexstring[3]
				hexstring = '%04x' % newaddress
				newaddress = hexstring[0] + '.' + hexstring[1] + '.' + hexstring[2] + '.' + hexstring[3]
				print "[HdmiCec] routing has changed... from '%s' to '%s' (to our address: %s)" %(oldaddress, newaddress, active)
			elif cmd in (0x86, 0x82): # set streaming path, active source changed
				newaddress = ord(data[0]) * 256 + ord(data[1])
				ouraddress = eHdmiCEC.getInstance().getPhysicalAddress()
				active = (newaddress == ouraddress)
				if checkstate or self.activesource != active:
					if checkstate:
						txt = 'our receiver is active source'
					else:
						txt = 'active source'
						if cmd == 0x86: txt = 'streaming path'
						txt += ' has changed... to our address'
					print '[HdmiCec] %s: %s' %(txt, active)
				self.activesource = active
				if not checkstate:
					if cmd == 0x86 and not Screens.Standby.inStandby and self.activesource:
						self.sendMessage(address, 'sourceactive')
						if config.hdmicec.report_active_menu.value:
							self.sendMessage(0, 'menuactive')
					if config.hdmicec.handle_tv_input.value != 'disabled':
						self.handleTVRequest('activesource')
					self.checkTVstate('changesource')
				else:
					self.checkTVstate('activesource')

			# handle wakeup requests from the tv
			wakeup = False
			if address == 0 and cmd == 0x44 and data[0] in ('\x40', '\x6D'): # handle wakeup from tv hdmi-cec menu (e.g. panasonic tv apps, viera link)
				wakeup = True
			elif not checkstate and config.hdmicec.handle_tv_wakeup.value != 'disabled':
				if address == 0:
					if ((cmd == 0x04 and config.hdmicec.handle_tv_wakeup.value == "wakeup") or 
						(cmd == 0x85 and config.hdmicec.handle_tv_wakeup.value == "sourcerequest") or
						(cmd == 0x46 and config.hdmicec.handle_tv_wakeup.value == "osdnamerequest") or 
						(cmd != 0x36 and config.hdmicec.handle_tv_wakeup.value == "activity")):
						wakeup = True
					elif cmd == 0x84 and config.hdmicec.handle_tv_wakeup.value == "tvreportphysicaladdress":
						if (ord(data[0]) * 256 + ord(data[1])) == 0 and ord(data[2]) == 0:
							wakeup = True
				if (cmd == 0x80 and config.hdmicec.handle_tv_wakeup.value == "routingrequest") or (cmd == 0x86 and config.hdmicec.handle_tv_wakeup.value == "streamrequest"):
					if active:
						wakeup = True
			if wakeup:
				self.wakeup()
示例#58
0
	def sendMessage(self, address, message):
		if config.hdmicec.enabled.value:
			cmd = 0
			data = ''
			if message == "wakeup":
				cmd = 0x04
			elif message == "sourceactive":
				address = 0x0f # use broadcast address
				cmd = 0x82
				physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
				data = str(struct.pack('BB', int(physicaladdress/256), int(physicaladdress%256)))
			elif message == "routinginfo":
				address = 0x0f # use broadcast address
				cmd = 0x81
				physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
				data = str(struct.pack('BB', int(physicaladdress/256), int(physicaladdress%256)))
			elif message == "standby":
				cmd = 0x36
			elif message == "sourceinactive":
				physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
				cmd = 0x9d
				data = str(struct.pack('BB', int(physicaladdress/256), int(physicaladdress%256)))
			elif message == "menuactive":
				cmd = 0x8e
				data = str(struct.pack('B', 0x00))
			elif message == "menuinactive":
				cmd = 0x8e
				data = str(struct.pack('B', 0x01))
			elif message == "givesystemaudiostatus":
				cmd = 0x7d
			elif message == "setsystemaudiomode":
				cmd = 0x70
				physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
				data = str(struct.pack('BB', int(physicaladdress/256), int(physicaladdress%256)))
			elif message == "activatesystemaudiomode":
				cmd = 0x72
				data = str(struct.pack('B', 0x01))
			elif message == "deactivatesystemaudiomode":
				cmd = 0x72
				data = str(struct.pack('B', 0x00))
			elif message == "osdname":
				cmd = 0x47
				data = os.uname()[1]
				data = data[:14]
			elif message == "poweractive":
				cmd = 0x90
				data = str(struct.pack('B', 0x00))
			elif message == "powerinactive":
				cmd = 0x90
				data = str(struct.pack('B', 0x01))
			elif message == "reportaddress":
				address = 0x0f # use broadcast address
				cmd = 0x84
				physicaladdress = eHdmiCEC.getInstance().getPhysicalAddress()
				devicetype = eHdmiCEC.getInstance().getDeviceType()
				data = str(struct.pack('BBB', int(physicaladdress/256), int(physicaladdress%256), devicetype))
			elif message == "vendorid":
				cmd = 0x87
				data = '\x00\x00\x00'
			elif message == "keypoweron":
				cmd = 0x44
				data = str(struct.pack('B', 0x6d))
			elif message == "keypoweroff":
				cmd = 0x44
				data = str(struct.pack('B', 0x6c))
			elif message == "powerstate":
				cmd = 0x8f
			if cmd:
				if config.misc.DeepStandby.value: # no delay for messages before go in to deep-standby
					eHdmiCEC.getInstance().sendMessage(address, cmd, data, len(data))
				else:
					self.queue.append((address, cmd, data))
					if not self.wait.isActive():
						self.wait.start(int(config.hdmicec.minimum_send_interval.value), True)