Skip to content

Commit

Permalink
Add support for STRF DAT files
Browse files Browse the repository at this point in the history
  • Loading branch information
BatchDrake committed May 18, 2023
1 parent d42f0e5 commit e97701b
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 35 deletions.
109 changes: 93 additions & 16 deletions DriftTool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ DriftTool::DriftTool(
g_propsCreated = true;
}

ui->stationIdEdit->setValidator(new QIntValidator(0, 9999, this));
refreshUi();
connectAll();
}
Expand Down Expand Up @@ -238,6 +239,19 @@ DriftTool::connectAll()
this,
SLOT(onToggleLog()));

connect(
ui->formatCombo,
SIGNAL(activated(int)),
this,
SLOT(onConfigChanged()));

connect(
ui->stationIdEdit,
SIGNAL(textEdited(QString)),
this,
SLOT(onConfigChanged()));


connect(
ui->runCommandGroup,
SIGNAL(toggled(bool)),
Expand Down Expand Up @@ -394,7 +408,7 @@ DriftTool::refreshUi()
bool running = m_processor->isRunning();
bool canRun = m_analyzer != nullptr;
bool canAdjust = m_processor->state() >= DRIFT_PROCESSOR_CONFIGURING;
bool saveLogs = !(ui->logFileGroup->isChecked() && canAdjust);
bool saveLogs = ui->logFileGroup->isChecked() && !canAdjust;
bool runCmd = !(ui->runCommandGroup->isChecked() && canAdjust);

ui->frequencySpin->setEnabled(canAdjust);
Expand All @@ -414,8 +428,18 @@ DriftTool::refreshUi()
ui->lockLed->setOn(m_processor->hasLock());
ui->stableLed->setOn(m_processor->isStable());


ui->runCommandLayout->setEnabled(runCmd);
ui->logFileGroupLayout->setEnabled(saveLogs);

/*if (saveLogs)
ui->stationIdEdit->setEnabled(ui->formatCombo->currentIndex() == 1);
else
ui->stationIdEdit->setEnabled(false);*/

ui->logDirBrowseButton->setEnabled(saveLogs);
ui->logDirEdit->setEnabled(saveLogs);
ui->stationIdEdit->setEnabled((ui->formatCombo->currentIndex() == 1) && saveLogs);
ui->formatCombo->setEnabled(saveLogs);
}

// Configuration methods
Expand Down Expand Up @@ -450,6 +474,10 @@ DriftTool::applyConfig()
ui->programArgumentsEdit,
setText(QString::fromStdString(m_panelConfig->programArgs)));

BLOCKSIG(
ui->stationIdEdit,
setText(QString::asprintf("%04d", m_panelConfig->strfStationId)));

// Spinboxes
BLOCKSIG(
ui->refFreqSpin,
Expand All @@ -476,6 +504,13 @@ DriftTool::applyConfig()
ui->runCommandGroup,
setChecked(m_panelConfig->runOnLock));

// Other
int index = 0;
if (QString::fromStdString(m_panelConfig->logFormat).toLower() == "strf")
index = 1;

BLOCKSIG(ui->formatCombo, setCurrentIndex(index));

// Apply to objects
m_processor->setThreshold(m_panelConfig->lockThres);

Expand Down Expand Up @@ -554,6 +589,7 @@ DriftTool::openLog()
struct tm parts;
QString file;
QString fullPath;
QString extension;
QString vesselName = QString::fromStdString(m_panelConfig->probeName);
SUSCOUNT counter = 0;

Expand All @@ -569,16 +605,24 @@ DriftTool::openLog()
vesselName.replace(QRegExp("[^a-zA-Z\\d]"), "_");
}

if (QString::fromStdString(m_panelConfig->logFormat).toLower() == "strf") {
extension = "dat";
m_loggingSTRF = true;
} else {
extension = "log";
m_loggingSTRF = false;
}

do {
file = vesselName + QString::asprintf(
"_%04d%02d%02d_%02d%02d%02d_%04ld.log",
"_%04d%02d%02d_%02d%02d%02d_%04ld.",
parts.tm_year + 1900,
parts.tm_mon + 1,
parts.tm_mday,
parts.tm_hour,
parts.tm_min,
parts.tm_sec,
++counter);
++counter) + extension;
fullPath = QString::fromStdString(m_panelConfig->logDirPath) + "/" + file;
} while (QFile::exists(fullPath));

