MIMO: channel marker affinity with the stream being displayed on the main spectrum. Implemented in demod AM

pull/358/head
f4exb 2019-05-30 18:38:10 +02:00
rodzic d0c829f141
commit ecb4a08718
16 zmienionych plików z 66 dodań i 8 usunięć

Wyświetl plik

@ -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();
}

Wyświetl plik

@ -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

Wyświetl plik

@ -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

Wyświetl plik

@ -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

Wyświetl plik

@ -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);

Wyświetl plik

@ -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

Wyświetl plik

@ -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);

Wyświetl plik

@ -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

Wyświetl plik

@ -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

Wyświetl plik

@ -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

Wyświetl plik

@ -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();

Wyświetl plik

@ -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)

Wyświetl plik

@ -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();

Wyświetl plik

@ -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();

Wyświetl plik

@ -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;

Wyświetl plik

@ -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);