mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 04:50:29 -04:00 
			
		
		
		
	Scope: save/load traces memory: fixed trace length and pre trigger info propagation to GUI
This commit is contained in:
		
							parent
							
								
									a03165c688
								
							
						
					
					
						commit
						efb48ce1cc
					
				| @ -42,6 +42,7 @@ const uint ScopeVis::m_traceChunkSize = 4800; | ||||
| ScopeVis::ScopeVis(GLScope* glScope) : | ||||
|     m_glScope(glScope), | ||||
|     m_preTriggerDelay(0), | ||||
|     m_livePreTriggerDelay(0), | ||||
|     m_currentTriggerIndex(0), | ||||
|     m_focusedTriggerIndex(0), | ||||
|     m_triggerState(TriggerUntriggered), | ||||
| @ -94,7 +95,7 @@ void ScopeVis::setSampleRate(int sampleRate) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void ScopeVis::setTraceSize(uint32_t traceSize) | ||||
| void ScopeVis::setTraceSize(uint32_t traceSize, bool emitSignal) | ||||
| { | ||||
|     m_traceSize = traceSize; | ||||
|     m_traces.resize(m_traceSize); | ||||
| @ -102,7 +103,16 @@ void ScopeVis::setTraceSize(uint32_t traceSize) | ||||
|     initTraceBuffers(); | ||||
| 
 | ||||
|     if (m_glScope) { | ||||
|         m_glScope->setTraceSize(m_traceSize); | ||||
|         m_glScope->setTraceSize(m_traceSize, emitSignal); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void ScopeVis::setPreTriggerDelay(uint32_t preTriggerDelay, bool emitSignal) | ||||
| { | ||||
|     m_preTriggerDelay = preTriggerDelay; | ||||
| 
 | ||||
|     if (m_glScope) { | ||||
|         m_glScope->setTriggerPre(m_preTriggerDelay, emitSignal); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -652,11 +662,7 @@ bool ScopeVis::handleMessage(const Message& message) | ||||
| 
 | ||||
|         if (m_preTriggerDelay != triggerPre) | ||||
|         { | ||||
|             m_preTriggerDelay = triggerPre; | ||||
| 
 | ||||
|             if (m_glScope) { | ||||
|                 m_glScope->setTriggerPre(m_preTriggerDelay); | ||||
|             } | ||||
|             setPreTriggerDelay(triggerPre); | ||||
|         } | ||||
| 
 | ||||
|         if (freeRun != m_freeRun) | ||||
| @ -844,16 +850,20 @@ bool ScopeVis::handleMessage(const Message& message) | ||||
|         if (memoryIndex != m_currentTraceMemoryIndex) | ||||
|         { | ||||
|             // transition from live mode
 | ||||
|             if (memoryIndex == 0) { | ||||
|             if (m_currentTraceMemoryIndex == 0) | ||||
|             { | ||||
|                 m_liveTraceSize = m_traceSize; | ||||
|                 m_livePreTriggerDelay = m_preTriggerDelay; | ||||
|             } | ||||
| 
 | ||||
|             m_currentTraceMemoryIndex = memoryIndex; | ||||
| 
 | ||||
|             if (m_currentTraceMemoryIndex == 0) // transition to live mode
 | ||||
|             // transition to live mode
 | ||||
|             if (m_currentTraceMemoryIndex == 0) | ||||
|             { | ||||
|                 setSampleRate(m_liveSampleRate); // reset to live rate
 | ||||
|                 setTraceSize(m_liveTraceSize); // reset to live trace size
 | ||||
|                 setTraceSize(m_liveTraceSize, true); // reset to live trace size
 | ||||
|                 setPreTriggerDelay(m_livePreTriggerDelay, true); // reset to live pre-trigger delay
 | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|  | ||||
| @ -172,9 +172,10 @@ public: | ||||
|         SimpleSerializer s(1); | ||||
| 
 | ||||
|         s.writeU32(1, m_traceSize); | ||||
|         s.writeS32(2, m_sampleRate); | ||||
|         s.writeU32(2, m_preTriggerDelay); | ||||
|         s.writeS32(3, m_sampleRate); | ||||
|         QByteArray buffer = m_traceDiscreteMemory.serialize(); | ||||
|         s.writeBlob(3, buffer); | ||||
|         s.writeBlob(4, buffer); | ||||
| 
 | ||||
|         return s.final(); | ||||
|     } | ||||
| @ -189,16 +190,18 @@ public: | ||||
| 
 | ||||
|         if (d.getVersion() == 1) | ||||
|         { | ||||
|             uint32_t traceSize; | ||||
|             uint32_t traceSize, preTriggerDelay; | ||||
|             int sampleRate; | ||||
|             QByteArray buf; | ||||
|             bool traceDiscreteMemorySuccess; | ||||
| 
 | ||||
|             d.readU32(1, &traceSize, m_traceChunkSize); | ||||
|             d.readS32(2, &sampleRate, 0); | ||||
|             d.readU32(2, &preTriggerDelay, 0); | ||||
|             d.readS32(3, &sampleRate, 0); | ||||
|             setSampleRate(sampleRate); | ||||
|             setTraceSize(traceSize); | ||||
|             d.readBlob(3, &buf); | ||||
|             setTraceSize(traceSize, true); | ||||
|             setPreTriggerDelay(preTriggerDelay, true); | ||||
|             d.readBlob(4, &buf); | ||||
|             traceDiscreteMemorySuccess = m_traceDiscreteMemory.deserialize(buf); | ||||
| 
 | ||||
|             if (traceDiscreteMemorySuccess && (m_glScope) && (m_currentTraceMemoryIndex > 0)) { | ||||
| @ -1087,6 +1090,7 @@ private: | ||||
| 
 | ||||
|     GLScope* m_glScope; | ||||
|     uint32_t m_preTriggerDelay;                    //!< Pre-trigger delay in number of samples
 | ||||
|     uint32_t m_livePreTriggerDelay;                //!< Pre-trigger delay in number of samples in live mode
 | ||||
|     std::vector<TriggerCondition*> m_triggerConditions; //!< Chain of triggers
 | ||||
|     uint32_t m_currentTriggerIndex;                //!< Index of current index in the chain
 | ||||
|     uint32_t m_focusedTriggerIndex;                //!< Index of the trigger that has focus
 | ||||
| @ -1170,7 +1174,12 @@ private: | ||||
|     /**
 | ||||
|      * Set the traces size | ||||
|      */ | ||||
|     void setTraceSize(uint32_t traceSize); | ||||
|     void setTraceSize(uint32_t traceSize, bool emitSignal = false); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Set the pre trigger delay | ||||
|      */ | ||||
|     void setPreTriggerDelay(uint32_t preTriggerDelay, bool emitSignal = false); | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -938,11 +938,15 @@ void GLScope::setTimeBase(int timeBase) | ||||
|     update(); | ||||
| } | ||||
| 
 | ||||
| void GLScope::setTriggerPre(uint32_t triggerPre) | ||||
| void GLScope::setTriggerPre(uint32_t triggerPre, bool emitSignal) | ||||
| { | ||||
|     m_triggerPre = triggerPre; | ||||
|     m_configChanged = true; | ||||
|     update(); | ||||
| 
 | ||||
|     if (emitSignal) { | ||||
|         emit preTriggerChanged(m_triggerPre); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void GLScope::setTimeOfsProMill(int timeOfsProMill) | ||||
| @ -966,11 +970,15 @@ void GLScope::setDisplayMode(DisplayMode displayMode) | ||||
|     update(); | ||||
| } | ||||
| 
 | ||||
| void GLScope::setTraceSize(int traceSize) | ||||
| void GLScope::setTraceSize(int traceSize, bool emitSignal) | ||||
| { | ||||
|     m_traceSize = traceSize; | ||||
|     m_configChanged = true; | ||||
|     update(); | ||||
| 
 | ||||
|     if (emitSignal) { | ||||
|         emit traceSizeChanged(m_traceSize); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void GLScope::updateDisplay() | ||||
|  | ||||
| @ -58,13 +58,13 @@ public: | ||||
|     int getSampleRate() const { return m_sampleRate; } | ||||
|     int getTraceSize() const { return m_traceSize; } | ||||
| 
 | ||||
|     void setTriggerPre(uint32_t triggerPre); //!< number of samples
 | ||||
|     void setTriggerPre(uint32_t triggerPre, bool emitSignal = false); //!< number of samples
 | ||||
|     void setTimeOfsProMill(int timeOfsProMill); | ||||
|     void setSampleRate(int sampleRate); | ||||
|     void setTimeBase(int timeBase); | ||||
|     void setFocusedTraceIndex(uint32_t traceIndex); | ||||
|     void setDisplayMode(DisplayMode displayMode); | ||||
|     void setTraceSize(int trceSize); | ||||
|     void setTraceSize(int trceSize, bool emitSignal = false); | ||||
|     void updateDisplay(); | ||||
|     void setDisplayGridIntensity(int intensity); | ||||
|     void setDisplayTraceIntensity(int intensity); | ||||
| @ -78,6 +78,8 @@ public: | ||||
| 
 | ||||
| signals: | ||||
|     void sampleRateChanged(int); | ||||
|     void traceSizeChanged(uint32_t); | ||||
|     void preTriggerChanged(uint32_t); //!< number of samples
 | ||||
| 
 | ||||
| private: | ||||
|     std::vector<ScopeVis::TraceData> *m_tracesData; | ||||
|  | ||||
| @ -104,6 +104,8 @@ void GLScopeGUI::setBuddies(MessageQueue* messageQueue, ScopeVis* scopeVis, GLSc | ||||
| 
 | ||||
|     setEnabled(true); | ||||
|     connect(m_glScope, SIGNAL(sampleRateChanged(int)), this, SLOT(on_scope_sampleRateChanged(int))); | ||||
|     connect(m_glScope, SIGNAL(traceSizeChanged(uint32_t)), this, SLOT(on_scope_traceSizeChanged(uint32_t))); | ||||
|     connect(m_glScope, SIGNAL(preTriggerChanged(uint32_t)), this, SLOT(on_scope_preTriggerChanged(uint32_t))); | ||||
| 
 | ||||
|     ui->traceMode->clear(); | ||||
|     fillProjectionCombo(ui->traceMode); | ||||
| @ -149,6 +151,21 @@ void GLScopeGUI::on_scope_sampleRateChanged(int sampleRate) | ||||
|     setTrigDelayDisplay(); | ||||
| } | ||||
| 
 | ||||
| void GLScopeGUI::on_scope_traceSizeChanged(uint32_t traceNbSamples) | ||||
| { | ||||
|     qDebug("GLScopeGUI::on_scope_traceSizeChanged: %u", traceNbSamples); | ||||
|     m_traceLenMult = traceNbSamples / ScopeVis::m_traceChunkSize; | ||||
|     ui->traceLen->setValue(m_traceLenMult); | ||||
|     setTraceLenDisplay(); | ||||
| } | ||||
| 
 | ||||
| void GLScopeGUI::on_scope_preTriggerChanged(uint32_t preTriggerNbSamples) | ||||
| { | ||||
|     qDebug("GLScopeGUI::on_scope_preTriggerChanged: %u", preTriggerNbSamples); | ||||
|     ui->trigPre->setValue(preTriggerNbSamples*100 / m_glScope->getTraceSize()); // slider position is a percentage value of the trace size
 | ||||
|     setTrigPreDisplay(); | ||||
| } | ||||
| 
 | ||||
| void GLScopeGUI::resetToDefaults() | ||||
| { | ||||
| } | ||||
|  | ||||
| @ -185,6 +185,8 @@ private: | ||||
| 
 | ||||
| private slots: | ||||
|     void on_scope_sampleRateChanged(int value); | ||||
|     void on_scope_traceSizeChanged(uint32_t value); | ||||
|     void on_scope_preTriggerChanged(uint32_t value); | ||||
|     // First row
 | ||||
|     void on_onlyX_toggled(bool checked); | ||||
|     void on_onlyY_toggled(bool checked); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user