+bool ProcessCommandSELF(ICECAdapter *parser, const string &command, string & UNUSED(arguments))
+{
+ if (command == "self")
+ {
+ cec_logical_addresses addr = parser->GetLogicalAddresses();
+ CStdString strOut = "Addresses controlled by libCEC: ";
+ bool bFirst(true);
+ for (uint8_t iPtr = 0; iPtr <= 15; iPtr++)
+ {
+ if (addr[iPtr])
+ {
+ strOut.AppendFormat((bFirst ? "%d%s" : ", %d%s"), iPtr, parser->IsActiveSource((cec_logical_address)iPtr) ? "*" : "");
+ bFirst = false;
+ }
+ }
+ PrintToStdOut(strOut.c_str());
+ return true;
+ }
+
+ return false;
+}
+
+bool ProcessCommandSP(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "sp")
+ {
+ string strAddress;
+ int iAddress;
+ if (GetWord(arguments, strAddress))
+ {
+ sscanf(strAddress.c_str(), "%x", &iAddress);
+ if (iAddress >= 0 && iAddress <= 0xFFFF)
+ parser->SetStreamPath((uint16_t)iAddress);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandSPL(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "spl")
+ {
+ string strAddress;
+ cec_logical_address iAddress;
+ if (GetWord(arguments, strAddress))
+ {
+ iAddress = (cec_logical_address)atoi(strAddress.c_str());
+ if (iAddress >= CECDEVICE_TV && iAddress < CECDEVICE_BROADCAST)
+ parser->SetStreamPath(iAddress);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandTX(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "tx" || command == "txn")
+ {
+ string strvalue;
+ uint8_t ivalue;
+ cec_command bytes;
+ bytes.Clear();
+
+ while (GetWord(arguments, strvalue) && HexStrToInt(strvalue, ivalue))
+ bytes.PushBack(ivalue);
+
+ if (command == "txn")
+ bytes.transmit_timeout = 0;
+
+ parser->Transmit(bytes);
+
+ return true;
+ }
+
+ return false;
+}
+
+bool ProcessCommandON(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "on")
+ {
+ string strValue;
+ uint8_t iValue = 0;
+ if (GetWord(arguments, strValue) && HexStrToInt(strValue, iValue) && iValue <= 0xF)
+ {
+ parser->PowerOnDevices((cec_logical_address) iValue);
+ return true;
+ }
+ else
+ {
+ PrintToStdOut("invalid destination");
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandSTANDBY(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "standby")
+ {
+ string strValue;
+ uint8_t iValue = 0;
+ if (GetWord(arguments, strValue) && HexStrToInt(strValue, iValue) && iValue <= 0xF)
+ {
+ parser->StandbyDevices((cec_logical_address) iValue);
+ return true;
+ }
+ else
+ {
+ PrintToStdOut("invalid destination");
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandPOLL(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "poll")
+ {
+ string strValue;
+ uint8_t iValue = 0;
+ if (GetWord(arguments, strValue) && HexStrToInt(strValue, iValue) && iValue <= 0xF)
+ {
+ if (parser->PollDevice((cec_logical_address) iValue))
+ PrintToStdOut("POLL message sent");
+ else
+ PrintToStdOut("POLL message not sent");
+ return true;
+ }
+ else
+ {
+ PrintToStdOut("invalid destination");
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandLA(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "la")
+ {
+ string strvalue;
+ if (GetWord(arguments, strvalue))
+ {
+ parser->SetLogicalAddress((cec_logical_address) atoi(strvalue.c_str()));
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandP(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "p")
+ {
+ string strPort, strDevice;
+ if (GetWord(arguments, strDevice) && GetWord(arguments, strPort))
+ {
+ parser->SetHDMIPort((cec_logical_address)atoi(strDevice.c_str()), (uint8_t)atoi(strPort.c_str()));
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandPA(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "pa")
+ {
+ string strB1, strB2;
+ uint8_t iB1, iB2;
+ if (GetWord(arguments, strB1) && HexStrToInt(strB1, iB1) &&
+ GetWord(arguments, strB2) && HexStrToInt(strB2, iB2))
+ {
+ uint16_t iPhysicalAddress = ((uint16_t)iB1 << 8) + iB2;
+ parser->SetPhysicalAddress(iPhysicalAddress);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandOSD(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "osd")
+ {
+ bool bFirstWord(false);
+ string strAddr, strMessage, strWord;
+ uint8_t iAddr;
+ if (GetWord(arguments, strAddr) && HexStrToInt(strAddr, iAddr) && iAddr < 0xF)
+ {
+ while (GetWord(arguments, strWord))
+ {
+ if (bFirstWord)
+ {
+ bFirstWord = false;
+ strMessage.append(" ");
+ }
+ strMessage.append(strWord);
+ }
+ parser->SetOSDString((cec_logical_address) iAddr, CEC_DISPLAY_CONTROL_DISPLAY_FOR_DEFAULT_TIME, strMessage.c_str());
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandAS(ICECAdapter *parser, const string &command, string & UNUSED(arguments))
+{
+ if (command == "as")
+ {
+ parser->SetActiveView();
+ return true;
+ }
+
+ return false;
+}
+
+
+bool ProcessCommandPING(ICECAdapter *parser, const string &command, string & UNUSED(arguments))
+{
+ if (command == "ping")
+ {
+ parser->PingAdapter();
+ return true;
+ }
+
+ return false;
+}
+
+bool ProcessCommandVOLUP(ICECAdapter *parser, const string &command, string & UNUSED(arguments))
+{
+ if (command == "volup")
+ {
+ PrintToStdOut("volume up: %2X", parser->VolumeUp());
+ return true;
+ }
+
+ return false;
+}
+
+bool ProcessCommandVOLDOWN(ICECAdapter *parser, const string &command, string & UNUSED(arguments))
+{
+ if (command == "voldown")
+ {
+ PrintToStdOut("volume down: %2X", parser->VolumeDown());
+ return true;
+ }
+
+ return false;
+}
+
+bool ProcessCommandMUTE(ICECAdapter *parser, const string &command, string & UNUSED(arguments))
+{
+ if (command == "mute")
+ {
+ PrintToStdOut("mute: %2X", parser->MuteAudio());
+ return true;
+ }
+
+ return false;
+}
+
+bool ProcessCommandMON(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "mon")
+ {
+ CStdString strEnable;
+ if (GetWord(arguments, strEnable) && (strEnable.Equals("0") || strEnable.Equals("1")))
+ {
+ parser->SwitchMonitoring(strEnable.Equals("1"));
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandBL(ICECAdapter *parser, const string &command, string & UNUSED(arguments))
+{
+ if (command == "bl")
+ {
+ if (parser->StartBootloader())
+ {
+ PrintToStdOut("entered bootloader mode. exiting cec-client");
+ g_bExit = true;
+ g_bHardExit = true;
+ }
+ return true;
+ }
+
+ return false;
+}
+
+bool ProcessCommandLANG(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "lang")
+ {
+ CStdString strDev;
+ if (GetWord(arguments, strDev))
+ {
+ int iDev = atoi(strDev);
+ if (iDev >= 0 && iDev < 15)
+ {
+ CStdString strLog;
+ cec_menu_language language;
+ if (parser->GetDeviceMenuLanguage((cec_logical_address) iDev, &language))
+ strLog.Format("menu language '%s'", language.language);
+ else
+ strLog = "failed!";
+ PrintToStdOut(strLog);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandVEN(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "ven")
+ {
+ CStdString strDev;
+ if (GetWord(arguments, strDev))
+ {
+ int iDev = atoi(strDev);
+ if (iDev >= 0 && iDev < 15)
+ {
+ uint64_t iVendor = parser->GetDeviceVendorId((cec_logical_address) iDev);
+ PrintToStdOut("vendor id: %06x", iVendor);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandVER(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "ver")
+ {
+ CStdString strDev;
+ if (GetWord(arguments, strDev))
+ {
+ int iDev = atoi(strDev);
+ if (iDev >= 0 && iDev < 15)
+ {
+ cec_version iVersion = parser->GetDeviceCecVersion((cec_logical_address) iDev);
+ PrintToStdOut("CEC version %s", parser->ToString(iVersion));
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandPOW(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "pow")
+ {
+ CStdString strDev;
+ if (GetWord(arguments, strDev))
+ {
+ int iDev = atoi(strDev);
+ if (iDev >= 0 && iDev < 15)
+ {
+ cec_power_status iPower = parser->GetDevicePowerStatus((cec_logical_address) iDev);
+ PrintToStdOut("power status: %s", parser->ToString(iPower));
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandNAME(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "name")
+ {
+ CStdString strDev;
+ if (GetWord(arguments, strDev))
+ {
+ int iDev = atoi(strDev);
+ if (iDev >= 0 && iDev < 15)
+ {
+ cec_osd_name name = parser->GetDeviceOSDName((cec_logical_address)iDev);
+ PrintToStdOut("OSD name of device %d is '%s'", iDev, name.name);
+ }
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandLAD(ICECAdapter *parser, const string &command, string & UNUSED(arguments))
+{
+ if (command == "lad")
+ {
+ PrintToStdOut("listing active devices:");
+ cec_logical_addresses addresses = parser->GetActiveDevices();
+ for (uint8_t iPtr = 0; iPtr <= 11; iPtr++)
+ if (addresses[iPtr])
+ {
+ PrintToStdOut("logical address %X", (int)iPtr);
+ }
+ return true;
+ }
+
+ return false;
+}
+
+bool ProcessCommandAD(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "ad")
+ {
+ CStdString strDev;
+ if (GetWord(arguments, strDev))
+ {
+ int iDev = atoi(strDev);
+ if (iDev >= 0 && iDev < 15)
+ PrintToStdOut("logical address %X is %s", iDev, (parser->IsActiveDevice((cec_logical_address)iDev) ? "active" : "not active"));
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandAT(ICECAdapter *parser, const string &command, string &arguments)
+{
+ if (command == "at")
+ {
+ CStdString strType;
+ if (GetWord(arguments, strType))
+ {
+ cec_device_type type = CEC_DEVICE_TYPE_TV;
+ if (strType.Equals("a"))
+ type = CEC_DEVICE_TYPE_AUDIO_SYSTEM;
+ else if (strType.Equals("p"))
+ type = CEC_DEVICE_TYPE_PLAYBACK_DEVICE;
+ else if (strType.Equals("r"))
+ type = CEC_DEVICE_TYPE_RECORDING_DEVICE;
+ else if (strType.Equals("t"))
+ type = CEC_DEVICE_TYPE_TUNER;
+
+ PrintToStdOut("device %d is %s", type, (parser->IsActiveDeviceType(type) ? "active" : "not active"));
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandR(ICECAdapter *parser, const string &command, string & UNUSED(arguments))
+{
+ if (command == "r")
+ {
+ PrintToStdOut("closing the connection");
+ parser->Close();
+
+ PrintToStdOut("opening a new connection");
+ parser->Open(g_strPort.c_str());
+
+ PrintToStdOut("setting active source");
+ parser->SetActiveSource();
+ return true;
+ }
+
+ return false;
+}
+
+bool ProcessCommandH(ICECAdapter * UNUSED(parser), const string &command, string & UNUSED(arguments))
+{
+ if (command == "h" || command == "help")
+ {
+ ShowHelpConsole();
+ return true;
+ }
+
+ return false;
+}
+
+bool ProcessCommandLOG(ICECAdapter * UNUSED(parser), const string &command, string &arguments)
+{
+ if (command == "log")
+ {
+ CStdString strLevel;
+ if (GetWord(arguments, strLevel))
+ {
+ int iNewLevel = atoi(strLevel);
+ if (iNewLevel >= CEC_LOG_ERROR && iNewLevel <= CEC_LOG_ALL)
+ {
+ g_cecLogLevel = iNewLevel;
+
+ PrintToStdOut("log level changed to %s", strLevel.c_str());
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+bool ProcessCommandSCAN(ICECAdapter *parser, const string &command, string & UNUSED(arguments))