From bea0a2af94650ad99ba37e94c2aefd6c8cae7d61 Mon Sep 17 00:00:00 2001 From: Hane Date: Mon, 14 Aug 2023 16:10:35 +0200 Subject: [PATCH] broken: play dj outside, get it stuck --- src/back/backlasses.cpp | 30 ++++++++++++++++++++++-------- src/cont/contclasses.cpp | 10 +++++++++- src/cont/contclasses.h | 3 ++- src/qt/qtclasses.cpp | 24 ++++++++++++++++++++++-- src/qt/qtclasses.h | 3 +++ 5 files changed, 58 insertions(+), 12 deletions(-) diff --git a/src/back/backlasses.cpp b/src/back/backlasses.cpp index 928750e..5051b22 100644 --- a/src/back/backlasses.cpp +++ b/src/back/backlasses.cpp @@ -38,8 +38,16 @@ HRESULT EndpointCallback::QueryInterface(REFIID riid, VOID **ppvInterface) { HRESULT EndpointCallback::OnNotify(PAUDIO_VOLUME_NOTIFICATION_DATA pNotify) { if (pNotify == NULL) return E_INVALIDARG; - + + float extraChannelVol[pNotify->nChannels]; + bool multiChannel = false; AUDIO_VOLUME_NOTIFICATION_DATA eventData = *pNotify; + if(pNotify->nChannels > 1) { + multiChannel = true; + for (UINT i = 0; i < pNotify->nChannels; i++){ + extraChannelVol[i] = pNotify->afChannelVolumes[i]; + } + } NGuid* guid = osh->getGuid(); if (memcmp(guid, &eventData, sizeof(*guid)) == 0) { @@ -47,12 +55,18 @@ HRESULT EndpointCallback::OnNotify(PAUDIO_VOLUME_NOTIFICATION_DATA pNotify) { } else { log_debugcpp("Onnanokotify says Stored: " << guid->data1); log_debugcpp("Onnanokotify says Grace of God: " << eventData.guidEventContext.Data1); + osh->toggleFrontEvents(this->ep->getIndex(), false); osh->updateMuteCallback(this->ep->getIndex(), eventData.bMuted); osh->updateMainVolumeCallback(this->ep->getIndex(), eventData.fMasterVolume); log_debugcpp("Onnanokotify says Reported Channel Qty: " << eventData.nChannels); - for(UINT i = 0; i < eventData.nChannels; i++) { - osh->updateChannelVolumeCallback(this->ep->getIndex(), (uint32_t)i, eventData.afChannelVolumes[i]); - } + + if(multiChannel) + for(UINT i = 0; i < eventData.nChannels; i++) { + osh->updateChannelVolumeCallback(this->ep->getIndex(), (uint32_t)i, extraChannelVol[i]); + } + else + osh->updateChannelVolumeCallback(this->ep->getIndex(), (uint32_t)0, pNotify->afChannelVolumes[0]); + osh->toggleFrontEvents(this->ep->getIndex(), true); } return S_OK; @@ -130,10 +144,10 @@ bool Endpoint::getMute(){ void Endpoint::setVolume(NGuid* guid, int channel, float volume) { GUID tempMsGuid = NGuidToGUID(guid); if (channel == ENDPOINT_MASTER_VOLUME) { - if(FAILED(endpointVolume->SetMasterVolumeLevelScalar(volume, &tempMsGuid))) { log_debugcpp("si"); }; + if(FAILED(endpointVolume->SetMasterVolumeLevelScalar(volume, &tempMsGuid))) { log_debugcpp("MASTER VOLUME FAILED"); }; } else { - log_debugcpp("channel being updated: " << channel); - if(FAILED(endpointVolume->SetChannelVolumeLevelScalar(channel, volume, &tempMsGuid))) { log_debugcpp("si"); }; + log_debugcpp("Channel being updated: " << channel); + if(FAILED(endpointVolume->SetChannelVolumeLevelScalar(channel, volume, &tempMsGuid))) { log_debugcpp("CHANNEL "<< channel <<" VOLUME FAILED"); }; } } @@ -144,7 +158,7 @@ void Endpoint::setMute(NGuid* guid, bool muted) { //log_debugcpp("translate to BOOL as " << mut); //TODO: use new funcs GUID tempMsGuid = NGuidToGUID(guid); - if(FAILED(endpointVolume->SetMute(muted, &tempMsGuid))) { log_debugcpp("si"); }; + if(FAILED(endpointVolume->SetMute(muted, &tempMsGuid))) { log_debugcpp("MUTE FAILED"); }; } void Endpoint::setCallback(EndpointCallback *epc){ diff --git a/src/cont/contclasses.cpp b/src/cont/contclasses.cpp index 304547d..fb7a6c3 100644 --- a/src/cont/contclasses.cpp +++ b/src/cont/contclasses.cpp @@ -100,7 +100,6 @@ void OverseerHandler::reloadEndpointHandlers(){ //setEndpointHandlers(ephs); } - NGuid* OverseerHandler::getGuid() { return this->os.getGuid(); } @@ -128,7 +127,16 @@ void OverseerHandler::updateMainVolumeCallback(uint64_t idx, float newVal){ void OverseerHandler::updateChannelVolumeCallback(uint64_t idx, uint32_t channel, float newVal){ //int translatedNewVal = newVal * 100; + log_debugcpp("chanel: " << channel << " volcallback float: " << newVal); epwChannelVolumeFunc f = &EndpointWidget::updateChannelVolume; std::invoke(f, endpointWidgets.at(idx), channel, newVal); + + //TODO: Soy retrasado + //endpointWidgets.at(idx)->updateChannelVolume(channel, newVal); +} + +void OverseerHandler::toggleFrontEvents(uint64_t idx, bool active) { + epwToggleFrontFunc f = &EndpointWidget::toggleFrontEvents; + std::invoke(f, endpointWidgets.at(idx), active); } diff --git a/src/cont/contclasses.h b/src/cont/contclasses.h index 59dd035..da58587 100644 --- a/src/cont/contclasses.h +++ b/src/cont/contclasses.h @@ -40,6 +40,7 @@ public: void setVolume(NGuid* guid, int channel, int value); void setMute(NGuid* guid, bool muted); + ~EndpointHandler(); private: uint64_t idx; @@ -65,7 +66,7 @@ public: void updateMuteCallback(uint64_t idx, bool muted); void updateMainVolumeCallback(uint64_t idx, float newVal); void updateChannelVolumeCallback(uint64_t idx, uint32_t channel, float newVal); - + void toggleFrontEvents(uint64_t idx, bool active); //void parseExternalEndpointCallback(EndpointCallback *epc, PAUDIO_VOLUME_NOTIFICATION_DATA pNotify); //static Overseer* getOverseer(); diff --git a/src/qt/qtclasses.cpp b/src/qt/qtclasses.cpp index cdcb988..f6e01b4 100644 --- a/src/qt/qtclasses.cpp +++ b/src/qt/qtclasses.cpp @@ -73,9 +73,12 @@ EndpointWidget::EndpointWidget(EndpointHandler* eph, QWidget *parent) : QWidget( void EndpointWidget::updateMute(bool muted){ log_debugcpp("cliqui callboqui cloqui"); + //TODO: Here to diagnose slider visuals locking when playing DJ with external volume bar. Functionality is restored when mute checkbox is clicked. + //this->muteButton->blockSignals(true); this->eph->setMute(osh->getGuid(), muted); this->muteButton->setChecked(eph->getMute() ? true : false); - this->muteButton->setText(this->eph->getMute() ? STRING_UNMUTE : STRING_MUTE); + this->muteButton->setText(this->eph->getMute() ? STRING_UNMUTE : STRING_MUTE); + //this->muteButton->blockSignals(false); } void EndpointWidget::updateMute(int checked){ @@ -88,25 +91,42 @@ void EndpointWidget::updateMute(int checked){ } void EndpointWidget::updateMainVolume(int newValue){ - log_debugcpp("updateMainVolume slot"); + log_debugcpp("updateMainVolume slot."); this->eph->setVolume(osh->getGuid(), ENDPOINT_MASTER_VOLUME, newValue); } void EndpointWidget::updateMainVolume(float newValue){ int newVal = newValue * 100; + log_debugcpp("mainvolcallback int: " << newVal); + //this->mainSlider->blockSignals(true); + //TODO: Above if(this->mainSlider->value() != newVal) { this->mainSlider->setValue(newVal); } + //this->mainSlider->blockSignals(false); } void EndpointWidget::updateChannelVolume(uint32_t channel, float newValue){ int newVal = newValue * 100; + log_debugcpp("chanel: " << channel << " volcallback int: " << newVal); + //TODO: Above + //this->channelSliders.at(channel)->blockSignals(true); if(this->channelSliders.at(channel)->value() != newVal) { this->channelSliders.at(channel)->setValue(newVal); this->channelLabels.at(channel)->setText(QString::number((int)(newValue * 100))); } + //this->channelSliders.at(channel)->blockSignals(false); } +void EndpointWidget::toggleFrontEvents(bool active){ + this->muteButton->blockSignals(active); + this->mainSlider->blockSignals(active); + for(uint32_t i = 0; i < this->channelSliders.size(); i++){ + this->channelSliders.at(i)->blockSignals(active); + } +} + + void EndpointWidget::setIndex(uint64_t idx){ this->idx = idx; } diff --git a/src/qt/qtclasses.h b/src/qt/qtclasses.h index 79acc74..21bdf0d 100644 --- a/src/qt/qtclasses.h +++ b/src/qt/qtclasses.h @@ -71,6 +71,7 @@ public: void updateMainVolume(float newValue); void updateChannelVolume(uint32_t channel, float newValue); void updateMute(bool muted); + void toggleFrontEvents(bool active); //void populateEndpointWidget(EndpointHandler *eph); //void setEndpointHandlers(std::vector *ephs); @@ -93,6 +94,8 @@ private: typedef void (EndpointWidget::*epwMuteFunc)(bool muted); typedef void (EndpointWidget::*epwMainVolumeFunc)(float newValue); typedef void (EndpointWidget::*epwChannelVolumeFunc)(uint32_t channel, float newValue); +typedef void (EndpointWidget::*epwToggleFrontFunc)(bool active); + class MainWindow : public QMainWindow { Q_OBJECT