#pragma once
#ifndef CECEXPORTS_H_
#define CECEXPORTS_H_
#include "cectypes.h"
#include <string>
namespace CEC
{
class ICECAdapter
{
public:
virtual ~ICECAdapter() {};
virtual bool Open(const char *strPort, uint32_t iTimeoutMs = 10000) = 0;
virtual void Close(void) = 0;
virtual bool PingAdapter(void) = 0;
virtual bool StartBootloader(void) = 0;
virtual bool Transmit(const cec_command &data) = 0;
virtual bool SetLogicalAddress(cec_logical_address iLogicalAddress = CECDEVICE_PLAYBACKDEVICE1) = 0;
virtual bool SetPhysicalAddress(uint16_t iPhysicalAddress = CEC_DEFAULT_PHYSICAL_ADDRESS) = 0;
virtual bool PowerOnDevices(cec_logical_address address = CECDEVICE_TV) = 0;
virtual bool StandbyDevices(cec_logical_address address = CECDEVICE_BROADCAST) = 0;
virtual bool SetActiveSource(cec_device_type type = CEC_DEVICE_TYPE_RESERVED) = 0;
virtual bool SetDeckControlMode(cec_deck_control_mode mode, bool bSendUpdate = true) = 0;
virtual bool SetDeckInfo(cec_deck_info info, bool bSendUpdate = true) = 0;
virtual bool SetInactiveView(void) = 0;
virtual bool SetMenuState(cec_menu_state state, bool bSendUpdate = true) = 0;
virtual bool SetOSDString(cec_logical_address iLogicalAddress, cec_display_control duration, const char *strMessage) = 0;
virtual bool SwitchMonitoring(bool bEnable) = 0;
virtual cec_version GetDeviceCecVersion(cec_logical_address iLogicalAddress) = 0;
virtual std::string GetDeviceMenuLanguage(cec_logical_address iLogicalAddress) = 0;
virtual uint32_t GetDeviceVendorId(cec_logical_address iLogicalAddress) = 0;
virtual cec_power_status GetDevicePowerStatus(cec_logical_address iLogicalAddress) = 0;
virtual bool PollDevice(cec_logical_address iLogicalAddress) = 0;
virtual cec_logical_addresses GetActiveDevices(void) = 0;
virtual bool IsActiveDevice(cec_logical_address iLogicalAddress) = 0;
virtual bool IsActiveDeviceType(cec_device_type type) = 0;
virtual uint8_t VolumeUp(bool bSendRelease = true) = 0;
virtual uint8_t VolumeDown(bool bSendRelease = true) = 0;
#if CEC_LIB_VERSION_MAJOR >= 5
virtual uint8_t MuteAudio(void) = 0;
#endif
virtual bool SendKeypress(cec_logical_address iDestination, cec_user_control_code key, bool bWait = false) = 0;
virtual bool SendKeyRelease(cec_logical_address iDestination, bool bWait = false) = 0;
virtual std::string GetDeviceOSDName(cec_logical_address iAddress) = 0;
virtual cec_logical_address GetActiveSource(void) = 0;
virtual bool IsActiveSource(cec_logical_address iLogicalAddress) = 0;
virtual bool SetStreamPath(cec_logical_address iLogicalAddress) = 0;
virtual bool SetStreamPath(uint16_t iPhysicalAddress) = 0;
virtual cec_logical_addresses GetLogicalAddresses(void) = 0;
virtual bool GetCurrentConfiguration(libcec_configuration *configuration) = 0;
virtual bool SetConfiguration(const libcec_configuration *configuration) = 0;
#if CEC_LIB_VERSION_MAJOR >= 5
virtual bool CanSaveConfiguration(void) = 0;
#else
virtual bool CanPersistConfiguration(void) = 0;
virtual bool PersistConfiguration(libcec_configuration *configuration) = 0;
#endif
virtual void RescanActiveDevices(void) = 0;
virtual bool IsLibCECActiveSource(void) = 0;
virtual bool GetDeviceInformation(const char *strPort, libcec_configuration *config, uint32_t iTimeoutMs = 10000) = 0;
#if CEC_LIB_VERSION_MAJOR >= 5
virtual bool SetCallbacks(ICECCallbacks *callbacks, void *cbParam) = 0;
virtual bool DisableCallbacks(void) = 0;
#else
virtual bool EnableCallbacks(void *cbParam, ICECCallbacks *callbacks) = 0;
#endif
virtual bool SetHDMIPort(cec_logical_address iBaseDevice, uint8_t iPort) = 0;
virtual uint16_t GetDevicePhysicalAddress(cec_logical_address iLogicalAddress) = 0;
virtual const char *GetLibInfo(void) = 0;
virtual void InitVideoStandalone(void) = 0;
virtual uint16_t GetAdapterVendorId(void) const = 0;
virtual uint16_t GetAdapterProductId(void) const = 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) { return VendorIdToString((uint32_t)vendor); }
virtual const char* ToString(const cec_device_type type) = 0;
virtual const char* ToString(const cec_user_control_code key) = 0;
virtual const char* ToString(const cec_adapter_type type) = 0;
virtual std::string VersionToString(uint32_t version) = 0;
virtual void PrintVersion(uint32_t version, char* buf, size_t bufSize) = 0;
virtual const char* VendorIdToString(uint32_t vendor) = 0;
virtual uint8_t AudioToggleMute(void) = 0;
virtual uint8_t AudioMute(void) = 0;
virtual uint8_t AudioUnmute(void) = 0;
virtual uint8_t AudioStatus(void) = 0;
virtual int8_t DetectAdapters(cec_adapter_descriptor *deviceList, uint8_t iBufSize, const char *strDevicePath = nullptr, bool bQuickScan = false) = 0;
virtual cec_command CommandFromString(const char* strCommand) = 0;
virtual bool AudioEnable(bool enable) = 0;
virtual uint8_t SystemAudioModeStatus(void) = 0;
#if CEC_LIB_VERSION_MAJOR >= 5
virtual bool GetStats(struct cec_adapter_stats* stats) = 0;
#endif
};
};
extern "C" DECLSPEC void CECDestroy(CEC::ICECAdapter *instance);
extern "C" DECLSPEC CEC::ICECAdapter* CECInitialise(CEC::libcec_configuration *configuration);
extern "C" DECLSPEC bool CECStartBootloader(void);
#endif