From 92fce346c00fd4af5f834daf5bcd986c8c4760a1 Mon Sep 17 00:00:00 2001 From: "M. Liebmann" Date: Wed, 12 Feb 2014 05:45:51 +0100 Subject: [PATCH] yWeb: Synchronize volume/audiomute settings yWeb => GUI --- src/driver/rcinput.cpp | 8 ++++++++ src/driver/volume.cpp | 9 +++++++++ src/driver/volume.h | 1 + src/neutrino.cpp | 8 ++++++++ src/neutrinoMessages.h | 5 ++++- src/nhttpd/tuxboxapi/coolstream/controlapi.cpp | 8 +++++--- src/nhttpd/tuxboxapi/coolstream/neutrinoapi.cpp | 2 ++ 7 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index b1b2d895f..b0c22373b 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -865,6 +865,14 @@ void CRCInput::getMsg_us(neutrino_msg_t * msg, neutrino_msg_data_t * data, uint6 *msg = NeutrinoMessages::EVT_HDMI_CEC_STANDBY; *data = 0; break; + case NeutrinoMessages::EVT_SET_MUTE : + *msg = NeutrinoMessages::EVT_SET_MUTE; + *data = *(char*) p; + break; + case NeutrinoMessages::EVT_SET_VOLUME : + *msg = NeutrinoMessages::EVT_SET_VOLUME; + *data = *(char*) p; + break; default: printf("[neutrino] event INITID_HTTPD - unknown eventID 0x%x\n", emsg.eventID ); } diff --git a/src/driver/volume.cpp b/src/driver/volume.cpp index a8fe704a3..af9a0d178 100644 --- a/src/driver/volume.cpp +++ b/src/driver/volume.cpp @@ -74,6 +74,15 @@ void CVolume::setvol(int vol) CZapit::getInstance()->SetVolume(vol); } +void CVolume::setVolumeExt(int vol) +{ + g_settings.current_volume = vol; + CZapit::getInstance()->SetVolume(vol); + CVFD::getInstance()->showVolume(vol); + if (CNeutrinoApp::getInstance()->isMuted() && vol > 0) + CAudioMute::getInstance()->AudioMute(false, true); +} + void CVolume::setVolume(const neutrino_msg_t key) { neutrino_msg_t msg = key; diff --git a/src/driver/volume.h b/src/driver/volume.h index ecf019734..430ed7444 100644 --- a/src/driver/volume.h +++ b/src/driver/volume.h @@ -48,6 +48,7 @@ class CVolume : public CChangeObserver void setvol(int vol); void setVolume(const neutrino_msg_t key); + void setVolumeExt(int vol); void SetCurrentPid(int pid) { apid = pid; } void SetCurrentChannel(t_channel_id id) { channel_id = id; } diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 1a7252e03..1ac315627 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -3045,6 +3045,14 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) return messages_return::handled; } + else if (msg == NeutrinoMessages::EVT_SET_MUTE) { + g_audioMute->AudioMute((int)data, true); + return messages_return::handled; + } + else if (msg == NeutrinoMessages::EVT_SET_VOLUME) { + g_volume->setVolumeExt((int)data); + return messages_return::handled; + } if ((msg >= CRCInput::RC_WithData) && (msg < CRCInput::RC_WithData + 0x10000000)) delete [] (unsigned char*) data; diff --git a/src/neutrinoMessages.h b/src/neutrinoMessages.h index 51a1b2cab..a0b042ae6 100644 --- a/src/neutrinoMessages.h +++ b/src/neutrinoMessages.h @@ -153,7 +153,10 @@ struct NeutrinoMessages { EVT_BACK_ZAP_COMPLETE = CRCInput::RC_WithData + 25, /* data: (t_channel_id *) */ EVT_HDMI_CEC_VIEW_ON = CRCInput::RC_WithData + 26, - EVT_HDMI_CEC_STANDBY = CRCInput::RC_WithData + 27 + EVT_HDMI_CEC_STANDBY = CRCInput::RC_WithData + 27, + + EVT_SET_MUTE = CRCInput::RC_WithData + 28, + EVT_SET_VOLUME = CRCInput::RC_WithData + 29 }; enum { diff --git a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp index b61e35409..283ce2871 100644 --- a/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/controlapi.cpp @@ -781,12 +781,14 @@ void CControlAPI::VolumeCGI(CyhookHandler *hh) } else if (hh->ParamList["1"].compare("mute") == 0) { - NeutrinoAPI->Zapit->muteAudio(true); + char mute = 1; + NeutrinoAPI->EventServer->sendEvent(NeutrinoMessages::EVT_SET_MUTE, CEventServer::INITID_HTTPD, (void *)&mute, sizeof(char)); hh->SendOk(); } else if (hh->ParamList["1"].compare("unmute") == 0) { - NeutrinoAPI->Zapit->muteAudio(false); + char mute = 0; + NeutrinoAPI->EventServer->sendEvent(NeutrinoMessages::EVT_SET_MUTE, CEventServer::INITID_HTTPD, (void *)&mute, sizeof(char)); hh->SendOk(); } else if (hh->ParamList["1"].compare("status") == 0) { // Mute status @@ -794,7 +796,7 @@ void CControlAPI::VolumeCGI(CyhookHandler *hh) } else if(hh->ParamList["1"]!="") { //set volume char vol = atol( hh->ParamList["1"].c_str() ); - NeutrinoAPI->Zapit->setVolume(vol,vol); + NeutrinoAPI->EventServer->sendEvent(NeutrinoMessages::EVT_SET_VOLUME, CEventServer::INITID_HTTPD, (void *)&vol, sizeof(char)); hh->SendOk(); } else diff --git a/src/nhttpd/tuxboxapi/coolstream/neutrinoapi.cpp b/src/nhttpd/tuxboxapi/coolstream/neutrinoapi.cpp index 4f285b586..83d8f78a1 100644 --- a/src/nhttpd/tuxboxapi/coolstream/neutrinoapi.cpp +++ b/src/nhttpd/tuxboxapi/coolstream/neutrinoapi.cpp @@ -132,6 +132,8 @@ CNeutrinoAPI::CNeutrinoAPI() EventServer->registerEvent2( NeutrinoMessages::RELOAD_SETUP, CEventServer::INITID_HTTPD, "/tmp/neutrino.sock");//reload neutrino conf EventServer->registerEvent2( NeutrinoMessages::EVT_HDMI_CEC_VIEW_ON, CEventServer::INITID_HTTPD, "/tmp/neutrino.sock"); EventServer->registerEvent2( NeutrinoMessages::EVT_HDMI_CEC_STANDBY, CEventServer::INITID_HTTPD, "/tmp/neutrino.sock"); + EventServer->registerEvent2( NeutrinoMessages::EVT_SET_MUTE, CEventServer::INITID_HTTPD, "/tmp/neutrino.sock"); + EventServer->registerEvent2( NeutrinoMessages::EVT_SET_VOLUME, CEventServer::INITID_HTTPD, "/tmp/neutrino.sock"); } //-------------------------------------------------------------------------