#pragma once
#include "env.h"
#include "CECBusDevice.h"
namespace CEC
{
class CCECAudioSystem : public CCECBusDevice
{
public:
CCECAudioSystem(CCECProcessor *processor, cec_logical_address address, uint16_t iPhysicalAddress = CEC_INVALID_PHYSICAL_ADDRESS);
virtual ~CCECAudioSystem(void) {};
bool SetAudioStatus(uint8_t status);
bool SetSystemAudioModeStatus(const cec_system_audio_status mode);
bool TransmitAudioStatus(cec_logical_address dest, bool bIsReply);
bool TransmitSetSystemAudioMode(cec_logical_address dest, bool bIsReply);
bool TransmitSystemAudioModeStatus(cec_logical_address dest, bool bIsReply);
uint8_t VolumeUp(const cec_logical_address source, bool bSendRelease = true);
uint8_t VolumeDown(const cec_logical_address source, bool bSendRelease = true);
uint8_t MuteAudio(const cec_logical_address source);
uint8_t GetAudioStatus(const cec_logical_address initiator, bool bUpdate = false);
uint8_t GetSystemAudioModeStatus(const cec_logical_address initiator, bool bUpdate = false);
bool AudioEnable(CCECBusDevice* device, bool bEnable = true);
bool TransmitActiveSource(bool bIsReply) { (void)bIsReply; return false; }
protected:
bool RequestAudioStatus(const cec_logical_address initiator, bool bWaitForResponse = true);
bool RequestSystemAudioModeStatus(const cec_logical_address initiator, bool bWaitForResponse = true);
int64_t m_iLastAudioStatusUpdate;
uint8_t m_systemAudioModeStatus;
uint8_t m_audioStatus;
};
}