From: hschang Date: Thu, 30 May 2013 12:27:27 +0000 (+0200) Subject: Update lcd4linux X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_openvuplus;a=commitdiff_plain;h=99fc8a7a870c6b2ac180c883c8eb4082742de664 Update lcd4linux - support weather display. - separate lcd4linux and lcd4linuxsupport. - png-util, fix & cleanup. --- diff --git a/meta-openvuplus/recipes-vuplus/duo2lcd4linux/duo2lcd4linux_0.1.bb b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/duo2lcd4linux_0.1.bb index a448849..378e730 100644 --- a/meta-openvuplus/recipes-vuplus/duo2lcd4linux/duo2lcd4linux_0.1.bb +++ b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/duo2lcd4linux_0.1.bb @@ -4,25 +4,26 @@ LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=80 SRC_URI = " \ file://LCD4linux.tar.gz \ + file://wetter.tar.gz \ file://duo2lcd4linux.patch;patch=1;pnum=1 \ " -RDEPENDS = "python-codecs python-datetime python-textutils python-imaging python-pyusb png-util" +RDEPENDS = "enigma2 python-codecs python-datetime python-imaging python-textutils python-shell python-ctypes python-pyusb lcd4linux" S = "${WORKDIR}/LCD4linux" -PR = "r3" +PR = "r4" PLUGINPATH = "/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux" do_install() { install -d ${D}${PLUGINPATH} - install -m 0755 ${S}/*.py ${D}${PLUGINPATH} - install -m 0755 ${S}/*.png ${D}${PLUGINPATH} + install -m 0600 ${S}/*.* ${D}${PLUGINPATH} + install -m 0600 ${S}/refreshrate ${D}${PLUGINPATH} install -d ${D}${PLUGINPATH}/locale/de/LC_MESSAGES - install -m 0644 ${S}/locale/de/LC_MESSAGES/LCD4linux.mo ${D}${PLUGINPATH}/locale/de/LC_MESSAGES + install -m 0600 ${S}/locale/de/LC_MESSAGES/* ${D}${PLUGINPATH}/locale/de/LC_MESSAGES install -d ${D}${PLUGINPATH}/wetter - install -m 0755 ${S}/wetter/*.gif ${D}${PLUGINPATH}/wetter + install -m 0600 ${S}/wetter/* ${D}${PLUGINPATH}/wetter } FILES_${PN} = "${PLUGINPATH}" diff --git a/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/LCD4linux.tar.gz b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/LCD4linux.tar.gz index 8a0dd9d..9e4025b 100644 Binary files a/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/LCD4linux.tar.gz and b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/LCD4linux.tar.gz differ diff --git a/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/duo2lcd4linux.patch b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/duo2lcd4linux.patch index 5d4d6bd..56bb91a 100644 --- a/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/duo2lcd4linux.patch +++ b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/duo2lcd4linux.patch @@ -1,20 +1,21 @@ diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py ---- LCD4linux_ori/plugin.py 2012-08-29 17:06:28.000000000 +0900 -+++ LCD4linux/plugin.py 2013-05-10 14:31:45.000000000 +0900 -@@ -49,6 +49,12 @@ - from urllib import urlencode +--- LCD4linux_ori/plugin.py 2013-05-24 12:11:59.390217149 +0200 ++++ LCD4linux/plugin.py 2013-05-31 07:22:41.221330788 +0200 +@@ -46,9 +46,12 @@ + + from twisted.web.client import getPage + from xml.dom.minidom import parse, parseString +-from urllib import urlencode ++from urllib import urlencode, quote import xml.etree.cElementTree -+from threading import Thread +from fcntl import ioctl -+import socket -+from pngutil import png_util -+pngutil = png_util.PNGUtil() ++from socket import create_connection as socket_create_connection + # globals DPFrefreshrate="/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux/refreshrate" WetterPath = "/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux/wetter/" -@@ -80,6 +86,7 @@ +@@ -80,6 +83,7 @@ BilderIndexStandby = 0 BilderTime = 0 ThreadRunning = 0 @@ -22,35 +23,12 @@ diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py LastDemon = "" DemonPID = ["","","",""] SamsungDevice = None -@@ -104,7 +111,7 @@ - ScreenSelect = [("0", _("off")), ("1", _("Screen 1")), ("2", _("Screen 2")), ("3", _("Screen 3")), ("12", _("Screen 1+2")), ("13", _("Screen 1+3")), ("23", _("Screen 2+3")), ("123", _("Screen 1+2+3")), ("4", _("Screen 4")), ("14", _("Screen 1+4")), ("24", _("Screen 2+4")), ("34", _("Screen 3+4")), ("124", _("Screen 1+2+4")), ("134", _("Screen 1+3+4")), ("234", _("Screen 2+3+4")), ("1234", _("Screen 1+2+3+4"))] - TimeSelect = [("1", _("5s")), ("2", _("10s")), ("3", _("15s")), ("4", _("20s")), ("6", _("30s")), ("12", _("1min")), ("24", _("2min"), ("60", _("5min")))] - LCDSelect = [("1", _("LCD 1")), ("2", _("LCD 2")), ("12", _("LCD 1+2"))] --LCDType = [("11", _("Pearl 320x240")), ("12", _("Pearl 240x320")), ("23", _("Samsung SPF-75H 800x480")), ("24", _("Samsung SPF-87H 800x480")), ("25", _("Samsung SPF-87Hold 800x480")), ("26", _("Samsung SPF-83H 800x600")), ("27", _("Samsung SPF-107H 1024x600"))] -+LCDType = [("10", _("Vu LCD 400x240"))] - - config.plugins.LCD4linux = ConfigSubsection() - config.plugins.LCD4linux.Enable = ConfigYesNo(default = False) -@@ -116,13 +123,13 @@ - config.plugins.LCD4linux.ScreenTime3 = ConfigSelection(choices = TimeSelect, default="1") - config.plugins.LCD4linux.ScreenTime4 = ConfigSelection(choices = TimeSelect, default="1") - config.plugins.LCD4linux.BilderTime = ConfigSelection(choices = [("0", _("off"))] + TimeSelect, default="0") --config.plugins.LCD4linux.Helligkeit = ConfigSlider(default = 5, limits = (0, 7)) -+config.plugins.LCD4linux.Helligkeit = ConfigSlider(default = 4, limits = (0, 25)) - config.plugins.LCD4linux.LCDoff = ConfigClock(default = ((5 * 60 + 0) * 60) ) - config.plugins.LCD4linux.LCDon = ConfigClock(default = ((5 * 60 + 0) * 60) ) - config.plugins.LCD4linux.Refresh = ConfigSlider(default = 3, limits = (1, 15)) - config.plugins.LCD4linux.Delay = ConfigSlider(default = 200, increment = 50, limits = (50, 2000)) - config.plugins.LCD4linux.WetterCity = ConfigText(default="Berlin", fixed_size=False) --config.plugins.LCD4linux.LCDType1 = ConfigSelection(choices = LCDType, default="11") -+config.plugins.LCD4linux.LCDType1 = ConfigSelection(choices = LCDType, default="10") - config.plugins.LCD4linux.LCDType2 = ConfigSelection(choices = [("00", _("off"))] + LCDType, default="00") - config.plugins.LCD4linux.LCDRotate1 = ConfigSelection(choices = [("0", _("0")), ("90", _("90")), ("180", _("180"))], default="0") - config.plugins.LCD4linux.LCDRotate2 = ConfigSelection(choices = [("0", _("0")), ("90", _("90")), ("180", _("180"))], default="0") -@@ -206,15 +213,6 @@ +@@ -204,17 +208,16 @@ + config.plugins.LCD4linux.TimerColor = ConfigSelection(choices = Farbe, default="white") + config.plugins.LCD4linux.Wetter = ConfigSelection(choices = ScreenSelect, default="0") config.plugins.LCD4linux.WetterLCD = ConfigSelection(choices = LCDSelect, default="1") - config.plugins.LCD4linux.WetterPos = ConfigSlider(default = 50, increment = 2, limits = (0, 600)) - config.plugins.LCD4linux.WetterType = ConfigSelection(choices = [("1", _("4 Days small")), ("2", _("4 Days big")), ("3", _("Current big")), ("4", _("Current full"))], default="1") +-config.plugins.LCD4linux.WetterPos = ConfigSlider(default = 50, increment = 2, limits = (0, 600)) +-config.plugins.LCD4linux.WetterType = ConfigSelection(choices = [("1", _("4 Days small")), ("2", _("4 Days big")), ("3", _("Current big")), ("4", _("Current full"))], default="1") -config.plugins.LCD4linux.OSCAM = ConfigSelection(choices = ScreenSelect, default="0") -config.plugins.LCD4linux.OSCAMLCD = ConfigSelection(choices = LCDSelect, default="1") -config.plugins.LCD4linux.OSCAMFile = ConfigText(default="/tmp/.oscam/oscam.lcd", fixed_size=False) @@ -60,24 +38,26 @@ diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py -config.plugins.LCD4linux.OSCAMSplit = ConfigYesNo(default = False) -config.plugins.LCD4linux.OSCAMColor = ConfigSelection(choices = Farbe, default="white") -config.plugins.LCD4linux.OSCAMBackColor = ConfigSelection(choices = [("0", _("off"))] + Farbe, default="black") ++config.plugins.LCD4linux.WetterPosX = ConfigSlider(default = 0, increment = 2, limits = (0, 600)) ++config.plugins.LCD4linux.WetterPosY = ConfigSlider(default = 0, increment = 2, limits = (0, 600)) ++config.plugins.LCD4linux.WetterType = ConfigSelection(choices = [("1", _("2 Days")), ("2", _("4 Days")), ("3", _("4 Days big")), ("4", _("4 Days only")), ("5", _("2 Days vertical"))], default="1") ++config.plugins.LCD4linux.WetterColor = ConfigSelection(choices = Farbe, default="white") ++config.plugins.LCD4linux.WetterColorLow = ConfigSelection(choices = Farbe, default="aquamarine") ++config.plugins.LCD4linux.WetterColorHigh = ConfigSelection(choices = Farbe, default="violet") ++config.plugins.LCD4linux.WetterColorLine = ConfigSelection(choices = Farbe, default="white") ++config.plugins.LCD4linux.WetterColorDay = ConfigSelection(choices = Farbe, default="white") ++config.plugins.LCD4linux.WetterColorCity = ConfigSelection(choices = Farbe, default="white") ++config.plugins.LCD4linux.WetterColorSky = ConfigSelection(choices = Farbe, default="silver") config.plugins.LCD4linux.WetterCity = ConfigText(default="Berlin", fixed_size=False) config.plugins.LCD4linux.Text = ConfigSelection(choices = ScreenSelect, default="0") config.plugins.LCD4linux.TextLCD = ConfigSelection(choices = LCDSelect, default="1") -@@ -278,9 +276,9 @@ - config.plugins.LCD4linux.MPClockAlign = ConfigSelection(choices = [("0", _("left")), ("1", _("center")), ("2", _("right"))], default="1") - config.plugins.LCD4linux.MPClockSplit = ConfigYesNo(default = False) - config.plugins.LCD4linux.MPClockColor = ConfigSelection(choices = Farbe, default="white") --config.plugins.LCD4linux.Standby = ConfigSelection(choices = [("0", _("off")), ("1", _("on"))], default="1") -+config.plugins.LCD4linux.Standby = ConfigSelection(choices = [("0", _("off")), ("1", _("on"))], default="0") - config.plugins.LCD4linux.StandbyScreenMax = ConfigSelection(choices = [("1", _("Screen 1")), ("2", _("Screen 1-2")), ("3", _("Screen 1-3"))], default="1") --config.plugins.LCD4linux.StandbyHelligkeit = ConfigSlider(default = 1, limits = (0, 7)) -+config.plugins.LCD4linux.StandbyHelligkeit = ConfigSlider(default = 3, limits = (0, 25)) - config.plugins.LCD4linux.StandbyLCDoff = ConfigClock(default = ((5 * 60 + 0) * 60) ) - config.plugins.LCD4linux.StandbyLCDon = ConfigClock(default = ((5 * 60 + 0) * 60) ) - config.plugins.LCD4linux.StandbyClock = ConfigSelection(choices = ScreenSelect, default="1") -@@ -300,14 +298,6 @@ +@@ -298,16 +301,9 @@ + config.plugins.LCD4linux.StandbyTimerColor = ConfigSelection(choices = Farbe, default="white") + config.plugins.LCD4linux.StandbyWetter = ConfigSelection(choices = ScreenSelect, default="0") config.plugins.LCD4linux.StandbyWetterLCD = ConfigSelection(choices = LCDSelect, default="1") - config.plugins.LCD4linux.StandbyWetterPos = ConfigSlider(default = 50, increment = 2, limits = (0, 600)) +-config.plugins.LCD4linux.StandbyWetterPos = ConfigSlider(default = 50, increment = 2, limits = (0, 600)) ++config.plugins.LCD4linux.StandbyWetterPosX = ConfigSlider(default = 0, increment = 2, limits = (0, 600)) ++config.plugins.LCD4linux.StandbyWetterPosY = ConfigSlider(default = 50, increment = 2, limits = (0, 600)) config.plugins.LCD4linux.StandbyWetterType = ConfigSelection(choices = [("1", _("4 Days small")), ("2", _("4 Days big")), ("3", _("Current big")), ("4", _("Current full"))], default="1") -config.plugins.LCD4linux.StandbyOSCAM = ConfigSelection(choices = ScreenSelect, default="0") -config.plugins.LCD4linux.StandbyOSCAMLCD = ConfigSelection(choices = LCDSelect, default="1") @@ -90,25 +70,13 @@ diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py config.plugins.LCD4linux.StandbyText = ConfigSelection(choices = ScreenSelect, default="0") config.plugins.LCD4linux.StandbyTextLCD = ConfigSelection(choices = LCDSelect, default="1") config.plugins.LCD4linux.StandbyTextFile = ConfigText(default="/tmp/lcd4linux.txt", fixed_size=False) -@@ -421,9 +411,12 @@ - return "" - - def writeHelligkeit(hell): -- f = open(PICbright, "w") -- f.write(str(hell) + "\r\n") -- f.close() -+ hell = int(hell) * 10 -+ if hell >= 250: -+ hell = 255 -+ led_fd = open("/dev/lcd2",'w') -+ ioctl(led_fd, 0x10, hell) -+ led_fd.close() - - def getBilder(): - global Bilder -@@ -754,16 +747,6 @@ +@@ -752,18 +748,16 @@ + self.list2.append(getConfigListEntry(_("Weather"), config.plugins.LCD4linux.Wetter)) + if config.plugins.LCD4linux.Wetter.value != "0": self.list2.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.WetterLCD)) - self.list2.append(getConfigListEntry(_("- Position"), config.plugins.LCD4linux.WetterPos)) +- self.list2.append(getConfigListEntry(_("- Position"), config.plugins.LCD4linux.WetterPos)) ++ self.list2.append(getConfigListEntry(_("- Position X"), config.plugins.LCD4linux.WetterPosX)) ++ self.list2.append(getConfigListEntry(_("- Position Y"), config.plugins.LCD4linux.WetterPosY)) self.list2.append(getConfigListEntry(_("- Weather Type"), config.plugins.LCD4linux.WetterType)) - self.list2.append(getConfigListEntry(_("Show oscam.lcd"), config.plugins.LCD4linux.OSCAM)) - if config.plugins.LCD4linux.OSCAM.value != "0": @@ -120,12 +88,23 @@ diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py - self.list2.append(getConfigListEntry(_("- Split Screen"), config.plugins.LCD4linux.OSCAMSplit)) - self.list2.append(getConfigListEntry(_("- Color"), config.plugins.LCD4linux.OSCAMColor)) - self.list2.append(getConfigListEntry(_("- Background Color"), config.plugins.LCD4linux.OSCAMBackColor)) ++ self.list2.append(getConfigListEntry(_("- Color"), config.plugins.LCD4linux.WetterColor)) ++ self.list2.append(getConfigListEntry(_("- Color Low"), config.plugins.LCD4linux.WetterColorLow)) ++ self.list2.append(getConfigListEntry(_("- Color High"), config.plugins.LCD4linux.WetterColorHigh)) ++ self.list2.append(getConfigListEntry(_("- Color Line"), config.plugins.LCD4linux.WetterColorLine)) ++ self.list2.append(getConfigListEntry(_("- Color Day"), config.plugins.LCD4linux.WetterColorDay)) ++ self.list2.append(getConfigListEntry(_("- Color City"), config.plugins.LCD4linux.WetterColorCity)) ++ self.list2.append(getConfigListEntry(_("- Color Sky"), config.plugins.LCD4linux.WetterColorSky)) self.list2.append(getConfigListEntry(_("Show Textfile") , config.plugins.LCD4linux.Text)) if config.plugins.LCD4linux.Text.value != "0": self.list2.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.TextLCD)) -@@ -870,15 +853,6 @@ +@@ -868,17 +862,9 @@ + self.list4.append(getConfigListEntry(_("Standby - Weather"), config.plugins.LCD4linux.StandbyWetter)) + if config.plugins.LCD4linux.StandbyWetter.value != "0": self.list4.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.StandbyWetterLCD)) - self.list4.append(getConfigListEntry(_("- Position"), config.plugins.LCD4linux.StandbyWetterPos)) +- self.list4.append(getConfigListEntry(_("- Position"), config.plugins.LCD4linux.StandbyWetterPos)) ++ self.list4.append(getConfigListEntry(_("- Position X"), config.plugins.LCD4linux.StandbyWetterPosX)) ++ self.list4.append(getConfigListEntry(_("- Position Y"), config.plugins.LCD4linux.StandbyWetterPosY)) self.list4.append(getConfigListEntry(_("- Weather Type"), config.plugins.LCD4linux.StandbyWetterType)) - self.list4.append(getConfigListEntry(_("Standby - Show oscam.lcd"), config.plugins.LCD4linux.StandbyOSCAM)) - if config.plugins.LCD4linux.StandbyOSCAM.value != "0": @@ -139,43 +118,29 @@ diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py self.list4.append(getConfigListEntry(_("Standby - Show Textfile"), config.plugins.LCD4linux.StandbyText)) if config.plugins.LCD4linux.StandbyText.value != "0": self.list4.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.StandbyTextLCD)) -@@ -1014,23 +988,24 @@ - return str(self["config"].getCurrent()[1].getText()) - - def LCDrestart(self): -- global SamsungDevice -- global SamsungDevice2 -- DemonRestart() -- SamsungDevice = None -- SamsungDevice2 = None -- getSamsungDevice() -+ pass -+# global SamsungDevice -+# global SamsungDevice2 -+# DemonRestart() -+# SamsungDevice = None -+# SamsungDevice2 = None -+# getSamsungDevice() - - def save(self): - global ConfigMode - global ConfigStandby - global isMediaPlayer - getBilder() -- if config.plugins.LCD4linux.Refresh.isChanged(): -- f = open(DPFrefreshrate, "w") -- f.write(str(config.plugins.LCD4linux.Refresh.value * 1000) + "\r\n") -- f.close() -- self.LCDrestart() -+# if config.plugins.LCD4linux.Refresh.isChanged(): -+# f = open(DPFrefreshrate, "w") -+# f.write(str(config.plugins.LCD4linux.Refresh.value * 1000) + "\r\n") -+# f.close() -+# self.LCDrestart() - - self["config"].setList(self.list1) - for x in self["config"].list: -@@ -1101,6 +1076,7 @@ +@@ -998,11 +984,18 @@ + self.SavePicon = config.plugins.LCD4linux.PiconType.value + self.SaveAspectRatio = config.plugins.LCD4linux.PiconAspectRatio.value + os.system("rm -f %s" % config.plugins.LCD4linux.PiconCache.value + "*.png") +- if self.SaveWetter != config.plugins.LCD4linux.WetterCity.value or self.SaveWetterType != config.plugins.LCD4linux.WetterType.value or self.SaveStandbyWetterType != config.plugins.LCD4linux.StandbyWetterType.value: ++# if self.SaveWetter != config.plugins.LCD4linux.WetterCity.value or self.SaveWetterType != config.plugins.LCD4linux.WetterType.value or self.SaveStandbyWetterType != config.plugins.LCD4linux.StandbyWetterType.value: ++# self.SaveWetter = config.plugins.LCD4linux.WetterCity.value ++# self.SaveWetterType = config.plugins.LCD4linux.WetterType.value ++# self.SaveStandbyWetterType = config.plugins.LCD4linux.StandbyWetterType.value ++# wwwWetter = "" ++ if self.SaveWetter != config.plugins.LCD4linux.WetterCity.value: + self.SaveWetter = config.plugins.LCD4linux.WetterCity.value +- self.SaveWetterType = config.plugins.LCD4linux.WetterType.value +- self.SaveStandbyWetterType = config.plugins.LCD4linux.StandbyWetterType.value + wwwWetter = "" ++ ++ elif config.plugins.LCD4linux.WetterColor.isChanged() or config.plugins.LCD4linux.WetterColorLow.isChanged() or config.plugins.LCD4linux.WetterColorHigh.isChanged() or config.plugins.LCD4linux.WetterColorLine.isChanged() or config.plugins.LCD4linux.WetterColorDay.isChanged() or config.plugins.LCD4linux.WetterColorCity.isChanged() or config.plugins.LCD4linux.WetterColorSky.isChanged(): ++ if os.path.isfile(PICwetter): ++ os.system("rm -f %s" % PICwetter) + if self.SaveScreenActive != config.plugins.LCD4linux.ScreenActive.value: + self.SaveScreenActive = config.plugins.LCD4linux.ScreenActive.value + ScreenActive = self.SaveScreenActive +@@ -1101,6 +1094,7 @@ self.KeyTime = 0 self.StandbyChanged = False self.DataMinute = "" @@ -183,44 +148,7 @@ diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py self.ref = "" self.StatusTimer = eTimer() -@@ -1131,16 +1107,17 @@ - self.timerlist = "" - self.pluginlist = "" - -+ self.pngutilconnect = pngutil.connect() -+ - ##### self.onShow.append(self.ServiceChange) - # config.misc.standbyCounter.addNotifier(self.restartTimer(self), initial_call = False) - getBilder() - self.StatusTimer.startLongTimer(5) -- self.Demon() -- self.SamsungStart() -+# self.Demon() -+# self.SamsungStart() - - def updateStatus(self): - print "[LCD4linux] update" -- - # global DataMinute - # global ScreenActive - global BilderTime -@@ -1200,20 +1177,25 @@ - # print BilderTime, OSDon,self.StandbyChanged,Standby.inStandby - if strftime("%M")!=self.DataMinute or BilderTime == 1 or self.StandbyChanged != Standby.inStandby or ConfigMode or (ScreenActive != SaveScreenActive) or isVideoPlaying > 2 or OSDon == 3: - print "[LCD4linux] Data-Build" -- if config.plugins.LCD4linux.LCDType1.value[0] == "1" or config.plugins.LCD4linux.LCDType2.value[0] == "1": -- if strftime("%M")!=self.DataMinute: -- if DemonCheck(): -- self.Demon() -- if SamsungCheck(): -- self.SamsungStart() -+# if config.plugins.LCD4linux.LCDType1.value[0] == "1" or config.plugins.LCD4linux.LCDType2.value[0] == "1": -+# if strftime("%M")!=self.DataMinute: -+# if DemonCheck(): -+# self.Demon() -+# if SamsungCheck(): -+# self.SamsungStart() - self.DataMinute = strftime("%M") +@@ -1210,10 +1204,15 @@ self.StandbyChanged = Standby.inStandby self.restartTimer() if config.plugins.LCD4linux.StandbyWetter.value != "0" or config.plugins.LCD4linux.Wetter.value != "0": @@ -228,24 +156,24 @@ diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py - self.downloadWetter() + if strftime("%M") != self.WetterCheckMin: + self.WetterCheckMin = strftime("%M") -+ if strftime("%M") == "15" or strftime("%M") == "45" or wwwWetter.find("forecast_information") < 1: ++ if strftime("%M") == "15" or strftime("%M") == "45" or wwwWetter.find("forecast") < 1: + self.downloadWetter() if ConfigMode == True: - self.StatusTimer.startLongTimer(2) + if config.plugins.LCD4linux.Bild.value.find(ScreenActive) >= 0: + self.StatusTimer.startLongTimer(5) + else: -+ self.StatusTimer.startLongTimer(2) ++ self.StatusTimer.startLongTimer(3) else: self.StatusTimer.startLongTimer(5) -@@ -1377,15 +1359,43 @@ +@@ -1377,23 +1376,68 @@ ScreenActive = "1" ScreenTime += 1 + def cannotConnect(self, port = 80, url = "74.125.71.94", timeout = 5): + try: -+ sock = socket.create_connection((url, port), timeout) ++ sock = socket_create_connection((url, port), timeout) +# print "Can be connected to [%s:%d]."%(url,port) + except Exception, ErrMsg: + print "Can't be connected to [%s:%d]. (%s)"%(url, port, ErrMsg) @@ -263,28 +191,42 @@ diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py + print "[LCD4linux] downloadWetter already running" + return + WetterThreadRunning += 1 ++ from threading import Thread + t = Thread(target=self.downloadWetterThread) + t.start() + + def downloadWetterThread(self): -+ if self.cannotConnect(80, "74.125.71.94", 1): # www.google.de ++ wetter = 0 ++# if self.cannotConnect(80, "173.194.72.94", 1): # www.google.de ++ if self.cannotConnect(80, "173.194.72.99", 1): # www.google.com + self.downloadWetterThreadEnd() + return print "[LCD4linux] Wetterdownloadstart" - self.feedurl = "http://www.google.com/ig/api?weather=%s&oe=utf-8&hl=%s" % (config.plugins.LCD4linux.WetterCity.value,language.getLanguage()[:2]) - # self.feedurl = "http://www.google.com/ig/api?weather=%s&oe=utf-8&hl=%s" % (config.plugins.LCD4linux.WetterCity.value,"de") +- self.feedurl = "http://www.google.com/ig/api?weather=%s&oe=utf-8&hl=%s" % (config.plugins.LCD4linux.WetterCity.value,language.getLanguage()[:2]) +-# self.feedurl = "http://www.google.com/ig/api?weather=%s&oe=utf-8&hl=%s" % (config.plugins.LCD4linux.WetterCity.value,"de") ++ wetterCity = config.plugins.LCD4linux.WetterCity.value ++ lang = language.getLanguage().replace("_","-") ++ if lang in ["no-NO","ca-AD","sr-YU","en-EN"]: ++ lang = "en-us" ++ if wetterCity.startswith("wc:"): ++ self.feedurl = "http://weather.service.msn.com/data.aspx?src=vista&weadegreetype=C&culture=%s&wealocations=%s" %(lang,wetterCity) ++ else: ++ self.feedurl = "http://weather.service.msn.com/data.aspx?src=vista&weadegreetype=C&culture=%s&weasearchstr=%s" %(lang,quote(wetterCity)) getPage(self.feedurl).addCallback(self.downloadListCallback).addErrback(self.downloadListError) + self.downloadWetterThreadEnd() def downloadListError(self, error=""): - print str(error) +- print str(error) ++ print "download wetter error : ", str(error) # self.session.open(MessageBox, "Error downloading Feed:\n%s" % str(error), type=MessageBox.TYPE_ERROR) + self.downloadWetterThreadEnd() def downloadListCallback(self, page=""): global wwwWetter -@@ -1394,6 +1404,13 @@ + wwwWetter = page + wwwWetter = wwwWetter.replace('\xc2\x86', '').replace('\xc2\x87', '').replace('\n','').decode("utf-8", "ignore").encode("utf-8") or "" wwwWetter=codecs.decode(wwwWetter, 'UTF-8') ++# print wwwWetter if os.path.isfile(PICwetter): os.system("rm -f %s" % PICwetter) +# print " >> downloadListCallback updated.." @@ -297,28 +239,281 @@ diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py def LCD4linuxPICThread(self,session): global ThreadRunning -@@ -1465,7 +1482,9 @@ - return event_begin, event_end, duration, event_name +@@ -1530,116 +1574,174 @@ + global BilderTime + global OSDon - def getResolution(t): -- if t[1] == "1": -+ if t[1] == "0": -+ MAX_W,MAX_H = 400,240 -+ elif t[1] == "1": - MAX_W,MAX_H = 320,240 - elif t[1] == "2": - MAX_W,MAX_H = 240,320 -@@ -1533,6 +1552,9 @@ - # Google Wetter - def putWetter(ConfigPos, ConfigType, draw, im): +-# Google Wetter +- def putWetter(ConfigPos, ConfigType, draw, im): ++# MSN Wetter ++ def putWetter((ConfigPosX, ConfigPosY, ConfigType, ConfigColor, ++ ConfigColorLow, ConfigColorHigh, ConfigColorLine, ConfigColorDay, ConfigColorCity, ConfigColorSky), draw, im): ++ global wwwWetter global WetterType + global WetterThreadRunning + if WetterThreadRunning: ++ print " Download Wetter thread is running" + return if os.path.isfile(PICwetter) and ConfigType == WetterType: pil_image = Image.open(PICwetter) - im.paste(pil_image,(0,ConfigPos)) -@@ -1977,51 +1999,6 @@ +- im.paste(pil_image,(0,ConfigPos)) ++ im.paste(pil_image,(ConfigPosX,ConfigPosY)) + else: + WetterType=ConfigType +- POSX, POSY = 1,0 +- MAX_W,MAX_H = 320,80 +- Wmulti = 1.4 if ConfigType != "1" else 1 +- if ConfigType == "2": +- MAX_H = 220 +- POSX = 10 ++ POSX, POSY = 5,5 ++ if ConfigType == "1": ++ MAX_W,MAX_H = 260,110 ++ elif ConfigType == "2": ++ MAX_W,MAX_H = 400,110 + elif ConfigType == "3": +- MAX_H = 90 +- POSY = POSY-(20*Wmulti)+1 +- elif ConfigType == "4": +- Wmulti = 3.5 +- MAX_H = 220 +- POSY = POSY-(20*Wmulti)+1 ++ MAX_W,MAX_H = 400,240 ++ elif ConfigType == "4" or ConfigType == "5": ++ MAX_W,MAX_H = 180,240 + imW = Image.new('RGB', (MAX_W, MAX_H), (0, 0, 0, 0)) + drawW = ImageDraw.Draw(imW) + dom = parseString(wwwWetter) +- for node in dom.getElementsByTagName('forecast_information'): +- for unitsystem in node.getElementsByTagName('unit_system'): +- UnitSystem = unitsystem.getAttribute('data') +- if ConfigType != "3" and ConfigType != "4": +- font = ImageFont.truetype(FONT,20*Wmulti, encoding='unic') +- Day="?" +- High="?" +- Low="?" +- Icon="" +- for node in dom.getElementsByTagName('forecast_conditions'): +- for day_of_week in node.getElementsByTagName('day_of_week'): +- Day = day_of_week.getAttribute('data') +- for high in node.getElementsByTagName('high'): +- High = high.getAttribute('data') +- if UnitSystem == "US": +- High = str(int((int(High)-32)*5/9)) +- for low in node.getElementsByTagName('low'): +- Low = low.getAttribute('data') +- if UnitSystem == "US": +- Low = str(int((int(Low)-32)*5/9)) +- for icon in node.getElementsByTagName('icon'): +- Icon = os.path.basename(icon.getAttribute('data')) +-# print "WetterData", Day, Low, High, Icon +- if os.path.isfile(WetterPath + Icon) and Icon.find("gif") > 1: +- pil_image = Image.open(WetterPath + Icon) +- if Wmulti != 1: +- pil_image = pil_image.resize((int(40*Wmulti), int(40*Wmulti)), Image.ANTIALIAS) #BILINEAR) +-# x,y=pil_image.size +- imW.paste(pil_image,(POSX,POSY+(20*Wmulti))) +- w,h = drawW.textsize(Day, font=font) +- drawW.text((POSX, POSY), Day, font=font) +- drawW.text((POSX, POSY+(60*Wmulti)), Low, font=font, fill="aquamarine") +- drawW.text((POSX+(25*Wmulti), POSY+(60*Wmulti)), High, font=font, fill="violet") +- +- POSX += (54*Wmulti) +- if Wmulti != 1: +- POSX = 10 +- POSY += 90 +- +- Hum = "?" +- Wind = "?" +- Temp_c = "?" +- Icon="" +- for node in dom.getElementsByTagName('current_conditions'): +- for temp_c in node.getElementsByTagName('temp_c'): +- Temp_c = temp_c.getAttribute('data') + "\xc2\xb0C" +- for hum in node.getElementsByTagName('humidity'): +- Hum1 = hum.getAttribute('data').replace("\xc2\xa0","").replace(" ","") +- Hum1 = Hum1.split(":") +- if len(Hum1) == 2: +- Hum = Hum1[len(Hum1)-1].lstrip() +- for wind in node.getElementsByTagName('wind_condition'): +- Wind = wind.getAttribute('data') +- Wind = Wind.split(":") +- if len(Wind) == 2: +- Wind = Wind[len(Wind)-1].lstrip() +- for icon in node.getElementsByTagName('icon'): +- Icon = os.path.basename(icon.getAttribute('data')) +-# print "Temp, Hum", Temp_c, Hum, Wind, Icon +- if os.path.isfile(WetterPath + Icon) and Icon.find("gif") > 1: +- pil_image = Image.open(WetterPath + Icon) +- if Wmulti != 1: +- pil_image = pil_image.resize((int(40*Wmulti), int(40*Wmulti)), Image.ANTIALIAS) #BILINEAR) +-# x,y=pil_image.size +- if ConfigType == "4": +- POSX = 10 +- imW.paste(pil_image,(POSX,POSY+(20*Wmulti))) +- if ConfigType == "4": +- font = ImageFont.truetype(FONT,(10*Wmulti), encoding='unic') +- else: +- font = ImageFont.truetype(FONT,(15*Wmulti), encoding='unic') +- minus5 = 0 if Wmulti != 1 else 5 +- drawW.text((POSX-minus5, POSY+(64*Wmulti)), Wind, font=font, fill="silver") +- if ConfigType == "4": +- font = ImageFont.truetype(FONT,(20*Wmulti), encoding='unic') +- else: +- font = ImageFont.truetype(FONT,(25*Wmulti), encoding='unic') +- drawW.text((POSX+(45*Wmulti), POSY+(16*Wmulti)), Temp_c, font=font, fill="violet") +- if len(Hum)>3: +- if ConfigType == "4": +- font = ImageFont.truetype(FONT,(16*Wmulti), encoding='unic') ++ weather = dom.getElementsByTagName("weather") ++ if len(weather) == 0: ++ print "get weather failed" ++ return ++ else: ++ weather = weather[0] ++ ++ def getFont(size): ++ return ImageFont.truetype(FONT, size, encoding='unic') ++ ++ if ConfigType in ("1","2","3","4","5"): ++# forecast 4 days ++ if ConfigType in ("1","2"): ++ Day="?"; High="?"; Low="?"; Icon="" ++ font = getFont(20) ++ drawW.line((POSX, POSY, POSX, MAX_H), fill=ConfigColorLine) ++ forecast_num = 0 ++ for node in weather.getElementsByTagName('forecast'): ++ forecast_num += 1 ++ if ConfigType == "1" and forecast_num > 2: ++ break ++ elif ConfigType == "2" and forecast_num > 4: ++ break ++ Day = node.getAttribute('shortday') ++ High = node.getAttribute('high') ++ Low = node.getAttribute('low') ++ Icon = node.getAttribute('skycodeday') ++ Skytextday = node.getAttribute('skytextday') ++ Precip = node.getAttribute('precip') ++ iconpath = WetterPath + Icon+'.png' ++ if os.path.isfile(iconpath): ++ pil_image = Image.open(iconpath) ++ imW.paste(pil_image,(POSX+5,POSY+25), pil_image) ++ drawW.text((POSX+13, POSY), Day, font=font, fill=ConfigColorDay) ++ drawW.text((POSX+10, POSY+71), Low, font=font, fill=ConfigColorLow) ++ drawW.text((POSX+37, POSY+71), High, font=font, fill=ConfigColorHigh) ++ drawW.line((POSX+65, POSY, POSX+65, MAX_H), fill=ConfigColorLine) ++ POSX += 65 ++ elif ConfigType in ("3", "4", "5"): ++ Day="?"; High="?"; Low="?"; Icon="" ++ if ConfigType == "5": ++ POSX, POSY = 5,120 ++# if ConfigType in ("3"): ++# drawW.line((0, 0, MAX_W/2, 0), fill=ConfigColorLine) ++# elif ConfigType in ("4"): ++# drawW.line((0, 0, MAX_W, 0), fill=ConfigColorLine) ++ if ConfigType in ("5"): ++ drawW.line((0, POSY, MAX_W, POSY), fill=ConfigColorLine) ++ forecast_num = 0 ++ for node in weather.getElementsByTagName('forecast'): ++ forecast_num += 1 ++ if ConfigType in ("3", "4") and forecast_num > 4: ++ break ++ elif ConfigType == "5" and forecast_num > 2: ++ break ++ Day = node.getAttribute('day') ++ Low = node.getAttribute('low') + "\xc2\xb0" ++ High = node.getAttribute('high') + "\xc2\xb0" ++ Icon = node.getAttribute('skycodeday') ++ Skytextday = node.getAttribute('skytextday') ++ Precip = node.getAttribute('precip') ++ iconpath = WetterPath + Icon+'.png' ++ if os.path.isfile(iconpath): ++ pil_image = Image.open(iconpath) ++# icon_w, icon_h = 55,45 ++ icon_w, icon_h = int(55*1.2), int(45*1.2) ++ pil_image = pil_image.resize( (icon_w, icon_h), Image.ANTIALIAS) #BILINEAR) ++ imW.paste(pil_image,(POSX, POSY), pil_image) ++ font = getFont(15) ++ drawW.text((POSX+icon_w-20, POSY-2), Precip, font=font, fill="cyan") ++ drawW.text((POSX+icon_w+5, POSY+5), Day, font=font, fill=ConfigColorDay) ++ drawW.text((POSX+icon_w+5, POSY+20), Low, font=font, fill=ConfigColorLow) ++ drawW.text((POSX+icon_w+30, POSY+20), High, font=font, fill=ConfigColorHigh) ++ drawW.text((POSX+icon_w+5, POSY+35), Skytextday, font=font, fill=ConfigColorSky) ++ if ConfigType == "3": ++ drawW.line((POSX, POSY+55, MAX_W/2, POSY+55), fill=ConfigColorLine) ++ else: ++ drawW.line((POSX, POSY+55, MAX_W, POSY+55), fill=ConfigColorLine) ++ POSY += 60 ++ ++# current info ++ if ConfigType in ("1","2","5"): ++ if ConfigType == "5": ++ POSX, POSY = 15,15 ++ Hum = "?"; Wind = "?"; Temp = "?"; Icon="" ++ current = weather.getElementsByTagName('current') ++ if len(current) == 0: ++ print "get current failed" ++ else: ++ current = current[0] ++ ObservationPoint = current.getAttribute('observationpoint') ++ ObservationTime = current.getAttribute('observationtime') ++ Temp = current.getAttribute('temperature') + "\xc2\xb0" ++ Hum = current.getAttribute('humidity') + "%" ++ Wind = current.getAttribute('winddisplay') ++ Icon = current.getAttribute("skycode") ++ iconpath = WetterPath + Icon+'.png' ++ if os.path.isfile(iconpath): ++ pil_image = Image.open(iconpath) ++ pil_image = pil_image.resize((int(55*1.4), int(45*1.4)), Image.ANTIALIAS) #BILINEAR) ++ imW.paste(pil_image,(POSX+5, POSY+5+10), pil_image) ++ drawW.text((POSX+5, POSY), ObservationPoint+' '+ObservationTime, font=getFont(12), fill=ConfigColorCity) ++ drawW.text((POSX+15+62, POSY+5+15), Temp, font=getFont(25), fill=ConfigColorHigh) ++ drawW.text((POSX+15+62, POSY+5+40), Hum, font=getFont(22), fill=ConfigColorLow) ++ drawW.text((POSX+5, POSY+80), Wind, font=getFont(15), fill=ConfigColorSky) ++ ++ elif ConfigType in ("3"): ++ POSX, POSY = 200,5 ++ drawW.line((POSX, POSY, POSX, MAX_H), fill=ConfigColorLine) ++ Hum = "?"; Wind = "?"; Temp = "?"; Icon="" ++ current = weather.getElementsByTagName('current') ++ if len(current) == 0: ++ print "get current failed" ++ return + else: +- font = ImageFont.truetype(FONT,(22*Wmulti), encoding='unic') +- drawW.text((POSX+(45*Wmulti), POSY+(37*Wmulti)), Hum, font=font, fill="silver") ++ current = current[0] ++ ObservationPoint = current.getAttribute('observationpoint') ++ ObservationTime = current.getAttribute('observationtime') ++ Temp = 'Temp. : '+ current.getAttribute('temperature') + "\xc2\xb0" ++ Hum = 'Hum : '+ current.getAttribute('humidity') + "%" ++ Wind = 'Wind : '+ current.getAttribute('winddisplay') ++ Icon = current.getAttribute("skycode") ++ Skytext = 'Cond : ' + current.getAttribute('skytext') ++ Feelslike = 'Feel : '+ current.getAttribute('feelslike') ++ Date = 'Date : ' + current.getAttribute('date') ++ iconpath = WetterPath + Icon+'.png' ++ icon_w, icon_h = int(55*2.8), int(45*2.8) ++ if os.path.isfile(iconpath): ++ pil_image = Image.open(iconpath) ++ pil_image = pil_image.resize( (icon_w, icon_h), Image.ANTIALIAS) #BILINEAR ++ imW.paste(pil_image,(POSX+5, POSY+5), pil_image) ++ font = getFont(15) ++ drawW.text((POSX+20, POSY+3+icon_h), Temp, font=font, fill=ConfigColorHigh) ++ drawW.text((POSX+20+80, POSY+3+icon_h), Hum, font=font, fill=ConfigColorLow) ++ drawW.text((POSX+20, POSY+3+icon_h+20), Skytext, font=font, fill=ConfigColorSky) ++ drawW.text((POSX+20, POSY+3+icon_h+40), Wind, font=font, fill=ConfigColorLow) ++ drawW.text((POSX+20, POSY+3+icon_h+60), Date, font=font, fill=ConfigColorCity) ++ font = ImageFont.truetype(FONT,15, encoding='unic') ++ drawW.text((POSX+20, MAX_H-25), ObservationPoint+' '+ObservationTime, font=font, fill=ConfigColorCity) ++# save Image + imW.save(PICwetter) +- im.paste(imW,(0,ConfigPos)) ++ im.paste(imW,(ConfigPosX,ConfigPosY)) + return + + # Text File +@@ -1977,51 +2079,6 @@ lx = getSplit(ConfigSplit,ConfigAlign,MAX_W,w) draw.text((lx, ConfigPos), i, font=font, fill=ConfigColor) @@ -370,7 +565,36 @@ diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py # show Title def putTitle(ConfigPos, ConfigSize, ConfigLines, ConfigColor, ConfigAlign, ConfigSplit, draw, im): MAX_W,MAX_H = im.size -@@ -2157,12 +2134,6 @@ +@@ -2110,13 +2167,23 @@ + if isOffTime(config.plugins.LCD4linux.StandbyLCDoff.value,config.plugins.LCD4linux.StandbyLCDon.value): + writeHelligkeit(0) + print "[LCD4linux] LCD off" +-# Google Wetter +- if config.plugins.LCD4linux.StandbyWetter.value.find(ScreenActive) >= 0 and wwwWetter.find("forecast_information") > 1: ++# MSN Wetter ++ if config.plugins.LCD4linux.StandbyWetter.value.find(ScreenActive) >= 0 and wwwWetter.find("forecast") > 1: ++ params = ( ++ config.plugins.LCD4linux.StandbyWetterPosX.value, ++ config.plugins.LCD4linux.StandbyWetterPosY.value, ++ config.plugins.LCD4linux.StandbyWetterType.value, ++ config.plugins.LCD4linux.WetterColor.value, ++ config.plugins.LCD4linux.WetterColorLow.value, ++ config.plugins.LCD4linux.WetterColorHigh.value, ++ config.plugins.LCD4linux.WetterColorLine.value, ++ config.plugins.LCD4linux.WetterColorDay.value, ++ config.plugins.LCD4linux.WetterColorCity.value, ++ config.plugins.LCD4linux.WetterColorSky.value) + if config.plugins.LCD4linux.StandbyWetterLCD.value.find("1") >= 0: +- putWetter(config.plugins.LCD4linux.StandbyWetterPos.value,config.plugins.LCD4linux.StandbyWetterType.value,draw,im) ++ putWetter(params, draw, im) + if config.plugins.LCD4linux.StandbyWetterLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00": +- putWetter(config.plugins.LCD4linux.StandbyWetterPos.value,config.plugins.LCD4linux.StandbyWetterType.value,draw2,im2) +- ++ putWetter(params, draw2, im2) + # get clock + if config.plugins.LCD4linux.StandbyClock.value.find(ScreenActive) >= 0: + if config.plugins.LCD4linux.StandbyClockLCD.value.find("1") >= 0: +@@ -2157,12 +2224,6 @@ putBild(config.plugins.LCD4linux.StandbyBildPos.value, config.plugins.LCD4linux.StandbyBildSize.value, config.plugins.LCD4linux.StandbyBildAlign.value, ShowPicture, im) if config.plugins.LCD4linux.StandbyBildLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00": putBild(config.plugins.LCD4linux.StandbyBildPos.value, config.plugins.LCD4linux.StandbyBildSize.value, config.plugins.LCD4linux.StandbyBildAlign.value, ShowPicture, im2) @@ -383,7 +607,52 @@ diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py # show Textfile if config.plugins.LCD4linux.StandbyText.value.find(ScreenActive) >= 0: if config.plugins.LCD4linux.StandbyTextLCD.value.find("1") >= 0: -@@ -2324,12 +2295,6 @@ +@@ -2240,12 +2301,23 @@ + putPicon(config.plugins.LCD4linux.PiconSize.value, config.plugins.LCD4linux.PiconType.value, config.plugins.LCD4linux.PiconAlign.value, config.plugins.LCD4linux.PiconTextSize.value, draw, im) + if config.plugins.LCD4linux.PiconLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00": + putPicon(config.plugins.LCD4linux.PiconSize.value, config.plugins.LCD4linux.PiconType.value, config.plugins.LCD4linux.PiconAlign.value, config.plugins.LCD4linux.PiconTextSize.value, draw2, im2) +-# Google Wetter +- if config.plugins.LCD4linux.Wetter.value.find(ScreenActive) >= 0 and wwwWetter.find("forecast_information") > 1: ++# MSN Wetter ++ if config.plugins.LCD4linux.Wetter.value.find(ScreenActive) >= 0 and wwwWetter.find("forecast") > 1: ++ params = ( ++ config.plugins.LCD4linux.WetterPosX.value, ++ config.plugins.LCD4linux.WetterPosY.value, ++ config.plugins.LCD4linux.WetterType.value, ++ config.plugins.LCD4linux.WetterColor.value, ++ config.plugins.LCD4linux.WetterColorLow.value, ++ config.plugins.LCD4linux.WetterColorHigh.value, ++ config.plugins.LCD4linux.WetterColorLine.value, ++ config.plugins.LCD4linux.WetterColorDay.value, ++ config.plugins.LCD4linux.WetterColorCity.value, ++ config.plugins.LCD4linux.WetterColorSky.value) + if config.plugins.LCD4linux.WetterLCD.value.find("1") >= 0: +- putWetter(config.plugins.LCD4linux.WetterPos.value,config.plugins.LCD4linux.WetterType.value,draw,im) ++ putWetter(params, draw, im) + if config.plugins.LCD4linux.WetterLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00": +- putWetter(config.plugins.LCD4linux.WetterPos.value,config.plugins.LCD4linux.WetterType.value,draw2,im2) ++ putWetter(params, draw2, im2) + # get clock + if config.plugins.LCD4linux.Clock.value.find(ScreenActive) >= 0: + if config.plugins.LCD4linux.ClockLCD.value.find("1") >= 0: +@@ -2259,11 +2331,11 @@ + if config.plugins.LCD4linux.InfoLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00": + putInfo(config.plugins.LCD4linux.InfoPos.value, config.plugins.LCD4linux.InfoSize.value,config.plugins.LCD4linux.InfoAlign.value,config.plugins.LCD4linux.InfoSplit.value,config.plugins.LCD4linux.InfoColor.value,config.plugins.LCD4linux.InfoTuner.value+config.plugins.LCD4linux.InfoSensor.value, draw2, im2) + # next Timer Record +- if config.plugins.LCD4linux.Timer.value.find(ScreenActive) >= 0: +- if config.plugins.LCD4linux.TimerLCD.value.find("1") >= 0: +- putTimer(config.plugins.LCD4linux.TimerPos.value, config.plugins.LCD4linux.TimerSize.value, config.plugins.LCD4linux.TimerColor.value, draw, im) +- if config.plugins.LCD4linux.TimerLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00": +- putTimer(config.plugins.LCD4linux.TimerPos.value, config.plugins.LCD4linux.TimerSize.value, config.plugins.LCD4linux.TimerColor.value, draw2, im2) ++ if config.plugins.LCD4linux.Timer.value.find(ScreenActive) >= 0: ++ if config.plugins.LCD4linux.TimerLCD.value.find("1") >= 0: ++ putTimer(config.plugins.LCD4linux.TimerPos.value, config.plugins.LCD4linux.TimerSize.value, config.plugins.LCD4linux.TimerColor.value, draw, im) ++ if config.plugins.LCD4linux.TimerLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00": ++ putTimer(config.plugins.LCD4linux.TimerPos.value, config.plugins.LCD4linux.TimerSize.value, config.plugins.LCD4linux.TimerColor.value, draw2, im2) + # aktive Sendernummer + if config.plugins.LCD4linux.ChannelNum.value.find(ScreenActive) >= 0: + if config.plugins.LCD4linux.ChannelNumLCD.value.find("1") >= 0: +@@ -2324,12 +2396,6 @@ putBild(config.plugins.LCD4linux.BildPos.value, config.plugins.LCD4linux.BildSize.value, config.plugins.LCD4linux.BildAlign.value, ShowPicture, im) if config.plugins.LCD4linux.BildLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00": putBild(config.plugins.LCD4linux.BildPos.value, config.plugins.LCD4linux.BildSize.value, config.plugins.LCD4linux.BildAlign.value, ShowPicture, im2) @@ -396,53 +665,8 @@ diff -urN LCD4linux_ori/plugin.py LCD4linux/plugin.py # show Textfile if config.plugins.LCD4linux.Text.value.find(ScreenActive) >= 0: if config.plugins.LCD4linux.TextLCD.value.find("1") >= 0: -@@ -2366,43 +2331,13 @@ - im.save(PICtmp+".png", "PNG") - if os.path.isfile(PICtmp+".png"): - os.rename(PICtmp+".png",PIC+".png") -- else: -- if SamsungDevice is not None: -- print "[LCD4linux] writing to Samsung Device" -- output = StringIO.StringIO() -- im.save(output, "JPEG") -- pic = output.getvalue() -- output.close() -- try: -- Photoframe.write_jpg2frame(SamsungDevice, pic) -- except: -- print "[LCD4linux] Samsung 1 write error" -- im.save(PICtmp+".jpg", "JPEG") -- if os.path.isfile(PICtmp+".jpg"): -- os.rename(PICtmp+".jpg",PIC+".jpg") -- if config.plugins.LCD4linux.LCDType2.value != "00": -- if config.plugins.LCD4linux.LCDRotate2.value != "0": -- im2=im2.rotate(int(config.plugins.LCD4linux.LCDRotate2.value)) -- if config.plugins.LCD4linux.LCDType2.value[0] == "1": -- im2.save(PIC2tmp+".png", "PNG") -- if os.path.isfile(PIC2tmp+".png"): -- os.rename(PIC2tmp+".png",PIC2+".png") -- else: -- if SamsungDevice2 is not None: -- print "[LCD4linux] writing to Samsung2 Device" -- output = StringIO.StringIO() -- im2.save(output, "JPEG") -- pic = output.getvalue() -- output.close() -- try: -- Photoframe.write_jpg2frame(SamsungDevice2, pic) -- except: -- print "[LCD4linux] Samsung 2 write error" -- im2.save(PIC2tmp+".jpg", "JPEG") -- if os.path.isfile(PIC2tmp+".jpg"): -- os.rename(PIC2tmp+".jpg",PIC2+".jpg") -+ if self.pngutilconnect == 0: -+ print "[LCD4linux] RunTime:", time() - tt -+ return -+ pngutiltime = time() -+ pngutil.send(PIC+".png") -+ print "[LCD4linux] time(write to lcd) : ",time()-pngutiltime - print "[LCD4linux] RunTime:", time() - tt -- - return - - def main(session,**kwargs): +@@ -2440,3 +2506,4 @@ + icon = "plugin.png", + fnc = main)) + return list ++ diff --git a/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/wetter.tar.gz b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/wetter.tar.gz new file mode 100644 index 0000000..60c0c83 Binary files /dev/null and b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/wetter.tar.gz differ diff --git a/meta-openvuplus/recipes-vuplus/duo2lcd4linux/lcd4linuxsupport/plugin.py b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/lcd4linuxsupport/plugin.py new file mode 100644 index 0000000..36467e9 --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/lcd4linuxsupport/plugin.py @@ -0,0 +1,181 @@ + +import os +from time import time +from datetime import datetime + +from enigma import eTimer +from Components.config import ConfigSelection, ConfigSelectionNumber, ConfigSlider, ConfigYesNo +from Plugins.Plugin import PluginDescriptor +from fcntl import ioctl + +from pngutil import png_util +pngutil = png_util.PNGUtil() +lcd4linuxPluginPath = "/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux" + +LCDType1_id_lver = "150" +LCDType1_id = "350" + +from Plugins.Extensions.LCD4linux import plugin + +def getResolution(t, r="0"): + if t[:1] == "5": + ttt = LCD4linux.xmlLCDType.value.split("x") + MAX_W,MAX_H = int(ttt[0]),int(ttt[1]) + elif t[1:] == "1": + MAX_W,MAX_H = 320,240 + elif t[1:] == "2": + MAX_W,MAX_H = 240,320 + elif t[1:] in ["3","4","5","10"]: + MAX_W,MAX_H = 800,480 + elif t[1:] in ["6","9","11","12"]: + MAX_W,MAX_H = 800,600 + elif t[1:] in ["7","8","13"]: + MAX_W,MAX_H = 1024,600 + elif t[1:] == "17": + MAX_W,MAX_H = 220,176 + elif t[1:] == "18": + MAX_W,MAX_H = 255,64 + elif t[1:] == "30": + MAX_W,MAX_H = 400,240 + elif t[1:] == "20": + MAX_W,MAX_H = LCD4linux.SizeW.value,LCD4linux.SizeH.value + elif t[1:] == "50": # vuduo2 + MAX_W,MAX_H = 400,240 + if r in ["90","270"]: + MAX_W,MAX_H = MAX_H,MAX_W + return MAX_W,MAX_H + +plugin_writeHelligkeit = None +g_min = 0 +g_max = None +def writeHelligkeit_lver(hell): + global g_min + global g_max + global plugin_writeHelligkeit + global LCDType1_id_lver + plugin_writeHelligkeit(hell) + if plugin.config.plugins.LCD4linux.LCDType1.value == LCDType1_id_lver: + if g_max is None: + g_min, g_max = getHellRange(plugin.config.plugins.LCD4linux.Helligkeit) + updateBrightness(int(hell), g_min, g_max) + +def writeHelligkeit(hell,hell2,STOP = False): + global g_min + global g_max + global old_hell + global plugin_writeHelligkeit + global LCDType1_id + plugin_writeHelligkeit(hell, hell2, STOP) + if plugin.LCD4linux.LCDType1.value == LCDType1_id: + if g_max is None: + g_min, g_max = getHellRange(plugin.LCD4linux.Helligkeit) + updateBrightness(int(hell), g_min, g_max) + +def getHellRange(ins): + try: + if isinstance(ins, ConfigSelectionNumber): + choices = [] + for s in ins.choices.choices: + choices.append(int(s)) + return (min(choices), max(choices)) + elif isinstance(ins, ConfigSlider): + return (ins.min, ins.max) + else: + return (0,10) + except: + return (0,10) + +old_hell = 40 +def updateBrightness(hell, _min, _max): + try: + if _min == _max: return + hell = int( 255*hell/(_max - _min) ) + if hell >= 250: + hell = 255 + global old_hell + if hell == old_hell: + return + else: + old_hell = hell + print "[LCD4linux Support] update Brightness : ",hell + led_fd = open("/dev/lcd2",'rw') + ioctl(led_fd, 0x10, hell) + led_fd.close() + except: + pass + +class pngUtilTimer: + def __init__(self): + self.PIC = "/tmp/dpf" + self.updateTimer = eTimer() + self.updateTimer.callback.append(self.updateLCD) + self.pngutilconnect = pngutil.connect() + self.last_mod_time = 0 + self.oldPluginVer = False + + def startUpdateTimer(self): + if self.pngutilconnect : + self.updateTimer.start(1000, True) + + def updateLCD(self): + self.updateTimer.stop() + if self.oldPluginVer: + lcd = plugin.config.plugins.LCD4linux.LCDType1.value + else: + lcd = plugin.LCD4linux.LCDType1.value + if lcd[1:] == "50": + if os.path.exists(self.PIC): + modify_time = os.stat(self.PIC).st_mtime + if modify_time != self.last_mod_time: + self.last_mod_time = modify_time + pngutiltime = time() + pngutil.send(self.PIC) + print "[LCD4linux Support] time (write to lcd) : ",time()-pngutiltime + self.updateTimer.start(500, True) + + def setLcd4linuxDuo2(self): + global plugin_writeHelligkeit + try: + lcdtype = plugin.LCDType + print "[LCD4linux Support] set LCD4linux for DUO2 (ver %s)"%plugin.Version + if plugin.Version == "V0.8r3": + global LCDType1_id_lver + self.oldPluginVer = True + lcdtype.append((LCDType1_id_lver, _("Vu+ Duo2 LCD 400x240"))) + plugin.config.plugins.LCD4linux.LCDType1 = ConfigSelection(choices = lcdtype, default=LCDType1_id_lver) + plugin.config.plugins.LCD4linux.Standby = ConfigSelection(choices = [("0", _("off")), ("1", _("on"))], default="0") + plugin.config.plugins.LCD4linux.Thread = ConfigYesNo(default = True) + plugin.config.plugins.LCD4linux.Helligkeit = ConfigSlider(default = 1, limits = (0, 7)) + plugin_writeHelligkeit = plugin.writeHelligkeit + plugin.writeHelligkeit = writeHelligkeit_lver + else: + global LCDType1_id + lcdtype.append((LCDType1_id, _("Vu+ Duo2 LCD 400x240"))) + plugin.LCD4linux.LCDType1 = ConfigSelection(choices = lcdtype, default=LCDType1_id) + plugin.LCD4linux.Standby = ConfigSelection(choices = [("0", _("off")), ("1", _("on"))], default="0") + plugin.LCD4linux.Helligkeit = ConfigSelectionNumber(0, 10, 1, default = 2) + plugin_writeHelligkeit = plugin.writeHelligkeit + plugin.writeHelligkeit = writeHelligkeit + plugin.getResolution = getResolution + self.PIC = plugin.PIC+".png" + return True + except: + return False + +pngutiltimer = pngUtilTimer() + +def lcdtimer(reason, **kwargs): + if pngutiltimer.setLcd4linuxDuo2(): + pngutiltimer.startUpdateTimer() + +def Plugins(**kwargs): + list = [] + global lcd4linuxPluginPath + if os.path.exists(lcd4linuxPluginPath+"/plugin.py"): + list.append( + PluginDescriptor(name="LCD4linuxSupport", + description="LCD4linuxSupport", + where = [PluginDescriptor.WHERE_SESSIONSTART], + fnc = lcdtimer)) + return list + diff --git a/meta-openvuplus/recipes-vuplus/duo2lcd4linux/lcd4linuxsupport_0.1.bb b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/lcd4linuxsupport_0.1.bb new file mode 100644 index 0000000..6d191ff --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/lcd4linuxsupport_0.1.bb @@ -0,0 +1,25 @@ +DESCRIPTION = "lcd4linux support for duo2" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" + +RDEPENDS = "enigma2 png-util" + +SRC_URI = " \ + file://plugin.py \ +" + +S = "${WORKDIR}" + +PR = "r0" + +PLUGINPATH = "/usr/lib/enigma2/python/Plugins/Extensions/LCD4linuxSupport" + +do_install() { + install -d ${D}${PLUGINPATH} + install -m 0600 ${S}/plugin.py ${D}${PLUGINPATH} + touch ${D}${PLUGINPATH}/__init__.py +} + +FILES_${PN} = "${PLUGINPATH}" +PACKAGE_ARCH = "${MACHINE_ARCH}" + diff --git a/meta-openvuplus/recipes-vuplus/lcd4linux/files/lcd4linux.init b/meta-openvuplus/recipes-vuplus/lcd4linux/files/lcd4linux.init new file mode 100644 index 0000000..f08f517 --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/lcd4linux/files/lcd4linux.init @@ -0,0 +1,70 @@ +#!/bin/sh +# +# lcd4linux +# +PLUGINDIR="/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux" +DAEMON=/usr/bin/lcd4linux +NICELEVEL="0" + + +daemon_start() { + if [ -f $PLUGINDIR/dpf$1.conf ]; then + echo "Starting $DAEMON $1" + start-stop-daemon --start --nicelevel $NICELEVEL --quiet --pidfile /var/run/lcd4linux$1.pid --exec $DAEMON -- -q -p /var/run/lcd4linux$1.pid -f $PLUGINDIR/dpf$1.conf + else + echo $PLUGINDIR/dpf$1.conf nicht gefunden + fi +} +daemon_stop() { + if [ -f /var/run/lcd4linux$1.pid ]; then + echo "Stopping $DAEMON $1" + start-stop-daemon --oknodo --stop --quiet --pidfile /var/run/lcd4linux$1.pid --exec $DAEMON + sleep 2 + echo "LCD::backlight(0)" | $DAEMON -i -f $PLUGINDIR/dpf$1.conf + fi +} +daemon_reload() { + if [ -f /var/run/lcd4linux$1.pid ]; then + start-stop-daemon --stop --signal 1 --quiet --pidfile /var/run/lcd4linux$1.pid --exec $DAEMON + fi +} + + +case "$1" in + start) + daemon_start 1 + daemon_start 2 + ;; + start1) + daemon_start 1 + ;; + start2) + daemon_start 2 + ;; + stop) + daemon_stop 1 + daemon_stop 2 + ;; + stop1) + daemon_stop 1 + ;; + stop2) + daemon_stop 2 + ;; + reload) + daemon_reload 1 + daemon_reload 2 + ;; + restart|force-reload) + daemon_stop 1 + daemon_stop 2 + sleep 4 + daemon_start 1 + daemon_start 2 + ;; + *) + echo "Usage: $0 {start|stop|restart|reload|force-reload|start1|start2|stop1|stop2}" >&2 + exit 1 + ;; +esac +exit 0 diff --git a/meta-openvuplus/recipes-vuplus/lcd4linux/lcd4linux_0.11.0-SVN.bb b/meta-openvuplus/recipes-vuplus/lcd4linux/lcd4linux_0.11.0-SVN.bb new file mode 100644 index 0000000..214562f --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/lcd4linux/lcd4linux_0.11.0-SVN.bb @@ -0,0 +1,39 @@ +DESCRIPTION = "LCD4Linux is a small program that grabs information from the kernel and some subsystems and displays it on an external liquid crystal display." +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" + +DEPENDS = "virtual/libusb0 ncurses readline jpeg" +RDEPENDS = "jpeg" + +PV = "0.11.0-SVN" +PR = "r1" + +EXTRA_OECONF = " --with-glib-prefix=${STAGING_LIBDIR}/.. \ + --with-glib-exec-prefix=${STAGING_LIBDIR}/.. \ + --with-ncurses=${STAGING_LIBDIR}/.." + +SRC_URI = "svn://ssl.bulix.org/svn/lcd4linux/;module=trunk;proto=https;rev=1200 \ + file://lcd4linux.init \ +" + +S = "${WORKDIR}/trunk" + +addtask setlibtool before do_configure after do_patch + +do_setlibtool (){ + sed -i "s#LIBTOOL=libtool#LIBTOOL=\${STAGING_BINDIR_CROSS}\/\${HOST_SYS}-libtool#" ${S}/Makefile.am +} + +INITSCRIPT_PARAMS_vuplus = "stop 10 0 6 ." +inherit autotools update-rc.d + +INITSCRIPT_NAME = "lcd4linux" +CONFFILES_${PN} += "${sysconfdir}/lcd4linux.conf" + +do_install_append() { + install -d ${D}/${sysconfdir} + install -m 0600 ${S}/lcd4linux.conf.sample ${D}/${sysconfdir}/lcd4linux.conf + install -d ${D}/${INIT_D_DIR} + install -m 0755 ${WORKDIR}/lcd4linux.init ${D}/${INIT_D_DIR}/lcd4linux +} + diff --git a/meta-openvuplus/recipes-vuplus/png-util/files/png_util.cpp b/meta-openvuplus/recipes-vuplus/png-util/files/png_util.cpp index e166205..82747cb 100755 --- a/meta-openvuplus/recipes-vuplus/png-util/files/png_util.cpp +++ b/meta-openvuplus/recipes-vuplus/png-util/files/png_util.cpp @@ -13,87 +13,97 @@ static png_bytep * row_pointers = 0; static png_bytep row_pointers_bit_shift = 0; static int row_byte_len = 0; -//#define UNIT_TEST 1 -#ifdef UNIT_TEST -int fd = open("/tmp/dump.txt", O_WRONLY|O_CREAT|O_LARGEFILE, 0644); -#endif - static int read_png_file(char* file_name) { /* 8 is the maximum size that can be checked */ - char header[8] = {0,}; + char header[8] = {0,}; - /* open file and test for it being a png */ - FILE *fp = fopen(file_name, "rb"); - if (!fp) + /* open file and test for it being a png */ + FILE *fp = fopen(file_name, "rb"); + if (!fp) { - fprintf(stderr, "[read_png_file] File %s could not be opened for reading\n", file_name); + fprintf(stderr, "[read_png_file] File %s could not be opened for reading\n", file_name); return 0; } - fread(header, 1, 8, fp); - if (png_sig_cmp((png_byte*)header, 0, 8)) + fread(header, 1, 8, fp); + if (png_sig_cmp((png_byte*)header, 0, 8)) { - fprintf(stderr, "[read_png_file] File %s is not recognized as a PNG file\n", file_name); + fclose(fp); + fprintf(stderr, "[read_png_file] File %s is not recognized as a PNG file\n", file_name); return 0; } - /* initialize stuff */ - png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + /* initialize stuff */ + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) + if (!png_ptr) { - fprintf(stderr, "[read_png_file] png_create_read_struct failed\n"); + fclose(fp); + fprintf(stderr, "[read_png_file] png_create_read_struct failed\n"); return 0; } - info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) + info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) { - fprintf(stderr, "[read_png_file] png_create_info_struct failed\n"); + png_destroy_read_struct(&png_ptr, NULL, NULL); + fclose(fp); + fprintf(stderr, "[read_png_file] png_create_info_struct failed\n"); return 0; } - if (setjmp(png_jmpbuf(png_ptr))) + if (setjmp(png_jmpbuf(png_ptr))) { - fprintf(stderr, "[read_png_file] Error during init_io\n"); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + fclose(fp); + fprintf(stderr, "[read_png_file] Error during init_io\n"); return 0; } - png_init_io(png_ptr, fp); - png_set_sig_bytes(png_ptr, 8); + png_init_io(png_ptr, fp); + png_set_sig_bytes(png_ptr, 8); - png_read_info(png_ptr, info_ptr); + png_read_info(png_ptr, info_ptr); - width = png_get_image_width(png_ptr, info_ptr); - height = png_get_image_height(png_ptr, info_ptr); - color_type = png_get_color_type(png_ptr, info_ptr); - bit_depth = png_get_bit_depth(png_ptr, info_ptr); + width = png_get_image_width(png_ptr, info_ptr); + height = png_get_image_height(png_ptr, info_ptr); + if (width != 400 || height != 240) + { + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + fclose(fp); + fprintf(stderr, "[read_png_file] Error invalid image size\n"); + return 0; + } + color_type = png_get_color_type(png_ptr, info_ptr); + bit_depth = png_get_bit_depth(png_ptr, info_ptr); - number_of_passes = png_set_interlace_handling(png_ptr); - png_read_update_info(png_ptr, info_ptr); + number_of_passes = png_set_interlace_handling(png_ptr); + png_read_update_info(png_ptr, info_ptr); /* read file */ - if (setjmp(png_jmpbuf(png_ptr))) + if (setjmp(png_jmpbuf(png_ptr))) { - fprintf(stderr, "[read_png_file] Error during read_image\n"); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + fclose(fp); + fprintf(stderr, "[read_png_file] Error during read_image\n"); return 0; } - if(row_pointers == 0) + if(row_pointers == 0) { row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height); row_byte_len = png_get_rowbytes(png_ptr,info_ptr); - for (y=0; y