1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-25 09:18:54 -05:00

Satellite Tracker: Ensure LOS is signalled if new AOS is calculated within a second of LOS

This commit is contained in:
Jon Beniston 2021-07-28 14:10:23 +01:00
parent 147e3881e6
commit 3524e5856b
5 changed files with 40 additions and 58 deletions

View File

@ -990,3 +990,19 @@ void SatelliteTracker::updateSatData()
else else
qDebug() << "SatelliteTracker::updateSatData: update in progress"; qDebug() << "SatelliteTracker::updateSatData: update in progress";
} }
// Redirect requests for current time via these methods, so it can be adjusted when testing
QDateTime SatelliteTracker::currentDateTimeUtc()
{
QDateTime now = QDateTime::currentDateTimeUtc();
//now = now.addSecs(26*60);
return now;
}
QDateTime SatelliteTracker::currentDateTime()
{
QDateTime now = QDateTime::currentDateTime();
//now = now.addSecs(26*60);
return now;
}

View File

@ -153,6 +153,9 @@ public:
const QStringList& featureSettingsKeys, const QStringList& featureSettingsKeys,
SWGSDRangel::SWGFeatureSettings& response); SWGSDRangel::SWGFeatureSettings& response);
static QDateTime currentDateTimeUtc();
static QDateTime currentDateTime();
static const char* const m_featureIdURI; static const char* const m_featureIdURI;
static const char* const m_featureId; static const char* const m_featureId;

View File

