12 #include <basedevice.h>
17 #include <KMessageBox>
20 #include <config-kstars.h>
30 #define MAX_REMOTE_INDI_TIMEOUT 15000
38 useGuiderFromCCD=
false;
39 useFilterFromCCD=
false;
56 captureProcess = NULL;
64 connect(toolsWidget, SIGNAL(currentChanged(
int)),
this, SLOT(
updateLog()));
66 toolsWidget->setTabEnabled(1,
false);
68 connect(processINDIB, SIGNAL(clicked()),
this, SLOT(
processINDI()));
70 connect(connectB, SIGNAL(clicked()),
this, SLOT(
connectDevices()));
76 connect(optionsB, SIGNAL(clicked()),
KStars::Instance(), SLOT(slotViewOps()));
78 connect(clearB, SIGNAL(clicked()),
this, SLOT(
clearLog()));
93 delete captureProcess;
103 bool newLocalMode = kcfg_localMode->isChecked();
105 if (newLocalMode == localMode)
108 localMode = newLocalMode;
120 void EkosManager::initLocalDrivers()
123 telescopeCombo->clear();
125 guiderCombo->clear();
126 focuserCombo->clear();
127 filterCombo->clear();
130 telescopeCombo->addItem(
"--");
131 ccdCombo->addItem(
"--");
132 guiderCombo->addItem(
"--");
133 focuserCombo->addItem(
"--");
134 filterCombo->addItem(
"--");
135 auxCombo->addItem(
"--");
171 loadDefaultDrivers();
176 void EkosManager::initRemoteDrivers()
179 telescopeCombo->clear();
181 guiderCombo->clear();
182 focuserCombo->clear();
183 filterCombo->clear();
189 telescopeCombo->addItem(
"--");
195 ccdCombo->addItem(
"--");
200 guiderCombo->addItem(
"--");
205 focuserCombo->addItem(
"--");
210 filterCombo->addItem(
"--");
215 auxCombo->addItem(
"--");
219 void EkosManager::reset()
222 useGuiderFromCCD=
false;
223 useFilterFromCCD=
false;
244 captureProcess = NULL;
249 connectB->setEnabled(
false);
250 disconnectB->setEnabled(
false);
251 controlPanelB->setEnabled(
false);
252 processINDIB->setEnabled(
true);
254 processINDIB->setText(i18n(
"Start INDI"));
257 void EkosManager::loadDefaultDrivers()
266 if (TelescopeDriver.isEmpty() ==
false && TelescopeDriver !=
"--")
268 for (
int i=0; i < telescopeCombo->count(); i++)
269 if (telescopeCombo->itemText(i) == TelescopeDriver)
271 telescopeCombo->setCurrentIndex(i);
276 if (CCDDriver.isEmpty() ==
false && CCDDriver !=
"--")
278 for (
int i=0; i < ccdCombo->count(); i++)
279 if (ccdCombo->itemText(i) == CCDDriver)
281 ccdCombo->setCurrentIndex(i);
286 if (GuiderDriver.isEmpty() ==
false && GuiderDriver !=
"--")
288 for (
int i=0; i < guiderCombo->count(); i++)
289 if (guiderCombo->itemText(i) == GuiderDriver)
291 guiderCombo->setCurrentIndex(i);
296 if (FilterDriver.isEmpty() ==
false && FilterDriver !=
"--")
298 for (
int i=0; i < filterCombo->count(); i++)
299 if (filterCombo->itemText(i) == FilterDriver)
301 filterCombo->setCurrentIndex(i);
306 if (FocuserDriver.isEmpty() ==
false && FocuserDriver !=
"--")
308 for (
int i=0; i < focuserCombo->count(); i++)
309 if (focuserCombo->itemText(i) == FocuserDriver)
311 focuserCombo->setCurrentIndex(i);
317 if (AuxDriver.isEmpty() ==
false && AuxDriver !=
"--")
319 for (
int i=0; i < auxCombo->count(); i++)
320 if (auxCombo->itemText(i) == AuxDriver)
322 auxCombo->setCurrentIndex(i);
329 void EkosManager::saveDefaultDrivers()
348 if (managedDevices.count() > 0 || remote_indi != NULL)
354 managedDevices.clear();
360 scope_di = driversList.value(telescopeCombo->currentText());
361 ccd_di = driversList.value(ccdCombo->currentText());
362 guider_di = driversList.value(guiderCombo->currentText());
363 filter_di = driversList.value(filterCombo->currentText());
364 focuser_di = driversList.value(focuserCombo->currentText());
365 aux_di = driversList.value(auxCombo->currentText());
369 if (guider_di == ccd_di)
371 useGuiderFromCCD =
true;
378 if (filter_di == ccd_di)
380 useFilterFromCCD =
true;
385 if (scope_di != NULL)
386 managedDevices.append(scope_di);
388 managedDevices.append(ccd_di);
389 if (guider_di != NULL)
390 managedDevices.append(guider_di);
391 if (filter_di != NULL)
392 managedDevices.append(filter_di);
393 if (focuser_di != NULL)
394 managedDevices.append(focuser_di);
396 managedDevices.append(aux_di);
398 if (managedDevices.empty())
401 if (ccd_di == NULL && guider_di == NULL)
403 KMessageBox::error(
this, i18n(
"Ekos requires at least one CCD or Guider to operate."));
404 managedDevices.clear();
408 nDevices = managedDevices.count();
410 saveDefaultDrivers();
417 delete (remote_indi);
419 remote_indi =
new DriverInfo(QString(
"Ekos Remote Host"));
425 if (telescopeCombo->currentText() !=
"--")
427 if (ccdCombo->currentText() !=
"--")
429 if (guiderCombo->currentText() !=
"--")
431 if (guiderCombo->currentText() != ccdCombo->currentText())
434 useGuiderFromCCD =
true;
437 if (focuserCombo->currentText() !=
"--")
439 if (filterCombo->currentText() !=
"--")
441 if (filterCombo->currentText() != ccdCombo->currentText())
444 useFilterFromCCD =
true;
446 if (auxCombo->currentText() !=
"--")
467 appendLogText(i18n(
"INDI services started. Please connect devices."));
475 delete (remote_indi);
486 connectB->setEnabled(
false);
487 disconnectB->setEnabled(
false);
488 controlPanelB->setEnabled(
false);
490 processINDIB->setText(i18n(
"Stop INDI"));
501 KMessageBox::error(
this, i18np(
"Unable to completely establish remote devices. %1 device remaining.",
"Unable to completely establish remote devices. %1 devices remaining.", nDevices));
506 if (localMode ==
false)
520 captureProcess->setEnabled(
true);
524 if (guider && guider != ccd)
527 if (guider && guideProcess)
528 guideProcess->setEnabled(
true);
530 if (filter && filter != ccd)
538 focusProcess->setEnabled(
true);
545 connectB->setEnabled(
false);
546 disconnectB->setEnabled(
true);
563 captureProcess->setEnabled(
false);
567 if (guider && guider != ccd)
570 if (guider && guideProcess)
571 guideProcess->setEnabled(
false);
573 if (filter && filter != ccd)
582 disconnect(focuser, SIGNAL(numberUpdated(INumberVectorProperty*)), focusProcess, SLOT(processFocusProperties(INumberVectorProperty*)));
583 focusProcess->setEnabled(
false);
602 else if (remote_indi)
605 delete (remote_indi);
611 managedDevices.clear();
615 processINDIB->setText(i18n(
"Start INDI"));
616 processINDIB->setEnabled(
true);
617 connectB->setEnabled(
false);
618 disconnectB->setEnabled(
false);
619 controlPanelB->setEnabled(
false);
628 processLocalDevice(devInterface);
630 processRemoteDevice(devInterface);
641 scope = devInterface;
648 guider = devInterface;
656 focuser = devInterface;
661 filter = devInterface;
662 if (useFilterFromCCD)
678 connect(devInterface, SIGNAL(Connected()),
this, SLOT(
deviceConnected()));
680 connect(devInterface, SIGNAL(propertyDefined(INDI::Property*)),
this, SLOT(
processNewProperty(INDI::Property*)));
684 connectB->setEnabled(
true);
685 disconnectB->setEnabled(
false);
686 controlPanelB->setEnabled(
true);
694 scope = devInterface;
699 if (useGuiderFromCCD)
704 guider = devInterface;
708 focuser = devInterface;
710 filter = devInterface;
717 connect(devInterface, SIGNAL(Connected()),
this, SLOT(
deviceConnected()));
719 connect(devInterface, SIGNAL(propertyDefined(INDI::Property*)),
this, SLOT(
processNewProperty(INDI::Property*)));
724 connectB->setEnabled(
true);
725 disconnectB->setEnabled(
false);
726 controlPanelB->setEnabled(
true);
728 appendLogText(i18n(
"Remote devices established. Please connect devices."));
735 connectB->setEnabled(
false);
736 disconnectB->setEnabled(
true);
738 processINDIB->setEnabled(
false);
745 ISwitchVectorProperty *configProp = NULL;
749 configProp = scope->
getBaseDevice()->getSwitch(
"CONFIG_PROCESS");
750 if (configProp && configProp->s != IPS_OK)
756 configProp = ccd->
getBaseDevice()->getSwitch(
"CONFIG_PROCESS");
757 if (configProp && configProp->s != IPS_OK)
762 if (guider && guider != ccd && guider->
isConnected())
764 configProp = guider->
getBaseDevice()->getSwitch(
"CONFIG_PROCESS");
765 if (configProp && configProp->s != IPS_OK)
772 configProp = focuser->
getBaseDevice()->getSwitch(
"CONFIG_PROCESS");
773 if (configProp && configProp->s != IPS_OK)
779 configProp = filter->
getBaseDevice()->getSwitch(
"CONFIG_PROCESS");
780 if (configProp && configProp->s != IPS_OK)
786 configProp = aux->
getBaseDevice()->getSwitch(
"CONFIG_PROCESS");
787 if (configProp && configProp->s != IPS_OK)
794 connectB->setEnabled(
true);
795 disconnectB->setEnabled(
false);
797 processINDIB->setEnabled(
true);
807 connect(scopeDevice, SIGNAL(numberUpdated(INumberVectorProperty *)),
this, SLOT(
processNewNumber(INumberVectorProperty*)));
817 captureProcess->
addCCD(ccdDevice);
821 focusProcess->
addCCD(ccdDevice);
825 if (useGuiderFromCCD ==
false && guiderName == QString(ccdDevice->
getDeviceName()))
831 guideProcess->
setCCD(guider);
840 if (ccdStarted ==
false)
846 #ifdef HAVE_ASTROMETRYNET
848 alignProcess->
setCCD(ccd);
854 if (useGuiderFromCCD ==
true)
858 guideProcess->
setCCD(guider);
870 if (useFilterFromCCD ==
false)
872 filter = filterDevice;
880 connect(filter, SIGNAL(numberUpdated(INumberVectorProperty *)),
this, SLOT(
processNewNumber(INumberVectorProperty*)));
887 focuser = focuserDevice;
899 switch (devInterface->
getType())
920 managedDevices.removeOne(drvInfo);
922 if (managedDevices.count() == 0)
936 if (!strcmp(nvp->name,
"TELESCOPE_INFO"))
944 #ifdef HAVE_ASTROMETRYNET
954 if (!strcmp(nvp->name,
"FILTER_SLOT"))
964 if (!strcmp(prop->getName(),
"CCD_INFO") || !strcmp(prop->getName(),
"GUIDER_INFO"))
970 if (!strcmp(prop->getName(),
"TELESCOPE_INFO"))
980 if (!strcmp(prop->getName(),
"GUIDER_EXPOSURE"))
984 if (ccd && !strcmp(ccd->
getDeviceName(), prop->getDeviceName()))
994 if (!strcmp(prop->getName(),
"CCD_FRAME_TYPE"))
998 if (ccd && !strcmp(ccd->
getDeviceName(), prop->getDeviceName()))
1009 if (enableLoggingCheck->isChecked() ==
false)
1012 QWidget *currentWidget = toolsWidget->currentWidget();
1014 if (currentWidget == setupTab)
1015 ekosLogOut->setPlainText(logText.join(
"\n"));
1016 #ifdef HAVE_ASTROMETRYNET
1017 else if (currentWidget == alignProcess)
1018 ekosLogOut->setPlainText(alignProcess->
getLogText());
1020 else if (currentWidget == captureProcess)
1021 ekosLogOut->setPlainText(captureProcess->
getLogText());
1022 else if (currentWidget == focusProcess)
1023 ekosLogOut->setPlainText(focusProcess->
getLogText());
1024 else if (currentWidget == guideProcess)
1025 ekosLogOut->setPlainText(guideProcess->
getLogText());
1032 logText.insert(0,
i18nc(
"log entry; %1 is the date, %2 is the text",
"%1 %2", QDateTime::currentDateTime().toString(
"yyyy-MM-ddThh:mm:ss"), text));
1039 QWidget *currentWidget = toolsWidget->currentWidget();
1041 if (currentWidget == setupTab)
1046 #ifdef HAVE_ASTROMETRYNET
1047 else if (currentWidget == alignProcess)
1050 else if (currentWidget == captureProcess)
1052 else if (currentWidget == focusProcess)
1054 else if (currentWidget == guideProcess)
1058 void EkosManager::initCapture()
1064 toolsWidget->addTab( captureProcess, i18n(
"CCD"));
1065 connect(captureProcess, SIGNAL(newLog()),
this, SLOT(
updateLog()));
1069 void EkosManager::initAlign()
1071 #ifdef HAVE_ASTROMETRYNET
1076 toolsWidget->addTab( alignProcess, i18n(
"Alignment"));
1077 connect(alignProcess, SIGNAL(newLog()),
this, SLOT(
updateLog()));
1082 void EkosManager::initFocus()
1088 toolsWidget->addTab( focusProcess, i18n(
"Focus"));
1089 connect(focusProcess, SIGNAL(newLog()),
this, SLOT(
updateLog()));
1093 void EkosManager::initGuide()
1095 if (guideProcess == NULL)
1098 if (guider && guider->
isConnected() && useST4 && guideStarted ==
false)
1100 guideStarted =
true;
1104 toolsWidget->addTab( guideProcess, i18n(
"Guide"));
1105 connect(guideProcess, SIGNAL(newLog()),
this, SLOT(
updateLog()));
1117 guideProcess->
addST4(st4Driver);
1121 void EkosManager::removeTabs()
1124 for (
int i=2; i < toolsWidget->count(); i++)
1125 toolsWidget->removeTab(i);
1127 delete (alignProcess);
1128 alignProcess = NULL;
1131 delete (captureProcess);
1132 captureProcess = NULL;
1136 delete (guideProcess);
1137 guideProcess = NULL;
1141 delete (focusProcess);
1142 focusProcess = NULL;
1149 #include "ekosmanager.moc"
void deviceDisconnected()
void processNewNumber(INumberVectorProperty *nvp)
void processNewDevice(ISD::GDInterface *)
void addCCD(ISD::GDInterface *newCCD)
static INDIListener * Instance()
static QString remoteGuiderName()
Get Remote Guider Name.
bool disconnectRemoteHost(DriverInfo *dv)
virtual INDI::BaseDevice * getBaseDevice()=0
virtual bool setConfig(INDIConfig tConfig)=0
void stopDevices(const QList< DriverInfo * > &dList)
virtual const char * getDeviceName()=0
void setCCD(ISD::GDInterface *newCCD)
static QString remoteHost()
Get Remote INDI host.
static bool localMode()
Get Ekos connection mode.
static KStars * Instance()
static bool loadConfigOnConnection()
Get Load device configuration upon successful connection?
static bool remoteMode()
Get Ekos connection mode.
void setFocuser(ISD::GDInterface *newFocuser)
void setFocuser(ISD::GDInterface *)
This is the main window for KStars.
static QString remoteFocuserName()
Get Remote Focuser Name.
void setFilter(ISD::GDInterface *)
void appendLogText(const QString &)
void processINDIModeChange()
void addGuideHead(ISD::GDInterface *newCCD)
static void setLocalMode(bool v)
Set Ekos connection mode.
void setTelescope(ISD::GDInterface *)
static QString remoteAuxName()
Get Remote Auxiliary Name.
static QString filterDriver()
Get Default Filter driver.
static QString telescopeDriver()
Get Default telescope driver.
static void setRemoteMode(bool v)
Set Ekos connection mode.
virtual bool isConnected()=0
static QString remoteScopeName()
Get Remote Scope Name.
static QString remoteCCDName()
Get Remote CCD Name.
void syncFrameType(ISD::GDInterface *ccd)
static QString remotePort()
Get Remote Port.
i18nc("string from libindi, used in the config dialog","100x")
void setCCD(ISD::GDInterface *newCCD)
static QString focuserDriver()
Get Default Focuser driver.
static void setAuxDriver(const QString &v)
Set Default Auxiliary driver.
const char * getDeviceName()
static void setFocuserDriver(const QString &v)
Set Default Focuser driver.
void checkFilter(int filterNum)
void setTelescope(ISD::GDInterface *newTelescope)
void refreshRemoteDrivers()
void setTelescope(ISD::GDInterface *newTelescope)
void addFilter(ISD::GDInterface *newFilter)
static void setTelescopeDriver(const QString &v)
Set Default telescope driver.
const QString & getTreeLabel()
static QString guiderDriver()
Get Default Guider driver.
#define MAX_REMOTE_INDI_TIMEOUT
static void setGuiderDriver(const QString &v)
Set Default Guider driver.
static QString auxDriver()
Get Default Auxiliary driver.
static QString cCDDriver()
Get Default CCD driver.
virtual DeviceFamily getType()=0
static GUIManager * Instance()
void setDriverSource(DriverSource newDriverSource)
static bool neverLoadConfig()
Get Never load device configuration?
static QString remoteFilterName()
Get Remote Filter Name.
void addST4(ISD::ST4 *newST4)
virtual bool Disconnect()=0
void removeDevice(ISD::GDInterface *)
void addCCD(ISD::GDInterface *newCCD)
void processNewProperty(INDI::Property *)
void setCCD(ISD::GDInterface *)
static void setCCDDriver(const QString &v)
Set Default CCD driver.
static void setFilterDriver(const QString &v)
Set Default Filter driver.
virtual DriverInfo * getDriverInfo()=0
static DriverManager * Instance()
void setHostParameters(const QString &inHost, const QString &inPort)