added handler for philips. ignore repeating 'display information' keypresses from...
authorLars Op den Kamp <lars@opdenkamp.eu>
Wed, 14 Nov 2012 00:45:39 +0000 (01:45 +0100)
committerLars Op den Kamp <lars@opdenkamp.eu>
Wed, 14 Nov 2012 01:06:20 +0000 (02:06 +0100)
project/libcec.vcxproj
project/libcec.vcxproj.filters
src/lib/Makefile.am
src/lib/devices/CECBusDevice.cpp
src/lib/implementations/CECCommandHandler.cpp
src/lib/implementations/CECCommandHandler.h
src/lib/implementations/PHCommandHandler.cpp [new file with mode: 0644]
src/lib/implementations/PHCommandHandler.h [new file with mode: 0644]

index fca963584b394266b155de494885bbc7e1325c47..271d0dffbb1159abcff265d168665cb9932557f1 100644 (file)
@@ -43,6 +43,7 @@
     <ClInclude Include="..\src\lib\devices\CECTV.h" />
     <ClInclude Include="..\src\lib\implementations\ANCommandHandler.h" />
     <ClInclude Include="..\src\lib\implementations\CECCommandHandler.h" />
+    <ClInclude Include="..\src\lib\implementations\PHCommandHandler.h" />
     <ClInclude Include="..\src\lib\implementations\RLCommandHandler.h" />
     <ClInclude Include="..\src\lib\implementations\SLCommandHandler.h" />
     <ClInclude Include="..\src\lib\implementations\VLCommandHandler.h" />
@@ -87,6 +88,7 @@
     <ClCompile Include="..\src\lib\devices\CECTV.cpp" />
     <ClCompile Include="..\src\lib\implementations\ANCommandHandler.cpp" />
     <ClCompile Include="..\src\lib\implementations\CECCommandHandler.cpp" />
+    <ClCompile Include="..\src\lib\implementations\PHCommandHandler.cpp" />
     <ClCompile Include="..\src\lib\implementations\RLCommandHandler.cpp" />
     <ClCompile Include="..\src\lib\implementations\SLCommandHandler.cpp" />
     <ClCompile Include="..\src\lib\implementations\VLCommandHandler.cpp" />
index e86739973235c9f2bbe1a5de25ee8d1fb40598b3..f966a2be058d71bc8feaf2b96fe53f7c774f0e6c 100644 (file)
     <ClInclude Include="..\src\lib\implementations\RLCommandHandler.h">
       <Filter>implementations</Filter>
     </ClInclude>
+    <ClInclude Include="..\src\lib\implementations\PHCommandHandler.h">
+      <Filter>implementations</Filter>
+    </ClInclude>
     <ClInclude Include="..\src\lib\CECClient.h" />
     <ClInclude Include="..\src\lib\CECInputBuffer.h" />
     <ClInclude Include="..\src\lib\devices\CECDeviceMap.h">
     <ClCompile Include="..\src\lib\implementations\RLCommandHandler.cpp">
       <Filter>implementations</Filter>
     </ClCompile>
+    <ClCompile Include="..\src\lib\implementations\PHCommandHandler.cpp">
+      <Filter>implementations</Filter>
+    </ClCompile>
     <ClCompile Include="..\src\lib\CECClient.cpp" />
     <ClCompile Include="..\src\lib\devices\CECDeviceMap.cpp">
       <Filter>devices</Filter>
index ab00f1bb04d4ab1c0df120d10e19016d2aed0de9..35166f2d584026444d585846caa9a31d30a9032a 100644 (file)
@@ -25,7 +25,8 @@ libcec_la_SOURCES = CECProcessor.cpp \
                     implementations/CECCommandHandler.cpp \
                     implementations/SLCommandHandler.cpp \
                     implementations/VLCommandHandler.cpp \
-                    implementations/RLCommandHandler.cpp
+                    implementations/RLCommandHandler.cpp \
+                    implementations/PHCommandHandler.cpp
 
 ## server sockets, currently unused
 ##libcec_la_SOURCES += platform/posix/serversocket.cpp
index 0bd6dabea7d36b012cce498b4899899b2bee6f3d..d50045af89eebe2ad5e3aaefbd5d29755d8a95ea 100644 (file)
@@ -39,6 +39,7 @@
 #include "lib/implementations/CECCommandHandler.h"
 #include "lib/implementations/SLCommandHandler.h"
 #include "lib/implementations/VLCommandHandler.h"
+#include "lib/implementations/PHCommandHandler.h"
 #include "lib/LibCEC.h"
 #include "lib/CECTypeUtils.h"
 #include "lib/platform/util/timeutils.h"
@@ -132,6 +133,9 @@ bool CCECBusDevice::ReplaceHandler(bool bActivateSource /* = true */)
         case CEC_VENDOR_PANASONIC:
           m_handler = new CVLCommandHandler(this, iTransmitTimeout, iTransmitWait, iTransmitRetries, iActiveSourcePending);
           break;
+        case CEC_VENDOR_PHILIPS:
+          m_handler = new CPHCommandHandler(this, iTransmitTimeout, iTransmitWait, iTransmitRetries, iActiveSourcePending);
+          break;
         default:
           m_handler = new CCECCommandHandler(this, iTransmitTimeout, iTransmitWait, iTransmitRetries, iActiveSourcePending);
           break;