@ -263,7 +263,7 @@ SatelliteTrackerGUI::SatelliteTrackerGUI(PluginAPI* pluginAPI, FeatureUISet *fea
ui->passChart->setChart(&m_emptyChart); ui->passChart->setChart(&m_emptyChart);
ui->passChart->setRenderHint(QPainter::Antialiasing); ui->passChart->setRenderHint(QPainter::Antialiasing);
ui->dateTime->setDateTime(QDateTime::currentDateTime()); ui->dateTime->setDateTime(SatelliteTracker::currentDateTime());
// Use My Position from preferences, if none set // Use My Position from preferences, if none set
if ((m_settings.m_latitude == 0.0) && (m_settings.m_longitude == 0.0)) if ((m_settings.m_latitude == 0.0) && (m_settings.m_longitude == 0.0))
@ -595,7 +595,7 @@ void SatelliteTrackerGUI::updateTimeToAOS()
ui->aos->setText("Now"); ui->aos->setText("Now");
else if (m_nextTargetAOS.isValid()) else if (m_nextTargetAOS.isValid())
{ {
QDateTime currentTime = QDateTime::currentDateTime(); QDateTime currentTime = SatelliteTracker::currentDateTime();
int secondsToAOS = m_nextTargetAOS.toSecsSinceEpoch() - currentTime.toSecsSinceEpoch(); int secondsToAOS = m_nextTargetAOS.toSecsSinceEpoch() - currentTime.toSecsSinceEpoch();
if (secondsToAOS > 0) if (secondsToAOS > 0)
{ {
@ -824,7 +824,7 @@ void SatelliteTrackerGUI::plotPolarChart()
QDateTime currentTime; QDateTime currentTime;
if (m_settings.m_dateTime == "") if (m_settings.m_dateTime == "")
currentTime = QDateTime::currentDateTimeUtc(); currentTime = SatelliteTracker::currentDateTimeUtc();
else if (m_settings.m_utc) else if (m_settings.m_utc)
currentTime = QDateTime::fromString(m_settings.m_dateTime, Qt::ISODateWithMs); currentTime = QDateTime::fromString(m_settings.m_dateTime, Qt::ISODateWithMs);
else else
@ -854,7 +854,7 @@ void SatelliteTrackerGUI::plotPolarChart()
// Possibly geostationary, just plot current position // Possibly geostationary, just plot current position
QDateTime currentTime; QDateTime currentTime;
if (m_settings.m_dateTime == "") if (m_settings.m_dateTime == "")
currentTime = QDateTime::currentDateTimeUtc(); currentTime = SatelliteTracker::currentDateTimeUtc();
else if (m_settings.m_utc) else if (m_settings.m_utc)
currentTime = QDateTime::fromString(m_settings.m_dateTime, Qt::ISODateWithMs); currentTime = QDateTime::fromString(m_settings.m_dateTime, Qt::ISODateWithMs);
else else

View File

@ -283,7 +283,7 @@ void SatelliteTrackerWorker::update()
// Get date and time to calculate position at // Get date and time to calculate position at
QDateTime qdt; QDateTime qdt;
if (m_settings.m_dateTime == "") if (m_settings.m_dateTime == "")
qdt = QDateTime::currentDateTimeUtc(); qdt = SatelliteTracker::currentDateTimeUtc();
else if (m_settings.m_utc) else if (m_settings.m_utc)
qdt = QDateTime::fromString(m_settings.m_dateTime, Qt::ISODateWithMs); qdt = QDateTime::fromString(m_settings.m_dateTime, Qt::ISODateWithMs);
else else
@ -316,54 +316,11 @@ void SatelliteTrackerWorker::update()
// Update AOS/LOS (only set timers if using real time) // Update AOS/LOS (only set timers if using real time)
if ((m_settings.m_dateTime == "") && (satWorkerState->m_satState.m_passes.size() > 0)) if ((m_settings.m_dateTime == "") && (satWorkerState->m_satState.m_passes.size() > 0))
{ {
/*int min = 8;
QDateTime p1a = QDateTime(QDateTime::currentDateTime().date(), QTime(16, min, 0));
QDateTime p1s = QDateTime(QDateTime::currentDateTime().date(), QTime(16, min, 30));
QDateTime p2a = QDateTime(QDateTime::currentDateTime().date(), QTime(16, min+1, 0));
QDateTime p2s = QDateTime(QDateTime::currentDateTime().date(), QTime(16, min+1, 30));
if (qdt > p1a)
{
satWorkerState->m_satState.m_passes[0]->m_aos = p2a;
satWorkerState->m_satState.m_passes[0]->m_los = p2s;
}
else
{
satWorkerState->m_satState.m_passes[0]->m_aos = p1a;
satWorkerState->m_satState.m_passes[0]->m_los = p1s;
} */
/* if (name == "NOAA 18")
{
satWorkerState->m_satState.m_passes[0]->m_aos = QDateTime(QDateTime::currentDateTime().date(), QTime(11, 10, 0));
satWorkerState->m_satState.m_passes[0]->m_los = QDateTime(QDateTime::currentDateTime().date(), QTime(11, 10, 30));
} */
/*if (name == "ISS")
{
if (m_settings.m_minAOSElevation == 5)
{
qDebug() << "*********** seting first AOS";
satWorkerState->m_satState.m_passes[0]->m_aos = QDateTime(QDateTime::currentDateTime().date(), QTime(14, 10, 0));
satWorkerState->m_satState.m_passes[0]->m_los = QDateTime(QDateTime::currentDateTime().date(), QTime(14, 10, 30));
}
else
{
qDebug() << "*********** seting second AOS";
satWorkerState->m_satState.m_passes[0]->m_aos = QDateTime(QDateTime::currentDateTime().date(), QTime(14, 11, 0));
satWorkerState->m_satState.m_passes[0]->m_los = QDateTime(QDateTime::currentDateTime().date(), QTime(14, 11, 30));
}
}*/
// Do we have a new AOS? // Do we have a new AOS?
if ((satWorkerState->m_aos != satWorkerState->m_satState.m_passes[0]->m_aos) || (satWorkerState->m_los != satWorkerState->m_satState.m_passes[0]->m_los)) if ((satWorkerState->m_aos != satWorkerState->m_satState.m_passes[0]->m_aos) || (satWorkerState->m_los != satWorkerState->m_satState.m_passes[0]->m_los))
{ {
qDebug() << "New AOS: " << name << " new: " << satWorkerState->m_satState.m_passes[0]->m_aos << " old: " << satWorkerState->m_aos; qDebug() << "SatelliteTrackerWorker: New AOS: " << name << " new: " << satWorkerState->m_satState.m_passes[0]->m_aos << " old: " << satWorkerState->m_aos;
qDebug() << "New LOS: " << name << " new: " << satWorkerState->m_satState.m_passes[0]->m_los << " old: " << satWorkerState->m_los; qDebug() << "SatelliteTrackerWorker: New LOS: " << name << " new: " << satWorkerState->m_satState.m_passes[0]->m_los << " old: " << satWorkerState->m_los;
satWorkerState->m_aos = satWorkerState->m_satState.m_passes[0]->m_aos; satWorkerState->m_aos = satWorkerState->m_satState.m_passes[0]->m_aos;
satWorkerState->m_los = satWorkerState->m_satState.m_passes[0]->m_los; satWorkerState->m_los = satWorkerState->m_satState.m_passes[0]->m_los;
if (satWorkerState->m_aos.isValid()) if (satWorkerState->m_aos.isValid())
@ -382,10 +339,14 @@ void SatelliteTrackerWorker::update()
} }
if (satWorkerState->m_los.isValid() && (satWorkerState->m_los > qdt)) if (satWorkerState->m_los.isValid() && (satWorkerState->m_los > qdt))
{ {
if (satWorkerState->m_losTimer.isActive() && (satWorkerState->m_losTimer.remainingTime() == 0)) if (satWorkerState->m_losTimer.isActive()) {
qDebug() << "SatelliteTrackerWorker::update m_losTimer.remainingTime: " << satWorkerState->m_losTimer.remainingTime();
}
// We can detect a new AOS for a satellite, a little bit before the LOS has occured, presumably
// because the calculations aren't accurate to fractions of a second. Allow for 1s here
if (satWorkerState->m_losTimer.isActive() && (satWorkerState->m_losTimer.remainingTime() <= 1000))
{ {
qDebug() << "****** m_losTimer.remainingTime: " << satWorkerState->m_losTimer.remainingTime(); satWorkerState->m_losTimer.stop();
qDebug() << "****** m_losTimer.active: " << satWorkerState->m_losTimer.isActive();
// LOS hasn't been called yet - do so, before we reset timer // LOS hasn't been called yet - do so, before we reset timer
los(satWorkerState); los(satWorkerState);
} }
@ -844,3 +805,9 @@ void SatelliteTrackerWorker::los(SatWorkerState *satWorkerState)
m_recalculatePasses = true; m_recalculatePasses = true;
} }
bool SatWorkerState::hasAOS()
{
QDateTime currentTime = SatelliteTracker::currentDateTimeUtc();
return (m_aos <= currentTime) && (m_los > currentTime);
}

View File

@ -48,11 +48,7 @@ public:
m_satState.m_name = name; m_satState.m_name = name;
} }
bool hasAOS() bool hasAOS();
{
QDateTime currentTime = QDateTime::currentDateTime();
return (m_aos <= currentTime) && (m_los > currentTime);
}
protected: protected:
QString m_name; // Name of the satellite QString m_name; // Name of the satellite