From 0c271bd0fc05728d0dd90065a064737a979f50d3 Mon Sep 17 00:00:00 2001 From: Lars Op den Kamp Date: Wed, 14 Nov 2012 18:19:22 +0100 Subject: [PATCH] bump to 2.0.4. dropped obsolete cec-config --- ChangeLog | 42 ++ Makefile.am | 2 +- configure.ac | 4 +- debian/changelog | 42 ++ include/cectypes.h | 6 +- project/cec-config.rc | Bin 3232 -> 0 bytes project/cec-config.vcxproj | 184 ------- project/cec-config.vcxproj.filters | 31 -- project/libcec.rc | Bin 3202 -> 3202 bytes project/testclient.rc | Bin 3230 -> 3230 bytes src/CecSharpTester/CecSharpClient.cs | 2 +- src/CecSharpTester/Properties/AssemblyInfo.cs | 4 +- src/LibCecSharp/AssemblyInfo.cpp | 2 +- src/LibCecSharp/CecSharpTypes.h | 12 +- src/LibCecTray/Properties/AssemblyInfo.cs | 4 +- src/LibCecTray/controller/CECController.cs | 2 +- src/cec-config/Makefile.am | 5 - src/cec-config/cec-config.cpp | 487 ------------------ src/lib/CECTypeUtils.h | 4 + 19 files changed, 112 insertions(+), 721 deletions(-) delete mode 100644 project/cec-config.rc delete mode 100644 project/cec-config.vcxproj delete mode 100644 project/cec-config.vcxproj.filters delete mode 100644 src/cec-config/Makefile.am delete mode 100644 src/cec-config/cec-config.cpp diff --git a/ChangeLog b/ChangeLog index 9b0d274..513a93b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,45 @@ +libcec (2.0.4-1) unstable; urgency=low + + * changed: + * dropped obsolete cec-config + * added CEC_CLIENT_VERSION_CURRENT and CEC_SERVER_VERSION_CURRENT. closes + #88 + * support colon separated data for the 'tx' command in cec-client + * mark the adapter as (in)active source for firmware v3+ + * fixed: + * only change the handler of the primary device if the tv has a quirks mode + not for other devices + * send an active source message when the route was set to the physical + address that is handled by libCEC + * default double tap timeout wasn't set for panasonic + * philips TVs sometimes keep sending key presses without key releases + * philips TVs ignore 'image view on' right after they were sent into + standby. check the power status of the tv every 5 seconds, until it + reports to have powered on + * mark a device as powered on when receiving a stream path or routing + change + * update the active source status correctly on stream path changes + * ensure that we only send 'image view on' when needed + * mark the TV as 'in transition standby -> on' after sending + 'image view on', so we don't spam the TV with 'image view on' command + while waiting for it to finish powering up. bugzid: 1603. bugzid: 1609. + bugzid: 1592 + * request the active source before requesting device information in + cec-client, or it'll display incorrect information when called the first + time + * update the value of CCECProcessor::m_bMonitor when registering a client. + SetControlled() wasn't called on exit, so it took 30 seconds until it was + auto-enabled + * silence 'unused' warning properly. closes #86 + * only change the type of the client to 'playback device' instead of + 'recorder' for panasonic if the TV is a panasonic. issue #84 + * always poll the TV if it's marked as not present. issue #83. issue #84 + * only set m_iCurrentButton when the duration isn't known yet. fixes + duplicate key press for vendor remote codes. closes #81 + * delete the right registry key + + -- Pulse-Eight Packaging Wed, 14 Nov 2012 18:34:00 +0100 + libcec (2.0.3-1) unstable; urgency=low * changed: diff --git a/Makefile.am b/Makefile.am index 6c69f51..0fd66f3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = src/lib src/testclient src/cec-config +SUBDIRS = src/lib src/testclient docs: echo "Updating documentation (if doxygen is present)" diff --git a/configure.ac b/configure.ac index 45d969b..acfe18b 100644 --- a/configure.ac +++ b/configure.ac @@ -332,7 +332,7 @@ if test "x$HAVE_UNAME" = "xyes"; then LIB_INFO="$LIB_INFO on `uname -s` `uname -r` (`uname -m`)" fi -## redefine the LIBS, so cec-client and cec-config aren't linked against things they don't need +## redefine the LIBS, so cec-client isn't linked against things they don't need LIBS_LIBCEC="$LIBS" LIBS="$libs_client" @@ -357,7 +357,7 @@ AC_SUBST([USE_P8_USB]) AC_SUBST([USE_P8_USB_DETECT]) AC_SUBST([USE_RPI_API]) AC_CONFIG_FILES([src/lib/libcec.pc]) -AC_OUTPUT([Makefile src/lib/Makefile src/testclient/Makefile src/cec-config/Makefile]) +AC_OUTPUT([Makefile src/lib/Makefile src/testclient/Makefile]) cat < on' after sending + 'image view on', so we don't spam the TV with 'image view on' command + while waiting for it to finish powering up. bugzid: 1603. bugzid: 1609. + bugzid: 1592 + * request the active source before requesting device information in + cec-client, or it'll display incorrect information when called the first + time + * update the value of CCECProcessor::m_bMonitor when registering a client. + SetControlled() wasn't called on exit, so it took 30 seconds until it was + auto-enabled + * silence 'unused' warning properly. closes #86 + * only change the type of the client to 'playback device' instead of + 'recorder' for panasonic if the TV is a panasonic. issue #84 + * always poll the TV if it's marked as not present. issue #83. issue #84 + * only set m_iCurrentButton when the duration isn't known yet. fixes + duplicate key press for vendor remote codes. closes #81 + * delete the right registry key + + -- Pulse-Eight Packaging Wed, 14 Nov 2012 18:34:00 +0100 + libcec (2.0.3-1) unstable; urgency=low * changed: diff --git a/include/cectypes.h b/include/cectypes.h index a690dc7..cb51c7f 100644 --- a/include/cectypes.h +++ b/include/cectypes.h @@ -1377,7 +1377,8 @@ typedef enum cec_client_version CEC_CLIENT_VERSION_2_0_1 = 0x2001, CEC_CLIENT_VERSION_2_0_2 = 0x2002, CEC_CLIENT_VERSION_2_0_3 = 0x2003, - CEC_CLIENT_VERSION_CURRENT = 0x2003 + CEC_CLIENT_VERSION_2_0_4 = 0x2004, + CEC_CLIENT_VERSION_CURRENT = 0x2004 } cec_client_version; typedef enum cec_server_version @@ -1403,7 +1404,8 @@ typedef enum cec_server_version CEC_SERVER_VERSION_2_0_1 = 0x2001, CEC_SERVER_VERSION_2_0_2 = 0x2002, CEC_SERVER_VERSION_2_0_3 = 0x2003, - CEC_SERVER_VERSION_CURRENT = 0x2003 + CEC_SERVER_VERSION_2_0_4 = 0x2004, + CEC_SERVER_VERSION_CURRENT = 0x2004 } cec_server_version; struct libcec_configuration diff --git a/project/cec-config.rc b/project/cec-config.rc deleted file mode 100644 index def8b1f69a03934bb26d7195c4d6be8b6b983fdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3232 zcmds)+in^$5QgWvQs2QMH?11N2KoY!EC_{WQ8}oUA|XoH6p28@K}uh~%{Sh4_P|CZ zDHo`+yf*fD4*wi%{`{^;MT~rrnM`CQOIg!H*|0WbZ7o|F%bZ^q@`+~TPNuS;uUOwO z-mBPSkV|PxAS1rlNDt&n zeAe7)<#2q>Y3D|RCBA&)t5#e{$J*sTTcLE?&#}Ci(%Ah5Tw0cgQk%Gyh=KlICmi=CGV1ug zM^@JPULo0&N4SUVDEDmsjF93>14*r%o(ZRj!};_1DLK6cr>tFhdM`!qVkmneK);B$ zqfJoi%Xc!{kN2JIWWR^T4X{a5IWEP~-$0)LJQa}=k~g--ET~CMygkRBHXaZ0dp0|Y zxw&k}a`nJEYMOLAyj!arS!qm1~Q!~w`Qq>R2k-B8Ijk3y@HL7OFQ{w960 znd$VXVx32?+3_`Ys<-tHS~2P^mB&=?q6wCyEjVNCk^UMv9q8|@1ohzq-qX7+@{qG) zcgM&FB!2|KD)ybz%JHnqTA6-Gp9ir{vlt5(1By&K&JKl17kNt}bBm3e9pn!mLs@xm zkEG;wbh)#;lC20s5M2FJg~`@|KHRhhtch5CL#4A)>%871hG@~K@!|>{>6&Po%(Nc6 zyYTo%)h^wmn@jJK|MTtF!mj-5IJB8^k54z$bbTGa^zN&%mw!v|zMhZY<1fEC7t{>> LZ?VstU+sJX5ovi* diff --git a/project/cec-config.vcxproj b/project/cec-config.vcxproj deleted file mode 100644 index 5fef417..0000000 --- a/project/cec-config.vcxproj +++ /dev/null @@ -1,184 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {00EE7081-9EEE-485C-B7CE-699A7BCA40C1} - Win32Proj - cec-config - cec-config - - - - Application - true - MultiByte - - - Application - true - MultiByte - - - Application - false - MultiByte - - - Application - false - MultiByte - - - - - - - - - - - - - - - - - - - $(SolutionDir)..\build\ - cec-config - - - $(SolutionDir)..\build\ - cec-config.x64 - - - $(SolutionDir)..\build\ - cec-config - - - $(SolutionDir)..\build\ - cec-config.x64 - - - - - - Level4 - Disabled - _USE_32BIT_TIME_T;_DEBUG;_CRT_SECURE_NO_WARNINGS;_WINSOCKAPI_;__STDC_CONSTANT_MACROS;%(PreprocessorDefinitions) - true - - - $(SolutiontDir)..\include;$(SolutionDir)..\src;%(AdditionalIncludeDirectories) - - - Console - true - - - - - - - - - Level4 - Disabled - _WIN64;_DEBUG;_CRT_SECURE_NO_WARNINGS;_WINSOCKAPI_;__STDC_CONSTANT_MACROS;%(PreprocessorDefinitions) - true - - - $(SolutiontDir)..\include;$(SolutionDir)..\src;%(AdditionalIncludeDirectories) - - - Console - true - - - - - - - - - Level4 - - - Full - false - true - _USE_32BIT_TIME_T;_CRT_SECURE_NO_WARNINGS;_WINSOCKAPI_;__STDC_CONSTANT_MACROS;%(PreprocessorDefinitions) - true - - - $(SolutionDir)..\include;$(SolutionDir)..\src;%(AdditionalIncludeDirectories) - Speed - - - Console - false - true - true - - - - - - - Level4 - - - Full - true - _WIN64;_CRT_SECURE_NO_WARNINGS;_WINSOCKAPI_;__STDC_CONSTANT_MACROS;%(PreprocessorDefinitions) - true - - - $(SolutionDir)..\include;$(SolutionDir)..\src;%(AdditionalIncludeDirectories) - Speed - - - Console - false - true - true - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/project/cec-config.vcxproj.filters b/project/cec-config.vcxproj.filters deleted file mode 100644 index 2ee5127..0000000 --- a/project/cec-config.vcxproj.filters +++ /dev/null @@ -1,31 +0,0 @@ - - - - - {cc0a01c1-e1e7-4af8-9656-fa9463140613} - - - {f08c0a80-22d9-4bdd-90de-b9cf5fa88f99} - - - - - exports - - - exports - - - platform - - - - - - platform - - - - - - \ No newline at end of file diff --git a/project/libcec.rc b/project/libcec.rc index c92cadcf2585e555af850ca68c5241992a5f1a5c..2f70b2f9d34b0964aa267568416a13ab6a0375d2 100644 GIT binary patch delta 52 zcmZpYY?9pI$INIl*`L{v(PVQYvp6%W34h2y<=nsawp5PN=|;pA+-4! H#~fw=Xo3!c delta 52 zcmZpYY?9pI$INIv*`L{v(Rgzsvp6%WF@qk1!Q_SPx|>h2y<=nsawp5PN=|;pA+-4! H#~fw=XaNp> diff --git a/project/testclient.rc b/project/testclient.rc index 0da16c66d9248a654b58bccc7715febf413ddac1..b2ba0e28a7ce9f39c7d7c480b79682691dcd99ff 100644 GIT binary patch delta 50 zcmbOyIZtwfA2XxLWPfHuMw88r%!16!CJcI$sA7B;Re1uJa2_~@l1IIdM07+jA A{r~^~ delta 50 zcmbOyIZtwfA2XxzWPfHuM&r$m%!16!#teFssA7B;Re1uJa2_~@l1IIdM07&Qz A`Tzg` diff --git a/src/CecSharpTester/CecSharpClient.cs b/src/CecSharpTester/CecSharpClient.cs index 63a2e23..d1c6c3e 100644 --- a/src/CecSharpTester/CecSharpClient.cs +++ b/src/CecSharpTester/CecSharpClient.cs @@ -43,7 +43,7 @@ namespace CecSharpClient Config = new LibCECConfiguration(); Config.DeviceTypes.Types[0] = CecDeviceType.RecordingDevice; Config.DeviceName = "CEC Tester"; - Config.ClientVersion = CecClientVersion.Version2_0_3; + Config.ClientVersion = CecClientVersion.Version2_0_4; Config.SetCallbacks(this); LogLevel = (int)CecLogLevel.All; diff --git a/src/CecSharpTester/Properties/AssemblyInfo.cs b/src/CecSharpTester/Properties/AssemblyInfo.cs index ad7143f..1270401 100644 --- a/src/CecSharpTester/Properties/AssemblyInfo.cs +++ b/src/CecSharpTester/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.0.3.0")] -[assembly: AssemblyFileVersion("2.0.3.0")] +[assembly: AssemblyVersion("2.0.4.0")] +[assembly: AssemblyFileVersion("2.0.4.0")] diff --git a/src/LibCecSharp/AssemblyInfo.cpp b/src/LibCecSharp/AssemblyInfo.cpp index fa6b40b..d5d229f 100644 --- a/src/LibCecSharp/AssemblyInfo.cpp +++ b/src/LibCecSharp/AssemblyInfo.cpp @@ -13,7 +13,7 @@ using namespace System::Security::Permissions; [assembly:AssemblyTrademarkAttribute("")]; [assembly:AssemblyCultureAttribute("")]; -[assembly:AssemblyVersionAttribute("2.0.3.0")]; +[assembly:AssemblyVersionAttribute("2.0.4.0")]; [assembly:ComVisible(false)]; [assembly:CLSCompliantAttribute(true)]; diff --git a/src/LibCecSharp/CecSharpTypes.h b/src/LibCecSharp/CecSharpTypes.h index bf42996..a6fc2d4 100644 --- a/src/LibCecSharp/CecSharpTypes.h +++ b/src/LibCecSharp/CecSharpTypes.h @@ -1175,7 +1175,11 @@ namespace CecSharp /// /// v2.0.3 /// - Version2_0_3 = 0x2003 + Version2_0_3 = 0x2003, + /// + /// v2.0.4 + /// + Version2_0_4 = 0x2004 }; /// @@ -1266,7 +1270,11 @@ namespace CecSharp /// /// v2.0.3 /// - Version2_0_3 = 0x2003 + Version2_0_3 = 0x2003, + /// + /// v2.0.4 + /// + Version2_0_4 = 0x2004 }; /// diff --git a/src/LibCecTray/Properties/AssemblyInfo.cs b/src/LibCecTray/Properties/AssemblyInfo.cs index 8bc2245..bccd9c7 100644 --- a/src/LibCecTray/Properties/AssemblyInfo.cs +++ b/src/LibCecTray/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.0.3.0")] -[assembly: AssemblyFileVersion("2.0.3.0")] +[assembly: AssemblyVersion("2.0.4.0")] +[assembly: AssemblyFileVersion("2.0.4.0")] diff --git a/src/LibCecTray/controller/CECController.cs b/src/LibCecTray/controller/CECController.cs index f4dc434..b54ecdd 100644 --- a/src/LibCecTray/controller/CECController.cs +++ b/src/LibCecTray/controller/CECController.cs @@ -438,7 +438,7 @@ namespace LibCECTray.controller { if (_config == null) { - _config = new LibCECConfiguration { DeviceName = "CEC Tray", ClientVersion = CecClientVersion.Version2_0_3 }; + _config = new LibCECConfiguration { DeviceName = "CEC Tray", ClientVersion = CecClientVersion.Version2_0_4 }; _config.DeviceTypes.Types[0] = CecDeviceType.RecordingDevice; _config.SetCallbacks(this); diff --git a/src/cec-config/Makefile.am b/src/cec-config/Makefile.am deleted file mode 100644 index da7b89b..0000000 --- a/src/cec-config/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -bin_PROGRAMS = cec-config -cec_config_SOURCES = cec-config.cpp - -cec_config_CPPFLAGS = -I@abs_top_srcdir@/include -cec_config_LDFLAGS = @LIBS@ diff --git a/src/cec-config/cec-config.cpp b/src/cec-config/cec-config.cpp deleted file mode 100644 index da0f125..0000000 --- a/src/cec-config/cec-config.cpp +++ /dev/null @@ -1,487 +0,0 @@ -/* - * This file is part of the libCEC(R) library. - * - * 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. - * - * This program is dual-licensed; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * - * Alternatively, you can license this library under a commercial license, - * please contact Pulse-Eight Licensing for more information. - * - * For more information contact: - * Pulse-Eight Licensing - * http://www.pulse-eight.com/ - * http://www.pulse-eight.net/ - */ - -#include "../env.h" -#include "../include/cec.h" - -#include -#include -#include -#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; -using namespace PLATFORM; - -#include - -CMutex g_outputMutex; - -CEvent g_responseEvent; -cec_opcode g_lastCommand = CEC_OPCODE_NONE; - -CEvent g_keyEvent; -cec_user_control_code g_lastKey = CEC_USER_CONTROL_CODE_UNKNOWN; - -ICECCallbacks g_callbacks; -libcec_configuration g_config; -ICECAdapter * g_parser; - -inline void PrintToStdOut(const char *strFormat, ...) -{ - CStdString strLog; - - va_list argList; - va_start(argList, strFormat); - strLog.FormatV(strFormat, argList); - va_end(argList); - - CLockObject lock(g_outputMutex); - cout << strLog << endl; -} - -//get the first word (separated by whitespace) from string data and place that in word -//then remove that word from string data -bool GetWord(string& data, string& word) -{ - stringstream datastream(data); - string end; - - datastream >> word; - if (datastream.fail()) - { - data.clear(); - return false; - } - - size_t pos = data.find(word) + word.length(); - - if (pos >= data.length()) - { - data.clear(); - return true; - } - - data = data.substr(pos); - - datastream.clear(); - datastream.str(data); - - datastream >> end; - if (datastream.fail()) - data.clear(); - - return true; -} - -int CecLogMessage(void *UNUSED(cbParam), const cec_log_message message) -{ - switch (message.level) - { - case CEC_LOG_ERROR: - PrintToStdOut("ERROR:\t%s", message.message); - break; - case CEC_LOG_WARNING: - PrintToStdOut("ERROR:\t%s", message.message); - break; - default: - break; - } - - return 0; -} - -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) -{ - g_lastCommand = command.opcode; - g_responseEvent.Signal(); - return 0; -} - -bool ProcessConsoleCommand(string &input) -{ - if (!input.empty()) - { - string command; - if (GetWord(input, command)) - { - if (command == "q" || command == "quit") - return false; - } - } - return true; -} - -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_CURRENT; - g_callbacks.CBCecLogMessage = &CecLogMessage; - g_callbacks.CBCecKeyPress = &CecKeyPress; - g_callbacks.CBCecCommand = &CecCommand; - g_config.callbacks = &g_callbacks; - - 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); - if (iDevicesFound <= 0) - { - PrintToStdOut("autodetect FAILED"); - UnloadLibCec(g_parser); - return false; - } - else - { - strPort = devices[0].comm; - } - - PrintToStdOut("opening a connection to the CEC adapter..."); - if (!g_parser->Open(strPort.c_str())) - { - PrintToStdOut("unable to open the device on port %s", strPort.c_str()); - UnloadLibCec(g_parser); - return false; - } - - g_parser->GetCurrentConfiguration(&g_config); - PrintToStdOut("CEC Parser created - libCEC version %s", g_parser->ToString((cec_server_version)g_config.serverVersion)); - - return true; -} - -int8_t FindPhysicalAddressPortNumber(void) -{ - PrintToStdOut("Enter the HDMI port number to which you connected your CEC adapter, followed by . Valid ports are in the range 1-15. Anything else will cancel this wizard."); - string input; - getline(cin, input); - cin.clear(); - if (input.empty()) - return -1; - - int hdmiport = atoi(input.c_str()); - return (hdmiport < 1 || hdmiport > 15) ? -1 : (int8_t)hdmiport; -} - -cec_logical_address FindPhysicalAddressBaseDevice(void) -{ - PrintToStdOut("Press 1 if your CEC adapter is connected to your TV or\nPress 2 if it's connected to an AVR, followed by . Anything else will cancel this wizard."); - - string input; - getline(cin, input); - cin.clear(); - if (input.empty() || (input != "1" && input != "2")) - { - PrintToStdOut("Exiting..."); - return CECDEVICE_UNKNOWN; - } - return (input == "2") ? - CECDEVICE_AUDIOSYSTEM : - CECDEVICE_TV; -} - -uint16_t FindPhysicalAddress(void) -{ - PrintToStdOut("=== Physical Address Configuration ===\n"); - uint16_t iAddress(CEC_INVALID_PHYSICAL_ADDRESS); - - PrintToStdOut("Do you want to let libCEC try to autodetect the address (y/n)?"); - string input; - getline(cin, input); - cin.clear(); - if (input == "y" || input == "Y") - { - cec_logical_address baseDevice = FindPhysicalAddressBaseDevice(); - if (baseDevice == CECDEVICE_UNKNOWN) - return iAddress; - - int8_t iPortNumber = FindPhysicalAddressPortNumber(); - if (iPortNumber == -1) - return iAddress; - - PrintToStdOut("Trying to detect the physical address..."); - if (!g_parser->SetHDMIPort(baseDevice, iPortNumber)) - PrintToStdOut("Failed. Please enter the address manually, or restart this wizard and use different settings."); - else - { - g_parser->GetCurrentConfiguration(&g_config); - iAddress = g_parser->GetDevicePhysicalAddress(g_config.logicalAddresses.primary); - if (iAddress == 0 || iAddress == CEC_INVALID_PHYSICAL_ADDRESS) - PrintToStdOut("Failed. Please enter the address manually, or restart this wizard and use different settings."); - } - } - - if (iAddress == 0 || iAddress == CEC_INVALID_PHYSICAL_ADDRESS) - { - PrintToStdOut("Please enter the physical address (0001 - FFFE), followed by ."); - getline(cin, input); - cin.clear(); - - int iAddressTmp; - if (sscanf(input.c_str(), "%x", &iAddressTmp) == 1) - { - if (iAddressTmp <= CEC_PHYSICAL_ADDRESS_TV || iAddressTmp > CEC_MAX_PHYSICAL_ADDRESS) - iAddressTmp = CEC_INVALID_PHYSICAL_ADDRESS; - iAddress = (uint16_t)iAddressTmp; - } - } - - if (iAddress != 0) - { - g_parser->SetPhysicalAddress(iAddress); - g_parser->SetActiveSource(g_config.deviceTypes[0]); - } - - return iAddress; -} - -bool PowerOnTV(uint64_t iTimeout = 60000) -{ - cec_power_status currentTvPower(CEC_POWER_STATUS_UNKNOWN); - uint64_t iNow = GetTimeMs(); - uint64_t iTarget = iNow + iTimeout; - - 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) - { - g_responseEvent.Wait((uint32_t)(iTarget - iNow)); - if (g_lastCommand == CEC_OPCODE_REQUEST_ACTIVE_SOURCE) - break; - iNow = GetTimeMs(); - } - } - - currentTvPower = g_parser->GetDevicePowerStatus(CECDEVICE_TV); - - if (currentTvPower != CEC_POWER_STATUS_ON) - PrintToStdOut("Failed to power on the TV, or the TV does not respond properly"); - - 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; - - if (!PowerOnTV()) - return 1; - - bool bAddressOk(false); - while (!bAddressOk) - { - uint16_t iAddress = FindPhysicalAddress(); - - PrintToStdOut("Physical address: %4X", iAddress); - PrintToStdOut("Is this correct (y/n)?"); - string input; - getline(cin, input); - cin.clear(); - bAddressOk = (input == "y" || input == "Y"); - } - - g_parser->GetCurrentConfiguration(&g_config); - - { - cec_menu_language lang; - if (g_parser->GetDeviceMenuLanguage(CECDEVICE_TV, &lang)) - { - PrintToStdOut("TV menu language: %s", lang.language); - PrintToStdOut("Do you want the application to use the menu language of the TV (y/n)?"); - string input; - getline(cin, input); - cin.clear(); - g_config.bUseTVMenuLanguage = (input == "y" || input == "Y") ? 1 : 0; - } - else - { - PrintToStdOut("The TV did not respond properly to the menu language request."); - } - } - - { - PrintToStdOut("Do you want to make the CEC adapter the active source when starting the application (y/n)?"); - string input; - getline(cin, input); - cin.clear(); - g_config.bActivateSource = (input == "y" || input == "Y") ? 1 : 0; - } - - { - PrintToStdOut("Do you want to power on the TV when starting the application (y/n)?"); - string input; - getline(cin, input); - cin.clear(); - if (input == "y" || input == "Y") - g_config.wakeDevices.Set(CECDEVICE_TV); - } - - { - PrintToStdOut("Do you want to power off CEC devices when closing the application (y/n)?"); - string input; - getline(cin, input); - cin.clear(); - if (input == "y" || input == "Y") - g_config.powerOffDevices.Set(CECDEVICE_TV); - } - - { - PrintToStdOut("Do you want to power off CEC devices when the screensaver is activated (y/n)?"); - string input; - getline(cin, input); - cin.clear(); - g_config.bPowerOffScreensaver = (input == "y" || input == "Y") ? 1 : 0; - } - - { - PrintToStdOut("Do you want to put the PC in standby when the TV is put in standby mode (y/n)?"); - string input; - getline(cin, input); - cin.clear(); - g_config.bPowerOffOnStandby = (input == "y" || input == "Y") ? 1 : 0; - } - - { - PrintToStdOut("Do you want to send an inactive source message when stopping the application (y/n)?"); - string input; - getline(cin, input); - cin.clear(); - g_config.bSendInactiveSource = (input == "y" || input == "Y") ? 1 : 0; - } - - PrintToStdOut("\n\n=== USB-CEC Adapter Configuration Summary ==="); - PrintToStdOut("HDMI port number: %d", g_config.iHDMIPort); - PrintToStdOut("Connected to HDMI device: %X", (uint8_t)g_config.baseDevice); - PrintToStdOut("Physical address: %4X", g_config.iPhysicalAddress); - PrintToStdOut("Use the TV's language setting: %s", g_config.bUseTVMenuLanguage ? "yes" : "no"); - PrintToStdOut("Make the adapter the active source when starting XBMC: %s", g_config.bActivateSource ? "yes" : "no"); - PrintToStdOut("Power on the TV when starting XBMC: %s", g_config.wakeDevices.IsSet(CECDEVICE_BROADCAST) ? "yes" : "no"); - PrintToStdOut("Power off devices when stopping XBMC: %s", g_config.powerOffDevices.IsSet(CECDEVICE_BROADCAST) ? "yes" : "no"); - PrintToStdOut("Put devices in standby mode when activating screensaver: %s", g_config.bPowerOffScreensaver ? "yes" : "no"); - PrintToStdOut("Put this PC in standby mode when the TV is switched off: %s", g_config.bPowerOffOnStandby ? "yes" : "no"); - PrintToStdOut("Send an inactive source message when stopping XBMC: %s\n\n", g_config.bSendInactiveSource ? "yes" : "no"); - - PrintToStdOut("Storing settings ..."); - if (g_parser->PersistConfiguration(&g_config)) - PrintToStdOut("Settings stored."); - else - PrintToStdOut("The settings could not be stored"); - - ofstream configOutput; - configOutput.open("usb_2548_1001.xml"); - if (configOutput.is_open()) - { - CStdString strWakeDevices; - for (uint8_t iPtr = 0; iPtr < 16; iPtr++) - if (g_config.wakeDevices[iPtr]) - strWakeDevices.AppendFormat(" %d", iPtr); - CStdString strStandbyDevices; - for (uint8_t iPtr = 0; iPtr < 16; iPtr++) - if (g_config.powerOffDevices[iPtr]) - strStandbyDevices.AppendFormat(" %d", iPtr); - - configOutput << - "\n" << - "\t\n" << - "\t\n" << - "\t\n" << - "\t\n" << - "\t\n" << - "\t\n" << - "\t\n" << - "\t\n" << - "\t\n" << - "\t\n" << - "\t\n" << - "\t\n" << - ""; - configOutput.close(); - - PrintToStdOut("The configuration has been stored in 'usb_2548_1001.xml'. Copy this file to ~/.userdata/peripheral_data to use it in XBMC"); - } - - g_parser->StandbyDevices(); - g_parser->Close(); - UnloadLibCec(g_parser); - - PrintToStdOut("Press enter to close this wizard."); - string input; - getline(cin, input); - return 0; -} diff --git a/src/lib/CECTypeUtils.h b/src/lib/CECTypeUtils.h index ee3ddb3..7699b89 100644 --- a/src/lib/CECTypeUtils.h +++ b/src/lib/CECTypeUtils.h @@ -563,6 +563,8 @@ namespace CEC return "2.0.2"; case CEC_CLIENT_VERSION_2_0_3: return "2.0.3"; + case CEC_CLIENT_VERSION_2_0_4: + return "2.0.4"; default: return "Unknown"; } @@ -614,6 +616,8 @@ namespace CEC return "2.0.2"; case CEC_SERVER_VERSION_2_0_3: return "2.0.3"; + case CEC_SERVER_VERSION_2_0_4: + return "2.0.4"; default: return "Unknown"; } -- 2.34.1