index d1af939188fbf86386295827a6652d1a065f2613..ad2488750b129cbe784fa3f186757d3cf46f47d0 100644 (file)
@@ -705,7 +705,7 @@ int CCECCommandHandler::HandleUserControlPressed(const cec_command &command)
   {
     // we're not marked as active source, but the tv sends keypresses to us, so assume it forgot to activate us
     if (!device->IsActiveSource() && command.initiator == CECDEVICE_TV)
-      device->ActivateSource();
+      device->MarkAsActiveSource();
   }
 
   return COMMAND_HANDLED;
index b09f9b3ecbf3b9b657caa33d283232c9138dff97..7ea5485f9d13b5c03eb3061fe46e2f1d24bfec9c 100644 (file)
@@ -57,7 +57,7 @@ namespace CEC
     virtual bool HandleCommand(const cec_command &command);
     virtual cec_vendor_id GetVendorId(void) { return m_vendorId; };
     virtual void SetVendorId(cec_vendor_id vendorId) { m_vendorId = vendorId; }
-    static bool HasSpecificHandler(cec_vendor_id vendorId) { return vendorId == CEC_VENDOR_LG || vendorId == CEC_VENDOR_SAMSUNG || vendorId == CEC_VENDOR_PANASONIC;}
+    static bool HasSpecificHandler(cec_vendor_id vendorId) { return vendorId == CEC_VENDOR_LG || vendorId == CEC_VENDOR_SAMSUNG || vendorId == CEC_VENDOR_PANASONIC || vendorId == CEC_VENDOR_PHILIPS;}
 
     virtual bool InitHandler(void) { return true; }
     virtual bool ActivateSource(bool bTransmitDelayedCommandsOnly = false);
diff --git a/src/lib/implementations/PHCommandHandler.cpp b/src/lib/implementations/PHCommandHandler.cpp
new file mode 100644 (file)
index 0000000..f8505c7
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * 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       <license@pulse-eight.com>
+ *     http://www.pulse-eight.com/
+ *     http://www.pulse-eight.net/
+ */
+
+#include "env.h"
+#include "PHCommandHandler.h"
+
+#include "lib/devices/CECBusDevice.h"
+#include "lib/CECProcessor.h"
+#include "lib/LibCEC.h"
+#include "lib/CECClient.h"
+
+using namespace CEC;
+
+#define LIB_CEC     m_busDevice->GetProcessor()->GetLib()
+#define ToString(p) LIB_CEC->ToString(p)
+
+CPHCommandHandler::CPHCommandHandler(CCECBusDevice *busDevice,
+                                     int32_t iTransmitTimeout /* = CEC_DEFAULT_TRANSMIT_TIMEOUT */,
+                                     int32_t iTransmitWait /* = CEC_DEFAULT_TRANSMIT_WAIT */,
+                                     int8_t iTransmitRetries /* = CEC_DEFAULT_TRANSMIT_RETRIES */,
+                                     int64_t iActiveSourcePending /* = 0 */) :
+    CCECCommandHandler(busDevice, iTransmitTimeout, iTransmitWait, iTransmitRetries, iActiveSourcePending),
+    m_iLastKeyCode(CEC_USER_CONTROL_CODE_UNKNOWN)
+{
+  m_vendorId = CEC_VENDOR_PHILIPS;
+}
+
+int CPHCommandHandler::HandleUserControlPressed(const cec_command& command)
+{
+  // tv keeps sending these until a button is pressed
+  if (command.parameters[0] == CEC_USER_CONTROL_CODE_DISPLAY_INFORMATION &&
+      m_iLastKeyCode == CEC_USER_CONTROL_CODE_DISPLAY_INFORMATION)
+    return COMMAND_HANDLED;
+
+  m_iLastKeyCode = command.parameters[0];
+
+  return CCECCommandHandler::HandleUserControlPressed(command);
+}
+
+int CPHCommandHandler::HandleUserControlRelease(const cec_command& command)
+{
+  m_iLastKeyCode = CEC_USER_CONTROL_CODE_UNKNOWN;
+
+  return CCECCommandHandler::HandleUserControlRelease(command);
+}
diff --git a/src/lib/implementations/PHCommandHandler.h b/src/lib/implementations/PHCommandHandler.h
new file mode 100644 (file)
index 0000000..85338b4
--- /dev/null
@@ -0,0 +1,53 @@
+#pragma once
+/*
+ * 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       <license@pulse-eight.com>
+ *     http://www.pulse-eight.com/
+ *     http://www.pulse-eight.net/
+ */
+
+#include "CECCommandHandler.h"
+
+namespace CEC
+{
+  class CPHCommandHandler : public CCECCommandHandler
+  {
+  public:
+    CPHCommandHandler(CCECBusDevice *busDevice,
+                      int32_t iTransmitTimeout = CEC_DEFAULT_TRANSMIT_TIMEOUT,
+                      int32_t iTransmitWait = CEC_DEFAULT_TRANSMIT_WAIT,
+                      int8_t iTransmitRetries = CEC_DEFAULT_TRANSMIT_RETRIES,
+                      int64_t iActiveSourcePending = 0);
+    virtual ~CPHCommandHandler(void) {};
+
+  protected:
+    virtual int HandleUserControlPressed(const cec_command& command);
+    virtual int HandleUserControlRelease(const cec_command& command);
+    uint8_t m_iLastKeyCode;
+  };
+};