]> git.vomp.tv Git - vompclient-marten.git/commitdiff
Implement SignalOn and SignalOff switch back to more mvp like behaviour of program...
authorMarten Richter <marten.richter@freenet.de>
Sun, 21 Oct 2012 18:05:21 +0000 (20:05 +0200)
committerMarten Richter <marten.richter@freenet.de>
Sun, 21 Oct 2012 18:05:21 +0000 (20:05 +0200)
13 files changed:
GNUmakefile
boxstack.cc
boxstack.h
command.cc
defines.h
osd.h
osdopenvg.cc
osdopenvg.h
osdvector.cc
osdvector.h
remotelinux.cc
videoomx.cc
vwelcome.cc

index 88416452d3c042fe453dd96d344dcb10003a9ae7..66fa91a63c204b3fef0c2164195d25e53bd2fed2 100644 (file)
@@ -1,6 +1,8 @@
 vomp_platform =raspberry\r
 # valid platforms are raspberry and mvp\r
-\r
+vomp_options=\r
+#uncomment the line below, if you want to vomp application like, without a reboot option, automatically set for windows!\r
+#vomp_options+= -DVOMP_HAS_EXIT\r
 ifeq ($(vomp_platform),mvp)\r
 \r
 $(info MVP crosscompiler)\r
@@ -107,7 +109,7 @@ release: CXXFLAGS := $(CXXFLAGS_REL)
 release: clean vompclient strip\r
 \r
 deps: GNUmakefile\r
-       $(CC) -MM $(INCLUDES) $(OBJECTS:%.o=%.cc) > deps\r
+       $(CC) -MM $(INCLUDES) $(vomp_options) $(OBJECTS:%.o=%.cc) > deps\r
 \r
 -include deps\r
 \r
index bee0c813ca64c9db46e36d8aaa23068f43b6bedf..beb828004bfb98f47a7e9521ea1ae216b6981560 100644 (file)
@@ -222,6 +222,28 @@ void BoxStack::deleteBox(int z)
   }\r
 }\r
 \r
+void BoxStack::redrawAllBoxes()\r
+{\r
+#ifndef WIN32\r
+  pthread_mutex_lock(&boxLock);\r
+#else\r
+  WaitForSingleObject(boxLock, INFINITE);\r
+#endif\r
+\r
+  for (int z = 0; z < numBoxes; z++)\r
+  {\r
+         boxes[z]->draw();\r
+  }\r
+\r
+\r
+#ifndef WIN32\r
+    pthread_mutex_unlock(&boxLock);\r
+#else\r
+    ReleaseMutex(boxLock);\r
+#endif\r
+    update(NULL,NULL); // should blt all\r
+}\r
+\r
 void BoxStack::update(Boxx* toUpdate, Region* regionToUpdate)\r
 {\r
   Log::getInstance()->log("BoxStack", Log::DEBUG, "Update called");\r
index 97465ffeabd1f53d4eb041142303c9af8c6b4abe..1e0d638e94c50ba2e021fb4cd3e7ef485581821b 100644 (file)
@@ -56,6 +56,7 @@ class BoxStack
     int remove(Boxx*);
     void removeAll();
     void update(Boxx*, Region* regionToUpdate = NULL);
+    void redrawAllBoxes();
     // -- end
 
     int handleCommand(int command);
index 3ce19e2303d6c8b464b10a147e9326223f51ff8b..77b9d7485c76d1ddb291b70a00289cc5c3fa6bed 100644 (file)
@@ -610,7 +610,7 @@ void Command::doReboot()
   // just kill it...\r
   logger->log("Command", Log::NOTICE, "Reboot");\r
 #ifndef WIN32\r
-#ifdef VOMP_PLATTFORM_MVP\r
+#ifndef VOMP_HAS_EXIT\r
   reboot(LINUX_REBOOT_CMD_RESTART);\r
 #else\r
   stop();\r
index 24c1bf0a1c5e696402cae49cd33a9d7302cc5385..76f36c86dee274b74a2edc8b674fd52f76942605 100644 (file)
--- a/defines.h
+++ b/defines.h
@@ -52,6 +52,7 @@ long long getTimeMS();
   #define CLOSESOCKET closesocket\r
   #define DEFAULT_TCP_WINDOWSIZENR 1  /*=2048*/\r
 \r
+  #define VOMP_HAS_EXIT\r
 \r
 #else\r
 \r
diff --git a/osd.h b/osd.h
index f8b0c92627151a32c71f317d2095c1ceae820b0d..5f339fcbfbbaee423c7371c1f405687246cd9de6 100644 (file)
--- a/osd.h
+++ b/osd.h
@@ -34,6 +34,7 @@ class Osd
 \r
     virtual int init(void* device)=0;\r
     virtual int shutdown()=0;\r
+    virtual int restore(){return 1;};\r
 \r
     virtual Surface * createNewSurface()=0; // For Boxx\r
     virtual int charSet() {return 1;};\r
index 0f892fa129d6fcd0de6d1f8b34b1551c467751d9..1ac5ba8ce45c95e8d65683932a2dff7f072ee7f4 100644 (file)
@@ -337,6 +337,8 @@ int OsdOpenVG::shutdown()
 }\r
 \r
 \r
