Fixed a few auto drift bugs
This commit is contained in:
parent
b6fc45b645
commit
f4ae053137
2
INSTALL
2
INSTALL
@ -28,7 +28,7 @@ JS8Call depends on:
|
|||||||
|
|
||||||
#### 18.04 LTS:
|
#### 18.04 LTS:
|
||||||
|
|
||||||
sudo apt install build-essential git automake cmake clang gfortran libfftw3-dev git libgfortran3 libusb-1.0-dev autoconf libtool texinfo qt5-default qtmultimedia5-dev libqt5multimedia5-plugins libqt5serialport5-dev libudev-dev pkg-config
|
sudo apt install build-essential git automake cmake clang gfortran libfftw3-dev git libgfortran5 libusb-1.0-0-dev autoconf libtool texinfo qt5-default qtmultimedia5-dev libqt5multimedia5-plugins libqt5serialport5-dev libudev-dev pkg-config
|
||||||
|
|
||||||
#### 20.04 LTS:
|
#### 20.04 LTS:
|
||||||
|
|
||||||
|
@ -450,7 +450,9 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
m_hbPaused { false },
|
m_hbPaused { false },
|
||||||
m_hbInterval {0},
|
m_hbInterval {0},
|
||||||
m_cqInterval {0},
|
m_cqInterval {0},
|
||||||
m_cqPaused { false }
|
m_cqPaused { false },
|
||||||
|
m_driftMsMMA { 0 },
|
||||||
|
m_driftMsMMA_N { 0 }
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
@ -5049,7 +5051,7 @@ void MainWindow::processDecodedLine(QByteArray t){
|
|||||||
bool bAvgMsg=false;
|
bool bAvgMsg=false;
|
||||||
int navg=0;
|
int navg=0;
|
||||||
|
|
||||||
static QList<int> driftQueue;
|
static QList<qint32> driftQueue;
|
||||||
|
|
||||||
static qint32 syncStart = -1;
|
static qint32 syncStart = -1;
|
||||||
if(t.indexOf("<DecodeSyncMeta> sync start") >= 0){
|
if(t.indexOf("<DecodeSyncMeta> sync start") >= 0){
|
||||||
@ -5138,15 +5140,22 @@ void MainWindow::processDecodedLine(QByteArray t){
|
|||||||
m_wideGraph->notifyDriftedSignalsDecoded(driftQueue.count());
|
m_wideGraph->notifyDriftedSignalsDecoded(driftQueue.count());
|
||||||
|
|
||||||
while(!driftQueue.isEmpty()){
|
while(!driftQueue.isEmpty()){
|
||||||
int newDrift = driftQueue.first();
|
qint32 newDrift = driftQueue.first();
|
||||||
driftQueue.removeFirst();
|
driftQueue.removeFirst();
|
||||||
|
|
||||||
m_driftMsMMA = ((m_driftMsMMA_N-1)*m_driftMsMMA + newDrift)/m_driftMsMMA_N;
|
m_driftMsMMA = (((m_driftMsMMA_N-1) * m_driftMsMMA) + newDrift) / m_driftMsMMA_N;
|
||||||
if(m_driftMsMMA_N < 60) m_driftMsMMA_N++; // cap it to 60 observations
|
if(m_driftMsMMA_N < 60) m_driftMsMMA_N++; // cap it to 60 observations
|
||||||
}
|
}
|
||||||
|
|
||||||
setDrift(m_driftMsMMA);
|
qint32 driftLimitMs = computePeriodForSubmode(Varicode::JS8CallNormal) * 1000;
|
||||||
|
qint32 newDriftMs = m_driftMsMMA;
|
||||||
|
if(newDriftMs < 0){
|
||||||
|
newDriftMs = -((-newDriftMs) % driftLimitMs);
|
||||||
|
} else {
|
||||||
|
newDriftMs = ((newDriftMs) % driftLimitMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
setDrift(m_driftMsMMA);
|
||||||
//writeNoticeTextToUI(QDateTime::currentDateTimeUtc(), QString("Automatic Drift: %1").arg(driftAvg));
|
//writeNoticeTextToUI(QDateTime::currentDateTimeUtc(), QString("Automatic Drift: %1").arg(driftAvg));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5231,7 +5240,7 @@ void MainWindow::processDecodedLine(QByteArray t){
|
|||||||
// 3) compute the delta
|
// 3) compute the delta
|
||||||
// 4) apply the drift
|
// 4) apply the drift
|
||||||
|
|
||||||
int periodMs = 1000 * computePeriodForSubmode(m);
|
qint32 periodMs = 1000 * computePeriodForSubmode(m);
|
||||||
|
|
||||||
//writeNoticeTextToUI(now, QString("Decode at %1 (kin: %2, lastDecoded: %3)").arg(syncStart).arg(dec_data.params.kin).arg(m_lastDecodeStartMap.value(m)));
|
//writeNoticeTextToUI(now, QString("Decode at %1 (kin: %2, lastDecoded: %3)").arg(syncStart).arg(dec_data.params.kin).arg(m_lastDecodeStartMap.value(m)));
|
||||||
|
|
||||||
@ -5258,9 +5267,9 @@ void MainWindow::processDecodedLine(QByteArray t){
|
|||||||
|
|
||||||
//writeNoticeTextToUI(now, QString("--> so signal adjusted started at %1 seconds into the start of my drifted minute").arg(decodedSignalTime));
|
//writeNoticeTextToUI(now, QString("--> so signal adjusted started at %1 seconds into the start of my drifted minute").arg(decodedSignalTime));
|
||||||
|
|
||||||
int decodedSignalTimeMs = 1000 * decodedSignalTime;
|
qint32 decodedSignalTimeMs = 1000 * decodedSignalTime;
|
||||||
int cycleStartTimeMs = (decodedSignalTimeMs / periodMs) * periodMs;
|
qint32 cycleStartTimeMs = (decodedSignalTimeMs / periodMs) * periodMs;
|
||||||
int driftMs = cycleStartTimeMs - decodedSignalTimeMs;
|
qint32 driftMs = cycleStartTimeMs - decodedSignalTimeMs;
|
||||||
|
|
||||||
//writeNoticeTextToUI(now, QString("--> which is a drift adjustment of %1 milliseconds").arg(driftMs));
|
//writeNoticeTextToUI(now, QString("--> which is a drift adjustment of %1 milliseconds").arg(driftMs));
|
||||||
|
|
||||||
@ -5275,7 +5284,7 @@ void MainWindow::processDecodedLine(QByteArray t){
|
|||||||
|
|
||||||
//writeNoticeTextToUI(now, QString("--> which is a corrected drift adjustment of %1 milliseconds").arg(driftMs));
|
//writeNoticeTextToUI(now, QString("--> which is a corrected drift adjustment of %1 milliseconds").arg(driftMs));
|
||||||
|
|
||||||
int newDrift = DriftingDateTime::drift() + driftMs;
|
qint32 newDrift = DriftingDateTime::drift() + driftMs;
|
||||||
if(newDrift < 0){
|
if(newDrift < 0){
|
||||||
newDrift %= -periodMs;
|
newDrift %= -periodMs;
|
||||||
} else {
|
} else {
|
||||||
@ -10958,7 +10967,7 @@ void MainWindow::processActivity(bool force) {
|
|||||||
|
|
||||||
void MainWindow::resetTimeDeltaAverage(){
|
void MainWindow::resetTimeDeltaAverage(){
|
||||||
m_driftMsMMA = 0;
|
m_driftMsMMA = 0;
|
||||||
m_driftMsMMA_N = 1;
|
m_driftMsMMA_N = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::setDrift(int n){
|
void MainWindow::setDrift(int n){
|
||||||
|
@ -833,8 +833,8 @@ private:
|
|||||||
QString m_totalTxMessage;
|
QString m_totalTxMessage;
|
||||||
QDateTime m_lastTxStartTime;
|
QDateTime m_lastTxStartTime;
|
||||||
QDateTime m_lastTxStopTime;
|
QDateTime m_lastTxStopTime;
|
||||||
int m_driftMsMMA;
|
qint32 m_driftMsMMA;
|
||||||
int m_driftMsMMA_N;
|
qint32 m_driftMsMMA_N;
|
||||||
|
|
||||||
enum Priority {
|
enum Priority {
|
||||||
PriorityLow = 10,
|
PriorityLow = 10,
|
||||||
|
@ -256,7 +256,14 @@ bool WideGraph::shouldDisplayDecodeAttempts(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool WideGraph::isAutoSyncEnabled(){
|
bool WideGraph::isAutoSyncEnabled(){
|
||||||
return ui->autoDriftButton->isChecked() && m_autoSyncDecodesLeft > 0;
|
// enabled if we're auto drifting
|
||||||
|
// and we are not auto stopping
|
||||||
|
// or if we are auto stopping,
|
||||||
|
// we have auto sync decodes left
|
||||||
|
return ui->autoDriftButton->isChecked() && (
|
||||||
|
!ui->autoDriftAutoStopCheckBox->isChecked() ||
|
||||||
|
m_autoSyncDecodesLeft > 0
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WideGraph::shouldAutoSyncSubmode(int submode){
|
bool WideGraph::shouldAutoSyncSubmode(int submode){
|
||||||
|
Loading…
Reference in New Issue
Block a user