1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-08-01 16:38:06 -04:00

StarTracker: Add support for Jupiter decameter radiation (DAM) observations. Add targets from Horizons and SPICE.

This commit is contained in:
Jon Beniston
2026-04-03 20:33:00 +01:00
parent ce2d451f4c
commit 338a28b1a5
51 changed files with 4741 additions and 1252 deletions
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2021, 2023 Jon Beniston, M7RCE <jon@beniston.com> //
// Copyright (C) 2021-2026 Jon Beniston, M7RCE <jon@beniston.com> //
// Copyright (C) 2021-2022 Edouard Griffiths, F4EXB <f4exb06@gmail.com> //
// //
// This program is free software; you can redistribute it and/or modify //
@@ -18,11 +18,32 @@
#include <QColor>
#include "util/httpdownloadmanager.h"
#include "util/simpleserializer.h"
#include "settings/serializable.h"
#include "startrackersettings.h"
const QStringList StarTrackerSettings::m_defaultSpiceEphemerides = {
"https://naif.jpl.nasa.gov/pub/naif/generic_kernels/lsk/naif0012.tls",
"https://naif.jpl.nasa.gov/pub/naif/generic_kernels/pck/pck00011.tpc",
"https://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/planets/de440.bsp",
"https://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/satellites/jup365.bsp",
};
const QStringList StarTrackerSettings::m_defaultSolarSystemBodies = {
"SUN",
"MERCURY",
"VENUS",
"EARTH",
"MOON",
"MARS BARYCENTER",
"JUPITER BARYCENTER",
"SATURN BARYCENTER",
"URANUS BARYCENTER",
"NEPTUNE BARYCENTER"
};
StarTrackerSettings::StarTrackerSettings() :
m_rollupState(nullptr)
{
@@ -76,6 +97,14 @@ void StarTrackerSettings::resetToDefaults()
m_drawMoonOnSkyTempChart = true;
m_workspaceIndex = 0;
m_drawRotators = MATCHING_TARGET;
m_targetSource = "SDRangel";
m_spiceEphemerides = m_defaultSpiceEphemerides;
m_solarSystemBodies = m_defaultSolarSystemBodies;
m_logScale = true;
m_utc = false;
m_chartSelect = CHART_ELEVATION_VS_TIME;
m_chartSubSelect = 0;
m_night = false;
}
QByteArray StarTrackerSettings::serialize() const
@@ -133,6 +162,13 @@ QByteArray StarTrackerSettings::serialize() const
s.writeS32(45, m_workspaceIndex);
s.writeBlob(46, m_geometryBytes);
s.writeS32(47, (int)m_drawRotators);
s.writeString(48, m_targetSource);
s.writeList(49, m_spiceEphemerides);
s.writeList(50, m_solarSystemBodies);
s.writeBool(51, m_logScale);
s.writeS32(52, (int) m_chartSelect);
s.writeS32(53, m_chartSubSelect);
s.writeBool(54, m_night);
return s.final();
}
@@ -222,6 +258,13 @@ bool StarTrackerSettings::deserialize(const QByteArray& data)
d.readS32(45, &m_workspaceIndex, 0);
d.readBlob(46, &m_geometryBytes);
d.readS32(47, (int *)&m_drawRotators, MATCHING_TARGET);
d.readString(48, &m_targetSource, "SDRangel");
d.readList(49, &m_spiceEphemerides, m_defaultSpiceEphemerides);
d.readList(50, &m_solarSystemBodies, m_defaultSolarSystemBodies);
d.readBool(51, &m_logScale, true);
d.readS32(52, (int *)&m_chartSelect);
d.readS32(53, &m_chartSubSelect);
d.readBool(54, &m_night, false);
return true;
}
@@ -372,6 +415,30 @@ void StarTrackerSettings::applySettings(const QStringList& settingsKeys, const S
if (settingsKeys.contains("drawRotators")) {
m_drawRotators = settings.m_drawRotators;
}
if (settingsKeys.contains("targetSource")) {
m_targetSource = settings.m_targetSource;
}
if (settingsKeys.contains("spiceEphemerides")) {
m_spiceEphemerides = settings.m_spiceEphemerides;
}
if (settingsKeys.contains("solarSystemBodies")) {
m_solarSystemBodies = settings.m_solarSystemBodies;
}
if (settingsKeys.contains("logScale")) {
m_logScale = settings.m_logScale;
}
if (settingsKeys.contains("utc")) {
m_utc = settings.m_utc;
}
if (settingsKeys.contains("chartSelect")) {
m_chartSelect = settings.m_chartSelect;
}
if (settingsKeys.contains("chartSubSelect")) {
m_chartSubSelect = settings.m_chartSubSelect;
}
if (settingsKeys.contains("night")) {
m_night = settings.m_night;
}
}
QString StarTrackerSettings::getDebugString(const QStringList& settingsKeys, bool force) const
@@ -513,7 +580,49 @@ QString StarTrackerSettings::getDebugString(const QStringList& settingsKeys, boo
if (settingsKeys.contains("drawRotators") || force) {
ostr << " m_drawRotators: " << m_drawRotators;
}
if (settingsKeys.contains("targetSource") || force) {
ostr << " m_targetSource: " << m_targetSource.toStdString();
}
if (settingsKeys.contains("spiceEphemerides") || force) {
ostr << " m_spiceEphemerides: " << m_spiceEphemerides.join(" ").toStdString();
}
if (settingsKeys.contains("solarSystemBodies") || force) {
ostr << " m_solarSystemBodies: " << m_solarSystemBodies.join(" ").toStdString();
}
if (settingsKeys.contains("logScale") || force) {
ostr << " m_logScale: " << m_logScale;
}
if (settingsKeys.contains("utc") || force) {
ostr << " m_utc: " << m_utc;
}
if (settingsKeys.contains("chartSelect") || force) {
ostr << " m_chartSelect: " << m_chartSelect;
}
if (settingsKeys.contains("chartSubSelect") || force) {
ostr << " m_chartSubSelect: " << m_chartSubSelect;
}
if (settingsKeys.contains("night") || force) {
ostr << " m_night: " << m_night;
}
return QString(ostr.str().c_str());
}
QDateTime StarTrackerSettings::getDateTime() const
{
QDateTime dt;
if (m_dateTime == "")
{
dt = QDateTime::currentDateTime();
}
else
{
dt = QDateTime::fromString(m_dateTime, Qt::ISODateWithMs);
if (m_utc) {
dt.setTimeZone(QTimeZone::utc());
}
}
return dt;
}