diff --git a/plugins/feature/satellitetracker/satellitetracker.cpp b/plugins/feature/satellitetracker/satellitetracker.cpp index c570a9ebf..f08b85a73 100644 --- a/plugins/feature/satellitetracker/satellitetracker.cpp +++ b/plugins/feature/satellitetracker/satellitetracker.cpp @@ -509,6 +509,8 @@ void SatelliteTracker::webapiFormatFeatureSettings( response.getSatelliteTrackerSettings()->setPassStartTime(new QString(settings.m_passStartTime.toString())); response.getSatelliteTrackerSettings()->setPassFinishTime(new QString(settings.m_passFinishTime.toString())); response.getSatelliteTrackerSettings()->setDeviceSettings(getSWGSatelliteDeviceSettingsList(settings)); + response.getSatelliteTrackerSettings()->setAzimuthOffset(settings.m_azimuthOffset); + response.getSatelliteTrackerSettings()->setElevationOffset(settings.m_elevationOffset); if (response.getSatelliteTrackerSettings()->getTitle()) { *response.getSatelliteTrackerSettings()->getTitle() = settings.m_title; @@ -633,6 +635,12 @@ void SatelliteTracker::webapiUpdateFeatureSettings( if (featureSettingsKeys.contains("deviceSettings")) { settings.m_deviceSettings = getSatelliteDeviceSettings(response.getSatelliteTrackerSettings()->getDeviceSettings()); } + if (featureSettingsKeys.contains("azimuthOffset")) { + settings.m_azimuthOffset = response.getSatelliteTrackerSettings()->getAzimuthOffset(); + } + if (featureSettingsKeys.contains("elevationOffset")) { + settings.m_elevationOffset = response.getSatelliteTrackerSettings()->getElevationOffset(); + } if (featureSettingsKeys.contains("title")) { settings.m_title = *response.getSatelliteTrackerSettings()->getTitle(); } @@ -745,6 +753,12 @@ void SatelliteTracker::webapiReverseSendSettings(const QList& featureSe if (featureSettingsKeys.contains("deviceSettings") || force) { swgSatelliteTrackerSettings->setDeviceSettings(getSWGSatelliteDeviceSettingsList(settings)); } + if (featureSettingsKeys.contains("azimuthOffset") || force) { + swgSatelliteTrackerSettings->setAzimuthOffset(settings.m_azimuthOffset); + } + if (featureSettingsKeys.contains("elevationOffset") || force) { + swgSatelliteTrackerSettings->setElevationOffset(settings.m_elevationOffset); + } if (featureSettingsKeys.contains("title") || force) { swgSatelliteTrackerSettings->setTitle(new QString(settings.m_title)); } @@ -804,6 +818,11 @@ void SatelliteTracker::webapiFormatFeatureReport(SWGSDRangel::SWGFeatureReport& } swgSatState->setPasses(passesList); list->append(swgSatState); + if (satState->m_name == m_settings.m_target) + { + response.getSatelliteTrackerReport()->setTargetAzimuth(satState->m_azimuth); + response.getSatelliteTrackerReport()->setTargetElevation(satState->m_elevation); + } } } diff --git a/plugins/feature/satellitetracker/satellitetrackersettings.cpp b/plugins/feature/satellitetracker/satellitetrackersettings.cpp index 648de91e7..f731b0dfe 100644 --- a/plugins/feature/satellitetracker/satellitetrackersettings.cpp +++ b/plugins/feature/satellitetracker/satellitetrackersettings.cpp @@ -26,7 +26,7 @@ #include "satellitetrackersettings.h" #define DEAFULT_TARGET "ISS" -#define DEFAULT_TLES {"https://db.satnogs.org/api/tle/", "https://www.amsat.org/tle/current/nasabare.txt", "https://www.celestrak.com/NORAD/elements/goes.txt"} +#define DEFAULT_TLES {"https://db.satnogs.org/api/tle/", "https://www.amsat.org/tle/current/nasabare.txt", "https://www.celestrak.com/NORAD/elements/goes.txt", "https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle"} #define DEFAULT_DATE_FORMAT "yyyy/MM/dd" #define DEFAULT_AOS_SPEECH "${name} is visible for ${duration} minutes. Max elevation, ${elevation} degrees." #define DEFAULT_LOS_SPEECH "${name} is no longer visible." @@ -80,6 +80,8 @@ void SatelliteTrackerSettings::resetToDefaults() m_mapFeature = ""; m_fileInputDevice = ""; m_drawRotators = MATCHING_TARGET; + m_azimuthOffset = 0.0; + m_elevationOffset = 0.0; m_workspaceIndex = 0; m_columnSort = -1; m_columnSortOrder = Qt::AscendingOrder; @@ -144,6 +146,8 @@ QByteArray SatelliteTrackerSettings::serialize() const s.writeS32(47, m_columnSort); s.writeS32(48, (int)m_columnSortOrder); s.writeS32(49, (int)m_drawRotators); + s.writeDouble(50, m_azimuthOffset); + s.writeDouble(51, m_elevationOffset); for (int i = 0; i < SAT_COL_COLUMNS; i++) { s.writeS32(100 + i, m_columnIndexes[i]); @@ -240,6 +244,8 @@ bool SatelliteTrackerSettings::deserialize(const QByteArray& data) d.readS32(47, &m_columnSort, -1); d.readS32(48, (int *)&m_columnSortOrder, (int)Qt::AscendingOrder); d.readS32(49, (int*)&m_drawRotators, (int)MATCHING_TARGET); + d.readDouble(50, &m_azimuthOffset, 0.0); + d.readDouble(51, &m_elevationOffset, 0.0); for (int i = 0; i < SAT_COL_COLUMNS; i++) { d.readS32(100 + i, &m_columnIndexes[i], i); @@ -458,6 +464,12 @@ void SatelliteTrackerSettings::applySettings(const QStringList& settingsKeys, co if (settingsKeys.contains("drawRotators")) { m_drawRotators = settings.m_drawRotators; } + if (settingsKeys.contains("azimuthOffset")) { + m_azimuthOffset = settings.m_azimuthOffset; + } + if (settingsKeys.contains("elevationOffset")) { + m_elevationOffset = settings.m_elevationOffset; + } if (settingsKeys.contains("columnSort")) { m_columnSort = settings.m_columnSort; } @@ -638,6 +650,12 @@ QString SatelliteTrackerSettings::getDebugString(const QStringList& settingsKeys if (settingsKeys.contains("drawRotators") || force) { ostr << " m_drawRotators: " << m_drawRotators; } + if (settingsKeys.contains("azimuthOffset") || force) { + ostr << " m_azimuthOffset: " << m_azimuthOffset; + } + if (settingsKeys.contains("elevationOffset") || force) { + ostr << " m_elevationOffset: " << m_elevationOffset; + } if (settingsKeys.contains("columnSort") || force) { ostr << " m_columnSort: " << m_columnSort; } diff --git a/plugins/feature/satellitetracker/satellitetrackersettingsdialog.cpp b/plugins/feature/satellitetracker/satellitetrackersettingsdialog.cpp index 1d36d6733..cbc85419a 100644 --- a/plugins/feature/satellitetracker/satellitetrackersettingsdialog.cpp +++ b/plugins/feature/satellitetracker/satellitetrackersettingsdialog.cpp @@ -35,6 +35,8 @@ SatelliteTrackerSettingsDialog::SatelliteTrackerSettingsDialog(SatelliteTrackerS ui->losSpeech->setText(settings->m_losSpeech); ui->rotatorMaximumAzimuth->setValue(settings->m_rotatorMaxAzimuth); ui->rotatorMaximumElevation->setValue(settings->m_rotatorMaxElevation); + ui->azimuthOffset->setValue(settings->m_azimuthOffset); + ui->elevationOffset->setValue(settings->m_elevationOffset); ui->aosCommand->setText(settings->m_aosCommand); ui->losCommand->setText(settings->m_losCommand); ui->updatePeriod->setValue(settings->m_updatePeriod); @@ -86,6 +88,8 @@ void SatelliteTrackerSettingsDialog::accept() m_settings->m_minPassElevation = ui->minimumPassElevation->value(); m_settings->m_rotatorMaxAzimuth = ui->rotatorMaximumAzimuth->value(); m_settings->m_rotatorMaxElevation = ui->rotatorMaximumElevation->value(); + m_settings->m_azimuthOffset = ui->azimuthOffset->value(); + m_settings->m_elevationOffset = ui->elevationOffset->value(); m_settings->m_aosSpeech = ui->aosSpeech->text(); m_settings->m_losSpeech = ui->losSpeech->text(); m_settings->m_aosCommand = ui->aosCommand->text(); diff --git a/plugins/feature/satellitetracker/satellitetrackersettingsdialog.ui b/plugins/feature/satellitetracker/satellitetrackersettingsdialog.ui index 9bd312301..cecda4a09 100644 --- a/plugins/feature/satellitetracker/satellitetrackersettingsdialog.ui +++ b/plugins/feature/satellitetracker/satellitetrackersettingsdialog.ui @@ -179,70 +179,70 @@ - + AOS speech warning - + Text to say when a satellite signal is acquired - + LOS speech warning - + Text to say when a satellite signal is lost - + AOS command - + Program / script to execute on AOS - + LOS command - + Program / script to execute on LOS - + Doppler period (s) - + Enter the time in seconds between each Doppler correction @@ -258,7 +258,7 @@ - + Qt::Vertical @@ -278,6 +278,52 @@ + + + + Azimuth offset to add to target azimuth sent to rotator controller in degrees + + + 3 + + + -360.000000000000000 + + + 360.000000000000000 + + + + + + + Elevation offset added to target elevation send to rotator controller in degrees + + + 3 + + + -180.000000000000000 + + + 180.000000000000000 + + + + + + + Rotator azimuth offset (°) + + + + + + + Rotator elevation offset (°) + + + diff --git a/plugins/feature/satellitetracker/satellitetrackerworker.cpp b/plugins/feature/satellitetracker/satellitetrackerworker.cpp index 81b7bd4d1..8ab2f34c0 100644 --- a/plugins/feature/satellitetracker/satellitetrackerworker.cpp +++ b/plugins/feature/satellitetracker/satellitetrackerworker.cpp @@ -35,6 +35,7 @@ #include "util/units.h" #include "device/deviceset.h" #include "device/deviceapi.h" +#include "channel/channelapi.h" #include "channel/channelwebapiutils.h" #include "feature/featurewebapiutils.h" #include "maincore.h" @@ -223,6 +224,22 @@ void SatelliteTrackerWorker::applySettings(const SatelliteTrackerSettings& setti } } + if (settingsKeys.contains("target") && (settings.m_target != m_settings.m_target)) + { + if (m_workerState.contains(m_settings.m_target)) + { + SatWorkerState *satWorkerState = m_workerState.value(m_settings.m_target); + disableDoppler(satWorkerState); + } + if (m_workerState.contains(settings.m_target)) + { + SatWorkerState *satWorkerState = m_workerState.value(settings.m_target); + if (satWorkerState->hasAOS(m_satelliteTracker->currentDateTimeUtc())) { + enableDoppler(satWorkerState); + } + } + } + if (force) { m_settings = settings; } else { @@ -427,8 +444,8 @@ void SatelliteTrackerWorker::update() // Send Az/El of target to Rotator Controllers, if elevation above horizon if ((name == m_settings.m_target) && (satWorkerState->m_satState.m_elevation >= 0)) { - double azimuth = satWorkerState->m_satState.m_azimuth; - double elevation = satWorkerState->m_satState.m_elevation; + double azimuth = satWorkerState->m_satState.m_azimuth + m_settings.m_azimuthOffset; + double elevation = satWorkerState->m_satState.m_elevation + m_settings.m_elevationOffset; if (m_extendedAzRotation) { if (azimuth < 180.0) @@ -574,7 +591,7 @@ void SatelliteTrackerWorker::aos(SatWorkerState *satWorkerState) { // Stop doppler correction for current target if (m_workerState.contains(m_settings.m_target)) - m_workerState.value(m_settings.m_target)->m_dopplerTimer.stop(); + disableDoppler(m_workerState.value(m_settings.m_target)); qDebug() << "SatelliteTrackerWorker::aos - autoTarget setting " << satWorkerState->m_name; m_settings.m_target = satWorkerState->m_name; @@ -759,40 +776,7 @@ void SatelliteTrackerWorker::applyDeviceAOSSettings(const QString& name) FeatureWebAPIUtils::satelliteAOS(name, satWorkerState->m_aos, satWorkerState->m_los); // Start Doppler correction, if needed - satWorkerState->m_initFrequencyOffset.clear(); - bool requiresDoppler = false; - for (int i = 0; i < m_deviceSettingsList->size(); i++) - { - SatelliteTrackerSettings::SatelliteDeviceSettings *devSettings = m_deviceSettingsList->at(i); - if (devSettings->m_doppler.size() > 0) - { - requiresDoppler = true; - for (int j = 0; j < devSettings->m_doppler.size(); j++) - { - int offset; - - if (ChannelWebAPIUtils::getFrequencyOffset(devSettings->m_deviceSetIndex, devSettings->m_doppler[j], offset)) - { - satWorkerState->m_initFrequencyOffset.append(offset); - qDebug() << "SatelliteTrackerWorker::applyDeviceAOSSettings: Initial frequency offset: " << offset; - } - else - { - qDebug() << "SatelliteTrackerWorker::applyDeviceAOSSettings: Failed to get initial frequency offset"; - satWorkerState->m_initFrequencyOffset.append(0); - } - } - } - } - if (requiresDoppler) - { - qDebug() << "SatelliteTrackerWorker::applyDeviceAOSSettings: requiresDoppler"; - satWorkerState->m_dopplerTimer.setInterval(m_settings.m_dopplerPeriod * 1000); - satWorkerState->m_dopplerTimer.start(); - connect(&satWorkerState->m_dopplerTimer, &QTimer::timeout, [this, satWorkerState]() { - doppler(satWorkerState); - }); - } + enableDoppler(satWorkerState); // Start file sinks (need a little delay to ensure sample rate message has been handled in filerecord) QTimer::singleShot(1000, [m_deviceSettingsList]() @@ -824,6 +808,67 @@ void SatelliteTrackerWorker::applyDeviceAOSSettings(const QString& name) } +void SatelliteTrackerWorker::enableDoppler(SatWorkerState *satWorkerState) +{ + QList *m_deviceSettingsList = m_settings.m_deviceSettings.value(satWorkerState->m_name); + + satWorkerState->m_doppler.clear(); + bool requiresDoppler = false; + for (int i = 0; i < m_deviceSettingsList->size(); i++) + { + SatelliteTrackerSettings::SatelliteDeviceSettings *devSettings = m_deviceSettingsList->at(i); + if (devSettings->m_doppler.size() > 0) + { + requiresDoppler = true; + for (int j = 0; j < devSettings->m_doppler.size(); j++) { + satWorkerState->m_doppler.append(0); + } + } + } + if (requiresDoppler) + { + qDebug() << "SatelliteTrackerWorker::applyDeviceAOSSettings: Enabling doppler for " << satWorkerState->m_name; + satWorkerState->m_dopplerTimer.setInterval(m_settings.m_dopplerPeriod * 1000); + satWorkerState->m_dopplerTimer.start(); + connect(&satWorkerState->m_dopplerTimer, &QTimer::timeout, [this, satWorkerState]() { + doppler(satWorkerState); + }); + } +} + +void SatelliteTrackerWorker::disableDoppler(SatWorkerState *satWorkerState) +{ + // Stop Doppler timer, and set interval to 0, so we don't restart it in start() + satWorkerState->m_dopplerTimer.stop(); + satWorkerState->m_dopplerTimer.setInterval(0); + // Remove doppler correction from any channel + QList *m_deviceSettingsList = m_settings.m_deviceSettings.value(satWorkerState->m_name); + if (m_deviceSettingsList) + { + for (int i = 0; i < m_deviceSettingsList->size(); i++) + { + SatelliteTrackerSettings::SatelliteDeviceSettings *devSettings = m_deviceSettingsList->at(i); + if (devSettings->m_doppler.size() > 0) + { + for (int j = 0; j < devSettings->m_doppler.size(); j++) + { + int offset; + if (ChannelWebAPIUtils::getFrequencyOffset(devSettings->m_deviceSetIndex, devSettings->m_doppler[j], offset)) + { + // Remove old doppler + offset += satWorkerState->m_doppler[i]; + if (!ChannelWebAPIUtils::setFrequencyOffset(devSettings->m_deviceSetIndex, devSettings->m_doppler[j], offset)) + qDebug() << "SatelliteTrackerWorker::doppler: Failed to set frequency offset"; + } + else + qDebug() << "SatelliteTrackerWorker::doppler: Failed to get frequency offset"; + } + satWorkerState->m_doppler[i] = 0; + } + } + } +} + void SatelliteTrackerWorker::doppler(SatWorkerState *satWorkerState) { qDebug() << "SatelliteTrackerWorker::doppler " << satWorkerState->m_name; @@ -844,15 +889,42 @@ void SatelliteTrackerWorker::doppler(SatWorkerState *satWorkerState) // Calculate frequency delta due to Doppler double c = 299792458.0; double deltaF = centerFrequency * satWorkerState->m_satState.m_rangeRate * 1000.0 / c; + int doppler = (int)round(deltaF); for (int j = 0; j < devSettings->m_doppler.size(); j++) { - // For receive, we subtract, transmit we add - int offset = satWorkerState->m_initFrequencyOffset[i] - (int)round(deltaF); + int offset; + if (ChannelWebAPIUtils::getFrequencyOffset(devSettings->m_deviceSetIndex, devSettings->m_doppler[j], offset)) + { + // Apply doppler - For receive, we subtract, transmit we add + std::vector& deviceSets = MainCore::instance()->getDeviceSets(); + ChannelAPI *channel = deviceSets[devSettings->m_deviceSetIndex]->getChannelAt(j); + int tx = false; + if (channel) { + tx = channel->getStreamType() == ChannelAPI::StreamSingleSource; // What if MIMO? + } - if (!ChannelWebAPIUtils::setFrequencyOffset(devSettings->m_deviceSetIndex, devSettings->m_doppler[j], offset)) - qDebug() << "SatelliteTrackerWorker::doppler: Failed to set frequency offset"; + // Remove old doppler and apply new + int initOffset; + if (tx) + { + initOffset = offset - satWorkerState->m_doppler[i]; + offset = initOffset + doppler; + } + else + { + initOffset = offset + satWorkerState->m_doppler[i]; + offset = initOffset - doppler; + } + + if (!ChannelWebAPIUtils::setFrequencyOffset(devSettings->m_deviceSetIndex, devSettings->m_doppler[j], offset)) + qDebug() << "SatelliteTrackerWorker::doppler: Failed to set frequency offset"; + } + else + qDebug() << "SatelliteTrackerWorker::doppler: Failed to get frequency offset"; } + + satWorkerState->m_doppler[i] = doppler; } else qDebug() << "SatelliteTrackerWorker::doppler: couldn't get centre frequency for device at " << devSettings->m_deviceSetIndex; @@ -872,9 +944,7 @@ void SatelliteTrackerWorker::los(SatWorkerState *satWorkerState) getMessageQueueToGUI()->push(SatelliteTrackerReport::MsgReportLOS::create(satWorkerState->m_name, speech)); } - // Stop Doppler timer, and set interval to 0, so we don't restart it in start() - satWorkerState->m_dopplerTimer.stop(); - satWorkerState->m_dopplerTimer.setInterval(0); + disableDoppler(satWorkerState); if (m_settings.m_target == satWorkerState->m_name) { diff --git a/plugins/feature/satellitetracker/satellitetrackerworker.h b/plugins/feature/satellitetracker/satellitetrackerworker.h index 8f7384dd4..4ff48ddc4 100644 --- a/plugins/feature/satellitetracker/satellitetrackerworker.h +++ b/plugins/feature/satellitetracker/satellitetrackerworker.h @@ -60,6 +60,7 @@ protected: QTimer m_losTimer; QTimer m_dopplerTimer; QList m_initFrequencyOffset; + QList m_doppler; // How much doppler we've applied to a channel SatelliteState m_satState; bool m_hasSignalledAOS; // For pass specified by m_aos and m_los @@ -145,6 +146,8 @@ private: void calculateRotation(SatWorkerState *satWorkerState); QString substituteVariables(const QString &textIn, const QString &satelliteName); void executeCommand(const QString &command, const QString &satelliteName); + void enableDoppler(SatWorkerState *satWorkerState); + void disableDoppler(SatWorkerState *satWorkerState); private slots: void stopWork(); diff --git a/swagger/sdrangel/api/swagger/include/SatelliteTracker.yaml b/swagger/sdrangel/api/swagger/include/SatelliteTracker.yaml index 66033bdad..3031500ec 100644 --- a/swagger/sdrangel/api/swagger/include/SatelliteTracker.yaml +++ b/swagger/sdrangel/api/swagger/include/SatelliteTracker.yaml @@ -97,6 +97,12 @@ SatelliteTrackerSettings: type: array items: $ref: "http://swgserver:8081/api/swagger/include/SatelliteTracker.yaml#/SatelliteDeviceSettingsList" + azimuthOffset: + type: number + format: float + elevationOffset: + type: number + format: float title: type: string rgbColor: @@ -179,6 +185,12 @@ SatelliteTrackerReport: * 1 - idle * 2 - running * 3 - error + targetAzimuth: + type: number + format: float + targetElevation: + type: number + format: float satelliteState: type: array items: diff --git a/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerReport.cpp b/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerReport.cpp index 9db2102b0..d54eae72b 100644 --- a/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerReport.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerReport.cpp @@ -30,6 +30,10 @@ SWGSatelliteTrackerReport::SWGSatelliteTrackerReport(QString* json) { SWGSatelliteTrackerReport::SWGSatelliteTrackerReport() { running_state = 0; m_running_state_isSet = false; + target_azimuth = 0.0f; + m_target_azimuth_isSet = false; + target_elevation = 0.0f; + m_target_elevation_isSet = false; satellite_state = nullptr; m_satellite_state_isSet = false; } @@ -42,6 +46,10 @@ void SWGSatelliteTrackerReport::init() { running_state = 0; m_running_state_isSet = false; + target_azimuth = 0.0f; + m_target_azimuth_isSet = false; + target_elevation = 0.0f; + m_target_elevation_isSet = false; satellite_state = new QList(); m_satellite_state_isSet = false; } @@ -49,6 +57,8 @@ SWGSatelliteTrackerReport::init() { void SWGSatelliteTrackerReport::cleanup() { + + if(satellite_state != nullptr) { auto arr = satellite_state; for(auto o: *arr) { @@ -71,6 +81,10 @@ void SWGSatelliteTrackerReport::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&running_state, pJson["runningState"], "qint32", ""); + ::SWGSDRangel::setValue(&target_azimuth, pJson["targetAzimuth"], "float", ""); + + ::SWGSDRangel::setValue(&target_elevation, pJson["targetElevation"], "float", ""); + ::SWGSDRangel::setValue(&satellite_state, pJson["satelliteState"], "QList", "SWGSatelliteState"); } @@ -92,6 +106,12 @@ SWGSatelliteTrackerReport::asJsonObject() { if(m_running_state_isSet){ obj->insert("runningState", QJsonValue(running_state)); } + if(m_target_azimuth_isSet){ + obj->insert("targetAzimuth", QJsonValue(target_azimuth)); + } + if(m_target_elevation_isSet){ + obj->insert("targetElevation", QJsonValue(target_elevation)); + } if(satellite_state && satellite_state->size() > 0){ toJsonArray((QList*)satellite_state, obj, "satelliteState", "SWGSatelliteState"); } @@ -109,6 +129,26 @@ SWGSatelliteTrackerReport::setRunningState(qint32 running_state) { this->m_running_state_isSet = true; } +float +SWGSatelliteTrackerReport::getTargetAzimuth() { + return target_azimuth; +} +void +SWGSatelliteTrackerReport::setTargetAzimuth(float target_azimuth) { + this->target_azimuth = target_azimuth; + this->m_target_azimuth_isSet = true; +} + +float +SWGSatelliteTrackerReport::getTargetElevation() { + return target_elevation; +} +void +SWGSatelliteTrackerReport::setTargetElevation(float target_elevation) { + this->target_elevation = target_elevation; + this->m_target_elevation_isSet = true; +} + QList* SWGSatelliteTrackerReport::getSatelliteState() { return satellite_state; @@ -127,6 +167,12 @@ SWGSatelliteTrackerReport::isSet(){ if(m_running_state_isSet){ isObjectUpdated = true; break; } + if(m_target_azimuth_isSet){ + isObjectUpdated = true; break; + } + if(m_target_elevation_isSet){ + isObjectUpdated = true; break; + } if(satellite_state && (satellite_state->size() > 0)){ isObjectUpdated = true; break; } diff --git a/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerReport.h b/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerReport.h index a5f2caed9..48b0c93a5 100644 --- a/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerReport.h +++ b/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerReport.h @@ -46,6 +46,12 @@ public: qint32 getRunningState(); void setRunningState(qint32 running_state); + float getTargetAzimuth(); + void setTargetAzimuth(float target_azimuth); + + float getTargetElevation(); + void setTargetElevation(float target_elevation); + QList* getSatelliteState(); void setSatelliteState(QList* satellite_state); @@ -56,6 +62,12 @@ private: qint32 running_state; bool m_running_state_isSet; + float target_azimuth; + bool m_target_azimuth_isSet; + + float target_elevation; + bool m_target_elevation_isSet; + QList* satellite_state; bool m_satellite_state_isSet; diff --git a/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerSettings.cpp b/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerSettings.cpp index ffbcf5079..5abce6d5b 100644 --- a/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerSettings.cpp +++ b/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerSettings.cpp @@ -84,6 +84,10 @@ SWGSatelliteTrackerSettings::SWGSatelliteTrackerSettings() { m_los_command_isSet = false; device_settings = nullptr; m_device_settings_isSet = false; + azimuth_offset = 0.0f; + m_azimuth_offset_isSet = false; + elevation_offset = 0.0f; + m_elevation_offset_isSet = false; title = nullptr; m_title_isSet = false; rgb_color = 0; @@ -164,6 +168,10 @@ SWGSatelliteTrackerSettings::init() { m_los_command_isSet = false; device_settings = new QList(); m_device_settings_isSet = false; + azimuth_offset = 0.0f; + m_azimuth_offset_isSet = false; + elevation_offset = 0.0f; + m_elevation_offset_isSet = false; title = new QString(""); m_title_isSet = false; rgb_color = 0; @@ -248,6 +256,8 @@ SWGSatelliteTrackerSettings::cleanup() { } delete device_settings; } + + if(title != nullptr) { delete title; } @@ -331,6 +341,10 @@ SWGSatelliteTrackerSettings::fromJsonObject(QJsonObject &pJson) { ::SWGSDRangel::setValue(&device_settings, pJson["deviceSettings"], "QList", "SWGSatelliteDeviceSettingsList"); + ::SWGSDRangel::setValue(&azimuth_offset, pJson["azimuthOffset"], "float", ""); + + ::SWGSDRangel::setValue(&elevation_offset, pJson["elevationOffset"], "float", ""); + ::SWGSDRangel::setValue(&title, pJson["title"], "QString", "QString"); ::SWGSDRangel::setValue(&rgb_color, pJson["rgbColor"], "qint32", ""); @@ -447,6 +461,12 @@ SWGSatelliteTrackerSettings::asJsonObject() { if(device_settings && device_settings->size() > 0){ toJsonArray((QList*)device_settings, obj, "deviceSettings", "SWGSatelliteDeviceSettingsList"); } + if(m_azimuth_offset_isSet){ + obj->insert("azimuthOffset", QJsonValue(azimuth_offset)); + } + if(m_elevation_offset_isSet){ + obj->insert("elevationOffset", QJsonValue(elevation_offset)); + } if(title != nullptr && *title != QString("")){ toJsonValue(QString("title"), title, obj, QString("QString")); } @@ -755,6 +775,26 @@ SWGSatelliteTrackerSettings::setDeviceSettings(QListm_device_settings_isSet = true; } +float +SWGSatelliteTrackerSettings::getAzimuthOffset() { + return azimuth_offset; +} +void +SWGSatelliteTrackerSettings::setAzimuthOffset(float azimuth_offset) { + this->azimuth_offset = azimuth_offset; + this->m_azimuth_offset_isSet = true; +} + +float +SWGSatelliteTrackerSettings::getElevationOffset() { + return elevation_offset; +} +void +SWGSatelliteTrackerSettings::setElevationOffset(float elevation_offset) { + this->elevation_offset = elevation_offset; + this->m_elevation_offset_isSet = true; +} + QString* SWGSatelliteTrackerSettings::getTitle() { return title; @@ -924,6 +964,12 @@ SWGSatelliteTrackerSettings::isSet(){ if(device_settings && (device_settings->size() > 0)){ isObjectUpdated = true; break; } + if(m_azimuth_offset_isSet){ + isObjectUpdated = true; break; + } + if(m_elevation_offset_isSet){ + isObjectUpdated = true; break; + } if(title && *title != QString("")){ isObjectUpdated = true; break; } diff --git a/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerSettings.h b/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerSettings.h index 8cc00f6b5..0420d7718 100644 --- a/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerSettings.h +++ b/swagger/sdrangel/code/qt5/client/SWGSatelliteTrackerSettings.h @@ -129,6 +129,12 @@ public: QList* getDeviceSettings(); void setDeviceSettings(QList* device_settings); + float getAzimuthOffset(); + void setAzimuthOffset(float azimuth_offset); + + float getElevationOffset(); + void setElevationOffset(float elevation_offset); + QString* getTitle(); void setTitle(QString* title); @@ -241,6 +247,12 @@ private: QList* device_settings; bool m_device_settings_isSet; + float azimuth_offset; + bool m_azimuth_offset_isSet; + + float elevation_offset; + bool m_elevation_offset_isSet; + QString* title; bool m_title_isSet;