#define CEC_BUTTON_TIMEOUT 500
#define CEC_POWER_STATE_REFRESH_TIME 30000
#define CEC_FW_VERSION_UNKNOWN 0xFFFF
+#define CEC_CONNECT_TRIES 3
#define CEC_DEFAULT_SETTING_USE_TV_MENU_LANGUAGE 1
-#define CEC_DEFAULT_SETTING_POWER_ON_STARTUP 1
+#define CEC_DEFAULT_SETTING_ACTIVATE_SOURCE 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_SETTING_SEND_INACTIVE_SOURCE 1
#define CEC_DEFAULT_TRANSMIT_RETRY_WAIT 500
#define CEC_DEFAULT_TRANSMIT_TIMEOUT 1000
#define CEC_MIN_LIB_VERSION 1
#define CEC_LIB_VERSION_MAJOR 1
-#define CEC_LIB_VERSION_MINOR 4
+#define CEC_LIB_VERSION_MINOR 5
typedef enum cec_abort_reason
{
CEC_VENDOR_YAMAHA = 0x00A0DE,
CEC_VENDOR_PHILIPS = 0x00903E,
CEC_VENDOR_SONY = 0x080046,
+ CEC_VENDOR_TOSHIBA = 0x000039,
CEC_VENDOR_UNKNOWN = 0
} cec_vendor_id;
#endif
} cec_logical_addresses;
-typedef int (CEC_CDECL* CBCecLogMessageType)(void *param, const CEC::cec_log_message &);
+struct libcec_configuration;
+
+typedef int (CEC_CDECL* CBCecLogMessageType)(void *param, const cec_log_message &);
typedef int (CEC_CDECL* CBCecKeyPressType)(void *param, const cec_keypress &);
typedef int (CEC_CDECL* CBCecCommandType)(void *param, const cec_command &);
+typedef int (CEC_CDECL* CBCecConfigurationChangedType)(void *param, const libcec_configuration &);
typedef struct ICECCallbacks
{
* @return 1 when ok, 0 otherwise.
*/
CBCecCommandType CBCecCommand;
+
+ /*!
+ * @brief Transfer a changed configuration from libCEC to the client
+ * @param configuration The configuration to transfer
+ * @return 1 when ok, 0 otherwise
+ */
+ CBCecConfigurationChangedType CBCecConfigurationChanged;
} ICECCallbacks;
typedef enum cec_client_version
{
CEC_CLIENT_VERSION_PRE_1_5 = 0,
- CEC_CLIENT_VERSION_1_5_0 = 0x1500
+ CEC_CLIENT_VERSION_1_5_0 = 0x1500,
+ CEC_CLIENT_VERSION_1_5_1 = 0x1501
} cec_client_version;
+typedef enum cec_server_version
+{
+ CEC_SERVER_VERSION_PRE_1_5 = 0,
+ CEC_SERVER_VERSION_1_5_0 = 0x1500,
+ CEC_SERVER_VERSION_1_5_1 = 0x1501
+} cec_server_version;
+
typedef struct libcec_configuration
{
- cec_client_version clientVersion; /*!< the version of the client that is connecting */
+ uint32_t 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 */
+ uint8_t bAutodetectAddress; /*!< try to autodetect the physical address when 1 */
+ uint16_t iPhysicalAddress; /*!< the physical address of the CEC adapter. only used when bAutodetectAddress = 0 or when the adapter doesn't support autodetection */
+ cec_logical_address baseDevice; /*!< the logical address of the device to which the adapter is connected. only used when iPhysicalAddress = 0 and bAutodetectAddress = 0 or when the adapter doesn't support autodetection */
+ uint8_t iHDMIPort; /*!< the HDMI port to which the adapter is connected. only used when iPhysicalAddress = 0 and bAutodetectAddress = 0 or when the adapter doesn't support autodetection */
+ uint64_t tvVendor; /*!< override the vendor ID of the TV. leave this untouched to autodetect */
+ cec_logical_addresses wakeDevices; /*!< wake these CEC devices when initialising libCEC or when calling PowerOnDevices() without any parameter */
+ cec_logical_addresses powerOffDevices; /*!< power off these devices when calling StandbyDevices() without any parameter */
+
+ uint32_t serverVersion; /*!< the version number of the server. read-only */
// 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 bActivateSource; /*!< make libCEC the active source on the bus when starting 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 */
+ uint8_t bSendInactiveSource; /*!< send an 'inactive source' message when stopping the player. added in 1.5.1 */
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 */
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;
+ tvVendor = (uint64_t)CEC_VENDOR_UNKNOWN;
+ clientVersion = (uint32_t)CEC_CLIENT_VERSION_PRE_1_5;
+ serverVersion = (uint32_t)CEC_SERVER_VERSION_PRE_1_5;
wakeDevices.Clear();
+ powerOffDevices.Clear();
+ bAutodetectAddress = 1;
bGetSettingsFromROM = 0;
bUseTVMenuLanguage = CEC_DEFAULT_SETTING_USE_TV_MENU_LANGUAGE;
- bPowerOnStartup = CEC_DEFAULT_SETTING_POWER_ON_STARTUP;
- bPowerOffShutdown = CEC_DEFAULT_SETTING_POWER_OFF_SHUTDOWN;
+ bActivateSource = CEC_DEFAULT_SETTING_ACTIVATE_SOURCE;
+ #if CEC_DEFAULT_SETTING_POWER_OFF_SHUTDOWN == 1
+ powerOffDevices.Set(CECDEVICE_BROADCAST);
+ #endif
+ #if CEC_DEFAULT_SETTING_ACTIVATE_SOURCE == 1
+ wakeDevices.Set(CECDEVICE_TV);
+ #endif
bPowerOffScreensaver = CEC_DEFAULT_SETTING_POWER_OFF_SCREENSAVER;
bPowerOffOnStandby = CEC_DEFAULT_SETTING_POWER_OFF_ON_STANDBY;
+ bSendInactiveSource = CEC_DEFAULT_SETTING_SEND_INACTIVE_SOURCE;
callbackParam = NULL;
callbacks = NULL;