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;
{
if (command == "bl")
{
- parser->StartBootloader();
+ if (parser->StartBootloader())
+ {
+ PrintToStdOut("entered bootloader mode. exiting cec-client");
+ g_bExit = true;
+ g_bHardExit = true;
+ }
return true;
}
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;
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();