- string command;
- if (GetWord(input, command))
- {
- if (command == "tx" || command == "txn")
- {
- string strvalue;
- uint8_t ivalue;
- cec_command bytes;
- bytes.Clear();
-
- while (GetWord(input, strvalue) && HexStrToInt(strvalue, ivalue))
- bytes.PushBack(ivalue);
-
- if (command == "txn")
- bytes.transmit_timeout = 0;
-
- parser->Transmit(bytes);
- }
- else if (command == "on")
- {
- string strValue;
- uint8_t iValue = 0;
- if (GetWord(input, strValue) && HexStrToInt(strValue, iValue) && iValue <= 0xF)
- {
- parser->PowerOnDevices((cec_logical_address) iValue);
- }
- else
- {
- cout << "invalid destination" << endl;
- }
- }
- else if (command == "standby")
- {
- string strValue;
- uint8_t iValue = 0;
- if (GetWord(input, strValue) && HexStrToInt(strValue, iValue) && iValue <= 0xF)
- {
- parser->StandbyDevices((cec_logical_address) iValue);
- }
- else
- {
- cout << "invalid destination" << endl;
- }
- }
- else if (command == "poll")
- {
- string strValue;
- uint8_t iValue = 0;
- if (GetWord(input, strValue) && HexStrToInt(strValue, iValue) && iValue <= 0xF)
- {
- if (parser->PollDevice((cec_logical_address) iValue))
- cout << "POLL message sent" << endl;
- else
- cout << "POLL message not sent" << endl;
- }
- else
- {
- cout << "invalid destination" << endl;
- }
- }
- else if (command == "la")
- {
- string strvalue;
- if (GetWord(input, strvalue))
- {
- parser->SetLogicalAddress((cec_logical_address) atoi(strvalue.c_str()));
- }
- }
- else if (command == "p")
- {
- string strPort, strDevice;
- if (GetWord(input, strDevice) && GetWord(input, strPort))
- {
- parser->SetHDMIPort((cec_logical_address)atoi(strDevice.c_str()), (uint8_t)atoi(strPort.c_str()));
- }
- }
- else if (command == "pa")
- {
- string strB1, strB2;
- uint8_t iB1, iB2;
- if (GetWord(input, strB1) && HexStrToInt(strB1, iB1) &&
- GetWord(input, strB2) && HexStrToInt(strB2, iB2))
- {
- uint16_t iPhysicalAddress = ((uint16_t)iB1 << 8) + iB2;
- parser->SetPhysicalAddress(iPhysicalAddress);
- }
- }
- else if (command == "osd")
- {
- bool bFirstWord(false);
- string strAddr, strMessage, strWord;
- uint8_t iAddr;
- if (GetWord(input, strAddr) && HexStrToInt(strAddr, iAddr) && iAddr < 0xF)
- {
- while (GetWord(input, 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());
- }
- }
- else if (command == "ping")
- {
- parser->PingAdapter();
- }
- else if (command == "volup")
- {
- CStdString strLog;
- strLog.Format("volume up: %2X", parser->VolumeUp());
- cout << strLog.c_str() << endl;
- }
- else if (command == "voldown")
- {
- CStdString strLog;
- strLog.Format("volume up: %2X", parser->VolumeDown());
- cout << strLog.c_str() << endl;
- }
- else if (command == "mute")
- {
- CStdString strLog;
- strLog.Format("mute: %2X", parser->MuteAudio());
- cout << strLog.c_str() << endl;
- }
- else if (command == "mon")
- {
- CStdString strEnable;
- if (GetWord(input, strEnable) && (strEnable.Equals("0") || strEnable.Equals("1")))
- {
- parser->SwitchMonitoring(strEnable.Equals("1"));
- }
- }
- else if (command == "bl")
- {
- parser->StartBootloader();
- }
- else if (command == "lang")
- {
- CStdString strDev;
- if (GetWord(input, 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!";
- cout << strLog.c_str() << endl;
- }
- }
- }
- else if (command == "ven")
- {
- CStdString strDev;
- if (GetWord(input, strDev))
- {
- int iDev = atoi(strDev);
- if (iDev >= 0 && iDev < 15)
- {
- uint64_t iVendor = parser->GetDeviceVendorId((cec_logical_address) iDev);
- CStdString strLog;
- strLog.Format("vendor id: %06x", iVendor);
- cout << strLog.c_str() << endl;
- }
- }
- }
- else if (command == "ver")
- {
- CStdString strDev;
- if (GetWord(input, strDev))
- {
- int iDev = atoi(strDev);
- if (iDev >= 0 && iDev < 15)
- {
- cec_version iVersion = parser->GetDeviceCecVersion((cec_logical_address) iDev);
- switch (iVersion)
- {
- case CEC_VERSION_1_2:
- cout << "CEC version 1.2" << endl;
- break;
- case CEC_VERSION_1_2A:
- cout << "CEC version 1.2a" << endl;
- break;
- case CEC_VERSION_1_3:
- cout << "CEC version 1.3" << endl;
- break;
- case CEC_VERSION_1_3A:
- cout << "CEC version 1.3a" << endl;
- break;
- default:
- cout << "unknown CEC version" << endl;
- break;
- }
- }
- }
- }
- else if (command == "pow")
- {
- CStdString strDev;
- if (GetWord(input, strDev))
- {
- int iDev = atoi(strDev);
- if (iDev >= 0 && iDev < 15)
- {
- cec_power_status iPower = parser->GetDevicePowerStatus((cec_logical_address) iDev);
- switch (iPower)
- {
- case CEC_POWER_STATUS_ON:
- cout << "powered on" << endl;
- break;
- case CEC_POWER_STATUS_IN_TRANSITION_ON_TO_STANDBY:
- cout << "on -> standby" << endl;
- break;
- case CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON:
- cout << "standby -> on" << endl;
- break;
- case CEC_POWER_STATUS_STANDBY:
- cout << "standby" << endl;
- break;
- default:
- cout << "unknown power status" << endl;
- break;
- }
- }
- }
- }
- else if (command == "name")
- {
- CStdString strDev;
- if (GetWord(input, strDev))
- {
- int iDev = atoi(strDev);
- if (iDev >= 0 && iDev < 15)
- {
- cec_osd_name name = parser->GetOSDName((cec_logical_address)iDev);
- cout << "OSD name of device " << iDev << " is '" << name.name << "'" << endl;
- }
- }
- }
- else if (command == "lad")
- {
- cout << "listing active devices:" << endl;
- cec_logical_addresses addresses = parser->GetActiveDevices();
- for (uint8_t iPtr = 0; iPtr < 16; iPtr++)
- if (addresses[iPtr])
- cout << "logical address " << (int)iPtr << endl;
- }
- else if (command == "scan")
- {
- cout << "CEC bus information" << endl;
- cout << "===================" << endl;
- cec_logical_addresses addresses = parser->GetActiveDevices();
- for (uint8_t iPtr = 0; iPtr < 16; iPtr++)
- if (addresses[iPtr])
- {
- uint64_t iVendorId = parser->GetDeviceVendorId((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->GetOSDName((cec_logical_address)iPtr);
- cec_menu_language lang;
- lang.device = CECDEVICE_UNKNOWN;
- parser->GetDeviceMenuLanguage((cec_logical_address)iPtr, &lang);
-
- cout << "device #" << (int)iPtr << ": " << parser->ToString((cec_logical_address)iPtr) << endl;
- cout << "vendor: " << parser->ToString((cec_vendor_id)iVendorId) << endl;
- cout << "osd string: " << osdName.name << endl;
- cout << "CEC version: " << parser->ToString(iCecVersion) << endl;
- cout << "power status: " << parser->ToString(power) << endl;
- if ((uint8_t)lang.device == iPtr)
- cout << "language: " << lang.language << endl;
- cout << endl;
- }
- }
- else if (command == "ad")
- {
- CStdString strDev;
- if (GetWord(input, strDev))
- {
- int iDev = atoi(strDev);
- if (iDev >= 0 && iDev < 15)
- cout << "logical address " << iDev << " is " << (parser->IsActiveDevice((cec_logical_address)iDev) ? "active" : "not active") << endl;
- }
- }
- else if (command == "at")
- {
- CStdString strType;
- if (GetWord(input, 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;
- cout << "device " << type << " is " << (parser->IsActiveDeviceType(type) ? "active" : "not active") << endl;
- }
- }
- else if (command == "r")
- {
- cout << "closing the connection" << endl;
- parser->Close();
- FlushLog(parser);
-
- cout << "opening a new connection" << endl;
- parser->Open(g_strPort.c_str());
- FlushLog(parser);
-
- cout << "setting active source" << endl;
- parser->SetActiveSource();
- }
- else if (command == "h" || command == "help")
- {
- ShowHelpConsole();
- }
- else if (command == "q" || command == "quit")
- {
- bContinue = false;
- }
- else if (command == "log")
- {
- CStdString strLevel;
- if (GetWord(input, strLevel))
- {
- int iNewLevel = atoi(strLevel);
- if (iNewLevel >= CEC_LOG_ERROR && iNewLevel <= CEC_LOG_ALL)
- {
- g_cecLogLevel = iNewLevel;
- cout << "log level changed to " << strLevel.c_str() << endl;
- }
- }
- }
- }
- if (bContinue)
- cout << "waiting for input" << endl;