+ virtual const char *ToString(const cec_client_version version) = 0;
+ virtual const char *ToString(const cec_server_version version) = 0;
+
+ /*!
+ * @brief Get libCEC's current configuration.
+ * @param configuration The configuration.
+ * @return True when the configuration was updated, false otherwise.
+ */
+ virtual bool GetCurrentConfiguration(libcec_configuration *configuration) = 0;
+
+ /*!
+ * @brief Change libCEC's configuration.
+ * @param configuration The new configuration.
+ * @return True when the configuration was changed successfully, false otherwise.
+ */
+ virtual bool SetConfiguration(const libcec_configuration *configuration) = 0;
+
+ /*!
+ * @return True when this device can persist the user configuration, false otherwise.
+ */
+ virtual bool CanPersistConfiguration(void) = 0;
+
+ /*!
+ * @brief Persist the given configuration in adapter (if supported)
+ * @brief The configuration to store.
+ * @return True when the configuration was persisted, false otherwise.
+ */
+ virtual bool PersistConfiguration(libcec_configuration *configuration) = 0;
+
+ /*!
+ * @brief Tell libCEC to poll for active devices on the bus.
+ */
+ virtual void RescanActiveDevices(void) = 0;
+
+ /*!
+ * @return true when libCEC is the active source on the bus, false otherwise.
+ */
+ virtual bool IsLibCECActiveSource(void) = 0;
+
+ /*!
+ * @brief Get information about the given device
+ * @param strPort The port to which the device is connected
+ * @param config The device configuration
+ * @param iTimeoutMs The timeout in milliseconds
+ * @return True when the device was found, false otherwise
+ */
+ virtual bool GetDeviceInformation(const char *strPort, libcec_configuration *config, uint32_t iTimeoutMs = 10000) = 0;
+
+// XXX XBMC Eden for Windows has been built against 1.2.0 and Ubuntu against 1.5.2
+// we accidently broke the abi between these versions, and this will ensure the upgrade will still work
+#if defined(_WIN32) || defined(_WIN64)
+ /*!
+ * @brief Set and enable the callback methods. If this method is not called, the GetNext...() methods will have to be used.
+ * @param cbParam Parameter to pass to callback methods.
+ * @param callbacks The callbacks to set.
+ * @return True when enabled, false otherwise.
+ */
+ virtual bool EnableCallbacks(void *cbParam, ICECCallbacks *callbacks) = 0;
+
+ /*!
+ * @deprecated Use libcec_configuration instead.
+ * @brief Enable physical address detection (if the connected adapter supports this).
+ * @return True when physical address detection was enabled, false otherwise.
+ */
+ virtual bool EnablePhysicalAddressDetection(void) = 0;
+
+ /*!
+ * @brief Changes the active HDMI port.
+ * @param iBaseDevice The device to which this libcec is connected.
+ * @param iPort The new port number.
+ * @return True when changed, false otherwise.
+ */
+ virtual bool SetHDMIPort(cec_logical_address iBaseDevice, uint8_t iPort) = 0;
+
+ /*!
+ * @brief Get the physical address of the device with the given logical address.
+ * @param iLogicalAddress The device to get the vendor id for.
+ * @return The physical address or 0 if it wasn't found.
+ */
+ virtual uint16_t GetDevicePhysicalAddress(cec_logical_address iLogicalAddress) = 0;
+#endif
+
+ /*!
+ * @return A string with information about how libCEC was compiled.
+ */
+ virtual const char *GetLibInfo(void) = 0;
+
+ virtual const char *ToString(const cec_user_control_code key) = 0;
+
+ /*!
+ * @brief Calling this method will initialise the host on which libCEC is running.
+ * Calling this method will initialise the host on which libCEC is running. On the RPi, it calls
+ * bcm_host_init(), which may only be called once per process, and is called by any process using
+ * the video api on that system. So only call this method if libCEC is used in an application that
+ * does not already initialise the video api.
+ *
+ * Should be called as first call to libCEC, directly after CECInitialise() and before using Open()
+ */
+ virtual void InitVideoStandalone(void) = 0;
+
+ virtual const char *ToString(const cec_adapter_type type) = 0;