+bool ProcessCommandSCAN(ICECAdapter *parser, const string &command, string & UNUSED(arguments))
+{
+ if (command == "scan")
+ {
+ PrintToStdOut("CEC bus information");
+ PrintToStdOut("===================");
+ cec_logical_addresses addresses = parser->GetActiveDevices();
+ for (uint8_t iPtr = 0; iPtr < 16; iPtr++)
+ {
+ if (addresses[iPtr])
+ {
+ CStdString strLog;
+ uint64_t iVendorId = parser->GetDeviceVendorId((cec_logical_address)iPtr);
+ bool bActive = parser->IsActiveSource((cec_logical_address)iPtr);
+ uint16_t iPhysicalAddress = parser->GetDevicePhysicalAddress((cec_logical_address)iPtr);
+ cec_version iCecVersion = parser->GetDeviceCecVersion((cec_logical_address)iPtr);
+ cec_power_status power = parser->GetDevicePowerStatus((cec_logical_address)iPtr);
+ cec_osd_name osdName = parser->GetDeviceOSDName((cec_logical_address)iPtr);
+ CStdString strAddr;
+ strAddr.Format("%04x", iPhysicalAddress);
+ cec_menu_language lang;
+ lang.device = CECDEVICE_UNKNOWN;
+ parser->GetDeviceMenuLanguage((cec_logical_address)iPtr, &lang);
+
+ strLog.AppendFormat("device #%X: %s\n", (int)iPtr, parser->ToString((cec_logical_address)iPtr));
+ strLog.AppendFormat("address: %s\n", strAddr.c_str());
+ strLog.AppendFormat("active source: %s\n", (bActive ? "yes" : "no"));
+ strLog.AppendFormat("vendor: %s\n", parser->ToString((cec_vendor_id)iVendorId));
+ strLog.AppendFormat("osd string: %s\n", osdName.name);
+ strLog.AppendFormat("CEC version: %s\n", parser->ToString(iCecVersion));
+ strLog.AppendFormat("power status: %s\n", parser->ToString(power));
+ if ((uint8_t)lang.device == iPtr)
+ strLog.AppendFormat("language: %s\n", lang.language);
+ strLog.append("\n");
+ PrintToStdOut(strLog);
+ }
+ }
+ return true;
+ }
+
+ return false;
+}
+
+bool ProcessConsoleCommand(ICECAdapter *parser, string &input)
+{
+ if (!input.empty())
+ {
+ string command;
+ if (GetWord(input, command))
+ {
+ if (command == "q" || command == "quit")
+ return false;
+
+ ProcessCommandTX(parser, command, input) ||
+ ProcessCommandON(parser, command, input) ||
+ ProcessCommandSTANDBY(parser, command, input) ||
+ ProcessCommandPOLL(parser, command, input) ||
+ ProcessCommandLA(parser, command, input) ||
+ ProcessCommandP(parser, command, input) ||
+ ProcessCommandPA(parser, command, input) ||
+ ProcessCommandAS(parser, command, input) ||
+ ProcessCommandOSD(parser, command, input) ||
+ ProcessCommandPING(parser, command, input) ||
+ ProcessCommandVOLUP(parser, command, input) ||
+ ProcessCommandVOLDOWN(parser, command, input) ||
+ ProcessCommandMUTE(parser, command, input) ||
+ ProcessCommandMON(parser, command, input) ||
+ ProcessCommandBL(parser, command, input) ||
+ ProcessCommandLANG(parser, command, input) ||
+ ProcessCommandVEN(parser, command, input) ||
+ ProcessCommandVER(parser, command, input) ||
+ ProcessCommandPOW(parser, command, input) ||
+ ProcessCommandNAME(parser, command, input) ||
+ ProcessCommandLAD(parser, command, input) ||
+ ProcessCommandAD(parser, command, input) ||
+ ProcessCommandAT(parser, command, input) ||
+ ProcessCommandR(parser, command, input) ||
+ ProcessCommandH(parser, command, input) ||
+ ProcessCommandLOG(parser, command, input) ||
+ ProcessCommandSCAN(parser, command, input);
+ }
+ }
+ return true;
+}
+
+bool ProcessCommandLineArguments(int argc, char *argv[])
+{
+ bool bReturn(true);
+ int iArgPtr = 1;
+ while (iArgPtr < argc && bReturn)
+ {
+ if (argc >= iArgPtr + 1)
+ {
+ if (!strcmp(argv[iArgPtr], "-f") ||
+ !strcmp(argv[iArgPtr], "--log-file") ||
+ !strcmp(argv[iArgPtr], "-sf") ||
+ !strcmp(argv[iArgPtr], "--short-log-file"))
+ {
+ if (argc >= iArgPtr + 2)
+ {
+ g_logOutput.open(argv[iArgPtr + 1]);
+ g_bShortLog = (!strcmp(argv[iArgPtr], "-sf") || !strcmp(argv[iArgPtr], "--short-log-file"));
+ iArgPtr += 2;