• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

kstars

  • sources
  • kde-4.12
  • kdeedu
  • kstars
  • kstars
  • ekos
ekosmanager.cpp
Go to the documentation of this file.
1 /* Ekos
2  Copyright (C) 2012 Jasem Mutlaq <mutlaqja@ikarustech.com>
3 
4  This application is free software; you can redistribute it and/or
5  modify it under the terms of the GNU General Public
6  License as published by the Free Software Foundation; either
7  version 2 of the License, or (at your option) any later version.
8  */
9 
10 #include "ekosmanager.h"
11 
12 #include <basedevice.h>
13 
14 #include "Options.h"
15 #include "kstars.h"
16 
17 #include <KMessageBox>
18 #include <KComboBox>
19 
20 #include <config-kstars.h>
21 
22 #include "indi/clientmanager.h"
23 #include "indi/indielement.h"
24 #include "indi/indiproperty.h"
25 #include "indi/driverinfo.h"
26 #include "indi/drivermanager.h"
27 #include "indi/indilistener.h"
28 #include "indi/guimanager.h"
29 
30 #define MAX_REMOTE_INDI_TIMEOUT 15000
31 
32 EkosManager::EkosManager()
33  : QDialog(KStars::Instance())
34 {
35  setupUi(this);
36 
37  nDevices=0;
38  useGuiderFromCCD=false;
39  useFilterFromCCD=false;
40  useST4 =false;
41  ccdStarted =false;
42 
43  scope = NULL;
44  ccd = NULL;
45  guider = NULL;
46  focuser = NULL;
47  filter = NULL;
48 
49  scope_di = NULL;
50  ccd_di = NULL;
51  guider_di = NULL;
52  focuser_di = NULL;
53  filter_di = NULL;
54  remote_indi= NULL;
55 
56  captureProcess = NULL;
57  focusProcess = NULL;
58  guideProcess = NULL;
59  alignProcess = NULL;
60 
61  kcfg_localMode->setChecked(Options::localMode());
62  kcfg_remoteMode->setChecked(Options::remoteMode());
63 
64  connect(toolsWidget, SIGNAL(currentChanged(int)), this, SLOT(updateLog()));
65 
66  toolsWidget->setTabEnabled(1, false);
67 
68  connect(processINDIB, SIGNAL(clicked()), this, SLOT(processINDI()));
69 
70  connect(connectB, SIGNAL(clicked()), this, SLOT(connectDevices()));
71 
72  connect(disconnectB, SIGNAL(clicked()), this, SLOT(disconnectDevices()));
73 
74  connect(controlPanelB, SIGNAL(clicked()), GUIManager::Instance(), SLOT(show()));
75 
76  connect(optionsB, SIGNAL(clicked()), KStars::Instance(), SLOT(slotViewOps()));
77 
78  connect(clearB, SIGNAL(clicked()), this, SLOT(clearLog()));
79 
80  connect(kcfg_localMode, SIGNAL(toggled(bool)), this, SLOT(processINDIModeChange()));
81 
82  localMode = Options::localMode();
83 
84  if (localMode)
85  initLocalDrivers();
86  else
87  initRemoteDrivers();
88 
89 }
90 
91 EkosManager::~EkosManager()
92 {
93  delete captureProcess;
94  delete focusProcess;
95  delete guideProcess;
96 }
97 
98 void EkosManager::processINDIModeChange()
99 {
100  Options::setLocalMode(kcfg_localMode->isChecked());
101  Options::setRemoteMode(kcfg_remoteMode->isChecked());
102 
103  bool newLocalMode = kcfg_localMode->isChecked();
104 
105  if (newLocalMode == localMode)
106  return;
107 
108  localMode = newLocalMode;
109 
110  reset();
111 
112  if (localMode)
113  initLocalDrivers();
114  else
115  initRemoteDrivers();
116 
117 
118 }
119 
120 void EkosManager::initLocalDrivers()
121 {
122 
123  telescopeCombo->clear();
124  ccdCombo->clear();
125  guiderCombo->clear();
126  focuserCombo->clear();
127  filterCombo->clear();
128  auxCombo->clear();
129 
130  telescopeCombo->addItem("--");
131  ccdCombo->addItem("--");
132  guiderCombo->addItem("--");
133  focuserCombo->addItem("--");
134  filterCombo->addItem("--");
135  auxCombo->addItem("--");
136 
137  foreach(DriverInfo *dv, DriverManager::Instance()->getDrivers())
138  {
139  switch (dv->getType())
140  {
141  case KSTARS_TELESCOPE:
142  telescopeCombo->addItem(dv->getTreeLabel());
143  break;
144 
145  case KSTARS_CCD:
146  ccdCombo->addItem(dv->getTreeLabel());
147  guiderCombo->addItem(dv->getTreeLabel());
148  break;
149 
150  case KSTARS_FOCUSER:
151  focuserCombo->addItem(dv->getTreeLabel());
152  break;
153 
154  case KSTARS_FILTER:
155  filterCombo->addItem(dv->getTreeLabel());
156  break;
157 
158  case KSTARS_AUXILIARY:
159  auxCombo->addItem(dv->getTreeLabel());
160  break;
161 
162  default:
163  continue;
164  break;
165 
166  }
167 
168  driversList[dv->getTreeLabel()] = dv;
169  }
170 
171  loadDefaultDrivers();
172 
173 
174 }
175 
176 void EkosManager::initRemoteDrivers()
177 {
178 
179  telescopeCombo->clear();
180  ccdCombo->clear();
181  guiderCombo->clear();
182  focuserCombo->clear();
183  filterCombo->clear();
184  auxCombo->clear();
185 
186  if (Options::remoteScopeName().isEmpty() == false)
187  telescopeCombo->addItem(Options::remoteScopeName());
188  else
189  telescopeCombo->addItem("--");
190 
191 
192  if (Options::remoteCCDName().isEmpty() == false)
193  ccdCombo->addItem(Options::remoteCCDName());
194  else
195  ccdCombo->addItem("--");
196 
197  if (Options::remoteGuiderName().isEmpty() == false)
198  guiderCombo->addItem(Options::remoteGuiderName());
199  else
200  guiderCombo->addItem("--");
201 
202  if (Options::remoteFocuserName().isEmpty() == false)
203  focuserCombo->addItem(Options::remoteFocuserName());
204  else
205  focuserCombo->addItem("--");
206 
207  if (Options::remoteFilterName().isEmpty() == false)
208  filterCombo->addItem(Options::remoteFilterName());
209  else
210  filterCombo->addItem("--");
211 
212  if (Options::remoteAuxName().isEmpty() == false)
213  auxCombo->addItem(Options::remoteAuxName());
214  else
215  auxCombo->addItem("--");
216 
217 }
218 
219 void EkosManager::reset()
220 {
221  nDevices=0;
222  useGuiderFromCCD=false;
223  useFilterFromCCD=false;
224  guideStarted =false;
225  useST4 =false;
226  ccdStarted =false;
227 
228  removeTabs();
229 
230  scope = NULL;
231  ccd = NULL;
232  guider = NULL;
233  focuser = NULL;
234  filter = NULL;
235  aux = NULL;
236 
237  scope_di = NULL;
238  ccd_di = NULL;
239  guider_di = NULL;
240  focuser_di = NULL;
241  filter_di = NULL;
242  aux_di = NULL;
243 
244  captureProcess = NULL;
245  focusProcess = NULL;
246  guideProcess = NULL;
247  alignProcess = NULL;
248 
249  connectB->setEnabled(false);
250  disconnectB->setEnabled(false);
251  controlPanelB->setEnabled(false);
252  processINDIB->setEnabled(true);
253 
254  processINDIB->setText(i18n("Start INDI"));
255 }
256 
257 void EkosManager::loadDefaultDrivers()
258 {
259  QString TelescopeDriver = Options::telescopeDriver();
260  QString CCDDriver = Options::cCDDriver();
261  QString GuiderDriver = Options::guiderDriver();
262  QString FocuserDriver = Options::focuserDriver();
263  QString FilterDriver = Options::filterDriver();
264  QString AuxDriver = Options::auxDriver();
265 
266  if (TelescopeDriver.isEmpty() == false && TelescopeDriver != "--")
267  {
268  for (int i=0; i < telescopeCombo->count(); i++)
269  if (telescopeCombo->itemText(i) == TelescopeDriver)
270  {
271  telescopeCombo->setCurrentIndex(i);
272  break;
273  }
274  }
275 
276  if (CCDDriver.isEmpty() == false && CCDDriver != "--")
277  {
278  for (int i=0; i < ccdCombo->count(); i++)
279  if (ccdCombo->itemText(i) == CCDDriver)
280  {
281  ccdCombo->setCurrentIndex(i);
282  break;
283  }
284  }
285 
286  if (GuiderDriver.isEmpty() == false && GuiderDriver != "--")
287  {
288  for (int i=0; i < guiderCombo->count(); i++)
289  if (guiderCombo->itemText(i) == GuiderDriver)
290  {
291  guiderCombo->setCurrentIndex(i);
292  break;
293  }
294  }
295 
296  if (FilterDriver.isEmpty() == false && FilterDriver != "--")
297  {
298  for (int i=0; i < filterCombo->count(); i++)
299  if (filterCombo->itemText(i) == FilterDriver)
300  {
301  filterCombo->setCurrentIndex(i);
302  break;
303  }
304  }
305 
306  if (FocuserDriver.isEmpty() == false && FocuserDriver != "--")
307  {
308  for (int i=0; i < focuserCombo->count(); i++)
309  if (focuserCombo->itemText(i) == FocuserDriver)
310  {
311  focuserCombo->setCurrentIndex(i);
312  break;
313  }
314  }
315 
316 
317  if (AuxDriver.isEmpty() == false && AuxDriver != "--")
318  {
319  for (int i=0; i < auxCombo->count(); i++)
320  if (auxCombo->itemText(i) == AuxDriver)
321  {
322  auxCombo->setCurrentIndex(i);
323  break;
324  }
325  }
326 
327 }
328 
329 void EkosManager::saveDefaultDrivers()
330 {
331 
332  Options::setTelescopeDriver(telescopeCombo->currentText());
333 
334  Options::setCCDDriver(ccdCombo->currentText());
335 
336  Options::setGuiderDriver(guiderCombo->currentText());
337 
338  Options::setFilterDriver(filterCombo->currentText());
339 
340  Options::setFocuserDriver(focuserCombo->currentText());
341 
342  Options::setAuxDriver(auxCombo->currentText());
343 
344 }
345 
346 void EkosManager::processINDI()
347 {
348  if (managedDevices.count() > 0 || remote_indi != NULL)
349  {
350  cleanDevices();
351  return;
352  }
353 
354  managedDevices.clear();
355  reset();
356 
357 
358  if (localMode)
359  {
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());
366 
367  if (guider_di)
368  {
369  if (guider_di == ccd_di)
370  {
371  useGuiderFromCCD = true;
372  guider_di = NULL;
373  }
374  }
375 
376  if (filter_di)
377  {
378  if (filter_di == ccd_di)
379  {
380  useFilterFromCCD = true;
381  filter_di = NULL;
382  }
383  }
384 
385  if (scope_di != NULL)
386  managedDevices.append(scope_di);
387  if (ccd_di != NULL)
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);
395  if (aux_di != NULL)
396  managedDevices.append(aux_di);
397 
398  if (managedDevices.empty())
399  return;
400 
401  if (ccd_di == NULL && guider_di == NULL)
402  {
403  KMessageBox::error(this, i18n("Ekos requires at least one CCD or Guider to operate."));
404  managedDevices.clear();
405  return;
406  }
407 
408  nDevices = managedDevices.count();
409 
410  saveDefaultDrivers();
411 
412 
413 
414  }
415  else
416  {
417  delete (remote_indi);
418 
419  remote_indi = new DriverInfo(QString("Ekos Remote Host"));
420 
421  remote_indi->setHostParameters(Options::remoteHost(), Options::remotePort());
422 
423  remote_indi->setDriverSource(HOST_SOURCE);
424 
425  if (telescopeCombo->currentText() != "--")
426  nDevices++;
427  if (ccdCombo->currentText() != "--")
428  nDevices++;
429  if (guiderCombo->currentText() != "--")
430  {
431  if (guiderCombo->currentText() != ccdCombo->currentText())
432  nDevices++;
433  else
434  useGuiderFromCCD = true;
435  }
436 
437  if (focuserCombo->currentText() != "--")
438  nDevices++;
439  if (filterCombo->currentText() != "--")
440  {
441  if (filterCombo->currentText() != ccdCombo->currentText())
442  nDevices++;
443  else
444  useFilterFromCCD = true;
445  }
446  if (auxCombo->currentText() != "--")
447  nDevices++;
448 
449  }
450 
451  connect(INDIListener::Instance(), SIGNAL(newDevice(ISD::GDInterface*)), this, SLOT(processNewDevice(ISD::GDInterface*)));
452  connect(INDIListener::Instance(), SIGNAL(newTelescope(ISD::GDInterface*)), this, SLOT(setTelescope(ISD::GDInterface*)));
453  connect(INDIListener::Instance(), SIGNAL(newCCD(ISD::GDInterface*)), this, SLOT(setCCD(ISD::GDInterface*)));
454  connect(INDIListener::Instance(), SIGNAL(newFilter(ISD::GDInterface*)), this, SLOT(setFilter(ISD::GDInterface*)));
455  connect(INDIListener::Instance(), SIGNAL(newFocuser(ISD::GDInterface*)), this, SLOT(setFocuser(ISD::GDInterface*)));
456  connect(INDIListener::Instance(), SIGNAL(newST4(ISD::ST4*)), this, SLOT(setST4(ISD::ST4*)));
457  connect(INDIListener::Instance(), SIGNAL(deviceRemoved(ISD::GDInterface*)), this, SLOT(removeDevice(ISD::GDInterface*)));
458 
459  if (localMode)
460  {
461  if (DriverManager::Instance()->startDevices(managedDevices) == false)
462  {
463  INDIListener::Instance()->disconnect(this);
464  return;
465  }
466 
467  appendLogText(i18n("INDI services started. Please connect devices."));
468 
469  }
470  else
471  {
472  if (DriverManager::Instance()->connectRemoteHost(remote_indi) == false)
473  {
474  INDIListener::Instance()->disconnect(this);
475  delete (remote_indi);
476  remote_indi=0;
477  return;
478  }
479 
480  appendLogText(i18n("INDI services started. Connection to %1 at %2 is successful.", Options::remoteHost(), Options::remotePort()));
481 
482  QTimer::singleShot(MAX_REMOTE_INDI_TIMEOUT, this, SLOT(checkINDITimeout()));
483 
484  }
485 
486  connectB->setEnabled(false);
487  disconnectB->setEnabled(false);
488  controlPanelB->setEnabled(false);
489 
490  processINDIB->setText(i18n("Stop INDI"));
491 
492 
493 }
494 
495 void EkosManager::checkINDITimeout()
496 {
497  if (localMode)
498  return;
499 
500  if (nDevices != 0)
501  KMessageBox::error(this, i18np("Unable to completely establish remote devices. %1 device remaining.", "Unable to completely establish remote devices. %1 devices remaining.", nDevices));
502 }
503 
504 void EkosManager::refreshRemoteDrivers()
505 {
506  if (localMode == false)
507  initRemoteDrivers();
508 }
509 
510 void EkosManager::connectDevices()
511 {
512  if (scope)
513  scope->Connect();
514 
515  if (ccd)
516  {
517  ccd->Connect();
518 
519  if (captureProcess)
520  captureProcess->setEnabled(true);
521  }
522 
523 
524  if (guider && guider != ccd)
525  guider->Connect();
526 
527  if (guider && guideProcess)
528  guideProcess->setEnabled(true);
529 
530  if (filter && filter != ccd)
531  filter->Connect();
532 
533  if (focuser)
534  {
535  focuser->Connect();
536 
537  if (focusProcess)
538  focusProcess->setEnabled(true);
539  }
540 
541 
542  if (aux)
543  aux->Connect();
544 
545  connectB->setEnabled(false);
546  disconnectB->setEnabled(true);
547 
548  appendLogText(i18n("Connecting INDI devices..."));
549 }
550 
551 void EkosManager::disconnectDevices()
552 {
553 
554  if (scope)
555  scope->Disconnect();
556 
557  if (ccd)
558  {
559  ccdStarted =false;
560  ccd->Disconnect();
561 
562  if (captureProcess)
563  captureProcess->setEnabled(false);
564 
565  }
566 
567  if (guider && guider != ccd)
568  guider->Disconnect();
569 
570  if (guider && guideProcess)
571  guideProcess->setEnabled(false);
572 
573  if (filter && filter != ccd)
574  filter->Disconnect();
575 
576  if (focuser)
577  {
578  focuser->Disconnect();
579 
580  if (focusProcess)
581  {
582  disconnect(focuser, SIGNAL(numberUpdated(INumberVectorProperty*)), focusProcess, SLOT(processFocusProperties(INumberVectorProperty*)));
583  focusProcess->setEnabled(false);
584  }
585  }
586 
587  if (aux)
588  aux->Disconnect();
589 
590 
591  appendLogText(i18n("Disconnecting INDI devices..."));
592 
593 }
594 
595 void EkosManager::cleanDevices()
596 {
597 
598  INDIListener::Instance()->disconnect(this);
599 
600  if (localMode)
601  DriverManager::Instance()->stopDevices(managedDevices);
602  else if (remote_indi)
603  {
604  DriverManager::Instance()->disconnectRemoteHost(remote_indi);
605  delete (remote_indi);
606  remote_indi = 0;
607  }
608 
609 
610  nDevices = 0;
611  managedDevices.clear();
612 
613  reset();
614 
615  processINDIB->setText(i18n("Start INDI"));
616  processINDIB->setEnabled(true);
617  connectB->setEnabled(false);
618  disconnectB->setEnabled(false);
619  controlPanelB->setEnabled(false);
620 
621  appendLogText(i18n("INDI services stopped."));
622 }
623 
624 void EkosManager::processNewDevice(ISD::GDInterface *devInterface)
625 {
626 
627  if (localMode)
628  processLocalDevice(devInterface);
629  else
630  processRemoteDevice(devInterface);
631 
632 }
633 
634 void EkosManager::processLocalDevice(ISD::GDInterface *devInterface)
635 {
636  DriverInfo *di = devInterface->getDriverInfo();
637 
638  switch (di->getType())
639  {
640  case KSTARS_TELESCOPE:
641  scope = devInterface;
642  break;
643 
644 
645  case KSTARS_CCD:
646  if (guider_di == di)
647  {
648  guider = devInterface;
649  guiderName = devInterface->getDeviceName();
650  }
651  else
652  ccd = devInterface;
653  break;
654 
655  case KSTARS_FOCUSER:
656  focuser = devInterface;
657  break;
658 
659  case KSTARS_FILTER:
660  if (filter_di == di)
661  filter = devInterface;
662  if (useFilterFromCCD)
663  ccd = devInterface;
664  break;
665 
666  case KSTARS_AUXILIARY:
667  if (aux_di == di)
668  aux = devInterface;
669  break;
670 
671  default:
672  return;
673  break;
674  }
675 
676  nDevices--;
677 
678  connect(devInterface, SIGNAL(Connected()), this, SLOT(deviceConnected()));
679  connect(devInterface, SIGNAL(Disconnected()), this, SLOT(deviceDisconnected()));
680  connect(devInterface, SIGNAL(propertyDefined(INDI::Property*)), this, SLOT(processNewProperty(INDI::Property*)));
681 
682  if (nDevices == 0)
683  {
684  connectB->setEnabled(true);
685  disconnectB->setEnabled(false);
686  controlPanelB->setEnabled(true);
687  }
688 
689 }
690 
691 void EkosManager::processRemoteDevice(ISD::GDInterface *devInterface)
692 {
693  if (!strcmp(devInterface->getDeviceName(), Options::remoteScopeName().toLatin1()))
694  scope = devInterface;
695  else if (!strcmp(devInterface->getDeviceName(), Options::remoteCCDName().toLatin1()))
696  {
697  ccd = devInterface;
698 
699  if (useGuiderFromCCD)
700  guider = ccd;
701  }
702  else if (!strcmp(devInterface->getDeviceName(), Options::remoteGuiderName().toLatin1()))
703  {
704  guider = devInterface;
705  guiderName = devInterface->getDeviceName();
706  }
707  else if (!strcmp(devInterface->getDeviceName(), Options::remoteFocuserName().toLatin1()))
708  focuser = devInterface;
709  else if (!strcmp(devInterface->getDeviceName(), Options::remoteFilterName().toLatin1()))
710  filter = devInterface;
711  else if (!strcmp(devInterface->getDeviceName(), Options::remoteAuxName().toLatin1()))
712  aux = devInterface;
713  else
714  return;
715 
716  nDevices--;
717  connect(devInterface, SIGNAL(Connected()), this, SLOT(deviceConnected()));
718  connect(devInterface, SIGNAL(Disconnected()), this, SLOT(deviceDisconnected()));
719  connect(devInterface, SIGNAL(propertyDefined(INDI::Property*)), this, SLOT(processNewProperty(INDI::Property*)));
720 
721 
722  if (nDevices == 0)
723  {
724  connectB->setEnabled(true);
725  disconnectB->setEnabled(false);
726  controlPanelB->setEnabled(true);
727 
728  appendLogText(i18n("Remote devices established. Please connect devices."));
729  }
730 
731 }
732 
733 void EkosManager::deviceConnected()
734 {
735  connectB->setEnabled(false);
736  disconnectB->setEnabled(true);
737 
738  processINDIB->setEnabled(false);
739 
740  if (Options::neverLoadConfig())
741  return;
742 
743  INDIConfig tConfig = Options::loadConfigOnConnection() ? LOAD_LAST_CONFIG : LOAD_DEFAULT_CONFIG;
744 
745  ISwitchVectorProperty *configProp = NULL;
746 
747  if (scope && scope->isConnected())
748  {
749  configProp = scope->getBaseDevice()->getSwitch("CONFIG_PROCESS");
750  if (configProp && configProp->s != IPS_OK)
751  scope->setConfig(tConfig);
752  }
753 
754  if (ccd && ccd->isConnected())
755  {
756  configProp = ccd->getBaseDevice()->getSwitch("CONFIG_PROCESS");
757  if (configProp && configProp->s != IPS_OK)
758  ccd->setConfig(tConfig);
759  }
760 
761 
762  if (guider && guider != ccd && guider->isConnected())
763  {
764  configProp = guider->getBaseDevice()->getSwitch("CONFIG_PROCESS");
765  if (configProp && configProp->s != IPS_OK)
766  guider->setConfig(tConfig);
767  }
768 
769 
770  if (focuser && focuser->isConnected())
771  {
772  configProp = focuser->getBaseDevice()->getSwitch("CONFIG_PROCESS");
773  if (configProp && configProp->s != IPS_OK)
774  focuser->setConfig(tConfig);
775  }
776 
777  if (filter && filter->isConnected())
778  {
779  configProp = filter->getBaseDevice()->getSwitch("CONFIG_PROCESS");
780  if (configProp && configProp->s != IPS_OK)
781  filter->setConfig(tConfig);
782  }
783 
784  if (aux && aux->isConnected())
785  {
786  configProp = aux->getBaseDevice()->getSwitch("CONFIG_PROCESS");
787  if (configProp && configProp->s != IPS_OK)
788  aux->setConfig(tConfig);
789  }
790 }
791 
792 void EkosManager::deviceDisconnected()
793 {
794  connectB->setEnabled(true);
795  disconnectB->setEnabled(false);
796 
797  processINDIB->setEnabled(true);
798 
799 }
800 
801 void EkosManager::setTelescope(ISD::GDInterface *scopeDevice)
802 {
803  scope = scopeDevice;
804 
805  appendLogText(i18n("%1 is online.", scope->getDeviceName()));
806 
807  connect(scopeDevice, SIGNAL(numberUpdated(INumberVectorProperty *)), this, SLOT(processNewNumber(INumberVectorProperty*)));
808 
809  if (guideProcess)
810  guideProcess->setTelescope(scope);
811 }
812 
813 void EkosManager::setCCD(ISD::GDInterface *ccdDevice)
814 {
815  initCapture();
816 
817  captureProcess->addCCD(ccdDevice);
818 
819  initFocus();
820 
821  focusProcess->addCCD(ccdDevice);
822 
823  // If we have a guider and it's the same as the CCD driver, then let's establish it separately.
824  //if (useGuiderFromCCD == false && guider_di && (!strcmp(guider_di->getBaseDevice()->getDeviceName(), ccdDevice->getDeviceName())))
825  if (useGuiderFromCCD == false && guiderName == QString(ccdDevice->getDeviceName()))
826  {
827  guider = ccdDevice;
828  appendLogText(i18n("%1 is online.", ccdDevice->getDeviceName()));
829 
830  initGuide();
831  guideProcess->setCCD(guider);
832 
833  if (scope && scope->isConnected())
834  guideProcess->setTelescope(scope);
835  }
836  else
837  {
838  ccd = ccdDevice;
839 
840  if (ccdStarted == false)
841  appendLogText(i18n("%1 is online.", ccdDevice->getDeviceName()));
842 
843  ccdStarted = true;
844 
845  // TODO: Add check #ifdef for astrometrynet & WSC here
846 #ifdef HAVE_ASTROMETRYNET
847  initAlign();
848  alignProcess->setCCD(ccd);
849  if (scope && scope->isConnected())
850  alignProcess->setTelescope(scope);
851 #endif
852 
853  // If guider is the same driver as the CCD
854  if (useGuiderFromCCD == true)
855  {
856  guider = ccd;
857  initGuide();
858  guideProcess->setCCD(guider);
859 
860  if (scope && scope->isConnected())
861  guideProcess->setTelescope(scope);
862  }
863  }
864 
865 }
866 
867 void EkosManager::setFilter(ISD::GDInterface *filterDevice)
868 {
869 
870  if (useFilterFromCCD == false)
871  {
872  filter = filterDevice;
873  appendLogText(i18n("%1 is online.", filter->getDeviceName()));
874  }
875  else
876  filter = ccd;
877 
878  initCapture();
879 
880  connect(filter, SIGNAL(numberUpdated(INumberVectorProperty *)), this, SLOT(processNewNumber(INumberVectorProperty*)));
881 
882  captureProcess->addFilter(filter);
883 }
884 
885 void EkosManager::setFocuser(ISD::GDInterface *focuserDevice)
886 {
887  focuser = focuserDevice;
888 
889  initFocus();
890 
891  focusProcess->setFocuser(focuser);
892 
893  appendLogText(i18n("%1 is online.", focuser->getDeviceName()));
894 
895 }
896 
897 void EkosManager::removeDevice(ISD::GDInterface* devInterface)
898 {
899  switch (devInterface->getType())
900  {
901  case KSTARS_CCD:
902  removeTabs();
903 
904  break;
905 
906  case KSTARS_FOCUSER:
907  break;
908 
909  default:
910  break;
911  }
912 
913 
914  appendLogText(i18n("%1 is offline.", devInterface->getDeviceName()));
915 
916  foreach(DriverInfo *drvInfo, managedDevices)
917  {
918  if (drvInfo == devInterface->getDriverInfo())
919  {
920  managedDevices.removeOne(drvInfo);
921 
922  if (managedDevices.count() == 0)
923  cleanDevices();
924 
925  break;
926  }
927  }
928 
929 
930 
931 }
932 
933 
934 void EkosManager::processNewNumber(INumberVectorProperty *nvp)
935 {
936  if (!strcmp(nvp->name, "TELESCOPE_INFO"))
937  {
938  if (guideProcess)
939  {
940  guideProcess->setTelescope(scope);
941  guideProcess->syncTelescopeInfo();
942  }
943 
944 #ifdef HAVE_ASTROMETRYNET
945  if (alignProcess)
946  {
947  alignProcess->setTelescope(scope);
948  alignProcess->syncTelescopeInfo();
949  }
950 #endif
951 
952  }
953 
954  if (!strcmp(nvp->name, "FILTER_SLOT"))
955  {
956  if (captureProcess)
957  captureProcess->checkFilter(0);
958  }
959 
960 }
961 
962 void EkosManager::processNewProperty(INDI::Property* prop)
963 {
964  if (!strcmp(prop->getName(), "CCD_INFO") || !strcmp(prop->getName(), "GUIDER_INFO"))
965  {
966  if (guideProcess)
967  guideProcess->syncCCDInfo();
968  }
969 
970  if (!strcmp(prop->getName(), "TELESCOPE_INFO"))
971  {
972  if (guideProcess)
973  {
974  guideProcess->setTelescope(scope);
975  guideProcess->syncTelescopeInfo();
976  }
977 
978  }
979 
980  if (!strcmp(prop->getName(), "GUIDER_EXPOSURE"))
981  {
982  initCapture();
983 
984  if (ccd && !strcmp(ccd->getDeviceName(), prop->getDeviceName()))
985  captureProcess->addGuideHead(ccd);
986  else if (guider)
987  captureProcess->addGuideHead(guider);
988 
989 
990  if (guideProcess)
991  guideProcess->addGuideHead();
992  }
993 
994  if (!strcmp(prop->getName(), "CCD_FRAME_TYPE"))
995  {
996  if (captureProcess)
997  {
998  if (ccd && !strcmp(ccd->getDeviceName(), prop->getDeviceName()))
999  captureProcess->syncFrameType(ccd);
1000  else if (guider)
1001  captureProcess->syncFrameType(guider);
1002  }
1003  }
1004 
1005 }
1006 
1007 void EkosManager::updateLog()
1008 {
1009  if (enableLoggingCheck->isChecked() == false)
1010  return;
1011 
1012  QWidget *currentWidget = toolsWidget->currentWidget();
1013 
1014  if (currentWidget == setupTab)
1015  ekosLogOut->setPlainText(logText.join("\n"));
1016 #ifdef HAVE_ASTROMETRYNET
1017  else if (currentWidget == alignProcess)
1018  ekosLogOut->setPlainText(alignProcess->getLogText());
1019 #endif
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());
1026 
1027 }
1028 
1029 void EkosManager::appendLogText(const QString &text)
1030 {
1031 
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));
1033 
1034  updateLog();
1035 }
1036 
1037 void EkosManager::clearLog()
1038 {
1039  QWidget *currentWidget = toolsWidget->currentWidget();
1040 
1041  if (currentWidget == setupTab)
1042  {
1043  logText.clear();
1044  updateLog();
1045  }
1046 #ifdef HAVE_ASTROMETRYNET
1047  else if (currentWidget == alignProcess)
1048  alignProcess->clearLog();
1049 #endif
1050  else if (currentWidget == captureProcess)
1051  captureProcess->clearLog();
1052  else if (currentWidget == focusProcess)
1053  focusProcess->clearLog();
1054  else if (currentWidget == guideProcess)
1055  guideProcess->clearLog();
1056 }
1057 
1058 void EkosManager::initCapture()
1059 {
1060  if (captureProcess)
1061  return;
1062 
1063  captureProcess = new Ekos::Capture();
1064  toolsWidget->addTab( captureProcess, i18n("CCD"));
1065  connect(captureProcess, SIGNAL(newLog()), this, SLOT(updateLog()));
1066 
1067 }
1068 
1069 void EkosManager::initAlign()
1070 {
1071 #ifdef HAVE_ASTROMETRYNET
1072  if (alignProcess)
1073  return;
1074 
1075  alignProcess = new Ekos::Align();
1076  toolsWidget->addTab( alignProcess, i18n("Alignment"));
1077  connect(alignProcess, SIGNAL(newLog()), this, SLOT(updateLog()));
1078 #endif
1079 }
1080 
1081 
1082 void EkosManager::initFocus()
1083 {
1084  if (focusProcess)
1085  return;
1086 
1087  focusProcess = new Ekos::Focus();
1088  toolsWidget->addTab( focusProcess, i18n("Focus"));
1089  connect(focusProcess, SIGNAL(newLog()), this, SLOT(updateLog()));
1090 
1091 }
1092 
1093 void EkosManager::initGuide()
1094 {
1095  if (guideProcess == NULL)
1096  guideProcess = new Ekos::Guide();
1097 
1098  if (guider && guider->isConnected() && useST4 && guideStarted == false)
1099  {
1100  guideStarted = true;
1101  if (scope && scope->isConnected())
1102  guideProcess->setTelescope(scope);
1103 
1104  toolsWidget->addTab( guideProcess, i18n("Guide"));
1105  connect(guideProcess, SIGNAL(newLog()), this, SLOT(updateLog()));
1106 
1107  }
1108 }
1109 
1110 void EkosManager::setST4(ISD::ST4 * st4Driver)
1111 {
1112  appendLogText(i18n("Guider port from %1 is ready.", st4Driver->getDeviceName()));
1113  useST4=true;
1114 
1115  initGuide();
1116 
1117  guideProcess->addST4(st4Driver);
1118 
1119 }
1120 
1121 void EkosManager::removeTabs()
1122 {
1123 
1124  for (int i=2; i < toolsWidget->count(); i++)
1125  toolsWidget->removeTab(i);
1126 
1127  delete (alignProcess);
1128  alignProcess = NULL;
1129 
1130  ccd = NULL;
1131  delete (captureProcess);
1132  captureProcess = NULL;
1133 
1134 
1135  guider = NULL;
1136  delete (guideProcess);
1137  guideProcess = NULL;
1138 
1139 
1140  focuser = NULL;
1141  delete (focusProcess);
1142  focusProcess = NULL;
1143 
1144 
1145 
1146 }
1147 
1148 
1149 #include "ekosmanager.moc"
LOAD_LAST_CONFIG
Definition: indicommon.h:21
Ekos::Focus
Definition: focus.h:33
EkosManager::deviceDisconnected
void deviceDisconnected()
Definition: ekosmanager.cpp:792
EkosManager::processNewNumber
void processNewNumber(INumberVectorProperty *nvp)
Definition: ekosmanager.cpp:934
EkosManager::processNewDevice
void processNewDevice(ISD::GDInterface *)
Definition: ekosmanager.cpp:624
indilistener.h
Ekos::Focus::addCCD
void addCCD(ISD::GDInterface *newCCD)
Definition: focus.cpp:126
EkosManager::EkosManager
EkosManager()
Definition: ekosmanager.cpp:32
LOAD_DEFAULT_CONFIG
Definition: indicommon.h:21
QDialog
EkosManager::~EkosManager
~EkosManager()
Definition: ekosmanager.cpp:91
ekosmanager.h
INDIListener::Instance
static INDIListener * Instance()
Definition: indilistener.cpp:46
Options::remoteGuiderName
static QString remoteGuiderName()
Get Remote Guider Name.
Definition: Options.h:4806
DriverManager::disconnectRemoteHost
bool disconnectRemoteHost(DriverInfo *dv)
Definition: drivermanager.cpp:711
ISD::GDInterface::getBaseDevice
virtual INDI::BaseDevice * getBaseDevice()=0
ISD::GDInterface::setConfig
virtual bool setConfig(INDIConfig tConfig)=0
DriverManager::stopDevices
void stopDevices(const QList< DriverInfo * > &dList)
Definition: drivermanager.cpp:410
QWidget
EkosManager::processINDI
void processINDI()
Definition: ekosmanager.cpp:346
ISD::GDInterface::getDeviceName
virtual const char * getDeviceName()=0
Ekos::Align::setCCD
void setCCD(ISD::GDInterface *newCCD)
Definition: align.cpp:118
Options::remoteHost
static QString remoteHost()
Get Remote INDI host.
Definition: Options.h:4882
EkosManager::connectDevices
void connectDevices()
Definition: ekosmanager.cpp:510
Options::localMode
static bool localMode()
Get Ekos connection mode.
Definition: Options.h:4920
KStars::Instance
static KStars * Instance()
Definition: kstars.h:125
Options::loadConfigOnConnection
static bool loadConfigOnConnection()
Get Load device configuration upon successful connection?
Definition: Options.h:4977
Options::remoteMode
static bool remoteMode()
Get Ekos connection mode.
Definition: Options.h:4939
EkosManager::checkINDITimeout
void checkINDITimeout()
Definition: ekosmanager.cpp:495
clientmanager.h
Ekos::Guide::syncTelescopeInfo
void syncTelescopeInfo()
Definition: guide.cpp:155
Ekos::Focus::setFocuser
void setFocuser(ISD::GDInterface *newFocuser)
Definition: focus.cpp:109
EkosManager::setFocuser
void setFocuser(ISD::GDInterface *)
Definition: ekosmanager.cpp:885
KStars
This is the main window for KStars.
Definition: kstars.h:94
KSTARS_FOCUSER
Definition: indicommon.h:66
Options::remoteFocuserName
static QString remoteFocuserName()
Get Remote Focuser Name.
Definition: Options.h:4825
EkosManager::setFilter
void setFilter(ISD::GDInterface *)
Definition: ekosmanager.cpp:867
guimanager.h
ISD::GDInterface::Connect
virtual bool Connect()=0
EkosManager::appendLogText
void appendLogText(const QString &)
Definition: ekosmanager.cpp:1029
EkosManager::processINDIModeChange
void processINDIModeChange()
Definition: ekosmanager.cpp:98
Ekos::Capture::addGuideHead
void addGuideHead(ISD::GDInterface *newCCD)
Definition: capture.cpp:121
Options::setLocalMode
static void setLocalMode(bool v)
Set Ekos connection mode.
Definition: Options.h:4910
driverinfo.h
Ekos::Focus::clearLog
void clearLog()
Definition: focus.cpp:763
EkosManager::updateLog
void updateLog()
Definition: ekosmanager.cpp:1007
HOST_SOURCE
Definition: indicommon.h:15
EkosManager::setTelescope
void setTelescope(ISD::GDInterface *)
Definition: ekosmanager.cpp:801
Options::remoteAuxName
static QString remoteAuxName()
Get Remote Auxiliary Name.
Definition: Options.h:4863
Options::filterDriver
static QString filterDriver()
Get Default Filter driver.
Definition: Options.h:4635
Ekos::Guide::clearLog
void clearLog()
Definition: guide.cpp:301
Options::telescopeDriver
static QString telescopeDriver()
Get Default telescope driver.
Definition: Options.h:4578
Options::setRemoteMode
static void setRemoteMode(bool v)
Set Ekos connection mode.
Definition: Options.h:4929
ISD::GDInterface::isConnected
virtual bool isConnected()=0
Options::remoteScopeName
static QString remoteScopeName()
Get Remote Scope Name.
Definition: Options.h:4768
Ekos::Capture::clearLog
void clearLog()
Definition: capture.cpp:591
Ekos::Capture
Definition: capture.h:68
Options::remoteCCDName
static QString remoteCCDName()
Get Remote CCD Name.
Definition: Options.h:4787
Ekos::Capture::syncFrameType
void syncFrameType(ISD::GDInterface *ccd)
Definition: capture.cpp:299
Options::remotePort
static QString remotePort()
Get Remote Port.
Definition: Options.h:4901
Ekos::Guide
Definition: guide.h:35
i18nc
i18nc("string from libindi, used in the config dialog","100x")
Ekos::Guide::setCCD
void setCCD(ISD::GDInterface *newCCD)
Definition: guide.cpp:75
Ekos::Guide::syncCCDInfo
void syncCCDInfo()
Definition: guide.cpp:112
Options::focuserDriver
static QString focuserDriver()
Get Default Focuser driver.
Definition: Options.h:4654
EkosManager::clearLog
void clearLog()
Definition: ekosmanager.cpp:1037
Options::setAuxDriver
static void setAuxDriver(const QString &v)
Set Default Auxiliary driver.
Definition: Options.h:4663
ISD::ST4::getDeviceName
const char * getDeviceName()
Definition: indistd.cpp:750
Options::setFocuserDriver
static void setFocuserDriver(const QString &v)
Set Default Focuser driver.
Definition: Options.h:4644
Ekos::Capture::checkFilter
void checkFilter(int filterNum)
Definition: capture.cpp:323
Ekos::Align::setTelescope
void setTelescope(ISD::GDInterface *newTelescope)
Definition: align.cpp:129
EkosManager::refreshRemoteDrivers
void refreshRemoteDrivers()
Definition: ekosmanager.cpp:504
Ekos::Guide::setTelescope
void setTelescope(ISD::GDInterface *newTelescope)
Definition: guide.cpp:90
Ekos::Capture::addFilter
void addFilter(ISD::GDInterface *newFilter)
Definition: capture.cpp:132
Options::setTelescopeDriver
static void setTelescopeDriver(const QString &v)
Set Default telescope driver.
Definition: Options.h:4568
DriverInfo::getTreeLabel
const QString & getTreeLabel()
Definition: driverinfo.h:40
KSTARS_CCD
Definition: indicommon.h:66
DriverInfo
Definition: driverinfo.h:24
EkosManager::disconnectDevices
void disconnectDevices()
Definition: ekosmanager.cpp:551
Options::guiderDriver
static QString guiderDriver()
Get Default Guider driver.
Definition: Options.h:4616
MAX_REMOTE_INDI_TIMEOUT
#define MAX_REMOTE_INDI_TIMEOUT
Definition: ekosmanager.cpp:30
Options::setGuiderDriver
static void setGuiderDriver(const QString &v)
Set Default Guider driver.
Definition: Options.h:4606
Ekos::Align::getLogText
QString getLogText()
Definition: align.h:48
Ekos::Guide::getLogText
QString getLogText()
Definition: guide.h:61
Options::auxDriver
static QString auxDriver()
Get Default Auxiliary driver.
Definition: Options.h:4673
Options.h
Options::cCDDriver
static QString cCDDriver()
Get Default CCD driver.
Definition: Options.h:4597
ISD::GDInterface::getType
virtual DeviceFamily getType()=0
GUIManager::Instance
static GUIManager * Instance()
Definition: guimanager.cpp:47
DriverInfo::getType
DeviceFamily getType()
Definition: driverinfo.h:52
Ekos::Align::syncTelescopeInfo
void syncTelescopeInfo()
Definition: align.cpp:138
DriverInfo::setDriverSource
void setDriverSource(DriverSource newDriverSource)
Definition: driverinfo.h:54
Options::neverLoadConfig
static bool neverLoadConfig()
Get Never load device configuration?
Definition: Options.h:4958
ISD::ST4
Definition: indistd.h:195
KSTARS_FILTER
Definition: indicommon.h:66
Ekos::Capture::getLogText
QString getLogText()
Definition: capture.h:87
Ekos::Focus::getLogText
QString getLogText()
Definition: focus.h:51
INDIConfig
INDIConfig
Definition: indicommon.h:21
Options::remoteFilterName
static QString remoteFilterName()
Get Remote Filter Name.
Definition: Options.h:4844
Ekos::Guide::addST4
void addST4(ISD::ST4 *newST4)
Definition: guide.cpp:201
ISD::GDInterface::Disconnect
virtual bool Disconnect()=0
EkosManager::removeDevice
void removeDevice(ISD::GDInterface *)
Definition: ekosmanager.cpp:897
EkosManager::deviceConnected
void deviceConnected()
Definition: ekosmanager.cpp:733
Ekos::Guide::addGuideHead
void addGuideHead()
Definition: guide.cpp:99
Ekos::Align::clearLog
void clearLog()
Definition: align.cpp:649
indiproperty.h
Ekos::Capture::addCCD
void addCCD(ISD::GDInterface *newCCD)
Definition: capture.cpp:105
KSTARS_TELESCOPE
Definition: indicommon.h:66
EkosManager::processNewProperty
void processNewProperty(INDI::Property *)
Definition: ekosmanager.cpp:962
KSTARS_AUXILIARY
Definition: indicommon.h:66
EkosManager::setCCD
void setCCD(ISD::GDInterface *)
Definition: ekosmanager.cpp:813
EkosManager::setST4
void setST4(ISD::ST4 *)
Definition: ekosmanager.cpp:1110
Ekos::Align
Definition: align.h:27
Options::setCCDDriver
static void setCCDDriver(const QString &v)
Set Default CCD driver.
Definition: Options.h:4587
Options::setFilterDriver
static void setFilterDriver(const QString &v)
Set Default Filter driver.
Definition: Options.h:4625
EkosManager::cleanDevices
void cleanDevices()
Definition: ekosmanager.cpp:595
kstars.h
ISD::GDInterface
Definition: indistd.h:48
indielement.h
drivermanager.h
ISD::GDInterface::getDriverInfo
virtual DriverInfo * getDriverInfo()=0
DriverManager::Instance
static DriverManager * Instance()
Definition: drivermanager.cpp:91
DriverInfo::setHostParameters
void setHostParameters(const QString &inHost, const QString &inPort)
Definition: driverinfo.h:75
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:36:19 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kstars

Skip menu "kstars"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal