#pragma once
#include "env.h"
#include "p8-platform/threads/mutex.h"
#include "USBCECAdapterMessage.h"
namespace CEC
{
class CUSBCECAdapterCommunication;
class CUSBCECAdapterCommands
{
public:
CUSBCECAdapterCommands(CUSBCECAdapterCommunication *comm);
uint16_t RequestFirmwareVersion(void);
uint16_t GetFirmwareVersion(void) const { return m_savedConfiguration.iFirmwareVersion; };
bool SaveConfiguration(const libcec_configuration &configuration);
bool GetConfiguration(libcec_configuration &configuration);
bool PingAdapter(void);
bool SetAckMask(uint16_t iMask);
bool StartBootloader(void);
bool SetLineTimeout(uint8_t iTimeout);
bool SetControlledMode(bool controlled);
uint32_t RequestBuildDate(void);
uint32_t GetPersistedBuildDate(void) const { return m_savedConfiguration.iFirmwareBuildDate; };
p8_cec_adapter_type RequestAdapterType(void);
p8_cec_adapter_type GetPersistedAdapterType(void) const { return m_adapterType; };
bool WriteEEPROM(void);
void SetActiveSource(bool bSetTo, bool bClientUnregistered);
bool SetSettingAutoEnabled(bool enabled);
private:
bool RequestSettings(void);
cec_datapacket RequestSetting(cec_adapter_messagecode msgCode);
bool RequestSettingAutoEnabled(void);
bool SetSettingDeviceType(cec_device_type type);
bool RequestSettingDeviceType(void);
bool SetSettingDefaultLogicalAddress(cec_logical_address address);
bool RequestSettingDefaultLogicalAddress(void);
bool SetSettingLogicalAddressMask(uint16_t iMask);
bool RequestSettingLogicalAddressMask(void);
bool SetSettingPhysicalAddress(uint16_t iPhysicalAddress);
bool RequestSettingPhysicalAddress(void);
bool SetSettingCECVersion(cec_version version);
bool RequestSettingCECVersion(void);
bool SetSettingAutoPowerOn(bool autoOn);
bool RequestSettingAutoPowerOn(void);
bool SetSettingOSDName(const char *strOSDName);
bool RequestSettingOSDName(void);
CUSBCECAdapterCommunication *m_comm;
bool m_bSettingsRetrieved;
bool m_bSettingAutoEnabled;
uint16_t m_iSettingLAMask;
bool m_bNeedsWrite;
libcec_configuration m_savedConfiguration;
bool m_bControlledMode;
p8_cec_adapter_type m_adapterType;
P8PLATFORM::CMutex m_mutex;
};
}