X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Ftestclient%2Fmain.cpp;h=867501d55041f1e68ecc4e28bc9cb6d4c8ccf2cb;hb=0e31a62c1ff3854f1c4dad3fb0917683c9528e5b;hp=ad22a12331f1c8a391c9fe8da21e9336878d474b;hpb=8bc454769d048179ac5ad47f15b7df4d494ec510;p=deb_libcec.git diff --git a/src/testclient/main.cpp b/src/testclient/main.cpp index ad22a12..867501d 100644 --- a/src/testclient/main.cpp +++ b/src/testclient/main.cpp @@ -48,9 +48,11 @@ using namespace std; #include -int g_cecLogLevel = CEC_LOG_ALL; -ofstream g_logOutput; -bool g_bShortLog = false; +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) { @@ -178,9 +180,11 @@ void show_help(const char* strExec) "parameters:" << 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 << @@ -249,22 +253,96 @@ int main (int argc, char *argv[]) fcntl(0, F_SETFL, flags); #endif - string strPort; - int iArgPtr = 0; - if (argc >= 3) + int iArgPtr = 1; + while (iArgPtr < argc) { - if (!strcmp(argv[1], "-f") || - !strcmp(argv[1], "--log-file") || - !strcmp(argv[1], "-sf") || - !strcmp(argv[1], "--short-log-file")) + if (argc >= iArgPtr + 1) { - g_logOutput.open(argv[2]); - g_bShortLog = (!strcmp(argv[1], "-sf") || !strcmp(argv[1], "--short-log-file")); - iArgPtr = 2; + 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 (argc < 2 + iArgPtr) + if (g_strPort.IsEmpty()) { cout << "no serial port given. trying autodetect: "; cec_adapter devices[10]; @@ -278,30 +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 + iArgPtr], "--list-devices") || !strcmp(argv[1 + iArgPtr], "-l")) - { - list_devices(parser); - UnloadLibCec(parser); - return 0; - } - else if (!strcmp(argv[1 + iArgPtr], "--help") || !strcmp(argv[1 + iArgPtr], "-h")) - { - show_help(argv[0]); - return 0; - } - else - { - strPort = argv[1 + iArgPtr]; - } + parser->SetLogicalAddress((cec_logical_address) g_iLogicalAddress); - if (!parser->Open(strPort.c_str())) + 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; @@ -429,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;