From: hschang Date: Fri, 10 May 2013 05:25:46 +0000 (+0900) Subject: duo2lcd4linux : make patch X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_openvuplus_3.0;a=commitdiff_plain;h=ddaf0f30e898502b9a0087b08e7e850bdc6092c6 duo2lcd4linux : make patch png-util : fix memfree --- diff --git a/meta-openvuplus/recipes-vuplus/duo2lcd4linux/duo2lcd4linux_0.1.bb b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/duo2lcd4linux_0.1.bb index 6b8990e..a448849 100644 --- a/meta-openvuplus/recipes-vuplus/duo2lcd4linux/duo2lcd4linux_0.1.bb +++ b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/duo2lcd4linux_0.1.bb @@ -4,30 +4,28 @@ LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=80 SRC_URI = " \ file://LCD4linux.tar.gz \ + file://duo2lcd4linux.patch;patch=1;pnum=1 \ " -RDEPENDS = "python-codecs python-datetime python-textutils python-imaging python-pyusb" +RDEPENDS = "python-codecs python-datetime python-textutils python-imaging python-pyusb png-util" S = "${WORKDIR}/LCD4linux" -PR = "r2" +PR = "r3" -do_install() { - install -d ${D}/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux - install -m 0755 ${S}/*.py ${D}/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux/ - install -m 0755 ${S}/*.png ${D}/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux - install -m 0755 ${S}/*.conf ${D}/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux - install -m 0755 ${S}/*.so ${D}/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux - install -m 0755 ${S}/*.pot ${D}/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux - install -d ${D}/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux/locale/de/LC_MESSAGES - install -m 0644 ${S}/locale/de/LC_MESSAGES/LCD4linux.mo ${D}/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux/locale/de/LC_MESSAGES - install -d ${D}/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux/wetter - install -m 0755 ${S}/wetter/*.gif ${D}/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux/wetter -} +PLUGINPATH = "/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux" -do_package_qa() { +do_install() { + install -d ${D}${PLUGINPATH} + install -m 0755 ${S}/*.py ${D}${PLUGINPATH} + install -m 0755 ${S}/*.png ${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 -d ${D}${PLUGINPATH}/wetter + install -m 0755 ${S}/wetter/*.gif ${D}${PLUGINPATH}/wetter } -FILES_${PN} = "/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux" +FILES_${PN} = "${PLUGINPATH}" PACKAGE_ARCH = "${MACHINE_ARCH}" + diff --git a/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/LCD4linux.tar.gz b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/LCD4linux.tar.gz index 8da13fa..8a0dd9d 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 new file mode 100644 index 0000000..5d4d6bd --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/duo2lcd4linux.patch @@ -0,0 +1,448 @@ +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 + import xml.etree.cElementTree + ++from threading import Thread ++from fcntl import ioctl ++import socket ++from pngutil import png_util ++pngutil = png_util.PNGUtil() ++ + # globals + DPFrefreshrate="/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux/refreshrate" + WetterPath = "/usr/lib/enigma2/python/Plugins/Extensions/LCD4linux/wetter/" +@@ -80,6 +86,7 @@ + BilderIndexStandby = 0 + BilderTime = 0 + ThreadRunning = 0 ++WetterThreadRunning = 0 + 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 @@ + 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.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) +-config.plugins.LCD4linux.OSCAMSize = ConfigSlider(default = 10, increment = 1, limits = (9, 20)) +-config.plugins.LCD4linux.OSCAMPos = ConfigSlider(default = 20, increment = 2, limits = (0, 600)) +-config.plugins.LCD4linux.OSCAMAlign = ConfigSelection(choices = [("0", _("left")), ("2", _("right"))], default="0") +-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.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 @@ + config.plugins.LCD4linux.StandbyWetterLCD = ConfigSelection(choices = LCDSelect, default="1") + config.plugins.LCD4linux.StandbyWetterPos = 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") +-config.plugins.LCD4linux.StandbyOSCAMSize = ConfigSlider(default = 10, increment = 1, limits = (9, 20)) +-config.plugins.LCD4linux.StandbyOSCAMPos = ConfigSlider(default = 20, increment = 2, limits = (0, 600)) +-config.plugins.LCD4linux.StandbyOSCAMAlign = ConfigSelection(choices = [("0", _("left")), ("2", _("right"))], default="0") +-config.plugins.LCD4linux.StandbyOSCAMSplit = ConfigYesNo(default = False) +-config.plugins.LCD4linux.StandbyOSCAMColor = ConfigSelection(choices = Farbe, default="white") +-config.plugins.LCD4linux.StandbyOSCAMBackColor = ConfigSelection(choices = [("0", _("off"))] + Farbe, default="black") + 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 @@ + self.list2.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.WetterLCD)) + self.list2.append(getConfigListEntry(_("- Position"), config.plugins.LCD4linux.WetterPos)) + 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": +- self.list2.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.OSCAMLCD)) +- self.list2.append(getConfigListEntry(_("- File"), config.plugins.LCD4linux.OSCAMFile)) +- self.list2.append(getConfigListEntry(_("- Font Size"), config.plugins.LCD4linux.OSCAMSize)) +- self.list2.append(getConfigListEntry(_("- Position"), config.plugins.LCD4linux.OSCAMPos)) +- self.list2.append(getConfigListEntry(_("- Alignment"), config.plugins.LCD4linux.OSCAMAlign)) +- 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(_("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 @@ + self.list4.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.StandbyWetterLCD)) + self.list4.append(getConfigListEntry(_("- Position"), config.plugins.LCD4linux.StandbyWetterPos)) + 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": +- self.list4.append(getConfigListEntry(_("- which LCD"), config.plugins.LCD4linux.StandbyOSCAMLCD)) +- self.list4.append(getConfigListEntry(_("- Font Size"), config.plugins.LCD4linux.StandbyOSCAMSize)) +- self.list4.append(getConfigListEntry(_("- Position"), config.plugins.LCD4linux.StandbyOSCAMPos)) +- self.list4.append(getConfigListEntry(_("- Alignment"), config.plugins.LCD4linux.StandbyOSCAMAlign)) +- self.list4.append(getConfigListEntry(_("- Split Screen"), config.plugins.LCD4linux.StandbyOSCAMSplit)) +- self.list4.append(getConfigListEntry(_("- Color"), config.plugins.LCD4linux.StandbyOSCAMColor)) +- self.list4.append(getConfigListEntry(_("- Background Color"), config.plugins.LCD4linux.StandbyOSCAMBackColor)) + 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 @@ + self.KeyTime = 0 + self.StandbyChanged = False + self.DataMinute = "" ++ self.WetterCheckMin = "" + 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") + self.StandbyChanged = Standby.inStandby + self.restartTimer() + if config.plugins.LCD4linux.StandbyWetter.value != "0" or config.plugins.LCD4linux.Wetter.value != "0": +- if strftime("%M") == "15" or strftime("%M") == "45" or wwwWetter.find("forecast_information") < 1: +- 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: ++ 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) + else: + self.StatusTimer.startLongTimer(5) + +@@ -1377,15 +1359,43 @@ + ScreenActive = "1" + ScreenTime += 1 + ++ def cannotConnect(self, port = 80, url = "74.125.71.94", timeout = 5): ++ try: ++ 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) ++ print " >> Cause: ",ErrMsg ++ return True ++ else: ++# print " >> sock close, sock : ",sock ++ if sock is not None: ++ print "socket close : ",sock.close() ++ return False ++ + def downloadWetter(self): ++ global WetterThreadRunning ++ if WetterThreadRunning > 0: ++ print "[LCD4linux] downloadWetter already running" ++ return ++ WetterThreadRunning += 1 ++ t = Thread(target=self.downloadWetterThread) ++ t.start() ++ ++ def downloadWetterThread(self): ++ if self.cannotConnect(80, "74.125.71.94", 1): # www.google.de ++ 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") + getPage(self.feedurl).addCallback(self.downloadListCallback).addErrback(self.downloadListError) ++ self.downloadWetterThreadEnd() + + def downloadListError(self, error=""): + print 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=codecs.decode(wwwWetter, 'UTF-8') + if os.path.isfile(PICwetter): + os.system("rm -f %s" % PICwetter) ++# print " >> downloadListCallback updated.." ++ self.downloadWetterThreadEnd() ++ self.restartTimer() ++ ++ def downloadWetterThreadEnd(self): ++ global WetterThreadRunning ++ WetterThreadRunning = 0 + + def LCD4linuxPICThread(self,session): + global ThreadRunning +@@ -1465,7 +1482,9 @@ + return event_begin, event_end, duration, event_name + + 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): + global WetterType ++ global WetterThreadRunning ++ if WetterThreadRunning: ++ return + if os.path.isfile(PICwetter) and ConfigType == WetterType: + pil_image = Image.open(PICwetter) + im.paste(pil_image,(0,ConfigPos)) +@@ -1977,51 +1999,6 @@ + lx = getSplit(ConfigSplit,ConfigAlign,MAX_W,w) + draw.text((lx, ConfigPos), i, font=font, fill=ConfigColor) + +-# show OSCAM +- def putOSCAM(ConfigPos, ConfigSize, ConfigColor, ConfigBackColor, ConfigAlign, ConfigSplit, draw, im): +- MAX_W,MAX_H = im.size +- OSCAMrunning = False +- if ConfigSplit == True: +- MAX_W = int(MAX_W/2) +- POSX = getSplit(ConfigSplit,ConfigAlign,MAX_W,MAX_W) +- if os.path.isfile(config.plugins.LCD4linux.OSCAMFile.value): +- current_h=ConfigPos +- if time()-os.path.getmtime(config.plugins.LCD4linux.OSCAMFile.value) < 30: +- OSCAMrunning = True +- font = ImageFont.truetype(FONT, ConfigSize, encoding='unic') +- p=[160,12.8,3.2,2,1.78,1.6,1.45,1.33] +- +- f = open(config.plugins.LCD4linux.OSCAMFile.value,"r") +- for line in f.readlines(): +- line = line.replace('\xc2\x86', '').replace('\xc2\x87', '').replace('\n','').decode("utf-8", "ignore").encode("utf-8") or "" +- line = codecs.decode(line, 'UTF-8') +- w,h = draw.textsize(line, font=font) +- if ConfigBackColor !="0": +- if line.find(" Label ") > 0: +- draw.rectangle((POSX, current_h, POSX+MAX_W, current_h+h),fill=ConfigColor) +- else: +- draw.rectangle((POSX, current_h, POSX+MAX_W, current_h+h),fill=ConfigBackColor) +- if line.find("|") >0: +- ll = line.split("|") +- if len(ll)==4: +- p=[160,10.67,2.91,1.14,1.03] +- elif len(ll)==5: +- p=[160,10.67,2.91,1.78,1.14,1.03] +- else: +- p=[160,10.67,2.91,1.78,1.6,1.45,1.33,1.14,1.03] +- for x in range(len(ll)): +- if line.find(" Label ") > 0: +- draw.text((POSX+int(MAX_W/p[x]), current_h), ll[x].strip(), font=font, fill=ConfigBackColor) +- else: +- draw.text((POSX+int(MAX_W/p[x]), current_h), ll[x].strip(), font=font, fill=ConfigColor) +- current_h+=h +- f.close() +- if OSCAMrunning == False: +- font = ImageFont.truetype(FONT, ConfigSize+13, encoding='unic') +- w,h = draw.textsize(codecs.decode(_("OSCAM not running"), 'UTF-8'), font=font) +- draw.rectangle((POSX, ConfigPos, POSX+MAX_W, ConfigPos+h),fill=ConfigBackColor) +- draw.text((POSX+(MAX_W-w)/2, ConfigPos), codecs.decode(_("OSCAM not running"), 'UTF-8'), font=font, fill=ConfigColor) +- + # show Title + def putTitle(ConfigPos, ConfigSize, ConfigLines, ConfigColor, ConfigAlign, ConfigSplit, draw, im): + MAX_W,MAX_H = im.size +@@ -2157,12 +2134,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) +-# show OSCAM +- if config.plugins.LCD4linux.StandbyOSCAM.value.find(ScreenActive) >= 0: +- if config.plugins.LCD4linux.StandbyOSCAMLCD.value.find("1") >= 0: +- putOSCAM(config.plugins.LCD4linux.StandbyOSCAMPos.value, config.plugins.LCD4linux.StandbyOSCAMSize.value, config.plugins.LCD4linux.StandbyOSCAMColor.value, config.plugins.LCD4linux.StandbyOSCAMBackColor.value, config.plugins.LCD4linux.StandbyOSCAMAlign.value, config.plugins.LCD4linux.StandbyOSCAMSplit.value, draw, im) +- if config.plugins.LCD4linux.StandbyOSCAMLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00": +- putOSCAM(config.plugins.LCD4linux.StandbyOSCAMPos.value, config.plugins.LCD4linux.StandbyOSCAMSize.value, config.plugins.LCD4linux.StandbyOSCAMColor.value, config.plugins.LCD4linux.StandbyOSCAMBackColor.value, config.plugins.LCD4linux.StandbyOSCAMAlign.value, config.plugins.LCD4linux.StandbyOSCAMSplit.value, draw2, im2) + # show Textfile + if config.plugins.LCD4linux.StandbyText.value.find(ScreenActive) >= 0: + if config.plugins.LCD4linux.StandbyTextLCD.value.find("1") >= 0: +@@ -2324,12 +2295,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) +-# show OSCAM +- if config.plugins.LCD4linux.OSCAM.value.find(ScreenActive) >= 0: +- if config.plugins.LCD4linux.OSCAMLCD.value.find("1") >= 0: +- putOSCAM(config.plugins.LCD4linux.OSCAMPos.value, config.plugins.LCD4linux.OSCAMSize.value, config.plugins.LCD4linux.OSCAMColor.value, config.plugins.LCD4linux.OSCAMBackColor.value, config.plugins.LCD4linux.OSCAMAlign.value, config.plugins.LCD4linux.OSCAMSplit.value, draw, im) +- if config.plugins.LCD4linux.OSCAMLCD.value.find("2") >= 0 and config.plugins.LCD4linux.LCDType2.value != "00": +- putOSCAM(config.plugins.LCD4linux.OSCAMPos.value, config.plugins.LCD4linux.OSCAMSize.value, config.plugins.LCD4linux.OSCAMColor.value, config.plugins.LCD4linux.OSCAMBackColor.value, config.plugins.LCD4linux.OSCAMAlign.value, config.plugins.LCD4linux.OSCAMSplit.value, draw2, im2) + # 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): diff --git a/meta-openvuplus/recipes-vuplus/png-util/files/png_util.cpp b/meta-openvuplus/recipes-vuplus/png-util/files/png_util.cpp new file mode 100755 index 0000000..e166205 --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/png-util/files/png_util.cpp @@ -0,0 +1,180 @@ +#include "png_util.h" + +static int x, y; +static int width, height; + +static png_byte color_type; +static png_byte bit_depth; + +static png_structp png_ptr; +static png_infop info_ptr; +static int number_of_passes; +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,}; + + /* 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); + return 0; + } + + 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); + return 0; + } + + /* initialize stuff */ + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + + if (!png_ptr) + { + fprintf(stderr, "[read_png_file] png_create_read_struct failed\n"); + return 0; + } + + info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) + { + fprintf(stderr, "[read_png_file] png_create_info_struct failed\n"); + return 0; + } + + if (setjmp(png_jmpbuf(png_ptr))) + { + 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_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); + + 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))) + { + fprintf(stderr, "[read_png_file] Error during read_image\n"); + return 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= 0) + { + close(device_fd); + device_fd = -1; + } +} + +int PNGUtil::send(char* png_file_name) +{ + if(device_fd < 0) + { + fprintf(stderr, "unloaded!! retry.. connect!!\n"); + return 0; + } + if(!read_png_file(png_file_name)) + { + return 0; + } + { + + int i,j; + int row_pointers_ptr = 0; + int row_pointers_2_ptr = 0; + + for(i=0;i>5); + row_pointers_bit_shift[row_pointers_2_ptr+1]=((row_pointers[i][j+1]&28)<<3)|(row_pointers[i][j+2]>>3); + row_pointers_2_ptr += 2; + } + } + } +#ifdef UNIT_TEST + { + int w = write(fd, row_pointers_bit_shift , height * width * 2); + printf("write to dst_fd : %d\n",w); + } +#endif +#ifndef UNIT_TEST + { + int w=-1; + w = write(device_fd, row_pointers_bit_shift, height * width * 2); + printf("write ret : %d\n",w); +// ret = ioctl(device_fd, 0); + printf("write to /dev/lcd2 : %d\n",w); + } +#endif + return 1; +} + diff --git a/meta-openvuplus/recipes-vuplus/png-util/files/png_util.h b/meta-openvuplus/recipes-vuplus/png-util/files/png_util.h new file mode 100755 index 0000000..de0b655 --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/png-util/files/png_util.h @@ -0,0 +1,38 @@ +#ifndef _PNG_UTIL_H_ +#define _PNG_UTIL_H_ + +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +using namespace std; + +class PNGUtil { +private: + static PNGUtil *instance; + int device_fd; + +public : + PNGUtil(); + ~PNGUtil(); + int connect(); + void disconnect(); + int send(char* png_file_name); + static PNGUtil *getInstance(); +}; + + +#if defined(__cplusplus) +}; +#endif + +#endif /*_PNG_UTIL_H_*/ diff --git a/meta-openvuplus/recipes-vuplus/png-util/files/png_util.i b/meta-openvuplus/recipes-vuplus/png-util/files/png_util.i new file mode 100755 index 0000000..e84131e --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/png-util/files/png_util.i @@ -0,0 +1,6 @@ +%module png_util +%{ +#include "png_util.h" +%} +%include "png_util.h" + diff --git a/meta-openvuplus/recipes-vuplus/png-util/png-util_1.0.bb b/meta-openvuplus/recipes-vuplus/png-util/png-util_1.0.bb new file mode 100755 index 0000000..88c78fc --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/png-util/png-util_1.0.bb @@ -0,0 +1,32 @@ +DESCRIPTION = "PNG Assistant" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" +PR = "r1" + +DEPENDS = "swig-native libpng python" + +SRC_URI = "\ + file://png_util.cpp \ + file://png_util.h \ + file://png_util.i \ +" + +S = "${WORKDIR}/${P}" + +inherit distutils + +do_compile() { + swig -python -c++ ${WORKDIR}/png_util.i + ${CXX} -O2 -c -fPIC ${WORKDIR}/png_util.cpp ${WORKDIR}/png_util_wrap.cxx -I${STAGING_INCDIR}/${PYTHON_DIR} + ${CXX} -shared ${S}/png_util.o ${S}/png_util_wrap.o -o _png_util.so -L${STAGING_LIBDIR} -lpng -fPIC + mv ${WORKDIR}/png_util.py ${S} +} + +do_install() { + install -d ${D}/${PYTHON_SITEPACKAGES_DIR}/pngutil + touch ${D}/${PYTHON_SITEPACKAGES_DIR}/pngutil/__init__.py + install -m 0755 ${S}/png_util.py ${D}/${PYTHON_SITEPACKAGES_DIR}/pngutil + install -m 0755 ${S}/_png_util.so ${D}/${PYTHON_SITEPACKAGES_DIR}/pngutil +} + +FILES_${PN} = "${PYTHON_SITEPACKAGES_DIR}/pngutil"