1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-12-23 10:05:46 -05:00

GLScope redesign: settings synchro (1)

This commit is contained in:
f4exb 2021-06-11 00:21:42 +02:00
parent e699099946
commit 5d615e453c
3 changed files with 130 additions and 125 deletions

View File

@ -26,7 +26,6 @@
#include "dsp/glscopeinterface.h"
MESSAGE_CLASS_DEFINITION(ScopeVis::MsgConfigureScopeVis, Message)
MESSAGE_CLASS_DEFINITION(ScopeVis::MsgConfigureScopeVisNG, Message)
MESSAGE_CLASS_DEFINITION(ScopeVis::MsgScopeVisAddTrigger, Message)
MESSAGE_CLASS_DEFINITION(ScopeVis::MsgScopeVisChangeTrigger, Message)
MESSAGE_CLASS_DEFINITION(ScopeVis::MsgScopeVisRemoveTrigger, Message)
@ -71,15 +70,18 @@ ScopeVis::ScopeVis() :
{
setObjectName("ScopeVis");
m_traceDiscreteMemory.resize(GLScopeSettings::m_traceChunkDefaultSize); // arbitrary
for (int i = 0; i < (int) Projector::nbProjectionTypes; i++) {
m_projectorCache[i] = 0.0;
}
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));
}
ScopeVis::~ScopeVis()
{
disconnect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));
for (std::vector<TriggerCondition*>::iterator it = m_triggerConditions.begin(); it != m_triggerConditions.end(); ++ it) {
delete *it;
}
@ -141,17 +143,11 @@ void ScopeVis::configure(
)
{
QMutexLocker configLocker(&m_mutex);
// MsgConfigureScopeVisNG& conf = (MsgConfigureScopeVisNG&) message;
// uint32_t nbStreams = conf.getNbStreams();
// uint32_t traceSize = conf.getTraceSize();
// uint32_t timeBase = conf.getTimeBase();
// uint32_t timeOfsProMill = conf.getTimeOfsProMill();
// uint32_t triggerPre = conf.getTriggerPre();
// bool freeRun = conf.getFreeRun();
if (m_traceSize != traceSize) {
if (m_traceSize != traceSize)
{
setTraceSize(traceSize);
m_settings.m_traceLen = traceSize;
}
if (m_nbStreams != nbStreams)
@ -163,6 +159,7 @@ void ScopeVis::configure(
if (m_timeBase != timeBase)
{
m_timeBase = timeBase;
m_settings.m_time = timeBase;
if (m_glScope) {
m_glScope->setTimeBase(m_timeBase);
@ -172,21 +169,24 @@ void ScopeVis::configure(
if (m_timeOfsProMill != timeOfsProMill)
{
m_timeOfsProMill = timeOfsProMill;
m_settings.m_timeOfs = timeOfsProMill;
if (m_glScope) {
m_glScope->setTimeOfsProMill(m_timeOfsProMill);
}
}
if (m_preTriggerDelay != triggerPre) {
if (m_preTriggerDelay != triggerPre)
{
setPreTriggerDelay(triggerPre);
m_settings.m_trigPre = triggerPre;
}
if (freeRun != m_freeRun) {
m_freeRun = freeRun;
}
qDebug() << "ScopeVis::handleMessage: MsgConfigureScopeVisNG:"
qDebug() << "ScopeVis::configure:"
<< " m_nbStreams: " << m_nbStreams
<< " m_traceSize: " << m_traceSize
<< " m_timeOfsProMill: " << m_timeOfsProMill
@ -196,9 +196,24 @@ void ScopeVis::configure(
if ((m_glScope) && (m_currentTraceMemoryIndex > 0)) {
processMemoryTrace();
}
}
// Message* cmd = MsgConfigureScopeVisNG::create(nbStreams, traceSize, timeBase, timeOfsProMill, triggerPre, freeRun);
// getInputMessageQueue()->push(cmd);
void ScopeVis::configure(
GLScopeSettings::DisplayMode displayMode,
uint32_t traceIntensity,
uint32_t gridIntensity
)
{
QMutexLocker configLocker(&m_mutex);
m_settings.m_displayMode = displayMode;
m_settings.m_traceIntensity = traceIntensity;
m_settings.m_gridIntensity = gridIntensity;
qDebug() << "ScopeVis::configure:"
<< " displayMode: " << displayMode
<< " traceIntensity: " << traceIntensity
<< " gridIntensity: " << gridIntensity;
}
void ScopeVis::addTrace(const GLScopeSettings::TraceData& traceData)
@ -212,6 +227,7 @@ void ScopeVis::addTrace(const GLScopeSettings::TraceData& traceData)
updateMaxTraceDelay();
computeDisplayTriggerLevels();
updateGLScopeDisplay();
m_settings.m_tracesData.push_back(traceData);
}
void ScopeVis::changeTrace(const GLScopeSettings::TraceData& traceData, uint32_t traceIndex)
@ -230,6 +246,10 @@ void ScopeVis::changeTrace(const GLScopeSettings::TraceData& traceData, uint32_t
}
updateGLScopeDisplay();
if (traceIndex < m_settings.m_tracesData.size()) {
m_settings.m_tracesData[traceIndex] = traceData;
}
}
void ScopeVis::removeTrace(uint32_t traceIndex)
@ -240,6 +260,15 @@ void ScopeVis::removeTrace(uint32_t traceIndex)
updateMaxTraceDelay();
computeDisplayTriggerLevels();
updateGLScopeDisplay();
unsigned int iDest = 0;
for (unsigned int iSource = 0; iSource < m_settings.m_tracesData.size(); iSource++)
{
if (iSource != traceIndex) {
m_settings.m_tracesData[iDest++] = m_settings.m_tracesData[iSource];
}
}
}
void ScopeVis::moveTrace(uint32_t traceIndex, bool upElseDown)
@ -250,6 +279,11 @@ void ScopeVis::moveTrace(uint32_t traceIndex, bool upElseDown)
m_traces.moveTrace(traceIndex, upElseDown);
computeDisplayTriggerLevels();
updateGLScopeDisplay();
int nextTraceIndex = (traceIndex + (upElseDown ? 1 : -1)) % m_settings.m_tracesData.size();
GLScopeSettings::TraceData nextTraceData = m_settings.m_tracesData[nextTraceIndex];
m_settings.m_tracesData[nextTraceIndex] = m_settings.m_tracesData[traceIndex];
m_settings.m_tracesData[traceIndex] = nextTraceData;
}
void ScopeVis::focusOnTrace(uint32_t traceIndex)
@ -271,6 +305,7 @@ void ScopeVis::addTrigger(const GLScopeSettings::TriggerData& triggerData)
{
m_triggerConditions.push_back(new TriggerCondition(triggerData));
m_triggerConditions.back()->initProjector();
m_settings.m_triggersData.push_back(triggerData);
}
void ScopeVis::changeTrigger(const GLScopeSettings::TriggerData& triggerData, uint32_t triggerIndex)
@ -290,6 +325,10 @@ void ScopeVis::changeTrigger(const GLScopeSettings::TriggerData& triggerData, ui
updateGLScopeDisplay();
}
}
if (triggerIndex < m_settings.m_triggersData.size()) {
m_settings.m_triggersData[triggerIndex] = triggerData;
}
}
void ScopeVis::removeTrigger(uint32_t triggerIndex)
@ -300,6 +339,15 @@ void ScopeVis::removeTrigger(uint32_t triggerIndex)
m_triggerConditions.erase(m_triggerConditions.begin() + triggerIndex);
delete triggerCondition;
}
unsigned int iDest = 0;
for (unsigned int iSource = 0; iSource < m_settings.m_triggersData.size(); iSource++)
{
if (iSource != triggerIndex) {
m_settings.m_triggersData[iDest++] = m_settings.m_triggersData[iSource];
}
}
}
void ScopeVis::moveTrigger(uint32_t triggerIndex, bool upElseDown)
@ -317,6 +365,11 @@ void ScopeVis::moveTrigger(uint32_t triggerIndex, bool upElseDown)
}
updateGLScopeDisplay();
int nextTriggerIndexSettings = (triggerIndex + (upElseDown ? 1 : -1)) % m_settings.m_triggersData.size();
GLScopeSettings::TriggerData nextTriggerData = m_settings.m_triggersData[nextTriggerIndexSettings];
m_settings.m_triggersData[nextTriggerIndexSettings] = m_settings.m_triggersData[triggerIndex];
m_settings.m_triggersData[triggerIndex] = nextTriggerData;
}
void ScopeVis::focusOnTrigger(uint32_t triggerIndex)
@ -861,67 +914,6 @@ bool ScopeVis::handleMessage(const Message& message)
applySettings(cmd.getSettings(), cmd.getForce());
return true;
}
else if (MsgConfigureScopeVisNG::match(message))
{
QMutexLocker configLocker(&m_mutex);
MsgConfigureScopeVisNG& conf = (MsgConfigureScopeVisNG&) message;
uint32_t nbStreams = conf.getNbStreams();
uint32_t traceSize = conf.getTraceSize();
uint32_t timeBase = conf.getTimeBase();
uint32_t timeOfsProMill = conf.getTimeOfsProMill();
uint32_t triggerPre = conf.getTriggerPre();
bool freeRun = conf.getFreeRun();
if (m_traceSize != traceSize) {
setTraceSize(traceSize);
}
if (m_nbStreams != nbStreams)
{
m_traceDiscreteMemory.setNbStreams(nbStreams);
m_nbStreams = nbStreams;
}
if (m_timeBase != timeBase)
{
m_timeBase = timeBase;
if (m_glScope) {
m_glScope->setTimeBase(m_timeBase);
}
}
if (m_timeOfsProMill != timeOfsProMill)
{
m_timeOfsProMill = timeOfsProMill;
if (m_glScope) {
m_glScope->setTimeOfsProMill(m_timeOfsProMill);
}
}
if (m_preTriggerDelay != triggerPre) {
setPreTriggerDelay(triggerPre);
}
if (freeRun != m_freeRun) {
m_freeRun = freeRun;
}
qDebug() << "ScopeVis::handleMessage: MsgConfigureScopeVisNG:"
<< " m_nbStreams: " << m_nbStreams
<< " m_traceSize: " << m_traceSize
<< " m_timeOfsProMill: " << m_timeOfsProMill
<< " m_preTriggerDelay: " << m_preTriggerDelay
<< " m_freeRun: " << m_freeRun;
if ((m_glScope) && (m_currentTraceMemoryIndex > 0)) {
processMemoryTrace();
}
return true;
}
else if (MsgScopeVisAddTrigger::match(message))
{
qDebug() << "ScopeVis::handleMessage: MsgScopeVisAddTrigger";

View File

@ -45,6 +45,7 @@ class SpectrumVis;
class SDRBASE_API ScopeVis : public QObject {
Q_OBJECT
public:
// === messages ===
// ---------------------------------------------
class MsgConfigureScopeVis : public Message {
MESSAGE_CLASS_DECLARATION
@ -344,7 +345,19 @@ public:
MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } //!< Get the queue for asynchronous inbound communication
void setLiveRate(int sampleRate);
void configure(uint32_t nbStreams, uint32_t traceSize, uint32_t timeBase, uint32_t timeOfsProMill, uint32_t triggerPre, bool freeRun);
void configure(
uint32_t nbStreams,
uint32_t traceSize,
uint32_t timeBase,
uint32_t timeOfsProMill,
uint32_t triggerPre,
bool freeRun
);
void configure(
GLScopeSettings::DisplayMode displayMode,
uint32_t traceIntensity,
uint32_t gridIntensity
);
void setOneShot(bool oneShot);
void setMemoryIndex(uint32_t memoryIndex);
void setTraceChunkSize(uint32_t chunkSize) { m_traceChunkSize = chunkSize; }
@ -426,55 +439,6 @@ public:
bool getFreeRun() const { return m_freeRun; }
private:
// === messages ===
// ---------------------------------------------
class MsgConfigureScopeVisNG : public Message {
MESSAGE_CLASS_DECLARATION
public:
static MsgConfigureScopeVisNG* create(
uint32_t nbStreams,
uint32_t traceSize,
uint32_t timeBase,
uint32_t timeOfsProMill,
uint32_t triggerPre,
bool freeRun)
{
return new MsgConfigureScopeVisNG(nbStreams, traceSize, timeBase, timeOfsProMill, triggerPre, freeRun);
}
uint32_t getNbStreams() const { return m_nbStreams; }
uint32_t getTraceSize() const { return m_traceSize; }
uint32_t getTimeBase() const { return m_timeBase; }
uint32_t getTimeOfsProMill() const { return m_timeOfsProMill; }
uint32_t getTriggerPre() const { return m_triggerPre; }
bool getFreeRun() const { return m_freeRun; }
private:
uint32_t m_nbStreams;
uint32_t m_traceSize;
uint32_t m_timeBase;
uint32_t m_timeOfsProMill;
uint32_t m_triggerPre;
bool m_freeRun;
MsgConfigureScopeVisNG(
uint32_t nbStreams,
uint32_t traceSize,
uint32_t timeBase,
uint32_t timeOfsProMill,
uint32_t triggerPre,
bool freeRun
) :
m_nbStreams(nbStreams),
m_traceSize(traceSize),
m_timeBase(timeBase),
m_timeOfsProMill(timeOfsProMill),
m_triggerPre(triggerPre),
m_freeRun(freeRun)
{}
};
/**
* Trigger stuff
*/

View File

@ -437,6 +437,12 @@ void GLScopeGUI::on_onlyX_toggled(bool checked)
ui->horizontalXY->setChecked(false);
ui->verticalXY->setChecked(false);
ui->polar->setChecked(false);
m_settings.m_displayMode = GLScopeSettings::DisplayX;
m_scopeVis->configure(
m_settings.m_displayMode,
m_settings.m_traceIntensity,
m_settings.m_gridIntensity
);
}
}
@ -454,6 +460,12 @@ void GLScopeGUI::on_onlyY_toggled(bool checked)
ui->horizontalXY->setChecked(false);
ui->verticalXY->setChecked(false);
ui->polar->setChecked(false);
m_settings.m_displayMode = GLScopeSettings::DisplayY;
m_scopeVis->configure(
m_settings.m_displayMode,
m_settings.m_traceIntensity,
m_settings.m_gridIntensity
);
}
}
@ -471,6 +483,12 @@ void GLScopeGUI::on_horizontalXY_toggled(bool checked)
ui->onlyY->setChecked(false);
ui->verticalXY->setChecked(false);
ui->polar->setChecked(false);
m_settings.m_displayMode = GLScopeSettings::DisplayXYH;
m_scopeVis->configure(
m_settings.m_displayMode,
m_settings.m_traceIntensity,
m_settings.m_gridIntensity
);
}
}
@ -488,6 +506,12 @@ void GLScopeGUI::on_verticalXY_toggled(bool checked)
ui->onlyY->setChecked(false);
ui->horizontalXY->setChecked(false);
ui->polar->setChecked(false);
m_settings.m_displayMode = GLScopeSettings::DisplayXYV;
m_scopeVis->configure(
m_settings.m_displayMode,
m_settings.m_traceIntensity,
m_settings.m_gridIntensity
);
}
}
@ -505,6 +529,12 @@ void GLScopeGUI::on_polar_toggled(bool checked)
ui->onlyY->setChecked(false);
ui->horizontalXY->setChecked(false);
ui->verticalXY->setChecked(false);
m_settings.m_displayMode = GLScopeSettings::DisplayPol;
m_scopeVis->configure(
m_settings.m_displayMode,
m_settings.m_traceIntensity,
m_settings.m_gridIntensity
);
}
}
@ -522,12 +552,24 @@ void GLScopeGUI::on_traceIntensity_valueChanged(int value)
{
ui->traceIntensity->setToolTip(QString("Trace intensity: %1").arg(value));
m_glScope->setDisplayTraceIntensity(value);
m_settings.m_traceIntensity = value;
m_scopeVis->configure(
m_settings.m_displayMode,
m_settings.m_traceIntensity,
m_settings.m_gridIntensity
);
}
void GLScopeGUI::on_gridIntensity_valueChanged(int value)
{
ui->gridIntensity->setToolTip(QString("Grid intensity: %1").arg(value));
m_glScope->setDisplayGridIntensity(value);
m_settings.m_gridIntensity = value;
m_scopeVis->configure(
m_settings.m_displayMode,
m_settings.m_traceIntensity,
m_settings.m_gridIntensity
);
}
void GLScopeGUI::on_time_valueChanged(int value)
@ -1661,6 +1703,13 @@ void GLScopeGUI::setDisplayMode(GLScopeSettings::DisplayMode displayMode)
break;
}
}
m_settings.m_displayMode = displayMode;
m_scopeVis->configure(
m_settings.m_displayMode,
m_settings.m_traceIntensity,
m_settings.m_gridIntensity
);
}
void GLScopeGUI::setTraceIntensity(int value)