155 lines
4.0 KiB
C++
155 lines
4.0 KiB
C++
#include "AvReceiver.h"
|
|
#include "AvReceiverNetworkCtrlInterface.h"
|
|
|
|
CAvReceiver::CAvReceiver(CAvReceiverGui *ReceiverGui)
|
|
{
|
|
mReceiverGui = ReceiverGui;
|
|
ReceiverGui->mProgramHandle = this;
|
|
mNetworkInterface = new CAvReceiverNetworkCtrlInterface(this);
|
|
|
|
mReceiverPollTimer = new QTimer();
|
|
mReceiverPollTimer->setSingleShot(false);
|
|
mReceiverPollTimer->setInterval(1000);
|
|
connect(mReceiverPollTimer,SIGNAL(timeout()),this,SLOT(PollTimerExpired()));
|
|
|
|
connect(&mVolumeController,&CVolumeController::ExternalVolumeChanged,this,&CAvReceiver::ExternalVolumeChanged);
|
|
mTempReceiverVolume = 0;
|
|
}
|
|
|
|
CAvReceiver::~CAvReceiver()
|
|
{
|
|
delete mNetworkInterface;
|
|
delete mReceiverPollTimer;
|
|
}
|
|
|
|
int CAvReceiver::Start()
|
|
{
|
|
mNetworkInterface->ConnectToMasterCtrl();
|
|
mReceiverPollTimer->start();
|
|
mVolumeController.Init(this);
|
|
return RET_OK;
|
|
}
|
|
|
|
|
|
int CAvReceiver::Zone2ToggleSwitchPressed(bool state)
|
|
{
|
|
|
|
QByteArray ZoneState;
|
|
ZoneState.clear();
|
|
|
|
if(state)
|
|
{
|
|
ZoneState.append((char)0x01);
|
|
}
|
|
else
|
|
{
|
|
ZoneState.append((char)0x00);
|
|
}
|
|
return mNetworkInterface->SendMasterCtrlCommand(AV_RECEIVER_INTERFACE_SET_ZONE2_REQUEST,ZoneState);
|
|
|
|
}
|
|
|
|
|
|
int CAvReceiver::MainUnitToggleSwitchPressed(bool state)
|
|
{
|
|
|
|
QByteArray ZoneState;
|
|
ZoneState.clear();
|
|
|
|
if(state)
|
|
{
|
|
ZoneState.append((char)0x01);
|
|
}
|
|
else
|
|
{
|
|
ZoneState.append((char)0x00);
|
|
}
|
|
return mNetworkInterface->SendMasterCtrlCommand(AV_RECEIVER_INTERFACE_SET_MAIN_ZONE_REQUEST,ZoneState);
|
|
|
|
}
|
|
|
|
void CAvReceiver::PollTimerExpired()
|
|
{
|
|
mNetworkInterface->SendMasterCtrlCommand(AV_RECEIVER_INTERFACE_GENERAL_STATUS_REQUEST,QByteArray());
|
|
}
|
|
|
|
int CAvReceiver::ReceiverGeneralStatusReceived(QByteArray StatusData)
|
|
{
|
|
QDataStream Strm(&StatusData,QIODevice::ReadOnly | QIODevice::Unbuffered);
|
|
Strm.device()->seek(0);
|
|
|
|
Strm >> mReceiverStatus;
|
|
Strm >> mZone2Status;
|
|
mReceiverGui->UpdateReceiverStatus(mReceiverStatus, mZone2Status);
|
|
mTempReceiverVolume = mReceiverStatus.mMainVolume;
|
|
return RET_OK;
|
|
}
|
|
int CAvReceiver::SelectScenePressed(char Zone, char Scene)
|
|
{
|
|
QByteArray SceneData;
|
|
SceneData.append(Zone).append(Scene);
|
|
|
|
return mNetworkInterface->SendMasterCtrlCommand(AV_RECEIVER_INTERFACE_SELECT_SCENE_REQUEST,SceneData);
|
|
}
|
|
|
|
int CAvReceiver::MainZoneVolumeChanged(float Value)
|
|
{
|
|
// qDebug("MainZoneVolumeChanged : %f",Value);
|
|
QByteArray VolumeData;
|
|
QDataStream Strm(&VolumeData,QIODevice::WriteOnly);
|
|
Strm << Value;
|
|
return mNetworkInterface->SendMasterCtrlCommand(AV_RECEIVER_INTERFACE_SET_MAIN_VOLUME_REQUEST,VolumeData);
|
|
}
|
|
|
|
int CAvReceiver::Zone2VolumeChanged(float Value)
|
|
{
|
|
QByteArray VolumeData;
|
|
QDataStream Strm(&VolumeData,QIODevice::WriteOnly);
|
|
Strm << Value;
|
|
return mNetworkInterface->SendMasterCtrlCommand(AV_RECEIVER_INTERFACE_SET_ZONE2_VOLUME_REQUEST,VolumeData);
|
|
}
|
|
|
|
int CAvReceiver::Zone2InputSrcChanged(QString InputSrc)
|
|
{
|
|
QByteArray SourceData;
|
|
QDataStream Strm(&SourceData,QIODevice::WriteOnly);
|
|
Strm << InputSrc;
|
|
return mNetworkInterface->SendMasterCtrlCommand(AV_RECEIVER_INTERFACE_SET_ZONE2_INPUT_REQUEST,SourceData);
|
|
}
|
|
|
|
//We need to implement this in a slot because the Windows API runs in a differen Thread and it crashes the MasterCtrl socket.
|
|
void CAvReceiver::ExternalVolumeChanged(float Value)
|
|
{
|
|
float ValueInPercent;
|
|
float Ret;
|
|
if(Value > 0)
|
|
{
|
|
mTempReceiverVolume += Value;
|
|
MainZoneVolumeChanged(mTempReceiverVolume);
|
|
Ret = 0.04;
|
|
}
|
|
else
|
|
{
|
|
if(mTempReceiverVolume == -80.5)
|
|
{
|
|
Ret = 0;
|
|
}
|
|
else
|
|
{
|
|
mTempReceiverVolume += Value;
|
|
if(mTempReceiverVolume == -80.5)
|
|
{
|
|
MainZoneVolumeChanged(mTempReceiverVolume);
|
|
Ret = 0;
|
|
}
|
|
else
|
|
{
|
|
MainZoneVolumeChanged(mTempReceiverVolume);
|
|
Ret = 0.04;
|
|
}
|
|
}
|
|
}
|
|
mVolumeController.SetMasterVolume(Ret);
|
|
|
|
}
|