X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Ftestclient%2Fmain.cpp;h=867501d55041f1e68ecc4e28bc9cb6d4c8ccf2cb;hb=0e31a62c1ff3854f1c4dad3fb0917683c9528e5b;hp=447dcfba88598338da668a9bf245941f6b6ee108;hpb=bdd433cb1b562f3fe77b729b5bc894490ebbbed4;p=deb_libcec.git diff --git a/src/testclient/main.cpp b/src/testclient/main.cpp index 447dcfb..867501d 100644 --- a/src/testclient/main.cpp +++ b/src/testclient/main.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include "../lib/platform/threads.h" @@ -46,7 +47,12 @@ using namespace std; #define CEC_TEST_CLIENT_VERSION 8 #include -int g_cecLogLevel = CEC_LOG_ALL; + +int g_cecLogLevel = CEC_LOG_ALL; +int g_iLogicalAddress = CECDEVICE_PLAYBACKDEVICE1; +ofstream g_logOutput; +bool g_bShortLog = false; +CStdString g_strPort; inline bool HexStrToInt(const std::string& data, uint8_t& value) { @@ -107,30 +113,39 @@ void flush_log(ICECAdapter *cecParser) { if ((message.level & g_cecLogLevel) == message.level) { + CStdString strLevel; switch (message.level) { case CEC_LOG_ERROR: - cout << "ERROR: "; + strLevel = "ERROR: "; break; case CEC_LOG_WARNING: - cout << "WARNING: "; + strLevel = "WARNING: "; break; case CEC_LOG_NOTICE: - cout << "NOTICE: "; + strLevel = "NOTICE: "; break; case CEC_LOG_TRAFFIC: - cout << "TRAFFIC: "; + strLevel = "TRAFFIC: "; break; case CEC_LOG_DEBUG: - cout << "DEBUG: "; + strLevel = "DEBUG: "; break; default: break; } - CStdString strMessageTmp; - strMessageTmp.Format("[%16lld]\t%s", message.time, message.message); - cout << strMessageTmp.c_str() << endl; + CStdString strFullLog; + strFullLog.Format("%s[%16lld]\t%s", strLevel.c_str(), message.time, message.message); + cout << strFullLog.c_str() << endl; + + if (g_logOutput.is_open()) + { + if (g_bShortLog) + g_logOutput << message.message << endl; + else + g_logOutput << strFullLog.c_str() << endl; + } } } } @@ -163,11 +178,19 @@ void show_help(const char* strExec) strExec << " {-h|--help|-l|--list-devices|[COM PORT]}" << endl << endl << "parameters:" << endl << - "\t-h --help Shows this help text" << endl << - "\t-l --list-devices List all devices on this system" << endl << - "\t[COM PORT] The com port to connect to. If no COM port is given, the client tries to connect to the first device that is detected" << endl << + " -h --help Shows this help text" << endl << + " -l --list-devices List all devices on this system" << endl << + " -la --logical-address {a} The logical address to use." << endl << + " -f --log-file {file} Writes all libCEC log message to a file" << endl << + " -sf --short-log-file {file} Writes all libCEC log message without timestamps" << endl << + " and log levels to a file." << endl << + " -d --log-level {level} Sets the log level. See cectypes.h for values." << endl << + " [COM PORT] The com port to connect to. If no COM" << endl << + " port is given, the client tries to connect to the" << endl << + " first device that is detected." << endl << endl << - "Type 'h' or 'help' and press enter after starting the client to display all available commands" << endl; + "Type 'h' or 'help' and press enter after starting the client to display all " << endl << + "available commands" << endl; } void show_console_help(void) @@ -230,8 +253,96 @@ int main (int argc, char *argv[]) fcntl(0, F_SETFL, flags); #endif - string strPort; - if (argc < 2) + int iArgPtr = 1; + while (iArgPtr < argc) + { + 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; + } + else + { + cout << "== skipped log-file parameter: no file given ==" << endl; + ++iArgPtr; + } + } + else if (!strcmp(argv[iArgPtr], "-d") || + !strcmp(argv[iArgPtr], "--log-level")) + { + if (argc >= iArgPtr + 2) + { + int iNewLevel = atoi(argv[iArgPtr + 1]); + if (iNewLevel >= CEC_LOG_ERROR && iNewLevel <= CEC_LOG_ALL) + { + g_cecLogLevel = iNewLevel; + cout << "log level set to " << argv[iArgPtr + 1] << endl; + } + else + { + cout << "== skipped log-level parameter: invalid level '" << argv[iArgPtr + 1] << "' ==" << endl; + } + iArgPtr += 2; + } + else + { + cout << "== skipped log-level parameter: no level given ==" << endl; + ++iArgPtr; + } + } + else if (!strcmp(argv[iArgPtr], "-la") || + !strcmp(argv[iArgPtr], "--logical-address")) + { + if (argc >= iArgPtr + 2) + { + int iNewAddress = atoi(argv[iArgPtr + 1]); + if (iNewAddress >= 0 && iNewAddress <= 15) + { + g_iLogicalAddress = iNewAddress; + cout << "logical address set to " << argv[iArgPtr + 1] << endl; + } + else + { + cout << "== skipped logical-address parameter: invalid address '" << argv[iArgPtr + 1] << "' ==" << endl; + } + iArgPtr += 2; + } + else + { + cout << "== skipped logical-address parameter: no address given ==" << endl; + ++iArgPtr; + } + } + else if (!strcmp(argv[iArgPtr], "--list-devices") || + !strcmp(argv[iArgPtr], "-l")) + { + list_devices(parser); + UnloadLibCec(parser); + return 0; + } + else if (!strcmp(argv[iArgPtr], "--help") || + !strcmp(argv[iArgPtr], "-h")) + { + show_help(argv[0]); + UnloadLibCec(parser); + return 0; + } + else + { + g_strPort = argv[iArgPtr++]; + } + } + } + + if (g_strPort.IsEmpty()) { cout << "no serial port given. trying autodetect: "; cec_adapter devices[10]; @@ -245,29 +356,16 @@ int main (int argc, char *argv[]) else { cout << endl << " path: " << devices[0].path << endl << - " com port: " << devices[0].comm << endl << endl; - strPort = devices[0].comm; + " com port: " << devices[0].comm << endl << endl; + g_strPort = devices[0].comm; } } - else if (!strcmp(argv[1], "--list-devices") || !strcmp(argv[1], "-l")) - { - list_devices(parser); - UnloadLibCec(parser); - return 0; - } - else if (!strcmp(argv[1], "--help") || !strcmp(argv[1], "-h")) - { - show_help(argv[0]); - return 0; - } - else - { - strPort = argv[1]; - } - if (!parser->Open(strPort.c_str())) + parser->SetLogicalAddress((cec_logical_address) g_iLogicalAddress); + + if (!parser->Open(g_strPort.c_str())) { - cout << "unable to open the device on port " << strPort << endl; + cout << "unable to open the device on port " << g_strPort << endl; flush_log(parser); UnloadLibCec(parser); return 1; @@ -395,7 +493,7 @@ int main (int argc, char *argv[]) flush_log(parser); cout << "opening a new connection" << endl; - parser->Open(strPort.c_str()); + parser->Open(g_strPort.c_str()); flush_log(parser); cout << "setting active view" << endl; @@ -433,5 +531,9 @@ int main (int argc, char *argv[]) parser->Close(); flush_log(parser); UnloadLibCec(parser); + + if (g_logOutput.is_open()) + g_logOutput.close(); + return 0; }