removed double check in cec-config
[deb_libcec.git] / src / cec-config / cec-config.cpp
index 57931ee81dfb4dcbe59e54bdb8e23cfcc89a8768..29bdf593c58fc200a2bfdb67a07c077179d1bceb 100644 (file)
@@ -30,7 +30,8 @@
  *     http://www.pulse-eight.net/
  */
 
-#include "../../include/cec.h"
+#include "../env.h"
+#include "../include/cec.h"
 
 #include <cstdio>
 #include <fcntl.h>
 #include <fstream>
 #include <string>
 #include <sstream>
+#include <signal.h>
 #include "../lib/platform/threads/mutex.h"
 #include "../lib/platform/util/timeutils.h"
 #include "../lib/implementations/CECCommandHandler.h"
+#include "../lib/platform/util/StdString.h"
 
 using namespace CEC;
 using namespace std;
@@ -157,7 +160,7 @@ bool OpenConnection(cec_device_type type = CEC_DEVICE_TYPE_RECORDING_DEVICE)
   g_config.Clear();
   snprintf(g_config.strDeviceName, 13, "CEC-config");
   g_config.callbackParam      = NULL;
-  g_config.clientVersion      = (uint32_t)CEC_CLIENT_VERSION_1_6_2;
+  g_config.clientVersion      = (uint32_t)CEC_CLIENT_VERSION_1_9_0;
   g_callbacks.CBCecLogMessage = &CecLogMessage;
   g_callbacks.CBCecKeyPress   = &CecKeyPress;
   g_callbacks.CBCecCommand    = &CecCommand;
@@ -169,6 +172,9 @@ bool OpenConnection(cec_device_type type = CEC_DEVICE_TYPE_RECORDING_DEVICE)
   if (!g_parser)
     return false;
 
+  // init video on targets that need this
+  g_parser->InitVideoStandalone();
+
   CStdString strPort;
   cec_adapter devices[10];
   uint8_t iDevicesFound = g_parser->FindAdapters(devices, 10, NULL);
@@ -288,20 +294,17 @@ bool PowerOnTV(uint64_t iTimeout = 60000)
   uint64_t iNow = GetTimeMs();
   uint64_t iTarget = iNow + iTimeout;
 
+  currentTvPower = g_parser->GetDevicePowerStatus(CECDEVICE_TV);
   if (currentTvPower != CEC_POWER_STATUS_ON)
   {
-    currentTvPower = g_parser->GetDevicePowerStatus(CECDEVICE_TV);
-    if (currentTvPower != CEC_POWER_STATUS_ON)
+    PrintToStdOut("Sending 'power on' command to the TV\n=== Please wait ===");
+    g_parser->PowerOnDevices(CECDEVICE_TV);
+    while (iTarget > iNow)
     {
-      PrintToStdOut("Sending 'power on' command to the TV\n=== Please wait ===");
-      g_parser->PowerOnDevices(CECDEVICE_TV);
-      while (iTarget > iNow)
-      {
-        g_responseEvent.Wait((uint32_t)(iTarget - iNow));
-        if (g_lastCommand == CEC_OPCODE_REQUEST_ACTIVE_SOURCE)
-          break;
-        iNow = GetTimeMs();
-      }
+      g_responseEvent.Wait((uint32_t)(iTarget - iNow));
+      if (g_lastCommand == CEC_OPCODE_REQUEST_ACTIVE_SOURCE)
+        break;
+      iNow = GetTimeMs();
     }
   }
 
@@ -313,8 +316,26 @@ bool PowerOnTV(uint64_t iTimeout = 60000)
   return currentTvPower == CEC_POWER_STATUS_ON;
 }
 
+void sighandler(int iSignal)
+{
+  PrintToStdOut("signal caught: %d - exiting", iSignal);
+
+  g_parser->Close();
+  UnloadLibCec(g_parser);
+
+  exit(1);
+}
+
 int main (int UNUSED(argc), char *UNUSED(argv[]))
 {
+  if (signal(SIGINT, sighandler) == SIG_ERR)
+  {
+    PrintToStdOut("can't register sighandler");
+    return -1;
+  }
+
+  g_callbacks.Clear();
+  g_config.Clear();
   PrintToStdOut("=== USB-CEC Adapter Configuration ===\n");
   if (!OpenConnection())
     return 1;
@@ -429,11 +450,11 @@ int main (int UNUSED(argc), char *UNUSED(argv[]))
     CStdString strWakeDevices;
     for (uint8_t iPtr = 0; iPtr < 16; iPtr++)
       if (g_config.wakeDevices[iPtr])
-        strWakeDevices.AppendFormat(" %d" + iPtr);
+        strWakeDevices.AppendFormat(" %d", iPtr);
     CStdString strStandbyDevices;
     for (uint8_t iPtr = 0; iPtr < 16; iPtr++)
       if (g_config.powerOffDevices[iPtr])
-        strStandbyDevices.AppendFormat(" %d" + iPtr);
+        strStandbyDevices.AppendFormat(" %d", iPtr);
 
     configOutput <<
         "<settings>\n" <<