#define CEC_POWER_STATE_REFRESH_TIME 30000
#define CEC_FW_VERSION_UNKNOWN 0xFFFF
+#define CEC_DEFAULT_SETTING_USE_TV_MENU_LANGUAGE 1
+#define CEC_DEFAULT_SETTING_POWER_ON_STARTUP 1
+#define CEC_DEFAULT_SETTING_POWER_OFF_SHUTDOWN 1
+#define CEC_DEFAULT_SETTING_POWER_OFF_SCREENSAVER 1
+#define CEC_DEFAULT_SETTING_POWER_OFF_ON_STANDBY 1
+
#define CEC_DEFAULT_TRANSMIT_RETRY_WAIT 500
#define CEC_DEFAULT_TRANSMIT_TIMEOUT 1000
#define CEC_DEFAULT_TRANSMIT_WAIT 2000
CEC_USER_CONTROL_CODE_F4_YELLOW = 0x74,
CEC_USER_CONTROL_CODE_F5 = 0x75,
CEC_USER_CONTROL_CODE_DATA = 0x76,
- CEC_USER_CONTROL_CODE_MAX = 0x76,
+ CEC_USER_CONTROL_CODE_AN_RETURN = 0x91,
+ CEC_USER_CONTROL_CODE_MAX = 0x91,
CEC_USER_CONTROL_CODE_UNKNOWN
} cec_user_control_code;
-typedef enum cec_an_user_control_code
-{
- CEC_AN_USER_CONTROL_CODE_RETURN = 0x91
-} cec_an_user_control_code;
-
typedef enum cec_logical_address
{
CECDEVICE_UNKNOWN = -1, //not a valid logical address
}
cec_device_type operator[](uint8_t pos) const { return pos < 5 ? types[pos] : CEC_DEVICE_TYPE_RESERVED; }
+ bool operator==(const cec_device_type_list &other) const
+ {
+ bool bEqual(true);
+ for (uint8_t iPtr = 0; iPtr < 5; iPtr++)
+ bEqual &= (types[iPtr] == other[iPtr]);
+ return bEqual;
+ }
+
+ bool operator!=(const cec_device_type_list &other) const
+ {
+ return !(*this == other);
+ }
#endif
} cec_device_type_list;
bool IsSet(cec_logical_address address) const { return addresses[(int) address] == 1; }
bool operator[](uint8_t pos) const { return pos < 16 ? IsSet((cec_logical_address) pos) : false; }
+
+ bool operator==(const cec_logical_addresses &other) const
+ {
+ bool bEqual(true);
+ for (uint8_t iPtr = 0; iPtr < 16; iPtr++)
+ bEqual &= ((addresses[(int)iPtr] == 1) == other[iPtr]);
+ return bEqual;
+ }
+
+ bool operator!=(const cec_logical_addresses &other) const
+ {
+ return !(*this == other);
+ }
#endif
} cec_logical_addresses;
typedef int (CEC_CDECL* CBCecLogMessageType)(void *param, const CEC::cec_log_message &);
-typedef int (CEC_CDECL* CBCecKeyPressType)(void *param, const cec_keypress &key);
-typedef int (CEC_CDECL* CBCecCommandType)(void *param, const cec_command &command);
+typedef int (CEC_CDECL* CBCecKeyPressType)(void *param, const cec_keypress &);
+typedef int (CEC_CDECL* CBCecCommandType)(void *param, const cec_command &);
typedef struct ICECCallbacks
{
CBCecCommandType CBCecCommand;
} ICECCallbacks;
+typedef enum cec_client_version
+{
+ CEC_CLIENT_VERSION_PRE_1_5 = 0,
+ CEC_CLIENT_VERSION_1_5_0 = 0x1500
+} cec_client_version;
+
+typedef struct libcec_configuration
+{
+ cec_client_version clientVersion; /*!< the version of the client that is connecting */
+ 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_vendor_id tvVendor; /*!< the vendor ID of the TV. leave this untouched to autodetect */
+ cec_logical_addresses wakeDevices; /*!< wake these CEC devices when starting libCEC */
+
+ // player specific settings
+ uint8_t bGetSettingsFromROM; /*!< true to get the settings from the ROM (if set, and a v2 ROM is present), false to use these settings. */
+ uint8_t bUseTVMenuLanguage; /*!< use the menu language of the TV in the player application */
+ uint8_t bPowerOnStartup; /*!< power on CEC devices when start the player application */
+ uint8_t bPowerOffShutdown; /*!< power off CEC devices when stopping the player application */
+ uint8_t bPowerOffScreensaver; /*!< put devices in standby mode when activating the screensaver */
+ uint8_t bPowerOffOnStandby; /*!< put this PC in standby mode when the TV is switched off */
+
+ 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 = 0;
+ baseDevice = (cec_logical_address)CEC_DEFAULT_BASE_DEVICE;
+ iHDMIPort = CEC_DEFAULT_HDMI_PORT;
+ tvVendor = CEC_VENDOR_UNKNOWN;
+ clientVersion = CEC_CLIENT_VERSION_PRE_1_5;
+ wakeDevices.Clear();
+
+ bGetSettingsFromROM = 0;
+ bUseTVMenuLanguage = CEC_DEFAULT_SETTING_USE_TV_MENU_LANGUAGE;
+ bPowerOnStartup = CEC_DEFAULT_SETTING_POWER_ON_STARTUP;
+ bPowerOffShutdown = CEC_DEFAULT_SETTING_POWER_OFF_SHUTDOWN;
+ bPowerOffScreensaver = CEC_DEFAULT_SETTING_POWER_OFF_SCREENSAVER;
+ bPowerOffOnStandby = CEC_DEFAULT_SETTING_POWER_OFF_ON_STANDBY;
+
+ callbackParam = NULL;
+ callbacks = NULL;
+ }
+#endif
+} libcec_configuration;
+
#ifdef UNUSED
#elif defined(__GNUC__)
#define UNUSED(x) UNUSED_ ## x __attribute__((unused))