X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcec-config%2Fcec-config.cpp;h=a7cae9c3a2c3501e4dd4ea99277bcb1886520db6;hb=d5890d16af8ca61857553a4285ee34c1d104353c;hp=57931ee81dfb4dcbe59e54bdb8e23cfcc89a8768;hpb=eb617f35c2d0e64f752e643ce8d8756e9ee4086f;p=deb_libcec.git diff --git a/src/cec-config/cec-config.cpp b/src/cec-config/cec-config.cpp index 57931ee..a7cae9c 100644 --- a/src/cec-config/cec-config.cpp +++ b/src/cec-config/cec-config.cpp @@ -30,7 +30,8 @@ * http://www.pulse-eight.net/ */ -#include "../../include/cec.h" +#include "../env.h" +#include "../include/cec.h" #include #include @@ -38,9 +39,11 @@ #include #include #include +#include #include "../lib/platform/threads/mutex.h" #include "../lib/platform/util/timeutils.h" #include "../lib/implementations/CECCommandHandler.h" +#include "../lib/platform/util/StdString.h" using namespace CEC; using namespace std; @@ -107,7 +110,7 @@ bool GetWord(string& data, string& word) return true; } -int CecLogMessage(void *UNUSED(cbParam), const cec_log_message &message) +int CecLogMessage(void *UNUSED(cbParam), const cec_log_message message) { switch (message.level) { @@ -124,14 +127,14 @@ int CecLogMessage(void *UNUSED(cbParam), const cec_log_message &message) return 0; } -int CecKeyPress(void *UNUSED(cbParam), const cec_keypress &key) +int CecKeyPress(void *UNUSED(cbParam), const cec_keypress key) { g_lastKey = key.keycode; g_keyEvent.Signal(); return 0; } -int CecCommand(void *UNUSED(cbParam), const cec_command &command) +int CecCommand(void *UNUSED(cbParam), const cec_command command) { g_lastCommand = command.opcode; g_responseEvent.Signal(); @@ -157,18 +160,21 @@ bool OpenConnection(cec_device_type type = CEC_DEVICE_TYPE_RECORDING_DEVICE) g_config.Clear(); snprintf(g_config.strDeviceName, 13, "CEC-config"); g_config.callbackParam = NULL; - g_config.clientVersion = (uint32_t)CEC_CLIENT_VERSION_1_6_2; + g_config.clientVersion = (uint32_t)CEC_CLIENT_VERSION_2_0_2; g_callbacks.CBCecLogMessage = &CecLogMessage; g_callbacks.CBCecKeyPress = &CecKeyPress; g_callbacks.CBCecCommand = &CecCommand; g_config.callbacks = &g_callbacks; - g_config.deviceTypes.add(type); + g_config.deviceTypes.Add(type); g_parser = LibCecInitialise(&g_config); if (!g_parser) return false; + // init video on targets that need this + g_parser->InitVideoStandalone(); + CStdString strPort; cec_adapter devices[10]; uint8_t iDevicesFound = g_parser->FindAdapters(devices, 10, NULL); @@ -288,20 +294,17 @@ bool PowerOnTV(uint64_t iTimeout = 60000) uint64_t iNow = GetTimeMs(); uint64_t iTarget = iNow + iTimeout; + currentTvPower = g_parser->GetDevicePowerStatus(CECDEVICE_TV); if (currentTvPower != CEC_POWER_STATUS_ON) { - currentTvPower = g_parser->GetDevicePowerStatus(CECDEVICE_TV); - if (currentTvPower != CEC_POWER_STATUS_ON) + PrintToStdOut("Sending 'power on' command to the TV\n=== Please wait ==="); + g_parser->PowerOnDevices(CECDEVICE_TV); + while (iTarget > iNow) { - PrintToStdOut("Sending 'power on' command to the TV\n=== Please wait ==="); - g_parser->PowerOnDevices(CECDEVICE_TV); - while (iTarget > iNow) - { - g_responseEvent.Wait((uint32_t)(iTarget - iNow)); - if (g_lastCommand == CEC_OPCODE_REQUEST_ACTIVE_SOURCE) - break; - iNow = GetTimeMs(); - } + g_responseEvent.Wait((uint32_t)(iTarget - iNow)); + if (g_lastCommand == CEC_OPCODE_REQUEST_ACTIVE_SOURCE) + break; + iNow = GetTimeMs(); } } @@ -313,8 +316,26 @@ bool PowerOnTV(uint64_t iTimeout = 60000) return currentTvPower == CEC_POWER_STATUS_ON; } +void sighandler(int iSignal) +{ + PrintToStdOut("signal caught: %d - exiting", iSignal); + + g_parser->Close(); + UnloadLibCec(g_parser); + + exit(1); +} + int main (int UNUSED(argc), char *UNUSED(argv[])) { + if (signal(SIGINT, sighandler) == SIG_ERR) + { + PrintToStdOut("can't register sighandler"); + return -1; + } + + g_callbacks.Clear(); + g_config.Clear(); PrintToStdOut("=== USB-CEC Adapter Configuration ===\n"); if (!OpenConnection()) return 1; @@ -429,11 +450,11 @@ int main (int UNUSED(argc), char *UNUSED(argv[])) CStdString strWakeDevices; for (uint8_t iPtr = 0; iPtr < 16; iPtr++) if (g_config.wakeDevices[iPtr]) - strWakeDevices.AppendFormat(" %d" + iPtr); + strWakeDevices.AppendFormat(" %d", iPtr); CStdString strStandbyDevices; for (uint8_t iPtr = 0; iPtr < 16; iPtr++) if (g_config.powerOffDevices[iPtr]) - strStandbyDevices.AppendFormat(" %d" + iPtr); + strStandbyDevices.AppendFormat(" %d", iPtr); configOutput << "\n" <<