Expand Down Expand Up @@ -617,14 +661,27 @@ DriftTool::logMeasurement(
qreal t0 = start.tv_sec + 1e-6 * start.tv_usec;
qreal t = (m_processor->getSamplesPerUpdate() * num) / m_processor->getEquivFs();
qreal mjd = unix2mjd(t0 + t);
QString mjdStr = QString::asprintf("%.7lf", mjd);
log
<< mjdStr << ","
<< num << ","
<< SCAST(int, m_processor->hasLock()) << ","
<< SCAST(int, m_processor->isStable()) << ","
<< QString::asprintf("%.12le", full) << ","
<< QString::asprintf("%.12le", rel) << "\n";


if (m_loggingSTRF) {
// STRF
log
<< QString::asprintf("%12.6lf", mjd) << "\t"
<< QString::asprintf("%14.3lf", full) << "\t"
<< QString::asprintf("%8.3lf", 0.) << "\t" // Placeholder until we have SNR
<< QString::asprintf("%04d", m_panelConfig->strfStationId)
<< "\n";
} else {
QString mjdStr = QString::asprintf("%.7lf", mjd);
// CSV
log
<< QString::asprintf("%.7lf", mjd) << ","
<< num << ","
<< SCAST(int, m_processor->hasLock()) << ","
<< SCAST(int, m_processor->isStable()) << ","
<< QString::asprintf("%.12le", full) << ","
<< QString::asprintf("%.12le", rel) << "\n";
}
}
}

Expand Down Expand Up @@ -984,11 +1041,23 @@ DriftTool::onNameChanged()
void
DriftTool::onConfigChanged()
{
bool okay;

// Edit boxes
m_panelConfig->probeName = ui->nameEdit->text().toStdString();
m_panelConfig->logDirPath = ui->logDirEdit->text().toStdString();
m_panelConfig->programPath = ui->programPathEdit->text().toStdString();
m_panelConfig->programArgs = ui->programArgumentsEdit->text().toStdString();
m_panelConfig->probeName = ui->nameEdit->text().toStdString();
m_panelConfig->logDirPath = ui->logDirEdit->text().toStdString();
m_panelConfig->programPath = ui->programPathEdit->text().toStdString();
m_panelConfig->programArgs = ui->programArgumentsEdit->text().toStdString();

int value = ui->stationIdEdit->text().toInt(&okay);
if (okay) {
m_panelConfig->strfStationId = value;
} else {
value = m_panelConfig->strfStationId;
// UI state
BLOCKSIG(ui->stationIdEdit, setText(QString::asprintf("%04d", value)));
}


// Spinboxes
m_panelConfig->reference = ui->refFreqSpin->value();
Expand All @@ -1000,8 +1069,16 @@ DriftTool::onConfigChanged()
m_panelConfig->logToDir = ui->logFileGroup->isChecked();
m_panelConfig->runOnLock = ui->runCommandGroup->isChecked();

// Other
m_panelConfig->logFormat = ui->formatCombo->currentIndex() == 0
? "csv"
: "strf";

// Properties
m_propName->setValue(QString::fromStdString(m_panelConfig->probeName));
m_propRef->setValue(m_panelConfig->reference);

refreshUi();
}

void
Expand Down
5 changes: 5 additions & 0 deletions DriftTool.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,16 @@ namespace SigDigger {

bool logToDir = true;
std::string logDirPath = "";
std::string logFormat = "csv";
int strfStationId = 0;

bool runOnLock = true;
std::string programPath = "/usr/bin/notify-send";
std::string programArgs =
"-e -a AmateurDSN \"%drifttool:name%\" \"Lock acquired on <b>%drifttool:name%</b> (carrier: %drifttool:freq% Hz)\"";



// Overriden methods
void deserialize(Suscan::Object const &conf) override;
Suscan::Object &&serialize() override;
Expand All @@ -73,6 +77,7 @@ namespace SigDigger {
QFile m_logFile;
QString m_logFileName;
QString m_logFilePath;
bool m_loggingSTRF = false;
bool m_haveLog = false;


Expand Down
94 changes: 75 additions & 19 deletions DriftTool.ui
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>324</width>
<height>561</height>
<height>611</height>
</rect>
</property>
<property name="sizePolicy">
Expand Down Expand Up @@ -237,9 +237,6 @@
<height>16</height>
</size>
</property>
<property name="color">
<enum>LED::Red</enum>
</property>
<property name="on">
<bool>false</bool>
</property>
Expand Down Expand Up @@ -410,7 +407,7 @@
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="logFileGroupLayout">
<layout class="QGridLayout">
<property name="leftMargin">
<number>6</number>
</property>
Expand All @@ -426,13 +423,6 @@
<property name="spacing">
<number>3</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Directory</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="logDirEdit"/>
</item>
Expand All @@ -443,13 +433,6 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Current</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QLineEdit" name="currLogFileEdit">
<property name="font">
Expand All @@ -471,6 +454,79 @@
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Format</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Directory</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QComboBox" name="formatCombo">
<item>
<property name="text">
<string>Native CSV files</string>
</property>
</item>
<item>
<property name="text">
<string>STRF DAT file</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Current</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_20">
<property name="text">
<string>Station ID</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="1" colspan="2">
<widget class="QLineEdit" name="stationIdEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>0000</string>
</property>
<property name="maxLength">
<number>4</number>
</property>
<property name="placeholderText">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</item>
Expand Down

0 comments on commit e97701b

Please sign in to comment.