/*
* This file is part of the libCEC(R) library.
*
- * libCEC(R) is Copyright (C) 2011 Pulse-Eight Limited. All rights reserved.
+ * 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.
#include <stdint.h>
#include <string.h>
+#if defined(_WIN32) || defined(_WIN64)
+#define CEC_CDECL __cdecl
+#else
+#define CEC_CDECL
+#endif
+
#if !defined(DECLSPEC)
#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>
#define ESCOFFSET 3
#define CEC_BUTTON_TIMEOUT 500
#define CEC_POWER_STATE_REFRESH_TIME 30000
+#define CEC_FW_VERSION_UNKNOWN 0xFFFF
-#define CEC_DEFAULT_TRANSMIT_TIMEOUT 1000
-#define CEC_DEFAULT_TRANSMIT_WAIT 2000
-#define CEC_DEFAULT_TRANSMIT_RETRIES 1
+#define CEC_DEFAULT_TRANSMIT_RETRY_WAIT 500
+#define CEC_DEFAULT_TRANSMIT_TIMEOUT 1000
+#define CEC_DEFAULT_TRANSMIT_WAIT 2000
+#define CEC_DEFAULT_TRANSMIT_RETRIES 1
#define CEC_MIN_LIB_VERSION 1
#define CEC_LIB_VERSION_MAJOR 1
-#define CEC_LIB_VERSION_MINOR 3
+#define CEC_LIB_VERSION_MINOR 4
typedef enum cec_abort_reason
{
MSGCODE_TRANSMIT_FAILED_TIMEOUT_LINE,
MSGCODE_FIRMWARE_VERSION,
MSGCODE_START_BOOTLOADER,
+ MSGCODE_SET_POWERSTATE,
+ MSGCODE_SET_CONTROLLED,
MSGCODE_FRAME_EOM = 0x80,
MSGCODE_FRAME_ACK = 0x40,
} cec_adapter_messagecode;
#endif
} cec_logical_addresses;
-struct ICECCallbacks
+typedef int (CEC_CDECL* CBCecLogMessageType)(void *param, const CEC::cec_log_message &);
+typedef int (CEC_CDECL* CBCecKeyPressType)(void *param, const cec_keypress &);
+typedef int (CEC_CDECL* CBCecCommandType)(void *param, const cec_command &);
+
+typedef struct ICECCallbacks
{
/*!
* @brief Transfer a log message from libCEC to the client.
* @param message The message to transfer.
* @return 1 when ok, 0 otherwise.
*/
- int (*CecLogMessage)(const cec_log_message &message);
+ CBCecLogMessageType CBCecLogMessage;
/*!
* @brief Transfer a keypress from libCEC to the client.
* @param key The keypress to transfer.
* @return 1 when ok, 0 otherwise.
*/
- int (*CecKeyPress)(const cec_keypress &key);
+ CBCecKeyPressType CBCecKeyPress;
/*!
* @brief Transfer a CEC command from libCEC to the client.
* @param command The command to transfer.
* @return 1 when ok, 0 otherwise.
*/
- int (*CecCommand)(const cec_command &command);
-};
+ CBCecCommandType CBCecCommand;
+} ICECCallbacks;
+
+typedef enum cec_client_version
+{
+ CEC_CLIENT_VERSION_PRE_1_5 = 0,
+ CEC_CLIENT_VERSION_1_5_0 = 1
+} cec_client_version;
+
+typedef struct libcec_configuration
+{
+ char strDeviceName[13]; /*!< how to name the device on the CEC bus */
+ cec_device_type_list deviceTypes; /*!< the CEC device types to emulate */
+ uint16_t iPhysicalAddress; /*!< the physical address of the CEC adapter */
+ cec_logical_address baseDevice; /*!< the logical address of the device to which the adapter is connected. only used when iPhysicalAddress = 0 */
+ uint8_t iHDMIPort; /*!< the HDMI port to which the adapter is connected. only used when iPhysicalAddress = 0 */
+ cec_client_version clientVersion; /*!< the version of the client that is connecting */
+
+ void * callbackParam; /*!< the object to pass along with a call of the callback methods. NULL to ignore */
+ ICECCallbacks * callbacks; /*!< the callback methods to use. set this to NULL when not using callbacks */
+
+#ifdef __cplusplus
+ void Clear(void)
+ {
+ memset(strDeviceName, 0, 13);
+ deviceTypes.clear();
+ iPhysicalAddress = CEC_DEFAULT_PHYSICAL_ADDRESS;
+ baseDevice = (cec_logical_address)CEC_DEFAULT_BASE_DEVICE;
+ iHDMIPort = CEC_DEFAULT_HDMI_PORT;
+ clientVersion = CEC_CLIENT_VERSION_PRE_1_5;
+ callbackParam = NULL;
+ callbacks = NULL;
+ }
+#endif
+} libcec_configuration;
#ifdef UNUSED
#elif defined(__GNUC__)