X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Ftestclient%2Fmain.cpp;h=b0492866449751f28d4a456a0c49fd344c74c67f;hb=f57cba645f0f22c109355ef55c78cf328adc2d93;hp=162c1f17c4017fe61bfc64752ed9829a2f65c94d;hpb=38ed5789ff087c524d4c263aff4b947ce34096b0;p=deb_libcec.git diff --git a/src/testclient/main.cpp b/src/testclient/main.cpp index 162c1f1..b049286 100644 --- a/src/testclient/main.cpp +++ b/src/testclient/main.cpp @@ -1,7 +1,7 @@ /* * This file is part of the libCEC(R) library. * - * libCEC(R) is Copyright (C) 2011 Pulse-Eight Limited. All rights reserved. + * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved. * libCEC(R) is an original work, containing original code. * * libCEC(R) is a trademark of Pulse-Eight Limited. @@ -30,7 +30,7 @@ * http://www.pulse-eight.net/ */ -#include +#include "../../include/cec.h" #include #include @@ -58,18 +58,21 @@ 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; -inline void PrintToStdOut(const char *strOut) +inline void PrintToStdOut(const char *strFormat, ...) { - CLockObject lock(g_outputMutex); - cout << strOut << endl; -} + CStdString strLog; -inline void PrintToStdOut(const CStdString &strOut) -{ - PrintToStdOut(strOut.c_str()); + va_list argList; + va_start(argList, strFormat); + strLog.FormatV(strFormat, argList); + va_end(argList); + + CLockObject lock(g_outputMutex); + cout << strLog << endl; } inline bool HexStrToInt(const std::string& data, uint8_t& value) @@ -152,7 +155,7 @@ int CecLogMessage(void *UNUSED(cbParam), const cec_log_message &message) CStdString strFullLog; strFullLog.Format("%s[%16lld]\t%s", strLevel.c_str(), message.time, message.message); - PrintToStdOut(strFullLog); + PrintToStdOut(strFullLog.c_str()); if (g_logOutput.is_open()) { @@ -187,22 +190,16 @@ void EnableCallbacks(ICECAdapter *adapter) void ListDevices(ICECAdapter *parser) { cec_adapter *devices = new cec_adapter[10]; - uint8_t iDevicesFound = parser->FindAdapters(devices, 10, NULL); + int8_t iDevicesFound = parser->FindAdapters(devices, 10, NULL); if (iDevicesFound <= 0) { PrintToStdOut("Found devices: NONE"); } else { - CStdString strLog; - strLog.Format("Found devices: %d", iDevicesFound); - PrintToStdOut(strLog); - for (unsigned int iDevicePtr = 0; iDevicePtr < iDevicesFound; iDevicePtr++) - { - CStdString strDevice; - strDevice.Format("device: %d\npath: %s\ncom port: %s", iDevicePtr + 1, devices[iDevicePtr].path, devices[iDevicePtr].comm); - PrintToStdOut(strDevice); - } + PrintToStdOut("Found devices: %d\n", iDevicesFound); + for (int8_t iDevicePtr = 0; iDevicePtr < iDevicesFound; iDevicePtr++) + PrintToStdOut("device: %d\npath: %s\ncom port: %s\n", iDevicePtr + 1, devices[iDevicePtr].path, devices[iDevicePtr].comm); } } @@ -246,9 +243,7 @@ ICECAdapter *CreateParser(cec_device_type_list typeList) return NULL; } - CStdString strLog; - strLog.Format("CEC Parser created - libcec version %d.%d", parser->GetLibVersionMajor(), parser->GetLibVersionMinor()); - PrintToStdOut(strLog.c_str()); + PrintToStdOut("CEC Parser created - libcec version %d.%d", parser->GetLibVersionMajor(), parser->GetLibVersionMinor()); return parser; } @@ -278,9 +273,12 @@ void ShowHelpConsole(void) "[lad] lists active devices on the bus" << endl << "[ad] {addr} checks whether the specified device is active." << endl << "[at] {type} checks whether the specified device type is active." << endl << + "[sp] {addr} makes the specified physical address active." << endl << + "[spl] {addr} makes the specified logical address active." << endl << "[volup] send a volume up command to the amp if present" << endl << "[voldown] send a volume down command to the amp if present" << endl << "[mute] send a mute/unmute command to the amp if present" << endl << + "[self] show the list of addresses controlled by libCEC" << endl << "[scan] scan the CEC bus and display device info" << endl << "[mon] {1|0} enable or disable CEC bus monitoring." << endl << "[log] {1 - 31} change the log level. see cectypes.h for values." << endl << @@ -294,6 +292,64 @@ void ShowHelpConsole(void) "================================================================================" << endl; } +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") @@ -481,9 +537,7 @@ bool ProcessCommandVOLUP(ICECAdapter *parser, const string &command, string & UN { if (command == "volup") { - CStdString strLog; - strLog.Format("volume up: %2X", parser->VolumeUp()); - PrintToStdOut(strLog); + PrintToStdOut("volume up: %2X", parser->VolumeUp()); return true; } @@ -494,9 +548,7 @@ bool ProcessCommandVOLDOWN(ICECAdapter *parser, const string &command, string & { if (command == "voldown") { - CStdString strLog; - strLog.Format("volume down: %2X", parser->VolumeDown()); - PrintToStdOut(strLog); + PrintToStdOut("volume down: %2X", parser->VolumeDown()); return true; } @@ -507,9 +559,7 @@ bool ProcessCommandMUTE(ICECAdapter *parser, const string &command, string & UNU { if (command == "mute") { - CStdString strLog; - strLog.Format("mute: %2X", parser->MuteAudio()); - PrintToStdOut(strLog); + PrintToStdOut("mute: %2X", parser->MuteAudio()); return true; } @@ -539,6 +589,7 @@ bool ProcessCommandBL(ICECAdapter *parser, const string &command, string & UNUSE { PrintToStdOut("entered bootloader mode. exiting cec-client"); g_bExit = true; + g_bHardExit = true; } return true; } @@ -582,9 +633,7 @@ bool ProcessCommandVEN(ICECAdapter *parser, const string &command, string &argum if (iDev >= 0 && iDev < 15) { uint64_t iVendor = parser->GetDeviceVendorId((cec_logical_address) iDev); - CStdString strLog; - strLog.Format("vendor id: %06x", iVendor); - PrintToStdOut(strLog); + PrintToStdOut("vendor id: %06x", iVendor); return true; } } @@ -604,9 +653,7 @@ bool ProcessCommandVER(ICECAdapter *parser, const string &command, string &argum if (iDev >= 0 && iDev < 15) { cec_version iVersion = parser->GetDeviceCecVersion((cec_logical_address) iDev); - CStdString strLog; - strLog.Format("CEC version %s", parser->ToString(iVersion)); - PrintToStdOut(strLog); + PrintToStdOut("CEC version %s", parser->ToString(iVersion)); return true; } } @@ -626,9 +673,7 @@ bool ProcessCommandPOW(ICECAdapter *parser, const string &command, string &argum if (iDev >= 0 && iDev < 15) { cec_power_status iPower = parser->GetDevicePowerStatus((cec_logical_address) iDev); - CStdString strLog; - strLog.Format("power status: %s", parser->ToString(iPower)); - PrintToStdOut(strLog); + PrintToStdOut("power status: %s", parser->ToString(iPower)); return true; } } @@ -648,9 +693,7 @@ bool ProcessCommandNAME(ICECAdapter *parser, const string &command, string &argu if (iDev >= 0 && iDev < 15) { cec_osd_name name = parser->GetDeviceOSDName((cec_logical_address)iDev); - CStdString strLog; - strLog.Format("OSD name of device %d is '%s'", iDev, name.name); - PrintToStdOut(strLog); + PrintToStdOut("OSD name of device %d is '%s'", iDev, name.name); } return true; } @@ -663,14 +706,12 @@ bool ProcessCommandLAD(ICECAdapter *parser, const string &command, string & UNUS { if (command == "lad") { - CStdString strLog; PrintToStdOut("listing active devices:"); cec_logical_addresses addresses = parser->GetActiveDevices(); for (uint8_t iPtr = 0; iPtr <= 11; iPtr++) if (addresses[iPtr]) { - strLog.Format("logical address %X", (int)iPtr); - PrintToStdOut(strLog); + PrintToStdOut("logical address %X", (int)iPtr); } return true; } @@ -687,11 +728,7 @@ bool ProcessCommandAD(ICECAdapter *parser, const string &command, string &argume { int iDev = atoi(strDev); if (iDev >= 0 && iDev < 15) - { - CStdString strLog; - strLog.Format("logical address %X is %s", iDev, (parser->IsActiveDevice((cec_logical_address)iDev) ? "active" : "not active")); - PrintToStdOut(strLog); - } + PrintToStdOut("logical address %X is %s", iDev, (parser->IsActiveDevice((cec_logical_address)iDev) ? "active" : "not active")); } } @@ -714,9 +751,8 @@ bool ProcessCommandAT(ICECAdapter *parser, const string &command, string &argume type = CEC_DEVICE_TYPE_RECORDING_DEVICE; else if (strType.Equals("t")) type = CEC_DEVICE_TYPE_TUNER; - CStdString strLog; - strLog.Format("device %d is %s", type, (parser->IsActiveDeviceType(type) ? "active" : "not active")); - PrintToStdOut(strLog); + + PrintToStdOut("device %d is %s", type, (parser->IsActiveDeviceType(type) ? "active" : "not active")); return true; } } @@ -764,9 +800,8 @@ bool ProcessCommandLOG(ICECAdapter * UNUSED(parser), const string &command, stri if (iNewLevel >= CEC_LOG_ERROR && iNewLevel <= CEC_LOG_ALL) { g_cecLogLevel = iNewLevel; - CStdString strLog; - strLog.Format("log level changed to %s", strLevel.c_str()); - PrintToStdOut(strLog); + + PrintToStdOut("log level changed to %s", strLevel.c_str()); return true; } } @@ -854,7 +889,10 @@ bool ProcessConsoleCommand(ICECAdapter *parser, string &input) ProcessCommandR(parser, command, input) || ProcessCommandH(parser, command, input) || ProcessCommandLOG(parser, command, input) || - ProcessCommandSCAN(parser, command, input); + ProcessCommandSCAN(parser, command, input) || + ProcessCommandSP(parser, command, input) || + ProcessCommandSPL(parser, command, input) || + ProcessCommandSELF(parser, command, input); } } return true; @@ -1077,9 +1115,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"); - PrintToStdOut(strLog); + PrintToStdOut("unable to open the device on port %s", g_strPort.c_str()); UnloadLibCec(parser); return 1; } @@ -1094,13 +1130,13 @@ int main (int argc, char *argv[]) PrintToStdOut("waiting for input"); } - while (!g_bExit) + while (!g_bExit && !g_bHardExit) { string input; getline(cin, input); cin.clear(); - if (ProcessConsoleCommand(parser, input) && !g_bSingleCommand && !g_bExit) + if (ProcessConsoleCommand(parser, input) && !g_bSingleCommand && !g_bExit && !g_bHardExit) { if (!input.empty()) PrintToStdOut("waiting for input"); @@ -1108,11 +1144,11 @@ int main (int argc, char *argv[]) else g_bExit = true; - if (!g_bExit) + if (!g_bExit && !g_bHardExit) CCondition::Sleep(50); } - if (!g_bSingleCommand) + if (!g_bSingleCommand && !g_bHardExit) parser->StandbyDevices(CECDEVICE_BROADCAST); parser->Close();