mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-03-23 12:48:49 -04:00
MIMO: channel marker affinity with the stream being displayed on the main spectrum. Implemented in demod AM
This commit is contained in:
parent
d0c829f141
commit
ecb4a08718
@ -240,6 +240,7 @@ void AMDemodGUI::onMenuDialogCalled(const QPoint &p)
|
||||
dialog.exec();
|
||||
|
||||
m_settings.m_streamIndex = dialog.getSelectedStreamIndex();
|
||||
m_channelMarker.setStreamIndex(m_settings.m_streamIndex);
|
||||
displayStreamIndex();
|
||||
applySettings();
|
||||
}
|
||||
|
@ -125,6 +125,7 @@ LocalSourceGUI::LocalSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, B
|
||||
m_channelMarker.setColor(m_settings.m_rgbColor);
|
||||
m_channelMarker.setCenterFrequency(0);
|
||||
m_channelMarker.setTitle("Local Source");
|
||||
m_channelMarker.setSourceOrSinkStream(false);
|
||||
m_channelMarker.blockSignals(false);
|
||||
m_channelMarker.setVisible(true); // activate signal on the last setting only
|
||||
|
||||
|
@ -342,6 +342,7 @@ AMModGUI::AMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampl
|
||||
m_channelMarker.setBandwidth(5000);
|
||||
m_channelMarker.setCenterFrequency(0);
|
||||
m_channelMarker.setTitle("AM Modulator");
|
||||
m_channelMarker.setSourceOrSinkStream(false);
|
||||
m_channelMarker.blockSignals(false);
|
||||
m_channelMarker.setVisible(true); // activate signal on the last setting only
|
||||
|
||||
|
@ -678,6 +678,7 @@ ATVModGUI::ATVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam
|
||||
m_channelMarker.setBandwidth(5000);
|
||||
m_channelMarker.setCenterFrequency(0);
|
||||
m_channelMarker.setTitle("ATV Modulator");
|
||||
m_channelMarker.setSourceOrSinkStream(false);
|
||||
m_channelMarker.blockSignals(false);
|
||||
m_channelMarker.setVisible(true); // activate signal on the last setting only
|
||||
|
||||
|
@ -375,6 +375,7 @@ FreeDVModGUI::FreeDVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
|
||||
ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold));
|
||||
ui->deltaFrequency->setValueRange(false, 7, -9999999, 9999999);
|
||||
|
||||
m_channelMarker.setSourceOrSinkStream(false);
|
||||
m_channelMarker.setVisible(true);
|
||||
|
||||
m_deviceUISet->registerTxChannelInstance(FreeDVMod::m_channelIdURI, this);
|
||||
|
@ -370,6 +370,7 @@ NFMModGUI::NFMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam
|
||||
m_channelMarker.setBandwidth(12500);
|
||||
m_channelMarker.setCenterFrequency(0);
|
||||
m_channelMarker.setTitle("NFM Modulator");
|
||||
m_channelMarker.setSourceOrSinkStream(false);
|
||||
m_channelMarker.blockSignals(false);
|
||||
m_channelMarker.setVisible(true); // activate signal on the last setting only
|
||||
|
||||
|
@ -455,6 +455,7 @@ SSBModGUI::SSBModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam
|
||||
m_channelMarker.setSidebands(ChannelMarker::usb);
|
||||
m_channelMarker.setCenterFrequency(0);
|
||||
m_channelMarker.setTitle("SSB Modulator");
|
||||
m_channelMarker.setSourceOrSinkStream(false);
|
||||
m_channelMarker.blockSignals(false);
|
||||
m_channelMarker.setVisible(true);
|
||||
|
||||
|
@ -360,6 +360,7 @@ WFMModGUI::WFMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam
|
||||
m_channelMarker.setBandwidth(125000);
|
||||
m_channelMarker.setCenterFrequency(0);
|
||||
m_channelMarker.setTitle("WFM Modulator");
|
||||
m_channelMarker.setSourceOrSinkStream(false);
|
||||
m_channelMarker.blockSignals(false);
|
||||
m_channelMarker.setVisible(true); // activate signal on the last setting only
|
||||
|
||||
|
@ -184,6 +184,7 @@ RemoteSourceGUI::RemoteSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet,
|
||||
m_channelMarker.setColor(m_settings.m_rgbColor);
|
||||
m_channelMarker.setCenterFrequency(0);
|
||||
m_channelMarker.setTitle("Remote source");
|
||||
m_channelMarker.setSourceOrSinkStream(false);
|
||||
m_channelMarker.blockSignals(false);
|
||||
m_channelMarker.setVisible(true); // activate signal on the last setting only
|
||||
|
||||
|
@ -159,6 +159,7 @@ UDPSourceGUI::UDPSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
|
||||
m_channelMarker.setCenterFrequency(0);
|
||||
m_channelMarker.setColor(m_settings.m_rgbColor);
|
||||
m_channelMarker.setTitle("UDP Sample Sink");
|
||||
m_channelMarker.setSourceOrSinkStream(false);
|
||||
m_channelMarker.blockSignals(false);
|
||||
m_channelMarker.setVisible(true); // activate signal on the last setting only
|
||||
|
||||
|
@ -153,6 +153,7 @@ void TestMIGui::on_streamIndex_currentIndexChanged(int index)
|
||||
if (ui->streamLock->isChecked())
|
||||
{
|
||||
m_spectrumStreamIndex = index;
|
||||
m_deviceUISet->m_spectrum->setDisplayedStream(true, index);
|
||||
m_deviceUISet->m_deviceAPI->setSpectrumSinkInput(true, m_spectrumStreamIndex);
|
||||
ui->spectrumSource->blockSignals(true);
|
||||
ui->spectrumSource->setCurrentIndex(index);
|
||||
@ -168,6 +169,7 @@ void TestMIGui::on_streamIndex_currentIndexChanged(int index)
|
||||
void TestMIGui::on_spectrumSource_currentIndexChanged(int index)
|
||||
{
|
||||
m_spectrumStreamIndex = index;
|
||||
m_deviceUISet->m_spectrum->setDisplayedStream(true, index);
|
||||
m_deviceUISet->m_deviceAPI->setSpectrumSinkInput(true, m_spectrumStreamIndex);
|
||||
updateSampleRateAndFrequency();
|
||||
|
||||
|
@ -37,7 +37,9 @@ ChannelMarker::ChannelMarker(QObject* parent) :
|
||||
m_highlighted(false),
|
||||
m_color(m_colorTable[m_nextColor]),
|
||||
m_movable(true),
|
||||
m_fScaleDisplayType(FScaleDisplay_freq)
|
||||
m_fScaleDisplayType(FScaleDisplay_freq),
|
||||
m_sourceOrSinkStream(true),
|
||||
m_streamIndex(0)
|
||||
{
|
||||
++m_nextColor;
|
||||
if(m_colorTable[m_nextColor] == 0)
|
||||
|
@ -72,6 +72,11 @@ public:
|
||||
const QString& getDisplayAddressSend() const { return m_displayAddressSend; }
|
||||
const QString& getDisplayAddressReceive() const { return m_displayAddressReceive; }
|
||||
|
||||
void setSourceOrSinkStream(bool sourceOrSinkStream) { m_sourceOrSinkStream = sourceOrSinkStream; }
|
||||
bool getSourceOrSinkStream() const { return m_sourceOrSinkStream; }
|
||||
void setStreamIndex(int streamIndex) { m_streamIndex = streamIndex; }
|
||||
int getStreamIndex() const { return m_streamIndex; }
|
||||
|
||||
virtual QByteArray serialize() const;
|
||||
virtual bool deserialize(const QByteArray& data);
|
||||
|
||||
@ -92,6 +97,8 @@ protected:
|
||||
QColor m_color;
|
||||
bool m_movable;
|
||||
frequencyScaleDisplay_t m_fScaleDisplayType;
|
||||
bool m_sourceOrSinkStream;
|
||||
int m_streamIndex;
|
||||
|
||||
void resetToDefaults();
|
||||
|
||||
|
@ -64,6 +64,8 @@ GLSpectrum::GLSpectrum(QWidget* parent) :
|
||||
m_histogram(0),
|
||||
m_displayHistogram(true),
|
||||
m_displayChanged(false),
|
||||
m_displaySourceOrSink(true),
|
||||
m_displayStreamIndex(0),
|
||||
m_matrixLoc(0),
|
||||
m_colorLoc(0),
|
||||
m_messageQueueToGUI(0)
|
||||
@ -605,7 +607,10 @@ void GLSpectrum::paintGL()
|
||||
for (int i = 0; i < m_channelMarkerStates.size(); ++i)
|
||||
{
|
||||
ChannelMarkerState* dv = m_channelMarkerStates[i];
|
||||
if (dv->m_channelMarker->getVisible())
|
||||
|
||||
if (dv->m_channelMarker->getVisible()
|
||||
&& (dv->m_channelMarker->getSourceOrSinkStream() == m_displaySourceOrSink)
|
||||
&& (dv->m_channelMarker->getStreamIndex() == m_displayStreamIndex))
|
||||
{
|
||||
{
|
||||
GLfloat q3[] {
|
||||
@ -693,7 +698,10 @@ void GLSpectrum::paintGL()
|
||||
for(int i = 0; i < m_channelMarkerStates.size(); ++i)
|
||||
{
|
||||
ChannelMarkerState* dv = m_channelMarkerStates[i];
|
||||
if(dv->m_channelMarker->getVisible())
|
||||
|
||||
if (dv->m_channelMarker->getVisible()
|
||||
&& (dv->m_channelMarker->getSourceOrSinkStream() == m_displaySourceOrSink)
|
||||
&& (dv->m_channelMarker->getStreamIndex() == m_displayStreamIndex))
|
||||
{
|
||||
{
|
||||
GLfloat q3[] {
|
||||
@ -784,7 +792,9 @@ void GLSpectrum::paintGL()
|
||||
ChannelMarkerState* dv = m_channelMarkerStates[i];
|
||||
|
||||
// frequency scale channel overlay
|
||||
if(dv->m_channelMarker->getVisible())
|
||||
if (dv->m_channelMarker->getVisible()
|
||||
&& (dv->m_channelMarker->getSourceOrSinkStream() == m_displaySourceOrSink)
|
||||
&& (dv->m_channelMarker->getStreamIndex() == m_displayStreamIndex))
|
||||
{
|
||||
{
|
||||
GLfloat q3[] {
|
||||
@ -1506,7 +1516,10 @@ void GLSpectrum::applyChanges()
|
||||
// Frequency overlay on highlighted marker
|
||||
for(int i = 0; i < m_channelMarkerStates.size(); ++i) {
|
||||
ChannelMarkerState* dv = m_channelMarkerStates[i];
|
||||
if (dv->m_channelMarker->getHighlighted())
|
||||
|
||||
if (dv->m_channelMarker->getVisible()
|
||||
&& (dv->m_channelMarker->getSourceOrSinkStream() == m_displaySourceOrSink)
|
||||
&& (dv->m_channelMarker->getStreamIndex() == m_displayStreamIndex))
|
||||
{
|
||||
qreal xc;
|
||||
int shift;
|
||||
@ -1651,7 +1664,9 @@ void GLSpectrum::mouseMoveEvent(QMouseEvent* event)
|
||||
{
|
||||
Real freq = m_frequencyScale.getValueFromPos(event->x() - m_leftMarginPixmap.width() - 1) - m_centerFrequency;
|
||||
|
||||
if (m_channelMarkerStates[m_cursorChannel]->m_channelMarker->getMovable())
|
||||
if (m_channelMarkerStates[m_cursorChannel]->m_channelMarker->getMovable()
|
||||
&& (m_channelMarkerStates[m_cursorChannel]->m_channelMarker->getSourceOrSinkStream() == m_displaySourceOrSink)
|
||||
&& (m_channelMarkerStates[m_cursorChannel]->m_channelMarker->getStreamIndex() == m_displayStreamIndex))
|
||||
{
|
||||
m_channelMarkerStates[m_cursorChannel]->m_channelMarker->setCenterFrequencyByCursor(freq);
|
||||
channelMarkerChanged();
|
||||
@ -1662,6 +1677,12 @@ void GLSpectrum::mouseMoveEvent(QMouseEvent* event)
|
||||
{
|
||||
for (int i = 0; i < m_channelMarkerStates.size(); ++i)
|
||||
{
|
||||
if ((m_channelMarkerStates[i]->m_channelMarker->getSourceOrSinkStream() != m_displaySourceOrSink)
|
||||
|| (m_channelMarkerStates[i]->m_channelMarker->getStreamIndex() != m_displayStreamIndex))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (m_channelMarkerStates[i]->m_rect.contains(event->pos()))
|
||||
{
|
||||
if (m_cursorState == CSNormal)
|
||||
@ -1721,7 +1742,9 @@ void GLSpectrum::mousePressEvent(QMouseEvent* event)
|
||||
m_cursorChannel = 0;
|
||||
Real freq = m_frequencyScale.getValueFromPos(event->x() - m_leftMarginPixmap.width() - 1) - m_centerFrequency;
|
||||
|
||||
if(m_channelMarkerStates[m_cursorChannel]->m_channelMarker->getMovable())
|
||||
if (m_channelMarkerStates[m_cursorChannel]->m_channelMarker->getMovable()
|
||||
&& (m_channelMarkerStates[m_cursorChannel]->m_channelMarker->getSourceOrSinkStream() == m_displaySourceOrSink)
|
||||
&& (m_channelMarkerStates[m_cursorChannel]->m_channelMarker->getStreamIndex() == m_displayStreamIndex))
|
||||
{
|
||||
m_channelMarkerStates[m_cursorChannel]->m_channelMarker->setCenterFrequencyByCursor(freq);
|
||||
channelMarkerChanged();
|
||||
@ -1756,6 +1779,12 @@ void GLSpectrum::wheelEvent(QWheelEvent *event)
|
||||
|
||||
for (int i = 0; i < m_channelMarkerStates.size(); ++i)
|
||||
{
|
||||
if ((m_channelMarkerStates[i]->m_channelMarker->getSourceOrSinkStream() != m_displaySourceOrSink)
|
||||
|| (m_channelMarkerStates[i]->m_channelMarker->getStreamIndex() != m_displayStreamIndex))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (m_channelMarkerStates[i]->m_rect.contains(event->pos()))
|
||||
{
|
||||
int freq = m_channelMarkerStates[i]->m_channelMarker->getCenterFrequency();
|
||||
|
@ -96,6 +96,12 @@ public:
|
||||
void setWaterfallShare(Real waterfallShare);
|
||||
void connectTimer(const QTimer& timer);
|
||||
|
||||
void setDisplayedStream(bool sourceOrSink, int streamIndex)
|
||||
{
|
||||
m_displaySourceOrSink = sourceOrSink;
|
||||
m_displayStreamIndex = streamIndex;
|
||||
}
|
||||
|
||||
private:
|
||||
struct ChannelMarkerState {
|
||||
ChannelMarker* m_channelMarker;
|
||||
@ -180,8 +186,9 @@ private:
|
||||
QMatrix4x4 m_glHistogramSpectrumMatrix;
|
||||
QMatrix4x4 m_glHistogramBoxMatrix;
|
||||
bool m_displayHistogram;
|
||||
|
||||
bool m_displayChanged;
|
||||
bool m_displaySourceOrSink;
|
||||
int m_displayStreamIndex;
|
||||
|
||||
GLShaderSimple m_glShaderSimple;
|
||||
GLShaderTextured m_glShaderLeftScale;
|
||||
|
@ -362,6 +362,7 @@ void MainWindow::addSinkDevice()
|
||||
connect(m_deviceUIs.back()->m_samplingDeviceControl->getAddChannelButton(), SIGNAL(clicked(bool)), this, SLOT(channelAddClicked(bool)));
|
||||
|
||||
dspDeviceSinkEngine->addSpectrumSink(m_deviceUIs.back()->m_spectrumVis);
|
||||
m_deviceUIs.back()->m_spectrum->setDisplayedStream(false, 0);
|
||||
ui->tabSpectra->addTab(m_deviceUIs.back()->m_spectrum, tabNameCStr);
|
||||
ui->tabSpectraGUI->addTab(m_deviceUIs.back()->m_spectrumGUI, tabNameCStr);
|
||||
ui->tabChannels->addTab(m_deviceUIs.back()->m_channelWindow, tabNameCStr);
|
||||
|
Loading…
Reference in New Issue
Block a user