duo2lcd4linux : make patch
authorhschang <chang@dev3>
Fri, 10 May 2013 05:25:46 +0000 (14:25 +0900)
committerhschang <chang@dev3>
Fri, 10 May 2013 05:34:58 +0000 (14:34 +0900)
png-util : fix memfree

meta-openvuplus/recipes-vuplus/duo2lcd4linux/duo2lcd4linux_0.1.bb
meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/LCD4linux.tar.gz
meta-openvuplus/recipes-vuplus/duo2lcd4linux/files/duo2lcd4linux.patch [new file with mode: 0644]
meta-openvuplus/recipes-vuplus/png-util/files/png_util.cpp [new file with mode: 0755]
meta-openvuplus/recipes-vuplus/png-util/files/png_util.h [new file with mode: 0755]
meta-openvuplus/recipes-vuplus/png-util/files/png_util.i [new file with mode: 0755]
meta-openvuplus/recipes-vuplus/png-util/png-util_1.0.bb [new file with mode: 0755]

index 6b8990e..a448849 100644 (file)
@@ -4,30 +4,28 @@ LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=80
 
 SRC_URI = " \
         file://LCD4linux.tar.gz \
 
 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"
 
 
 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}"
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
+
index 8da13fa..8a0dd9d 100644 (file)
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 (file)
index 0000000..5d4d6bd
--- /dev/null
@@ -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 (executable)
index 0000000..e166205
--- /dev/null
@@ -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<height; y++) 
+               {
+                       row_pointers[y] = (png_byte*) malloc(row_byte_len);
+               }
+               row_pointers_bit_shift = (unsigned char*) malloc(sizeof(unsigned char) * height * width * 2);
+       }
+
+        png_read_image(png_ptr, row_pointers);
+       png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
+        fclose(fp);
+       return 1;
+}
+
+PNGUtil *PNGUtil::instance = 0;
+
+PNGUtil::PNGUtil() 
+{
+       instance = this;
+       device_fd = -1;
+}
+
+PNGUtil::~PNGUtil()
+{
+       disconnect();
+}
+
+PNGUtil *PNGUtil::getInstance()
+{
+       return instance;
+}
+
+int PNGUtil::connect()
+{
+       const char* device_file_name = "/dev/lcd2";
+       device_fd = open("/dev/lcd2", O_RDWR);
+       if(device_fd <0)
+               return 0;
+       return 1;
+}
+
+void PNGUtil::disconnect() 
+{
+       if(device_fd >= 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<height;i++)
+               {
+                       for(j=0;j<row_byte_len;j+=3)
+                       {
+                               row_pointers_bit_shift[row_pointers_2_ptr]=(row_pointers[i][j]&248)|(row_pointers[i][j+1]>>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 (executable)
index 0000000..de0b655
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef _PNG_UTIL_H_
+#define _PNG_UTIL_H_
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <png.h>
+
+#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 (executable)
index 0000000..e84131e
--- /dev/null
@@ -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 (executable)
index 0000000..88c78fc
--- /dev/null
@@ -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"