From f3f5a18b87c4b331a9017b43c03601fc99637ff8 Mon Sep 17 00:00:00 2001 From: Jasem Mutlaq Date: Mon, 22 May 2017 09:16:13 +0300 Subject: [PATCH] Suspend guiding also if running two cameras from the same driver --- kstars/ekos/capture/capture.cpp | 21 ++++++++++++++++----- kstars/ekos/capture/capture.h | 6 ++---- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/kstars/ekos/capture/capture.cpp b/kstars/ekos/capture/capture.cpp index a3d0a0d2c..cfa0a41a4 100644 --- a/kstars/ekos/capture/capture.cpp +++ b/kstars/ekos/capture/capture.cpp @@ -701,6 +701,18 @@ void Capture::checkCCD(int ccdNum) } } +void Capture::setGuideChip(ISD::CCDChip * chip) +{ + guideChip = chip; + // We should suspend guide in two scenarios: + // 1. If guide chip is within the primary CCD, then we cannot download any data from guide chip while primary CCD is downloading. + // 2. If we have two CCDs running from ONE driver (Multiple-Devices-Per-Driver mpdp is true). Same issue as above, only one download + // at a time. + // After primary CCD download is complete, we resume guiding. + suspendGuideOnDownload = (currentCCD->getChip(ISD::CCDChip::GUIDE_CCD) == guideChip) || + (guideChip->getCCD() == currentCCD && currentCCD->getDriverInfo()->getAuxInfo().value("mdpd", false).toBool()); +} + void Capture::resetFrameToZero() { frameXIN->setMinimum(0); @@ -1224,10 +1236,9 @@ void Capture::processJobCompletion() //Resume guiding if it was suspended before //if (isAutoGuiding && currentCCD->getChip(ISD::CCDChip::GUIDE_CCD) == guideChip) - if (guideState == GUIDE_SUSPENDED && currentCCD->getChip(ISD::CCDChip::GUIDE_CCD) == guideChip) + if (guideState == GUIDE_SUSPENDED && suspendGuideOnDownload) emit resumeGuiding(); } - } bool Capture::resumeSequence() @@ -1260,7 +1271,7 @@ bool Capture::resumeSequence() //Resume guiding if it was suspended before //if (isAutoGuiding && currentCCD->getChip(ISD::CCDChip::GUIDE_CCD) == guideChip) - if (guideState == GUIDE_SUSPENDED && currentCCD->getChip(ISD::CCDChip::GUIDE_CCD) == guideChip) + if (guideState == GUIDE_SUSPENDED && suspendGuideOnDownload) emit resumeGuiding(); return true; @@ -1283,7 +1294,7 @@ bool Capture::resumeSequence() } // If we suspended guiding due to primary chip download, resume guide chip guiding now - if (guideState == GUIDE_SUSPENDED && currentCCD->getChip(ISD::CCDChip::GUIDE_CCD) == guideChip) + if (guideState == GUIDE_SUSPENDED && suspendGuideOnDownload) emit resumeGuiding(); if (guideState == GUIDE_GUIDING && Options::ditherEnabled() && activeJob->getFrameType() == FRAME_LIGHT && --ditherCounter == 0) @@ -1592,7 +1603,7 @@ void Capture::setExposureProgress(ISD::CCDChip * tChip, double value, IPState st } //if (isAutoGuiding && Options::useEkosGuider() && currentCCD->getChip(ISD::CCDChip::GUIDE_CCD) == guideChip) - if (guideState == GUIDE_GUIDING && Options::guiderType() == 0 && currentCCD->getChip(ISD::CCDChip::GUIDE_CCD) == guideChip) + if (guideState == GUIDE_GUIDING && Options::guiderType() == 0 && suspendGuideOnDownload) { if (Options::captureLogging()) qDebug() << "Capture: Autoguiding suspended until primary CCD chip completes downloading..."; diff --git a/kstars/ekos/capture/capture.h b/kstars/ekos/capture/capture.h index 856d4e4ab..ac8a5b636 100644 --- a/kstars/ekos/capture/capture.h +++ b/kstars/ekos/capture/capture.h @@ -436,10 +436,7 @@ class Capture : public QWidget, public Ui::Capture void saveFITSDirectory(); void setDefaultCCD(QString ccd); void setNewRemoteFile(QString file); - void setGuideChip(ISD::CCDChip * chip) - { - guideChip = chip; - } + void setGuideChip(ISD::CCDChip * chip); // Sequence Queue void loadSequenceQueue(); @@ -609,6 +606,7 @@ class Capture : public QWidget, public Ui::Capture // Misc bool ignoreJobProgress; + bool suspendGuideOnDownload=false; // State CaptureState state; -- GitLab