From 3722f864bd2a489dd63d99084ada66c1b908b250 Mon Sep 17 00:00:00 2001 From: kszaq Date: Wed, 30 Nov 2016 23:14:06 +0100 Subject: [PATCH] libcec: fix building after update to 4.0.0-3 --- .../aarch64/libcec-00-aocec-support.patch | 803 ------------------ .../libcec/libcec-00-amlogic-support.patch | 167 ++-- .../libcec/libcec-00-amlogic-support.patch | 167 ++-- 3 files changed, 178 insertions(+), 959 deletions(-) delete mode 100644 packages/devel/libcec/patches/aarch64/libcec-00-aocec-support.patch diff --git a/packages/devel/libcec/patches/aarch64/libcec-00-aocec-support.patch b/packages/devel/libcec/patches/aarch64/libcec-00-aocec-support.patch deleted file mode 100644 index b3cd656c99..0000000000 --- a/packages/devel/libcec/patches/aarch64/libcec-00-aocec-support.patch +++ /dev/null @@ -1,803 +0,0 @@ -diff --git a/README.md b/README.md -index dfaf4d6..87491ef 100644 ---- a/README.md -+++ b/README.md -@@ -93,6 +93,12 @@ To compile in support for Exynos devices, you have to pass the argument -DHAVE_E - cmake -DHAVE_EXYNOS_API=1 .. - ``` - -+### AOCEC -+To compile in support for AOCEC devices, you have to pass the argument -DHAVE_AOCEC_API=1 to cmake: -+``` -+cmake -DHAVE_AOCEC_API=1 .. -+``` -+ - ### TDA995x - To compile in support for TDA995x devices, you have to pass the argument -DHAVE_TDA995X_API=1 to cmake: - ``` -diff --git a/include/cectypes.h b/include/cectypes.h -index 0fdd48e..881a805 100644 ---- a/include/cectypes.h -+++ b/include/cectypes.h -@@ -309,6 +309,16 @@ namespace CEC { - #define CEC_EXYNOS_VIRTUAL_COM "Exynos" - - /*! -+ * the path to use for the AOCEC HDMI CEC device -+ */ -+#define CEC_AOCEC_PATH "/dev/aocec" -+ -+/*! -+ * the name of the virtual COM port to use for the AOCEC' CEC wire -+ */ -+#define CEC_AOCEC_VIRTUAL_COM "AOCEC" -+ -+/*! - * Mimimum client version - */ - #define CEC_MIN_LIB_VERSION 3 -@@ -877,7 +887,8 @@ typedef enum cec_adapter_type - ADAPTERTYPE_P8_DAUGHTERBOARD = 0x2, - ADAPTERTYPE_RPI = 0x100, - ADAPTERTYPE_TDA995x = 0x200, -- ADAPTERTYPE_EXYNOS = 0x300 -+ ADAPTERTYPE_EXYNOS = 0x300, -+ ADAPTERTYPE_AOCEC = 0x500 - } cec_adapter_type; - - /** force exporting through swig */ -diff --git a/src/libcec/CMakeLists.txt b/src/libcec/CMakeLists.txt -index a494533..d3eefa3 100644 ---- a/src/libcec/CMakeLists.txt -+++ b/src/libcec/CMakeLists.txt -@@ -87,6 +87,9 @@ set(CEC_HEADERS devices/CECRecordingDevice.h - adapter/Exynos/ExynosCEC.h - adapter/Exynos/ExynosCECAdapterDetection.h - adapter/Exynos/ExynosCECAdapterCommunication.h -+ adapter/AOCEC/AOCEC.h -+ adapter/AOCEC/AOCECAdapterDetection.h -+ adapter/AOCEC/AOCECAdapterCommunication.h - adapter/Pulse-Eight/USBCECAdapterMessageQueue.h - adapter/Pulse-Eight/USBCECAdapterCommunication.h - adapter/Pulse-Eight/USBCECAdapterCommands.h -diff --git a/src/libcec/adapter/AOCEC/AOCEC.h b/src/libcec/adapter/AOCEC/AOCEC.h -new file mode 100644 -index 0000000..560fbdd ---- /dev/null -+++ b/src/libcec/adapter/AOCEC/AOCEC.h -@@ -0,0 +1,55 @@ -+#pragma once -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC AOCEC Code Copyright (C) 2016 Gerald Dachs -+ * based heavily on: -+ * libCEC Exynos Code Copyright (C) 2014 Valentin Manea -+ * libCEC(R) is Copyright (C) 2011-2015 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/ -+ */ -+ -+ -+#define CEC_DEFAULT_PADDR 0x1000 -+ -+#define CEC_IOC_MAGIC 'C' -+#define CEC_IOC_GET_PHYSICAL_ADDR _IOR(CEC_IOC_MAGIC, 0x00, uint16_t) -+#define CEC_IOC_GET_VERSION _IOR(CEC_IOC_MAGIC, 0x01, int) -+#define CEC_IOC_GET_VENDOR_ID _IOR(CEC_IOC_MAGIC, 0x02, uint32_t) -+#define CEC_IOC_GET_PORT_INFO _IOR(CEC_IOC_MAGIC, 0x03, int) -+#define CEC_IOC_GET_PORT_NUM _IOR(CEC_IOC_MAGIC, 0x04, int) -+#define CEC_IOC_GET_SEND_FAIL_REASON _IOR(CEC_IOC_MAGIC, 0x05, uint32_t) -+#define CEC_IOC_SET_OPTION_WAKEUP _IOW(CEC_IOC_MAGIC, 0x06, uint32_t) -+#define CEC_IOC_SET_OPTION_ENALBE_CEC _IOW(CEC_IOC_MAGIC, 0x07, uint32_t) -+#define CEC_IOC_SET_OPTION_SYS_CTRL _IOW(CEC_IOC_MAGIC, 0x08, uint32_t) -+#define CEC_IOC_SET_OPTION_SET_LANG _IOW(CEC_IOC_MAGIC, 0x09, uint32_t) -+#define CEC_IOC_GET_CONNECT_STATUS _IOR(CEC_IOC_MAGIC, 0x0A, uint32_t) -+#define CEC_IOC_ADD_LOGICAL_ADDR _IOW(CEC_IOC_MAGIC, 0x0B, uint32_t) -+#define CEC_IOC_CLR_LOGICAL_ADDR _IOW(CEC_IOC_MAGIC, 0x0C, uint32_t) -+ -+#define CEC_MAX_FRAME_SIZE 16 -diff --git a/src/libcec/adapter/AOCEC/AOCECAdapterCommunication.cpp b/src/libcec/adapter/AOCEC/AOCECAdapterCommunication.cpp -new file mode 100644 -index 0000000..8edf981 ---- /dev/null -+++ b/src/libcec/adapter/AOCEC/AOCECAdapterCommunication.cpp -@@ -0,0 +1,343 @@ -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC AOCEC Code Copyright (C) 2016 Gerald Dachs -+ * based heavily on: -+ * libCEC Exynos Code Copyright (C) 2014 Valentin Manea -+ * libCEC(R) is Copyright (C) 2011-2015 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 -+ -+ -+#if defined(HAVE_AOCEC_API) -+#include "AOCEC.h" -+#include "AOCECAdapterCommunication.h" -+ -+#include "CECTypeUtils.h" -+#include "LibCEC.h" -+#include -+ -+using namespace CEC; -+using namespace P8PLATFORM; -+ -+#define LIB_CEC m_callback->GetLib() -+ -+ -+CAOCECAdapterCommunication::CAOCECAdapterCommunication(IAdapterCommunicationCallback *callback) : -+ IAdapterCommunication(callback), -+ m_bLogicalAddressChanged(false) -+{ -+ CLockObject lock(m_mutex); -+ -+ m_logicalAddresses.Clear(); -+ m_fd = INVALID_SOCKET_VALUE; -+} -+ -+ -+CAOCECAdapterCommunication::~CAOCECAdapterCommunication(void) -+{ -+ Close(); -+} -+ -+ -+bool CAOCECAdapterCommunication::IsOpen(void) -+{ -+ CLockObject lock(m_mutex); -+ return IsInitialised() && m_fd != INVALID_SOCKET_VALUE; -+} -+ -+ -+bool CAOCECAdapterCommunication::Open(uint32_t UNUSED(iTimeoutMs), bool UNUSED(bSkipChecks), bool bStartListening) -+{ -+ if (IsOpen()) -+ Close(); -+ -+ CLockObject lock(m_mutex); -+ -+ if ((m_fd = open(CEC_AOCEC_PATH, O_RDWR)) > 0) -+ { -+ uint32_t enable = true; -+ -+ if (ioctl(m_fd, CEC_IOC_SET_OPTION_SYS_CTRL, enable)) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: IOCTL IOCTL CEC_IOC_SET_OPTION_SYS_CTRL failed !", __func__); -+ return false; -+ } -+ -+ if (!bStartListening || CreateThread()) { -+ return true; -+ } -+ close(m_fd); -+ m_fd = INVALID_SOCKET_VALUE; -+ } -+ return false; -+} -+ -+ -+void CAOCECAdapterCommunication::Close(void) -+{ -+ StopThread(0); -+ -+ CLockObject lock(m_mutex); -+ -+ uint32_t enable = false; -+ -+ if (ioctl(m_fd, CEC_IOC_SET_OPTION_SYS_CTRL, enable)) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: IOCTL CEC_IOC_SET_OPTION_SYS_CTRL failed !", __func__); -+ } -+ -+ close(m_fd); -+ m_fd = INVALID_SOCKET_VALUE; -+} -+ -+ -+std::string CAOCECAdapterCommunication::GetError(void) const -+{ -+ std::string strError(m_strError); -+ return strError; -+} -+ -+int CAOCECAdapterCommunication::getFileDescriptor(void) -+{ -+ CLockObject lock(m_mutex); -+ -+ return m_fd; -+} -+ -+ -+ -+cec_adapter_message_state CAOCECAdapterCommunication::Write( -+ const cec_command &data, bool &UNUSED(bRetry), uint8_t UNUSED(iLineTimeout), bool UNUSED(bIsReply)) -+{ -+ uint8_t buffer[CEC_MAX_FRAME_SIZE]; -+ int32_t size = 1; -+ cec_adapter_message_state rc = ADAPTER_MESSAGE_STATE_ERROR; -+ -+ if (!IsOpen()) -+ return rc; -+ -+ CLockObject lock(m_mutex); -+ -+ if ((size_t)data.parameters.size + data.opcode_set > sizeof(buffer)) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: data size too large !", __func__); -+ return ADAPTER_MESSAGE_STATE_ERROR; -+ } -+ -+ buffer[0] = (data.initiator << 4) | (data.destination & 0x0f); -+ -+ if (data.opcode_set) -+ { -+ buffer[1] = data.opcode; -+ size++; -+ -+ memcpy(&buffer[size], data.parameters.data, data.parameters.size); -+ size += data.parameters.size; -+ } -+ -+ if (write(m_fd, (void *)buffer, size) == size) -+ { -+ rc = ADAPTER_MESSAGE_STATE_SENT_ACKED; -+ } -+ else -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: write failed !", __func__); -+ } -+ -+ return rc; -+} -+ -+ -+uint16_t CAOCECAdapterCommunication::GetFirmwareVersion(void) -+{ -+ int version = 0; -+ -+ if (!IsOpen()) -+ return version; -+ -+ CLockObject lock(m_mutex); -+ -+ if (ioctl(m_fd, CEC_IOC_GET_VERSION, &version) < 0) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: IOCTL CEC_IOC_GET_VERSION failed !", __func__); -+ } -+ return (uint16_t)version; -+} -+ -+ -+cec_vendor_id CAOCECAdapterCommunication::GetVendorId(void) -+{ -+ int vendor_id = CEC_VENDOR_UNKNOWN; -+ -+ if (!IsOpen()) -+ return cec_vendor_id(vendor_id); -+ -+ CLockObject lock(m_mutex); -+ -+ if (ioctl(m_fd, CEC_IOC_GET_VENDOR_ID, &vendor_id) < 0) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: IOCTL CEC_IOC_GET_VENDOR_ID failed !", __func__); -+ } -+ return cec_vendor_id(vendor_id); -+} -+ -+ -+uint16_t CAOCECAdapterCommunication::GetPhysicalAddress(void) -+{ -+ int phys_addr = CEC_DEFAULT_PADDR; -+ -+ if (!IsOpen()) -+ return (uint16_t)phys_addr; -+ -+ CLockObject lock(m_mutex); -+ -+ if (ioctl(m_fd, CEC_IOC_GET_PHYSICAL_ADDR, &phys_addr) < 0) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: IOCTL CEC_IOC_GET_PHYSICAL_ADDR failed !", __func__); -+ phys_addr = CEC_DEFAULT_PADDR; -+ } -+ return (uint16_t)phys_addr; -+} -+ -+ -+cec_logical_addresses CAOCECAdapterCommunication::GetLogicalAddresses(void) -+{ -+ return m_logicalAddresses; -+} -+ -+ -+bool CAOCECAdapterCommunication::SetLogicalAddresses(const cec_logical_addresses &addresses) -+{ -+ unsigned int log_addr = addresses.primary; -+ if (!IsOpen()) -+ return false; -+ -+ CLockObject lock(m_mutex); -+ -+ if (ioctl(m_fd, CEC_IOC_ADD_LOGICAL_ADDR, log_addr)) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: IOCTL CEC_IOC_ADD_LOGICAL_ADDR failed !", __func__); -+ return false; -+ } -+ m_logicalAddresses = addresses; -+ m_bLogicalAddressChanged = true; -+ -+ return true; -+} -+ -+ -+void CAOCECAdapterCommunication::HandleLogicalAddressLost(cec_logical_address UNUSED(oldAddress)) -+{ -+ unsigned int log_addr = CECDEVICE_BROADCAST; -+ -+ if (!IsOpen()) -+ return; -+ -+ CLockObject lock(m_mutex); -+ -+ if (ioctl(m_fd, CEC_IOC_ADD_LOGICAL_ADDR, log_addr)) -+ { -+ LIB_CEC->AddLog(CEC_LOG_ERROR, "%s: IOCTL CEC_IOC_ADD_LOGICAL_ADDR failed !", __func__); -+ } -+} -+ -+ -+void *CAOCECAdapterCommunication::Process(void) -+{ -+ uint8_t buffer[CEC_MAX_FRAME_SIZE]; -+ uint32_t size; -+ fd_set rfds; -+ cec_logical_address initiator, destination; -+ struct timeval tv; -+ -+ if (!IsOpen()) -+ return 0; -+ -+ while (!IsStopped()) -+ { -+ int fd = getFileDescriptor(); -+ -+ if (fd == INVALID_SOCKET_VALUE) -+ { -+ break; -+ } -+ -+ FD_ZERO(&rfds); -+ FD_SET(fd, &rfds); -+ -+ tv.tv_sec = 1; -+ tv.tv_usec = 0; -+ -+ if (select(fd + 1, &rfds, NULL, NULL, &tv) >= 0 ) -+ { -+ -+ if (!FD_ISSET(fd, &rfds)) -+ continue; -+ -+ size = read(fd, buffer, CEC_MAX_FRAME_SIZE); -+ -+ if (size > 0) -+ { -+#if 0 // currently unused -+ if (buffer[0] == 0xff) // driver wants us to reread the physical address -+ { -+ if (!IsStopped()) -+ { -+ uint16_t iNewAddress = GetPhysicalAddress(); -+ m_callback->HandlePhysicalAddressChanged(iNewAddress); -+ } -+ continue; -+ } -+#endif -+ initiator = cec_logical_address(buffer[0] >> 4); -+ destination = cec_logical_address(buffer[0] & 0x0f); -+ -+ cec_command cmd; -+ -+ cec_command::Format( -+ cmd, initiator, destination, -+ ( size > 1 ) ? cec_opcode(buffer[1]) : CEC_OPCODE_NONE); -+ -+ for( uint8_t i = 2; i < size; i++ ) -+ cmd.parameters.PushBack(buffer[i]); -+ -+ if (!IsStopped()) -+ m_callback->OnCommandReceived(cmd); -+ } -+ } -+ } -+ -+ return 0; -+} -+ -+#endif // HAVE_AOCEC_API -diff --git a/src/libcec/adapter/AOCEC/AOCECAdapterCommunication.h b/src/libcec/adapter/AOCEC/AOCECAdapterCommunication.h -new file mode 100644 -index 0000000..f6a8a4a ---- /dev/null -+++ b/src/libcec/adapter/AOCEC/AOCECAdapterCommunication.h -@@ -0,0 +1,105 @@ -+#pragma once -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC AOCEC Code Copyright (C) 2016 Gerald Dachs -+ * based heavily on: -+ * libCEC Exynos Code Copyright (C) 2014 Valentin Manea -+ * libCEC(R) is Copyright (C) 2011-2015 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" -+ -+#if defined(HAVE_AOCEC_API) -+ -+#include -+#include -+#include "../AdapterCommunication.h" -+#include -+ -+namespace CEC -+{ -+ class CAOCECAdapterCommunication : public IAdapterCommunication, public P8PLATFORM::CThread -+ { -+ public: -+ /*! -+ * @brief Create a new Exynos HDMI CEC communication handler. -+ * @param callback The callback to use for incoming CEC commands. -+ */ -+ CAOCECAdapterCommunication(IAdapterCommunicationCallback *callback); -+ virtual ~CAOCECAdapterCommunication(void); -+ -+ /** @name IAdapterCommunication implementation */ -+ ///{ -+ bool Open(uint32_t iTimeoutMs = CEC_DEFAULT_CONNECT_TIMEOUT, bool bSkipChecks = false, bool bStartListening = true); -+ void Close(void); -+ bool IsOpen(void); -+ std::string GetError(void) const; -+ cec_adapter_message_state Write(const cec_command &data, bool &bRetry, uint8_t iLineTimeout, bool bIsReply); -+ -+ bool SetLineTimeout(uint8_t UNUSED(iTimeout)) { return true; } -+ bool StartBootloader(void) { return false; } -+ bool SetLogicalAddresses(const cec_logical_addresses &addresses); -+ cec_logical_addresses GetLogicalAddresses(void); -+ bool PingAdapter(void) { return IsInitialised(); } -+ uint16_t GetFirmwareVersion(void); -+ uint32_t GetFirmwareBuildDate(void) { return 0; } -+ bool IsRunningLatestFirmware(void) { return true; } -+ bool PersistConfiguration(const libcec_configuration & UNUSED(configuration)) { return false; } -+ bool GetConfiguration(libcec_configuration & UNUSED(configuration)) { return false; } -+ std::string GetPortName(void) { return std::string("AOCEC"); } -+ uint16_t GetPhysicalAddress(void); -+ bool SetControlledMode(bool UNUSED(controlled)) { return true; } -+ cec_vendor_id GetVendorId(void); -+ bool SupportsSourceLogicalAddress(const cec_logical_address address) { return address > CECDEVICE_TV && address <= CECDEVICE_BROADCAST; } -+ cec_adapter_type GetAdapterType(void) { return ADAPTERTYPE_AOCEC; } -+ uint16_t GetAdapterVendorId(void) const { return 1; } -+ uint16_t GetAdapterProductId(void) const { return 1; } -+ void HandleLogicalAddressLost(cec_logical_address oldAddress); -+ void SetActiveSource(bool UNUSED(bSetTo), bool UNUSED(bClientUnregistered)) {} -+ ///} -+ -+ /** @name P8PLATFORM::CThread implementation */ -+ ///{ -+ void *Process(void); -+ ///} -+ -+ private: -+ bool IsInitialised(void) const { return 1; }; -+ int getFileDescriptor(void); -+ -+ std::string m_strError; /**< current error message */ -+ -+ bool m_bLogicalAddressChanged; -+ cec_logical_addresses m_logicalAddresses; -+ P8PLATFORM::CMutex m_mutex; -+ int m_fd; -+ }; -+}; -+#endif -diff --git a/src/libcec/adapter/AOCEC/AOCECAdapterDetection.cpp b/src/libcec/adapter/AOCEC/AOCECAdapterDetection.cpp -new file mode 100644 -index 0000000..55f3ee0 ---- /dev/null -+++ b/src/libcec/adapter/AOCEC/AOCECAdapterDetection.cpp -@@ -0,0 +1,50 @@ -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC AOCEC Code Copyright (C) 2016 Gerald Dachs -+ * based heavily on: -+ * libCEC Exynos Code Copyright (C) 2014 Valentin Manea -+ * libCEC(R) is Copyright (C) 2011-2015 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 -+ -+#if defined(HAVE_AOCEC_API) -+#include "AOCECAdapterDetection.h" -+#include "AOCEC.h" -+ -+using namespace CEC; -+ -+bool CAOCECAdapterDetection::FindAdapter(void) -+{ -+ return access(CEC_AOCEC_PATH, 0) == 0; -+} -+ -+#endif -diff --git a/src/libcec/adapter/AOCEC/AOCECAdapterDetection.h b/src/libcec/adapter/AOCEC/AOCECAdapterDetection.h -new file mode 100644 -index 0000000..cacaa19 ---- /dev/null -+++ b/src/libcec/adapter/AOCEC/AOCECAdapterDetection.h -@@ -0,0 +1,46 @@ -+#pragma once -+/* -+ * This file is part of the libCEC(R) library. -+ * -+ * libCEC AOCEC Code Copyright (C) 2016 Gerald Dachs -+ * based heavily on: -+ * libCEC Exynos Code Copyright (C) 2014 Valentin Manea -+ * libCEC(R) is Copyright (C) 2011-2015 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" -+ -+namespace CEC -+{ -+ class CAOCECAdapterDetection -+ { -+ public: -+ static bool FindAdapter(void); -+ }; -+} -diff --git a/src/libcec/adapter/AdapterFactory.cpp b/src/libcec/adapter/AdapterFactory.cpp -index da05725..1e946e6 100644 ---- a/src/libcec/adapter/AdapterFactory.cpp -+++ b/src/libcec/adapter/AdapterFactory.cpp -@@ -58,6 +58,11 @@ - #include "Exynos/ExynosCECAdapterCommunication.h" - #endif - -+#if defined(HAVE_AOCEC_API) -+#include "AOCEC/AOCECAdapterDetection.h" -+#include "AOCEC/AOCECAdapterCommunication.h" -+#endif -+ - using namespace CEC; - - int8_t CAdapterFactory::FindAdapters(cec_adapter *deviceList, uint8_t iBufSize, const char *strDevicePath /* = NULL */) -@@ -126,8 +131,20 @@ int8_t CAdapterFactory::DetectAdapters(cec_adapter_descriptor *deviceList, uint8 - } - #endif - -+#if defined(HAVE_AOCEC_API) -+ if (iAdaptersFound < iBufSize && CAOCECAdapterDetection::FindAdapter()) -+ { -+ snprintf(deviceList[iAdaptersFound].strComPath, sizeof(deviceList[iAdaptersFound].strComPath), CEC_AOCEC_PATH); -+ snprintf(deviceList[iAdaptersFound].strComName, sizeof(deviceList[iAdaptersFound].strComName), CEC_AOCEC_VIRTUAL_COM); -+ deviceList[iAdaptersFound].iVendorId = 0; -+ deviceList[iAdaptersFound].iProductId = 0; -+ deviceList[iAdaptersFound].adapterType = ADAPTERTYPE_AOCEC; -+ iAdaptersFound++; -+ } -+#endif -+ - --#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) -+#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_AOCEC_API) - #error "libCEC doesn't have support for any type of adapter. please check your build system or configuration" - #endif - -@@ -146,6 +163,11 @@ IAdapterCommunication *CAdapterFactory::GetInstance(const char *strPort, uint16_ - return new CExynosCECAdapterCommunication(m_lib->m_cec); - #endif - -+#if defined(HAVE_AOCEC_API) -+ if (!strcmp(strPort, CEC_AOCEC_VIRTUAL_COM)) -+ return new CAOCECAdapterCommunication(m_lib->m_cec); -+#endif -+ - #if defined(HAVE_RPI_API) - if (!strcmp(strPort, CEC_RPI_VIRTUAL_COM)) - return new CRPiCECAdapterCommunication(m_lib->m_cec); -diff --git a/src/libcec/cmake/CheckPlatformSupport.cmake b/src/libcec/cmake/CheckPlatformSupport.cmake -index b8a16c8..93a97e6 100644 ---- a/src/libcec/cmake/CheckPlatformSupport.cmake -+++ b/src/libcec/cmake/CheckPlatformSupport.cmake -@@ -9,6 +9,7 @@ - # HAVE_RPI_API 1 if Raspberry Pi is supported - # HAVE_TDA995X_API 1 if TDA995X is supported - # HAVE_EXYNOS_API 1 if Exynos is supported -+# HAVE_AOCEC_API 1 if AOCEC is supported - # HAVE_P8_USB 1 if Pulse-Eight devices are supported - # HAVE_P8_USB_DETECT 1 if Pulse-Eight devices can be auto-detected - # HAVE_DRM_EDID_PARSER 1 if DRM EDID parsing is supported -@@ -132,6 +133,18 @@ else() - else() - set(HAVE_EXYNOS_API 0) - endif() -+ -+ # AOCEC -+ if (${HAVE_AOCEC_API}) -+ set(LIB_INFO "${LIB_INFO}, AOCEC") -+ set(HAVE_AOCEC_API 1) -+ set(CEC_SOURCES_ADAPTER_AOCEC adapter/AOCEC/AOCECAdapterDetection.cpp -+ adapter/AOCEC/AOCECAdapterCommunication.cpp) -+ source_group("Source Files\\adapter\\AOCEC" FILES ${CEC_SOURCES_ADAPTER_AOCEC}) -+ list(APPEND CEC_SOURCES ${CEC_SOURCES_ADAPTER_AOCEC}) -+ else() -+ set(HAVE_AOCEC_API 0) -+ endif() - endif() - - # rt -diff --git a/src/libcec/cmake/DisplayPlatformSupport.cmake b/src/libcec/cmake/DisplayPlatformSupport.cmake -index 9dcaacf..7ec10f5 100644 ---- a/src/libcec/cmake/DisplayPlatformSupport.cmake -+++ b/src/libcec/cmake/DisplayPlatformSupport.cmake -@@ -44,6 +44,12 @@ else() - message(STATUS "DRM support: no") - endif() - -+if (HAVE_AOCEC_API) -+ message(STATUS "AOCEC support: yes") -+else() -+ message(STATUS "AOCEC support: no") -+endif() -+ - if (HAVE_PYTHON) - message(STATUS "Python support: version ${PYTHONLIBS_VERSION_STRING} (${PYTHON_VERSION})") - else() -diff --git a/src/libcec/env.h.in b/src/libcec/env.h.in -index 0496aa0..fe6c83d 100644 ---- a/src/libcec/env.h.in -+++ b/src/libcec/env.h.in -@@ -72,6 +72,9 @@ - /* Define to 1 for Exynos support */ - #cmakedefine HAVE_EXYNOS_API @HAVE_EXYNOS_API@ - -+/* Define to 1 for AOCEC support */ -+#cmakedefine HAVE_AOCEC_API @HAVE_AOCEC_API@ -+ - /* Define to 1 for nVidia EDID parsing support (on selected models) */ - #cmakedefine HAVE_NVIDIA_EDID_PARSER @HAVE_NVIDIA_EDID_PARSER@ - diff --git a/projects/WeTek_Core/patches/libcec/libcec-00-amlogic-support.patch b/projects/WeTek_Core/patches/libcec/libcec-00-amlogic-support.patch index 02bedc7b9a..98ee13a51d 100644 --- a/projects/WeTek_Core/patches/libcec/libcec-00-amlogic-support.patch +++ b/projects/WeTek_Core/patches/libcec/libcec-00-amlogic-support.patch @@ -1,67 +1,76 @@ -diff --git a/README.md b/README.md -index dfaf4d6..0dffdcf 100644 ---- a/README.md -+++ b/README.md -@@ -93,6 +93,12 @@ To compile in support for Exynos devices, you have to pass the argument -DHAVE_E - cmake -DHAVE_EXYNOS_API=1 .. - ``` - -+### Amlogic -+To compile in support for Amlogic devices, you have to pass the argument -DHAVE_AMLOGIC_API=1 to cmake: -+``` -+cmake -DHAVE_AMLOGIC_API=1 .. -+``` -+ - ### TDA995x - To compile in support for TDA995x devices, you have to pass the argument -DHAVE_TDA995X_API=1 to cmake: - ``` +From b11257f5821e2f0bde0833d54697aa8ef7085065 Mon Sep 17 00:00:00 2001 +From: Gerald Dachs +Date: Thu, 3 Mar 2016 09:38:44 +0100 +Subject: [PATCH] new adapter for amlogic devices + +--- + include/cectypes.h | 15 +- + src/libcec/CMakeLists.txt | 3 + + src/libcec/adapter/AdapterFactory.cpp | 24 +- + src/libcec/adapter/Amlogic/AmlogicCEC.h | 41 +++ + .../Amlogic/AmlogicCECAdapterCommunication.cpp | 305 +++++++++++++++++++++ + .../Amlogic/AmlogicCECAdapterCommunication.h | 105 +++++++ + .../adapter/Amlogic/AmlogicCECAdapterDetection.cpp | 50 ++++ + .../adapter/Amlogic/AmlogicCECAdapterDetection.h | 46 ++++ + src/libcec/cmake/CheckPlatformSupport.cmake | 13 + + src/libcec/cmake/DisplayPlatformSupport.cmake | 6 + + src/libcec/env.h.in | 3 + + 11 files changed, 609 insertions(+), 2 deletions(-) + create mode 100644 src/libcec/adapter/Amlogic/AmlogicCEC.h + create mode 100644 src/libcec/adapter/Amlogic/AmlogicCECAdapterCommunication.cpp + create mode 100644 src/libcec/adapter/Amlogic/AmlogicCECAdapterCommunication.h + create mode 100644 src/libcec/adapter/Amlogic/AmlogicCECAdapterDetection.cpp + create mode 100644 src/libcec/adapter/Amlogic/AmlogicCECAdapterDetection.h + diff --git a/include/cectypes.h b/include/cectypes.h -index 0fdd48e..b7e1932 100644 +index 9c91842..1bc7b52 100644 --- a/include/cectypes.h +++ b/include/cectypes.h -@@ -309,6 +309,16 @@ namespace CEC { +@@ -276,6 +276,18 @@ namespace CEC { + */ #define CEC_EXYNOS_VIRTUAL_COM "Exynos" - /*! ++/*! + * the path to use for the Amlogic HDMI CEC device + */ -+#define CEC_AMLOGIC_PATH "/dev/AmlogicCEC" ++#define CEC_AMLOGIC_PATH "/dev/AmlogicCEC" + +/*! + * the name of the virtual COM port to use for the AMLOGIC' CEC wire + */ -+#define CEC_AMLOGIC_VIRTUAL_COM "Amlogic" ++#define CEC_AMLOGIC_VIRTUAL_COM "Amlogic" + +/*! - * Mimimum client version ++ + /** + * Maximum size of a data packet */ - #define CEC_MIN_LIB_VERSION 3 -@@ -877,7 +887,8 @@ typedef enum cec_adapter_type - ADAPTERTYPE_P8_DAUGHTERBOARD = 0x2, +@@ -861,7 +873,8 @@ typedef enum cec_adapter_type ADAPTERTYPE_RPI = 0x100, ADAPTERTYPE_TDA995x = 0x200, -- ADAPTERTYPE_EXYNOS = 0x300 -+ ADAPTERTYPE_EXYNOS = 0x300, -+ ADAPTERTYPE_AMLOGIC = 0x500 + ADAPTERTYPE_EXYNOS = 0x300, +- ADAPTERTYPE_AOCEC = 0x500 ++ ADAPTERTYPE_AOCEC = 0x500, ++ ADAPTERTYPE_AMLOGIC = 0x600 } cec_adapter_type; /** force exporting through swig */ diff --git a/src/libcec/CMakeLists.txt b/src/libcec/CMakeLists.txt -index a494533..e94b094 100644 +index d3eefa3..125512b 100644 --- a/src/libcec/CMakeLists.txt +++ b/src/libcec/CMakeLists.txt @@ -87,6 +87,9 @@ set(CEC_HEADERS devices/CECRecordingDevice.h adapter/Exynos/ExynosCEC.h adapter/Exynos/ExynosCECAdapterDetection.h adapter/Exynos/ExynosCECAdapterCommunication.h -+ adapter/Amlogic/AmlogicCEC.h ++ adapter/Amlogic/AmlogicCEC.h + adapter/Amlogic/AmlogicCECAdapterDetection.h + adapter/Amlogic/AmlogicCECAdapterCommunication.h - adapter/Pulse-Eight/USBCECAdapterMessageQueue.h - adapter/Pulse-Eight/USBCECAdapterCommunication.h - adapter/Pulse-Eight/USBCECAdapterCommands.h + adapter/AOCEC/AOCEC.h + adapter/AOCEC/AOCECAdapterDetection.h + adapter/AOCEC/AOCECAdapterCommunication.h diff --git a/src/libcec/adapter/AdapterFactory.cpp b/src/libcec/adapter/AdapterFactory.cpp -index da05725..824c5ff 100644 +index 1e946e6..7c26214 100644 --- a/src/libcec/adapter/AdapterFactory.cpp +++ b/src/libcec/adapter/AdapterFactory.cpp @@ -58,6 +58,11 @@ @@ -73,10 +82,10 @@ index da05725..824c5ff 100644 +#include "Amlogic/AmlogicCECAdapterCommunication.h" +#endif + - using namespace CEC; - - int8_t CAdapterFactory::FindAdapters(cec_adapter *deviceList, uint8_t iBufSize, const char *strDevicePath /* = NULL */) -@@ -126,8 +131,20 @@ int8_t CAdapterFactory::DetectAdapters(cec_adapter_descriptor *deviceList, uint8 + #if defined(HAVE_AOCEC_API) + #include "AOCEC/AOCECAdapterDetection.h" + #include "AOCEC/AOCECAdapterCommunication.h" +@@ -143,6 +148,18 @@ int8_t CAdapterFactory::DetectAdapters(cec_adapter_descriptor *deviceList, uint8 } #endif @@ -93,23 +102,22 @@ index da05725..824c5ff 100644 +#endif + --#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) -+#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_AMLOGIC_API) + #if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_AOCEC_API) #error "libCEC doesn't have support for any type of adapter. please check your build system or configuration" +@@ -177,7 +194,12 @@ IAdapterCommunication *CAdapterFactory::GetInstance(const char *strPort, uint16_ + return new CUSBCECAdapterCommunication(m_lib->m_cec, strPort, iBaudRate); #endif -@@ -146,6 +163,11 @@ IAdapterCommunication *CAdapterFactory::GetInstance(const char *strPort, uint16_ - return new CExynosCECAdapterCommunication(m_lib->m_cec); - #endif - +-#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_EXYNOS_API) +#if defined(HAVE_AMLOGIC_API) + if (!strcmp(strPort, CEC_AMLOGIC_VIRTUAL_COM)) + return new CAmlogicCECAdapterCommunication(m_lib->m_cec); +#endif + - #if defined(HAVE_RPI_API) - if (!strcmp(strPort, CEC_RPI_VIRTUAL_COM)) - return new CRPiCECAdapterCommunication(m_lib->m_cec); ++#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_EXYNOS_API) && !defined(HAVE_AMLOGIC_API) + return NULL; + #endif + } diff --git a/src/libcec/adapter/Amlogic/AmlogicCEC.h b/src/libcec/adapter/Amlogic/AmlogicCEC.h new file mode 100644 index 0000000..7b86982 @@ -162,7 +170,7 @@ new file mode 100644 index 0000000..5aeddda --- /dev/null +++ b/src/libcec/adapter/Amlogic/AmlogicCECAdapterCommunication.cpp -@@ -0,0 +1,305 @@ +@@ -0,0 +1,306 @@ +/* + * This file is part of the libCEC(R) library. + * @@ -417,7 +425,8 @@ index 0000000..5aeddda + + if (fd == INVALID_SOCKET_VALUE) + { -+ break; ++ Sleep(250); ++ continue; + } + + FD_ZERO(&rfds); @@ -688,22 +697,21 @@ index 0000000..8a7418d + }; +} diff --git a/src/libcec/cmake/CheckPlatformSupport.cmake b/src/libcec/cmake/CheckPlatformSupport.cmake -index b8a16c8..311cb52 100644 +index 532f213..382c39c 100644 --- a/src/libcec/cmake/CheckPlatformSupport.cmake +++ b/src/libcec/cmake/CheckPlatformSupport.cmake -@@ -9,6 +9,7 @@ - # HAVE_RPI_API 1 if Raspberry Pi is supported - # HAVE_TDA995X_API 1 if TDA995X is supported - # HAVE_EXYNOS_API 1 if Exynos is supported -+# HAVE_AMLOGIC_API 1 if Amlogic is supported - # HAVE_P8_USB 1 if Pulse-Eight devices are supported - # HAVE_P8_USB_DETECT 1 if Pulse-Eight devices can be auto-detected - # HAVE_DRM_EDID_PARSER 1 if DRM EDID parsing is supported -@@ -132,6 +133,18 @@ else() - else() - set(HAVE_EXYNOS_API 0) +@@ -11,6 +11,7 @@ + # HAVE_EXYNOS_API ON if Exynos is supported + # HAVE_AOCEC_API ON if AOCEC is supported + # HAVE_P8_USB ON if Pulse-Eight devices are supported ++# HAVE_AMLOGIC_API 1 if AMLOGIC is supported + # HAVE_P8_USB_DETECT ON if Pulse-Eight devices can be auto-detected + # HAVE_DRM_EDID_PARSER ON if DRM EDID parsing is supported + # +@@ -137,6 +138,18 @@ else() + list(APPEND CEC_SOURCES ${CEC_SOURCES_ADAPTER_EXYNOS}) endif() -+ + + # Amlogic + if (${HAVE_AMLOGIC_API}) + set(LIB_INFO "${LIB_INFO}, Amlogic") @@ -715,15 +723,16 @@ index b8a16c8..311cb52 100644 + else() + set(HAVE_AMLOGIC_API 0) + endif() - endif() - - # rt ++ + # AOCEC + if (${HAVE_AOCEC_API}) + set(LIB_INFO "${LIB_INFO}, AOCEC") diff --git a/src/libcec/cmake/DisplayPlatformSupport.cmake b/src/libcec/cmake/DisplayPlatformSupport.cmake -index 9dcaacf..464252e 100644 +index 7ec10f5..7a38d32 100644 --- a/src/libcec/cmake/DisplayPlatformSupport.cmake +++ b/src/libcec/cmake/DisplayPlatformSupport.cmake -@@ -44,6 +44,12 @@ else() - message(STATUS "DRM support: no") +@@ -56,5 +56,11 @@ else() + message(STATUS "Python support: no") endif() +if (HAVE_AMLOGIC_API) @@ -732,20 +741,22 @@ index 9dcaacf..464252e 100644 + message(STATUS "Amlogic support: no") +endif() + - if (HAVE_PYTHON) - message(STATUS "Python support: version ${PYTHONLIBS_VERSION_STRING} (${PYTHON_VERSION})") - else() + message(STATUS "lib info: ${LIB_INFO}") + diff --git a/src/libcec/env.h.in b/src/libcec/env.h.in -index 0496aa0..971f769 100644 +index fe6c83d..09304e1 100644 --- a/src/libcec/env.h.in +++ b/src/libcec/env.h.in -@@ -72,6 +72,9 @@ - /* Define to 1 for Exynos support */ - #cmakedefine HAVE_EXYNOS_API @HAVE_EXYNOS_API@ +@@ -78,6 +78,9 @@ + /* Define to 1 for nVidia EDID parsing support (on selected models) */ + #cmakedefine HAVE_NVIDIA_EDID_PARSER @HAVE_NVIDIA_EDID_PARSER@ +/* Define to 1 for Amlogic support */ +#cmakedefine HAVE_AMLOGIC_API @HAVE_AMLOGIC_API@ + - /* Define to 1 for nVidia EDID parsing support (on selected models) */ - #cmakedefine HAVE_NVIDIA_EDID_PARSER @HAVE_NVIDIA_EDID_PARSER@ + /* Define to 1 for DRM EDID parsing support */ + #cmakedefine HAVE_DRM_EDID_PARSER @HAVE_DRM_EDID_PARSER@ +-- +2.7.4 + diff --git a/projects/WeTek_Play/patches/libcec/libcec-00-amlogic-support.patch b/projects/WeTek_Play/patches/libcec/libcec-00-amlogic-support.patch index 02bedc7b9a..98ee13a51d 100644 --- a/projects/WeTek_Play/patches/libcec/libcec-00-amlogic-support.patch +++ b/projects/WeTek_Play/patches/libcec/libcec-00-amlogic-support.patch @@ -1,67 +1,76 @@ -diff --git a/README.md b/README.md -index dfaf4d6..0dffdcf 100644 ---- a/README.md -+++ b/README.md -@@ -93,6 +93,12 @@ To compile in support for Exynos devices, you have to pass the argument -DHAVE_E - cmake -DHAVE_EXYNOS_API=1 .. - ``` - -+### Amlogic -+To compile in support for Amlogic devices, you have to pass the argument -DHAVE_AMLOGIC_API=1 to cmake: -+``` -+cmake -DHAVE_AMLOGIC_API=1 .. -+``` -+ - ### TDA995x - To compile in support for TDA995x devices, you have to pass the argument -DHAVE_TDA995X_API=1 to cmake: - ``` +From b11257f5821e2f0bde0833d54697aa8ef7085065 Mon Sep 17 00:00:00 2001 +From: Gerald Dachs +Date: Thu, 3 Mar 2016 09:38:44 +0100 +Subject: [PATCH] new adapter for amlogic devices + +--- + include/cectypes.h | 15 +- + src/libcec/CMakeLists.txt | 3 + + src/libcec/adapter/AdapterFactory.cpp | 24 +- + src/libcec/adapter/Amlogic/AmlogicCEC.h | 41 +++ + .../Amlogic/AmlogicCECAdapterCommunication.cpp | 305 +++++++++++++++++++++ + .../Amlogic/AmlogicCECAdapterCommunication.h | 105 +++++++ + .../adapter/Amlogic/AmlogicCECAdapterDetection.cpp | 50 ++++ + .../adapter/Amlogic/AmlogicCECAdapterDetection.h | 46 ++++ + src/libcec/cmake/CheckPlatformSupport.cmake | 13 + + src/libcec/cmake/DisplayPlatformSupport.cmake | 6 + + src/libcec/env.h.in | 3 + + 11 files changed, 609 insertions(+), 2 deletions(-) + create mode 100644 src/libcec/adapter/Amlogic/AmlogicCEC.h + create mode 100644 src/libcec/adapter/Amlogic/AmlogicCECAdapterCommunication.cpp + create mode 100644 src/libcec/adapter/Amlogic/AmlogicCECAdapterCommunication.h + create mode 100644 src/libcec/adapter/Amlogic/AmlogicCECAdapterDetection.cpp + create mode 100644 src/libcec/adapter/Amlogic/AmlogicCECAdapterDetection.h + diff --git a/include/cectypes.h b/include/cectypes.h -index 0fdd48e..b7e1932 100644 +index 9c91842..1bc7b52 100644 --- a/include/cectypes.h +++ b/include/cectypes.h -@@ -309,6 +309,16 @@ namespace CEC { +@@ -276,6 +276,18 @@ namespace CEC { + */ #define CEC_EXYNOS_VIRTUAL_COM "Exynos" - /*! ++/*! + * the path to use for the Amlogic HDMI CEC device + */ -+#define CEC_AMLOGIC_PATH "/dev/AmlogicCEC" ++#define CEC_AMLOGIC_PATH "/dev/AmlogicCEC" + +/*! + * the name of the virtual COM port to use for the AMLOGIC' CEC wire + */ -+#define CEC_AMLOGIC_VIRTUAL_COM "Amlogic" ++#define CEC_AMLOGIC_VIRTUAL_COM "Amlogic" + +/*! - * Mimimum client version ++ + /** + * Maximum size of a data packet */ - #define CEC_MIN_LIB_VERSION 3 -@@ -877,7 +887,8 @@ typedef enum cec_adapter_type - ADAPTERTYPE_P8_DAUGHTERBOARD = 0x2, +@@ -861,7 +873,8 @@ typedef enum cec_adapter_type ADAPTERTYPE_RPI = 0x100, ADAPTERTYPE_TDA995x = 0x200, -- ADAPTERTYPE_EXYNOS = 0x300 -+ ADAPTERTYPE_EXYNOS = 0x300, -+ ADAPTERTYPE_AMLOGIC = 0x500 + ADAPTERTYPE_EXYNOS = 0x300, +- ADAPTERTYPE_AOCEC = 0x500 ++ ADAPTERTYPE_AOCEC = 0x500, ++ ADAPTERTYPE_AMLOGIC = 0x600 } cec_adapter_type; /** force exporting through swig */ diff --git a/src/libcec/CMakeLists.txt b/src/libcec/CMakeLists.txt -index a494533..e94b094 100644 +index d3eefa3..125512b 100644 --- a/src/libcec/CMakeLists.txt +++ b/src/libcec/CMakeLists.txt @@ -87,6 +87,9 @@ set(CEC_HEADERS devices/CECRecordingDevice.h adapter/Exynos/ExynosCEC.h adapter/Exynos/ExynosCECAdapterDetection.h adapter/Exynos/ExynosCECAdapterCommunication.h -+ adapter/Amlogic/AmlogicCEC.h ++ adapter/Amlogic/AmlogicCEC.h + adapter/Amlogic/AmlogicCECAdapterDetection.h + adapter/Amlogic/AmlogicCECAdapterCommunication.h - adapter/Pulse-Eight/USBCECAdapterMessageQueue.h - adapter/Pulse-Eight/USBCECAdapterCommunication.h - adapter/Pulse-Eight/USBCECAdapterCommands.h + adapter/AOCEC/AOCEC.h + adapter/AOCEC/AOCECAdapterDetection.h + adapter/AOCEC/AOCECAdapterCommunication.h diff --git a/src/libcec/adapter/AdapterFactory.cpp b/src/libcec/adapter/AdapterFactory.cpp -index da05725..824c5ff 100644 +index 1e946e6..7c26214 100644 --- a/src/libcec/adapter/AdapterFactory.cpp +++ b/src/libcec/adapter/AdapterFactory.cpp @@ -58,6 +58,11 @@ @@ -73,10 +82,10 @@ index da05725..824c5ff 100644 +#include "Amlogic/AmlogicCECAdapterCommunication.h" +#endif + - using namespace CEC; - - int8_t CAdapterFactory::FindAdapters(cec_adapter *deviceList, uint8_t iBufSize, const char *strDevicePath /* = NULL */) -@@ -126,8 +131,20 @@ int8_t CAdapterFactory::DetectAdapters(cec_adapter_descriptor *deviceList, uint8 + #if defined(HAVE_AOCEC_API) + #include "AOCEC/AOCECAdapterDetection.h" + #include "AOCEC/AOCECAdapterCommunication.h" +@@ -143,6 +148,18 @@ int8_t CAdapterFactory::DetectAdapters(cec_adapter_descriptor *deviceList, uint8 } #endif @@ -93,23 +102,22 @@ index da05725..824c5ff 100644 +#endif + --#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) -+#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_AMLOGIC_API) + #if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_AOCEC_API) #error "libCEC doesn't have support for any type of adapter. please check your build system or configuration" +@@ -177,7 +194,12 @@ IAdapterCommunication *CAdapterFactory::GetInstance(const char *strPort, uint16_ + return new CUSBCECAdapterCommunication(m_lib->m_cec, strPort, iBaudRate); #endif -@@ -146,6 +163,11 @@ IAdapterCommunication *CAdapterFactory::GetInstance(const char *strPort, uint16_ - return new CExynosCECAdapterCommunication(m_lib->m_cec); - #endif - +-#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_EXYNOS_API) +#if defined(HAVE_AMLOGIC_API) + if (!strcmp(strPort, CEC_AMLOGIC_VIRTUAL_COM)) + return new CAmlogicCECAdapterCommunication(m_lib->m_cec); +#endif + - #if defined(HAVE_RPI_API) - if (!strcmp(strPort, CEC_RPI_VIRTUAL_COM)) - return new CRPiCECAdapterCommunication(m_lib->m_cec); ++#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_EXYNOS_API) && !defined(HAVE_AMLOGIC_API) + return NULL; + #endif + } diff --git a/src/libcec/adapter/Amlogic/AmlogicCEC.h b/src/libcec/adapter/Amlogic/AmlogicCEC.h new file mode 100644 index 0000000..7b86982 @@ -162,7 +170,7 @@ new file mode 100644 index 0000000..5aeddda --- /dev/null +++ b/src/libcec/adapter/Amlogic/AmlogicCECAdapterCommunication.cpp -@@ -0,0 +1,305 @@ +@@ -0,0 +1,306 @@ +/* + * This file is part of the libCEC(R) library. + * @@ -417,7 +425,8 @@ index 0000000..5aeddda + + if (fd == INVALID_SOCKET_VALUE) + { -+ break; ++ Sleep(250); ++ continue; + } + + FD_ZERO(&rfds); @@ -688,22 +697,21 @@ index 0000000..8a7418d + }; +} diff --git a/src/libcec/cmake/CheckPlatformSupport.cmake b/src/libcec/cmake/CheckPlatformSupport.cmake -index b8a16c8..311cb52 100644 +index 532f213..382c39c 100644 --- a/src/libcec/cmake/CheckPlatformSupport.cmake +++ b/src/libcec/cmake/CheckPlatformSupport.cmake -@@ -9,6 +9,7 @@ - # HAVE_RPI_API 1 if Raspberry Pi is supported - # HAVE_TDA995X_API 1 if TDA995X is supported - # HAVE_EXYNOS_API 1 if Exynos is supported -+# HAVE_AMLOGIC_API 1 if Amlogic is supported - # HAVE_P8_USB 1 if Pulse-Eight devices are supported - # HAVE_P8_USB_DETECT 1 if Pulse-Eight devices can be auto-detected - # HAVE_DRM_EDID_PARSER 1 if DRM EDID parsing is supported -@@ -132,6 +133,18 @@ else() - else() - set(HAVE_EXYNOS_API 0) +@@ -11,6 +11,7 @@ + # HAVE_EXYNOS_API ON if Exynos is supported + # HAVE_AOCEC_API ON if AOCEC is supported + # HAVE_P8_USB ON if Pulse-Eight devices are supported ++# HAVE_AMLOGIC_API 1 if AMLOGIC is supported + # HAVE_P8_USB_DETECT ON if Pulse-Eight devices can be auto-detected + # HAVE_DRM_EDID_PARSER ON if DRM EDID parsing is supported + # +@@ -137,6 +138,18 @@ else() + list(APPEND CEC_SOURCES ${CEC_SOURCES_ADAPTER_EXYNOS}) endif() -+ + + # Amlogic + if (${HAVE_AMLOGIC_API}) + set(LIB_INFO "${LIB_INFO}, Amlogic") @@ -715,15 +723,16 @@ index b8a16c8..311cb52 100644 + else() + set(HAVE_AMLOGIC_API 0) + endif() - endif() - - # rt ++ + # AOCEC + if (${HAVE_AOCEC_API}) + set(LIB_INFO "${LIB_INFO}, AOCEC") diff --git a/src/libcec/cmake/DisplayPlatformSupport.cmake b/src/libcec/cmake/DisplayPlatformSupport.cmake -index 9dcaacf..464252e 100644 +index 7ec10f5..7a38d32 100644 --- a/src/libcec/cmake/DisplayPlatformSupport.cmake +++ b/src/libcec/cmake/DisplayPlatformSupport.cmake -@@ -44,6 +44,12 @@ else() - message(STATUS "DRM support: no") +@@ -56,5 +56,11 @@ else() + message(STATUS "Python support: no") endif() +if (HAVE_AMLOGIC_API) @@ -732,20 +741,22 @@ index 9dcaacf..464252e 100644 + message(STATUS "Amlogic support: no") +endif() + - if (HAVE_PYTHON) - message(STATUS "Python support: version ${PYTHONLIBS_VERSION_STRING} (${PYTHON_VERSION})") - else() + message(STATUS "lib info: ${LIB_INFO}") + diff --git a/src/libcec/env.h.in b/src/libcec/env.h.in -index 0496aa0..971f769 100644 +index fe6c83d..09304e1 100644 --- a/src/libcec/env.h.in +++ b/src/libcec/env.h.in -@@ -72,6 +72,9 @@ - /* Define to 1 for Exynos support */ - #cmakedefine HAVE_EXYNOS_API @HAVE_EXYNOS_API@ +@@ -78,6 +78,9 @@ + /* Define to 1 for nVidia EDID parsing support (on selected models) */ + #cmakedefine HAVE_NVIDIA_EDID_PARSER @HAVE_NVIDIA_EDID_PARSER@ +/* Define to 1 for Amlogic support */ +#cmakedefine HAVE_AMLOGIC_API @HAVE_AMLOGIC_API@ + - /* Define to 1 for nVidia EDID parsing support (on selected models) */ - #cmakedefine HAVE_NVIDIA_EDID_PARSER @HAVE_NVIDIA_EDID_PARSER@ + /* Define to 1 for DRM EDID parsing support */ + #cmakedefine HAVE_DRM_EDID_PARSER @HAVE_DRM_EDID_PARSER@ +-- +2.7.4 +