Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion include/cectypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,16 @@ namespace CEC {
*/
#define CEC_AOCEC_VIRTUAL_COM "AOCEC"

/*!
* the path to use for the i.MX CEC wire
*/
#define CEC_IMX_PATH "/dev/mxc_hdmi_cec"

/*!
* the name of the virtual COM port to use for the i.MX CEC wire
*/
#define CEC_IMX_VIRTUAL_COM "i.MX"

/*!
* Mimimum client version
*/
Expand Down Expand Up @@ -875,7 +885,8 @@ typedef enum cec_adapter_type
ADAPTERTYPE_TDA995x = 0x200,
ADAPTERTYPE_EXYNOS = 0x300,
ADAPTERTYPE_LINUX = 0x400,
ADAPTERTYPE_AOCEC = 0x500
ADAPTERTYPE_AOCEC = 0x500,
ADAPTERTYPE_IMX = 0x600
} cec_adapter_type;

/** force exporting through swig */
Expand Down
2 changes: 2 additions & 0 deletions src/libcec/CECTypeUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -768,6 +768,8 @@ namespace CEC
return "Raspberry Pi";
case ADAPTERTYPE_TDA995x:
return "TDA995x";
case ADAPTERTYPE_IMX:
return "i.MX";
case ADAPTERTYPE_LINUX:
return "Linux";
default:
Expand Down
2 changes: 2 additions & 0 deletions src/libcec/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ set(CEC_HEADERS devices/CECRecordingDevice.h
adapter/RPi/RPiCECAdapterMessageQueue.h
adapter/RPi/RPiCECAdapterCommunication.h
adapter/RPi/RPiCECAdapterDetection.h
adapter/IMX/IMXCECAdapterCommunication.h
adapter/IMX/IMXCECAdapterDetection.h
CECInputBuffer.h
platform/util/baudrate.h
platform/util/edid.h
Expand Down
26 changes: 24 additions & 2 deletions src/libcec/adapter/AdapterFactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@
#include "AOCEC/AOCECAdapterCommunication.h"
#endif

#if defined(HAVE_IMX_API)
#include "IMX/IMXCECAdapterDetection.h"
#include "IMX/IMXCECAdapterCommunication.h"
#endif

using namespace CEC;

int8_t CAdapterFactory::FindAdapters(cec_adapter *deviceList, uint8_t iBufSize, const char *strDevicePath /* = NULL */)
Expand Down Expand Up @@ -160,8 +165,20 @@ int8_t CAdapterFactory::DetectAdapters(cec_adapter_descriptor *deviceList, uint8
}
#endif

#if defined(HAVE_IMX_API)
if (iAdaptersFound < iBufSize && CIMXCECAdapterDetection::FindAdapter() &&
(!strDevicePath || !strcmp(strDevicePath, CEC_IMX_VIRTUAL_COM)))
{
snprintf(deviceList[iAdaptersFound].strComPath, sizeof(deviceList[iAdaptersFound].strComPath), CEC_IMX_PATH);
snprintf(deviceList[iAdaptersFound].strComName, sizeof(deviceList[iAdaptersFound].strComName), CEC_IMX_VIRTUAL_COM);
deviceList[iAdaptersFound].iVendorId = IMX_ADAPTER_VID;
deviceList[iAdaptersFound].iProductId = IMX_ADAPTER_PID;
deviceList[iAdaptersFound].adapterType = ADAPTERTYPE_IMX;
iAdaptersFound++;
}
#endif

#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_LINUX_API) && !defined(HAVE_AOCEC_API)
#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_EXYNOS_API) && !defined(HAVE_LINUX_API) && !defined(HAVE_AOCEC_API) && !defined(HAVE_IMX_API)
#error "libCEC doesn't have support for any type of adapter. please check your build system or configuration"
#endif

Expand Down Expand Up @@ -195,11 +212,16 @@ IAdapterCommunication *CAdapterFactory::GetInstance(const char *strPort, uint16_
return new CRPiCECAdapterCommunication(m_lib->m_cec);
#endif

#if defined(HAVE_IMX_API)
if (!strcmp(strPort, CEC_IMX_VIRTUAL_COM))
return new CIMXCECAdapterCommunication(m_lib->m_cec);
#endif

#if defined(HAVE_P8_USB)
return new CUSBCECAdapterCommunication(m_lib->m_cec, strPort, iBaudRate);
#endif

#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_EXYNOS_API) && !defined(HAVE_LINUX_API) && !defined(HAVE_AOCEC_API)
#if !defined(HAVE_RPI_API) && !defined(HAVE_P8_USB) && !defined(HAVE_TDA995X_API) && !defined(HAVE_EXYNOS_API) && !defined(HAVE_LINUX_API) && !defined(HAVE_AOCEC_API) && !defined(HAVE_IMX_API)
return NULL;
#endif
}
Expand Down
52 changes: 52 additions & 0 deletions src/libcec/adapter/IMX/IMXCEC.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#pragma once
/*
* This file is part of the libCEC(R) library.
*
* libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved.
* libCEC(R) is an original work, containing original code.
*
* libCEC(R) is a trademark of Pulse-Eight Limited.
*
* IMX adpater port is Copyright (C) 2013 by Stephan Rafin
*
* You can redistribute this file 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.
*
*
*/


/*
* Ioctl definitions from kernel header
*/
#define HDMICEC_IOC_MAGIC 'H'
#define HDMICEC_IOC_SETLOGICALADDRESS _IOW(HDMICEC_IOC_MAGIC, 1, unsigned char)
#define HDMICEC_IOC_STARTDEVICE _IO(HDMICEC_IOC_MAGIC, 2)
#define HDMICEC_IOC_STOPDEVICE _IO(HDMICEC_IOC_MAGIC, 3)
#define HDMICEC_IOC_GETPHYADDRESS _IOR(HDMICEC_IOC_MAGIC, 4, unsigned char[4])

#define MESSAGE_TYPE_RECEIVE_SUCCESS 1
#define MESSAGE_TYPE_NOACK 2
#define MESSAGE_TYPE_DISCONNECTED 3
#define MESSAGE_TYPE_CONNECTED 4
#define MESSAGE_TYPE_SEND_SUCCESS 5

#define MAX_CEC_MESSAGE_LEN 17

typedef struct hdmi_cec_event {
int event_type;
int msg_len;
unsigned char msg[MAX_CEC_MESSAGE_LEN];
} hdmi_cec_event;

Loading