mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-13 20:01:46 -05:00
Scope: save/load traces memory (1)
This commit is contained in:
parent
b397cd3a4b
commit
5d57f40e83
@ -20,6 +20,10 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include <QByteArray>
|
||||||
|
|
||||||
|
#include "simpleserializer.h"
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
class DoubleBufferSimple
|
class DoubleBufferSimple
|
||||||
{
|
{
|
||||||
@ -89,6 +93,48 @@ public:
|
|||||||
unsigned int absoluteFill() const { return m_current - m_data.begin(); }
|
unsigned int absoluteFill() const { return m_current - m_data.begin(); }
|
||||||
void reset() { m_current = m_data.begin(); }
|
void reset() { m_current = m_data.begin(); }
|
||||||
|
|
||||||
|
QByteArray serialize() const
|
||||||
|
{
|
||||||
|
SimpleSerializer s(1);
|
||||||
|
|
||||||
|
QByteArray buf(reinterpret_cast<const char*>(m_data.data()), m_data.size()*sizeof(T));
|
||||||
|
s.writeS32(1, m_size);
|
||||||
|
s.writeU32(2, m_current - m_data.begin());
|
||||||
|
s.writeBlob(3, buf);
|
||||||
|
|
||||||
|
return s.final();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool deserialize(const QByteArray& data)
|
||||||
|
{
|
||||||
|
SimpleDeserializer d(data);
|
||||||
|
|
||||||
|
if(!d.isValid()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d.getVersion() == 1)
|
||||||
|
{
|
||||||
|
unsigned int tmpUInt;
|
||||||
|
QByteArray buf;
|
||||||
|
|
||||||
|
d.readS32(1, &m_size, m_data.size()/2);
|
||||||
|
m_data.resize(2*m_size);
|
||||||
|
d.readU32(2, &tmpUInt, 0);
|
||||||
|
m_current = m_data.begin() + tmpUInt;
|
||||||
|
d.readBlob(3, &buf);
|
||||||
|
const T* begin = reinterpret_cast<T*>(buf.data());
|
||||||
|
const T* end = begin + (buf.length()/sizeof(T));
|
||||||
|
std::copy(m_data.begin(), begin, end);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int m_size;
|
int m_size;
|
||||||
std::vector<T> m_data;
|
std::vector<T> m_data;
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include <QColorDialog>
|
#include <QColorDialog>
|
||||||
|
#include <QFileDialog>
|
||||||
|
|
||||||
#include "glscopegui.h"
|
#include "glscopegui.h"
|
||||||
#include "glscope.h"
|
#include "glscope.h"
|
||||||
@ -768,12 +769,43 @@ void GLScopeGUI::on_traceColor_clicked()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLScopeGUI::on_memorySave_clicked(bool checked __attribute__((unused)))
|
||||||
|
{
|
||||||
|
qDebug("GLScopeGUI::on_memorySave_clicked");
|
||||||
|
QString fileName = QFileDialog::getSaveFileName(this,
|
||||||
|
tr("Open trace memory file"), ".", tr("Trace memory files (*.trcm)"), 0, QFileDialog::DontUseNativeDialog);
|
||||||
|
|
||||||
|
if (fileName != "")
|
||||||
|
{
|
||||||
|
QFileInfo fileInfo(fileName);
|
||||||
|
|
||||||
|
if (fileInfo.suffix() != "trcm") {
|
||||||
|
fileName += ".trcm";
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug("GLScopeGUI::on_memorySave_clicked: %s", qPrintable(fileName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLScopeGUI::on_memoryLoad_clicked(bool checked __attribute__((unused)))
|
||||||
|
{
|
||||||
|
qDebug("GLScopeGUI::on_memoryLoad_clicked");
|
||||||
|
|
||||||
|
QString fileName = QFileDialog::getOpenFileName(this,
|
||||||
|
tr("Open trace memory file"), ".", tr("Trace memory files (*.trcm)"), 0, QFileDialog::DontUseNativeDialog);
|
||||||
|
|
||||||
|
if (fileName != "")
|
||||||
|
{
|
||||||
|
qDebug("GLScopeGUI::on_memoryLoad_clicked: %s", qPrintable(fileName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GLScopeGUI::on_mem_valueChanged(int value)
|
void GLScopeGUI::on_mem_valueChanged(int value)
|
||||||
{
|
{
|
||||||
QString text;
|
QString text;
|
||||||
text.sprintf("%02d", value);
|
text.sprintf("%02d", value);
|
||||||
ui->memText->setText(text);
|
ui->memText->setText(text);
|
||||||
disableLiveMode(value > 0); // block trigger UI line if memory is active
|
disableLiveMode(value > 0); // live / memory mode toggle
|
||||||
m_scopeVis->setMemoryIndex(value);
|
m_scopeVis->setMemoryIndex(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1224,6 +1256,8 @@ void GLScopeGUI::disableLiveMode(bool disable)
|
|||||||
ui->trigPre->setEnabled(!disable);
|
ui->trigPre->setEnabled(!disable);
|
||||||
ui->trigOneShot->setEnabled(!disable);
|
ui->trigOneShot->setEnabled(!disable);
|
||||||
ui->freerun->setEnabled(!disable);
|
ui->freerun->setEnabled(!disable);
|
||||||
|
ui->memorySave->setEnabled(disable);
|
||||||
|
ui->memoryLoad->setEnabled(disable);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLScopeGUI::fillTraceData(ScopeVis::TraceData& traceData)
|
void GLScopeGUI::fillTraceData(ScopeVis::TraceData& traceData)
|
||||||
|
@ -211,6 +211,8 @@ private slots:
|
|||||||
void on_traceDelayFine_valueChanged(int value);
|
void on_traceDelayFine_valueChanged(int value);
|
||||||
void on_traceView_toggled(bool checked);
|
void on_traceView_toggled(bool checked);
|
||||||
void on_traceColor_clicked();
|
void on_traceColor_clicked();
|
||||||
|
void on_memorySave_clicked(bool checked);
|
||||||
|
void on_memoryLoad_clicked(bool checked);
|
||||||
void on_mem_valueChanged(int value);
|
void on_mem_valueChanged(int value);
|
||||||
// Third row
|
// Third row
|
||||||
void on_trig_valueChanged(int value);
|
void on_trig_valueChanged(int value);
|
||||||
|
@ -1102,6 +1102,71 @@ kS/s</string>
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="memoryLoadSaveLayout">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="memorySave">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>18</width>
|
||||||
|
<height>18</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Save traces in memory</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../resources/res.qrc">
|
||||||
|
<normaloff>:/save.png</normaloff>:/save.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>16</width>
|
||||||
|
<height>16</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="memoryLoad">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>18</width>
|
||||||
|
<height>18</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Load traces into memory</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../resources/res.qrc">
|
||||||
|
<normaloff>:/load.png</normaloff>:/load.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>16</width>
|
||||||
|
<height>16</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="memLabel">
|
<widget class="QLabel" name="memLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
Loading…
Reference in New Issue
Block a user