+
+ /*!
+ * @brief Enable or disable monitoring mode.
+ * @param bEnable True to enable, false to disable.
+ * @return True when switched successfully, false otherwise.
+ */
+ virtual bool SwitchMonitoring(bool bEnable) = 0;
+
+ /*!
+ * @brief Get the CEC version of the device with the given logical address
+ * @param iLogicalAddress The device to get the CEC version for.
+ * @return The version or CEC_VERSION_UNKNOWN when the version couldn't be fetched.
+ */
+ virtual cec_version GetDeviceCecVersion(cec_logical_address iLogicalAddress) = 0;
+
+ /*!
+ * @brief Get the menu language of the device with the given logical address
+ * @param iLogicalAddress The device to get the menu language for.
+ * @param language The requested menu language.
+ * @return True when fetched succesfully, false otherwise.
+ */
+ virtual bool GetDeviceMenuLanguage(cec_logical_address iLogicalAddress, cec_menu_language *language) = 0;
+
+ /*!
+ * @brief Get the vendor ID of the device with the given logical address.
+ * @param iLogicalAddress The device to get the vendor id for.
+ * @return The vendor ID or 0 if it wasn't found.
+ */
+ virtual uint64_t GetDeviceVendorId(cec_logical_address iLogicalAddress) = 0;
+
+ /*!
+ * @brief Get the power status of the device with the given logical address.
+ * @param iLogicalAddress The device to get the power status for.
+ * @return The power status or CEC_POWER_STATUS_UNKNOWN if it wasn't found.
+ */
+ virtual cec_power_status GetDevicePowerStatus(cec_logical_address iLogicalAddress) = 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;
+
+ /*!
+ * @brief Sends a POLL message to a device.
+ * @param iLogicalAddress The device to send the message to.
+ * @return True if the POLL was acked, false otherwise.
+ */
+ virtual bool PollDevice(cec_logical_address iLogicalAddress) = 0;
+
+ /*!
+ * @return The devices that are active on the bus and not handled by libcec.
+ */
+ virtual cec_logical_addresses GetActiveDevices(void) = 0;
+
+ /*!
+ * @brief Check whether a device is active on the bus.
+ * @param iLogicalAddress The address to check.
+ * @return True when active, false otherwise.
+ */
+ virtual bool IsActiveDevice(cec_logical_address iLogicalAddress) = 0;
+
+ /*!
+ * @brief Check whether a device of the given type is active on the bus.
+ * @param type The type to check.
+ * @return True when active, false otherwise.
+ */
+ virtual bool IsActiveDeviceType(cec_device_type type) = 0;
+
+ /*!
+ * @brief Sends a volume up keypress to an audiosystem if it's present.
+ * @param bSendRelease Send a key release after the keypress.
+ * @return The new audio status.
+ */
+ virtual uint8_t VolumeUp(bool bSendRelease = true) = 0;
+
+ /*!
+ * @brief Sends a volume down keypress to an audiosystem if it's present.
+ * @param bSendRelease Send a key release after the keypress.
+ * @return The new audio status.
+ */
+ virtual uint8_t VolumeDown(bool bSendRelease = true) = 0;
+
+ /*!
+ * @brief Sends a mute keypress to an audiosystem if it's present.
+ * @param bSendRelease Send a key release after the keypress.
+ * @return The new audio status.
+ */
+ virtual uint8_t MuteAudio(bool bSendRelease = true) = 0;
+
+ /*!
+ * @brief Send a keypress to a device on the CEC bus.
+ * @param iDestination The address to send the message to.
+ * @param key The key to send.
+ * @param bWait True to wait for a response, false otherwise.
+ * @return True when the keypress was acked, false otherwise.
+ */
+ virtual bool SendKeypress(cec_logical_address iDestination, cec_user_control_code key, bool bWait = false) = 0;
+
+ /*!
+ * @brief Send a key release to a device on the CEC bus.
+ * @param iDestination The address to send the message to.
+ * @param bWait True to wait for a response, false otherwise.
+ * @return True when the keypress was acked, false otherwise.
+ */
+ virtual bool SendKeyRelease(cec_logical_address iDestination, bool bWait = false) = 0;
+
+ /*!
+ * @brief Get the OSD name of a device on the CEC bus.
+ * @param iLogicalAddress The device to get the OSD name for.
+ * @return The OSD name.
+ */
+ virtual cec_osd_name GetDeviceOSDName(cec_logical_address iLogicalAddress) = 0;
+
+ /*!
+ * @brief Get the logical address of the device that is currently the active source on the CEC bus.
+ * @return The active source or CECDEVICE_UNKNOWN when unknown.
+ */
+ virtual cec_logical_address GetActiveSource(void) = 0;
+
+ /*!
+ * @brief Check whether a device is currently the active source on the CEC bus.
+ * @param iLogicalAddress The address to check.
+ * @return True when it is the active source, false otherwise.
+ */
+ virtual bool IsActiveSource(cec_logical_address iLogicalAddress) = 0;
+
+ /*!
+ * @brief Sets the stream path to the device on the given logical address.
+ * @param iLogicalAddress The address to activate.
+ * @return True when the command was sent, false otherwise.
+ */
+ virtual bool SetStreamPath(cec_logical_address iLogicalAddress) = 0;
+
+ /*!
+ * @brief Sets the stream path to the device on the given logical address.
+ * @param iPhysicalAddress The address to activate.
+ * @return True when the command was sent, false otherwise.
+ */
+ virtual bool SetStreamPath(uint16_t iPhysicalAddress) = 0;
+
+ /*!
+ * @return The list of addresses that libCEC is controlling
+ */
+ virtual cec_logical_addresses GetLogicalAddresses(void) = 0;
+
+ virtual const char *ToString(const cec_menu_state state) = 0;
+ virtual const char *ToString(const cec_version version) = 0;
+ virtual const char *ToString(const cec_power_status status) = 0;
+ virtual const char *ToString(const cec_logical_address address) = 0;
+ virtual const char *ToString(const cec_deck_control_mode mode) = 0;
+ virtual const char *ToString(const cec_deck_info status) = 0;
+ virtual const char *ToString(const cec_opcode opcode) = 0;
+ virtual const char *ToString(const cec_system_audio_status mode) = 0;
+ virtual const char *ToString(const cec_audio_status status) = 0;
+ virtual const char *ToString(const cec_vendor_id vendor) = 0;
+ 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;