+\r
+\r
 void OsdOpenVG::threadMethod()\r
 {\r
        // We have to claim the egl context for this thread\r
index 57d7f082fbaa8ff731ee834220470dfd1b73c1c8..67357cd21def1e3ab8c00cdb0f80f41488c95add 100644 (file)
@@ -78,6 +78,8 @@ class OsdOpenVG : public OsdVector, public Thread_TYPE
     int shutdown();\r
 \r
 \r
+\r
+\r
     float getFontHeight();\r
     float getCharWidth(wchar_t c);\r
     void imageUploadLine(ImageIndex index,unsigned int j,unsigned int width,void *data);\r
index 791f36ab97fc86b61d4be84bbc233209a51373f7..a1ae4f3a99ff6864f86b8fa072d26bbc649d72ec 100644 (file)
@@ -61,6 +61,28 @@ void OsdVector::Blank()
        // do nothing? remove this one?\r
 }\r
 \r
+int OsdVector::restore()\r
+{\r
+       // First clear the contents of all registered surfaces\r
+       surfaces_mutex.Lock();\r
+\r
+       //Now go through all surfaces and draw them\r
+       list<SurfaceCommands>::iterator curdraw=scommands.begin();\r
+       while (curdraw!=scommands.end()) {\r
+               (*curdraw).commands.clear();\r
+               curdraw++;\r
+       }\r
+       //also clear all handles, they are now invalid, no need to release them\r
+       images_ref.clear();;\r
+       monobitmaps.clear();\r
+       jpegs.clear();\r
+       styles.clear();\r
+       styles_ref.clear();\r
+\r
+       surfaces_mutex.Unlock();\r
+       return 1;\r
+}\r
+\r
 void OsdVector::drawSurfaces()\r
 {\r
        surfaces_mutex.Lock();\r
index 028996c78471cf0b42898edde9c238fd3451a131..255d49a8a49855bfd1bac1f6bb313e4188a0f6ae 100644 (file)
@@ -128,6 +128,8 @@ class OsdVector : public Osd
     virtual ~OsdVector();\r
 \r
 \r
+    int restore();\r
+\r
     int getFD();\r
 \r
     void screenShot(const char* fileName);\r
index 4506da09d4baf0c4f019ee9919fcf8dc85e8ffa6..08fedb9049bb633cf7ea97aef0b32e4a780e85ae 100644 (file)
@@ -186,7 +186,11 @@ int RemoteLinux::shutdown()
 {
   if (!initted) return 0;
   deinitCec();
-
+  while (devices.size()) {
+         int cur_fd = devices.back();
+         devices.pop_back();
+         close(cur_fd);
+  }
 
   initted = 0;
   return 1;
index 6d1f612bd5bc4c27cafc83f01970e03b5937165d..b0452c10e1de46b4eba8a4904282bdfa0676d061 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright 2004-2005 Chris Tallon, 2009 Marten Richter
+    Copyright 2004-2005 Chris Tallon, 2009-12 Marten Richter
 
     This file is part of VOMP.
 
@@ -25,6 +25,7 @@
 #include "vdr.h"
 #include "woptionpane.h"
 #include "osdopenvg.h"
+#include "boxstack.h"
 
 #include <linux/fb.h>
 
@@ -538,14 +539,23 @@ void VideoOMX::updateMode()
 int VideoOMX::signalOff()
 {
        //TODO reinit osd
-       //vc_tv_power_off();
-       //signalon=false;
+       Log::getInstance()->log("Video", Log::NOTICE, "signalOff");
+       vc_tv_power_off();
+       signalon=false;
     return 1;
 }
 
 int VideoOMX::signalOn()
 {
-  if (!signalon)  selectVideoMode(0);
+  if (!signalon)  {
+         Osd::getInstance()->shutdown();
+         selectVideoMode(0);
+         Osd::getInstance()->restore();
+         Osd::getInstance()->init((void*)"");
+         BoxStack::getInstance()->redrawAllBoxes();
+         initted=1;
+
+  }
   return 1;
 }
 
index 258bb56b29defd6f2f6b7b51d948fb25ddb5b555..d7b032c602f6cfe7eef4c926daa2f0cdcfb55707 100644 (file)
@@ -75,7 +75,7 @@ VWelcome::VWelcome()
 #endif\r
 \r
   sl.addOption(tr("6. Options"), 6, 0);\r
-#ifdef VOMP_PLATTFORM_MVP\r
+#ifndef VOMP_HAS_EXIT\r
   sl.addOption(tr("7. Reboot"), 7, 0);\r
 #else\r
     sl.addOption(tr("7. Exit"), 7, 0);\r
@@ -101,11 +101,8 @@ VWelcome::~VWelcome()
 \r
 void VWelcome::draw()\r
 {\r
-  Log::getInstance()->log("VWelcome", Log::DEBUG, "Mark1");\r
   TBBoxx::draw();\r
-  Log::getInstance()->log("VWelcome", Log::DEBUG, "Mark2");\r
   drawClock();\r
-  Log::getInstance()->log("VWelcome", Log::DEBUG, "Mark3");\r
 }\r
 \r
 void VWelcome::drawClock()\r