#pragma once
#include "env.h"
#include <string>
namespace CEC
{
class CLibCEC;
typedef enum cec_adapter_message_state
{
ADAPTER_MESSAGE_STATE_UNKNOWN = 0,
ADAPTER_MESSAGE_STATE_WAITING_TO_BE_SENT,
ADAPTER_MESSAGE_STATE_SENT,
ADAPTER_MESSAGE_STATE_SENT_NOT_ACKED,
ADAPTER_MESSAGE_STATE_SENT_ACKED,
ADAPTER_MESSAGE_STATE_INCOMING,
ADAPTER_MESSAGE_STATE_ERROR
} cec_adapter_message_state;
class IAdapterCommunicationCallback
{
public:
IAdapterCommunicationCallback(void) {}
virtual ~IAdapterCommunicationCallback(void) {}
virtual bool OnCommandReceived(const cec_command &command) = 0;
virtual void HandlePoll(cec_logical_address initiator, cec_logical_address destination) = 0;
virtual bool HandleReceiveFailed(cec_logical_address initiator) = 0;
virtual void HandleLogicalAddressLost(cec_logical_address oldAddress) = 0;
virtual void HandlePhysicalAddressChanged(uint16_t iNewAddress) = 0;
virtual CLibCEC *GetLib(void) const = 0;
};
class IAdapterCommunication
{
public:
IAdapterCommunication(IAdapterCommunicationCallback *callback) :
m_callback(callback) {}
virtual ~IAdapterCommunication(void) {}
virtual bool Open(uint32_t iTimeoutMs = CEC_DEFAULT_CONNECT_TIMEOUT, bool bSkipChecks = false, bool bStartListening = true) = 0;
virtual void Close(void) = 0;
virtual bool IsOpen(void) = 0;
virtual cec_adapter_message_state Write(const cec_command &data, bool &bRetry, uint8_t iLineTimeout, bool bIsReply) = 0;
virtual bool SetLineTimeout(uint8_t iTimeout) = 0;
virtual bool StartBootloader(void) = 0;
virtual bool SetLogicalAddresses(const cec_logical_addresses &addresses) = 0;
virtual cec_logical_addresses GetLogicalAddresses(void) const = 0;
virtual bool PingAdapter(void) = 0;
virtual uint16_t GetFirmwareVersion(void) = 0;
virtual uint32_t GetFirmwareBuildDate(void) = 0;
virtual bool IsRunningLatestFirmware(void) = 0;
virtual bool SetControlledMode(bool controlled) = 0;
virtual bool SaveConfiguration(const libcec_configuration &configuration) = 0;
virtual bool SetAutoMode(bool automode) = 0;
virtual bool GetConfiguration(libcec_configuration &configuration) = 0;
virtual std::string GetPortName(void) = 0;
virtual uint16_t GetPhysicalAddress(void) = 0;
virtual cec_vendor_id GetVendorId(void) = 0;
virtual bool SupportsSourceLogicalAddress(const cec_logical_address address) = 0;
virtual cec_adapter_type GetAdapterType(void) = 0;
virtual uint16_t GetAdapterVendorId(void) const = 0;
virtual uint16_t GetAdapterProductId(void) const = 0;
virtual void SetActiveSource(bool bSetTo, bool bClientUnregistered) = 0;
#if CEC_LIB_VERSION_MAJOR >= 5
virtual bool GetStats(struct cec_adapter_stats* stats) = 0;
#endif
IAdapterCommunicationCallback *m_callback;
};
};