]> git.vomp.tv Git - vompclient.git/commitdiff
Add some VT switching and locking
authorMarten Richter <marten.richter@freenet.de>
Sat, 6 Oct 2012 20:05:39 +0000 (22:05 +0200)
committerMarten Richter <marten.richter@freenet.de>
Sat, 6 Oct 2012 20:05:39 +0000 (22:05 +0200)
defines.h
main.cc

index 5358246e19524756f293378adbfec1b3b4be874f..1bbdec6bd60d6c9119cca445bb0a5e56de679fb7 100644 (file)
--- a/defines.h
+++ b/defines.h
@@ -112,6 +112,7 @@ long long getTimeMS();
 \r
   #define DEFAULT_TCP_WINDOWSIZENR 6  /*=2048*/\r
   #define TV_NORM_SWITCHABLE\r
+  #define HANDLE_VT_SWITCHING\r
 \r
   #define VOMP_LINUX_CLOCK  CLOCK_MONOTONIC\r
 \r
diff --git a/main.cc b/main.cc
index 237b233295a94fff2f48158456808900dfd7ab1d..ae156b02108108f195234ba7ab4264dc546d56a3 100644 (file)
--- a/main.cc
+++ b/main.cc
 #endif\r
 \r
 #include "defines.h"\r
+\r
+#ifdef HANDLE_VT_SWITCHING\r
+#include <signal.h>\r
+#include <sys/ioctl.h>\r
+#include <linux/vt.h>\r
+#endif\r
 #include "log.h"\r
 #include "timers.h"\r
 #include "vdr.h"\r
@@ -104,6 +110,11 @@ Audio* audio;
 Wol* wol;\r
 Sleeptimer* sleeptimer;\r
 \r
+#ifdef HANDLE_VT_SWITCHING\r
+int fdtty;\r
+struct vt_mode old_vtmode;\r
+#endif\r
+\r
 // Linux MVP main function and sighandler\r
 #ifndef WIN32\r
 int main(int argc, char** argv)\r
@@ -243,6 +254,21 @@ int main(int argc, char** argv)
 \r
   logger->log("Core", Log::INFO, "Signal handlers set up successfully");\r
 \r
+#ifdef HANDLE_VT_SWITCHING\r
+  if ((fdtty = open("/dev/tty", O_WRONLY),0) == -1) {\r
+         logger->log("Core", Log::EMERG, "Could not open /dev/tty. Please change permissions");\r
+  } else {\r
+         int free_vt;\r
+         if (ioctl(fdtty,VT_OPENQRY,&free_vt)==-1 || free_vt==-1){\r
+                 logger->log("Core", Log::EMERG, "Could not retrieve free virtual console, please change permissions");\r
+         } else {\r
+                 ioctl(fdtty,VT_ACTIVATE,free_vt);\r
+                 ioctl(fdtty,VT_WAITACTIVE,free_vt);\r
+                 ioctl(fdtty, VT_LOCKSWITCH, 1);\r
+         }\r
+  }\r
+\r
+#endif\r
 \r
   // Init modules ----------------------------------------------------------------------------------------------------\r
   int success;\r
@@ -515,6 +541,10 @@ void shutdown(int code)
     delete sleeptimer;\r
     logger->log("Core", Log::NOTICE, "Sleeptimer module shut down");\r
   }\r
+#ifdef HANDLE_VT_SWITCHING\r
+  ioctl(fdtty, VT_UNLOCKSWITCH, 1);\r
+  close(fdtty);\r
+#endif\r
 \r
   if (logger)\r
   {\r