Merge branch 'master' into release
[deb_libcec.git] / src / testclient / main.cpp
index 8178449cee36d7f805d7e4923b783ed404ec7852..4b13f3a78311d6af929064213b347f14774c5fb8 100644 (file)
@@ -57,6 +57,8 @@ uint8_t              g_iHDMIPort(CEC_DEFAULT_HDMI_PORT);
 cec_logical_address  g_iBaseDevice((cec_logical_address)CEC_DEFAULT_BASE_DEVICE);
 cec_device_type_list g_typeList;
 bool                 g_bSingleCommand(false);
+bool                 g_bExit(false);
+bool                 g_bHardExit(false);
 CMutex               g_outputMutex;
 ICECCallbacks        g_callbacks;
 
@@ -534,7 +536,12 @@ bool ProcessCommandBL(ICECAdapter *parser, const string &command, string & UNUSE
 {
   if (command == "bl")
   {
-    parser->StartBootloader();
+    if (parser->StartBootloader())
+    {
+      PrintToStdOut("entered bootloader mode. exiting cec-client");
+      g_bExit = true;
+      g_bHardExit = true;
+    }
     return true;
   }
 
@@ -1073,7 +1080,7 @@ int main (int argc, char *argv[])
   if (!parser->Open(g_strPort.c_str()))
   {
     CStdString strLog;
-    strLog.Format("unable to open the device on port %s");
+    strLog.Format("unable to open the device on port %s", g_strPort.c_str());
     PrintToStdOut(strLog);
     UnloadLibCec(parser);
     return 1;
@@ -1089,26 +1096,25 @@ int main (int argc, char *argv[])
     PrintToStdOut("waiting for input");
   }
 
-  bool bContinue(true);
-  while (bContinue)
+  while (!g_bExit && !g_bHardExit)
   {
     string input;
     getline(cin, input);
     cin.clear();
 
-    if (ProcessConsoleCommand(parser, input) && !g_bSingleCommand)
+    if (ProcessConsoleCommand(parser, input) && !g_bSingleCommand && !g_bExit && !g_bHardExit)
     {
       if (!input.empty())
         PrintToStdOut("waiting for input");
     }
     else
-      bContinue = false;
+      g_bExit = true;
 
-    if (bContinue)
+    if (!g_bExit && !g_bHardExit)
       CCondition::Sleep(50);
   }
 
-  if (!g_bSingleCommand)
+  if (!g_bSingleCommand && !g_bHardExit)
     parser->StandbyDevices(CECDEVICE_BROADCAST);
 
   parser->Close();