From: Lars Op den Kamp Date: Fri, 4 Nov 2011 19:40:43 +0000 (+0100) Subject: cec: added vendor detection for panasonic and broadcast active view and set menu... X-Git-Tag: upstream/2.2.0~1^2~116 X-Git-Url: https://git.piment-noir.org/?p=deb_libcec.git;a=commitdiff_plain;h=bb5b4874f081aea758af58eae11f4729fc679650 cec: added vendor detection for panasonic and broadcast active view and set menu state when a panasonic device sets the stream path. thanks for the pointer cptcoconut --- diff --git a/include/cectypes.h b/include/cectypes.h index a347f1b..99b2656 100644 --- a/include/cectypes.h +++ b/include/cectypes.h @@ -709,9 +709,10 @@ typedef struct cec_command typedef enum cec_vendor_id { - CEC_VENDOR_SAMSUNG = 0x00F0, - CEC_VENDOR_LG = 0xE091, - CEC_VENDOR_UNKNOWN = 0 + CEC_VENDOR_SAMSUNG = 0x00F0, + CEC_VENDOR_LG = 0xE091, + CEC_VENDOR_PANASONIC = 0x8045, + CEC_VENDOR_UNKNOWN = 0 } cec_vendor_id; typedef struct cec_vendor @@ -723,7 +724,9 @@ typedef struct cec_vendor case CEC_VENDOR_SAMSUNG: return "Samsung"; case CEC_VENDOR_LG: - return "LG"; + return "LG"; + case CEC_VENDOR_PANASONIC: + return "Panasonic"; default: return "Unknown"; } diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index 31d630d..f5b5b0e 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -26,6 +26,8 @@ libcec_la_SOURCES = AdapterCommunication.cpp \ implementations/CECCommandHandler.h \ implementations/SLCommandHandler.cpp \ implementations/SLCommandHandler.h \ + implementations/VLCommandHandler.cpp \ + implementations/VLCommandHandler.h \ platform/timeutils.h \ platform/baudrate.h \ platform/os-dependent.h \ diff --git a/src/lib/implementations/VLCommandHandler.cpp b/src/lib/implementations/VLCommandHandler.cpp new file mode 100644 index 0000000..89f5b2e --- /dev/null +++ b/src/lib/implementations/VLCommandHandler.cpp @@ -0,0 +1,66 @@ +/* + * This file is part of the libCEC(R) library. + * + * libCEC(R) is Copyright (C) 2011 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 "VLCommandHandler.h" +#include "../devices/CECBusDevice.h" +#include "../util/StdString.h" + +using namespace CEC; + +CVLCommandHandler::CVLCommandHandler(CCECBusDevice *busDevice) : + CCECCommandHandler(busDevice) +{ +} + +bool CVLCommandHandler::HandleSetStreamPath(const cec_command &command) +{ + if (command.parameters.size >= 2) + { + int streamaddr = ((uint16_t)command.parameters[0] << 8) | ((uint16_t)command.parameters[1]); + CStdString strLog; + strLog.Format(">> %i requests stream path from physical address %04x", command.initiator, streamaddr); + m_busDevice->AddLog(CEC_LOG_DEBUG, strLog.c_str()); + if (streamaddr == m_busDevice->GetMyPhysicalAddress()) + { + CCECBusDevice *device = GetThisDevice(); + CCECBusDevice *initiatorDevice = GetDevice(command.initiator); + if (device && initiatorDevice) + { + return device->BroadcastActiveSource() && + device->BroadcastActiveView() && + initiatorDevice->ReportMenuState(); + } + return false; + } + } + return true; +} diff --git a/src/lib/implementations/VLCommandHandler.h b/src/lib/implementations/VLCommandHandler.h new file mode 100644 index 0000000..57213e9 --- /dev/null +++ b/src/lib/implementations/VLCommandHandler.h @@ -0,0 +1,48 @@ +#pragma once +/* + * This file is part of the libCEC(R) library. + * + * libCEC(R) is Copyright (C) 2011 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 "CECCommandHandler.h" + +namespace CEC +{ + class CVLCommandHandler : public CCECCommandHandler + { + public: + CVLCommandHandler(CCECBusDevice *busDevice); + virtual ~CVLCommandHandler(void) {}; + virtual cec_vendor_id GetVendorId(void) { return CEC_VENDOR_PANASONIC; }; + + protected: + virtual bool HandleSetStreamPath(const cec_command &command); + }; +};