• 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
focus.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 "focus.h"
11 #include "Options.h"
12 
13 #include <KMessageBox>
14 #include <KPlotWidget>
15 #include <KPlotObject>
16 #include <KPlotAxis>
17 
18 #include "indi/driverinfo.h"
19 #include "indi/indicommon.h"
20 
21 #include "fitsviewer/fitsviewer.h"
22 #include "fitsviewer/fitstab.h"
23 #include "fitsviewer/fitsview.h"
24 
25 #include <basedevice.h>
26 
27 #define MAXIMUM_ABS_ITERATIONS 30
28 
29 namespace Ekos
30 {
31 
32 Focus::Focus()
33 {
34  setupUi(this);
35 
36  currentFocuser = NULL;
37  currentCCD = NULL;
38 
39  canAbsMove = false;
40  inAutoFocus = false;
41  inFocusLoop = false;
42 
43  HFRInc =0;
44  reverseDir = false;
45 
46  pulseDuration = 1000;
47 
48  connect(startFocusB, SIGNAL(clicked()), this, SLOT(startFocus()));
49  connect(stopFocusB, SIGNAL(clicked()), this, SLOT(stopFocus()));
50 
51  connect(focusOutB, SIGNAL(clicked()), this, SLOT(FocusOut()));
52  connect(focusInB, SIGNAL(clicked()), this, SLOT(FocusIn()));
53 
54  connect(captureB, SIGNAL(clicked()), this, SLOT(capture()));
55 
56  connect(AutoModeR, SIGNAL(toggled(bool)), this, SLOT(toggleAutofocus(bool)));
57 
58  connect(startLoopB, SIGNAL(clicked()), this, SLOT(startLooping()));
59 
60  connect(CCDCaptureCombo, SIGNAL(activated(int)), this, SLOT(checkCCD(int)));
61 
62  lastFocusDirection = FOCUS_NONE;
63 
64  focusType = FOCUS_MANUAL;
65 
66  HFRPlot->axis( KPlotWidget::LeftAxis )->setLabel( i18nc("Half Flux Radius", "HFR") );
67  HFRPlot->axis( KPlotWidget::BottomAxis )->setLabel( i18n("Absolute Position") );
68 
69  resetButtons();
70 
71  appendLogText(i18n("Idle."));
72 
73  foreach(QString filter, FITSViewer::filterTypes)
74  filterCombo->addItem(filter);
75 
76  exposureIN->setValue(Options::focusExposure());
77  toleranceIN->setValue(Options::focusTolerance());
78  stepIN->setValue(Options::focusTicks());
79 
80 
81 }
82 
83 Focus::~Focus()
84 {
85  qDeleteAll(HFRPoints);
86  HFRPoints.clear();
87 }
88 
89 void Focus::toggleAutofocus(bool enable)
90 {
91  if (enable)
92  focusType = FOCUS_AUTO;
93  else
94  focusType = FOCUS_MANUAL;
95 
96  if (inFocusLoop || inAutoFocus)
97  stopFocus();
98  else
99  resetButtons();
100 }
101 
102 void Focus::checkCCD(int ccdNum)
103 {
104  if (ccdNum <= CCDs.count())
105  currentCCD = CCDs.at(ccdNum);
106 
107 }
108 
109 void Focus::setFocuser(ISD::GDInterface *newFocuser)
110 {
111  currentFocuser = static_cast<ISD::Focuser *> (newFocuser);
112 
113  if (currentFocuser->canAbsMove())
114  {
115  canAbsMove = true;
116  getAbsFocusPosition();
117  }
118 
119  connect(currentFocuser, SIGNAL(numberUpdated(INumberVectorProperty*)), this, SLOT(processFocusProperties(INumberVectorProperty*)));
120 
121  AutoModeR->setEnabled(true);
122 
123  resetButtons();
124 }
125 
126 void Focus::addCCD(ISD::GDInterface *newCCD)
127 {
128  CCDCaptureCombo->addItem(newCCD->getDeviceName());
129 
130  CCDs.append(static_cast<ISD::CCD *>(newCCD));
131 
132  checkCCD(0);
133 
134  CCDCaptureCombo->setCurrentIndex(0);
135 }
136 
137 void Focus::getAbsFocusPosition()
138 {
139  if (canAbsMove)
140  {
141  INumberVectorProperty *absMove = currentFocuser->getBaseDevice()->getNumber("ABS_FOCUS_POSITION");
142  if (absMove)
143  {
144  pulseStep = absMove->np[0].value;
145  absMotionMax = absMove->np[0].max;
146  absMotionMin = absMove->np[0].min;
147  }
148  }
149 
150 }
151 
152 void Focus::startFocus()
153 {
154  lastFocusDirection = FOCUS_NONE;
155 
156  HFR = 0;
157 
158  if (canAbsMove)
159  {
160  absIterations = 0;
161  getAbsFocusPosition();
162  //pulseDuration = (absMotionMax - absMotionMin) * 0.05;
163  pulseDuration = stepIN->value();
164  }
165  else
166  /* Start 1000 ms */
167  pulseDuration=1000;
168 
169  capture();
170 
171  inAutoFocus = true;
172 
173  resetButtons();
174 
175  reverseDir = false;
176 
177  qDeleteAll(HFRPoints);
178  HFRPoints.clear();
179 
180  Options::setFocusTicks(stepIN->value());
181  Options::setFocusTolerance(toleranceIN->value());
182  Options::setFocusExposure(exposureIN->value());
183 
184  appendLogText(i18n("Autofocus in progress..."));
185 }
186 
187 void Focus::stopFocus()
188 {
189 
190  inAutoFocus = false;
191  inFocusLoop = false;
192 
193  currentCCD->disconnect(this);
194 
195  resetButtons();
196 
197  absIterations = 0;
198  HFRInc=0;
199  reverseDir = false;
200 
201 }
202 
203 void Focus::capture()
204 {
205  if (currentCCD == NULL)
206  return;
207 
208  ISD::CCDChip *targetChip = currentCCD->getChip(ISD::CCDChip::PRIMARY_CCD);
209 
210  double seqExpose = exposureIN->value();
211  CCDFrameType ccdFrame = FRAME_LIGHT;
212 
213  if (currentCCD->isConnected() == false)
214  {
215  appendLogText(i18n("Error: Lost connection to CCD."));
216  return;
217  }
218 
219  targetChip->setCaptureMode(FITS_FOCUS);
220  targetChip->setCaptureFilter( (FITSScale) filterCombo->currentIndex());
221 
222  connect(currentCCD, SIGNAL(BLOBUpdated(IBLOB*)), this, SLOT(newFITS(IBLOB*)));
223 
224  targetChip->setFrameType(ccdFrame);
225 
226  targetChip->capture(seqExpose);
227 
228  if (inFocusLoop == false)
229  appendLogText(i18n("Capturing image..."));
230 
231 }
232 
233 void Focus::FocusIn(int ms)
234 {
235 
236  if (currentFocuser == NULL)
237  return;
238 
239  if (currentFocuser->isConnected() == false)
240  {
241  appendLogText(i18n("Error: Lost connection to Focuser."));
242  return;
243  }
244 
245  if (ms == -1)
246  ms = stepIN->value();
247 
248  lastFocusDirection = FOCUS_IN;
249 
250  currentFocuser->focusIn();
251 
252  if (canAbsMove)
253  {
254  currentFocuser->absMoveFocuser(pulseStep+ms);
255  //qDebug() << "Focusing in to position " << pulseStep+ms << endl;
256  }
257  else
258  currentFocuser->moveFocuser(ms);
259 
260  appendLogText(i18n("Focusing inward..."));
261 
262 }
263 
264 void Focus::FocusOut(int ms)
265 {
266 
267  if (currentFocuser == NULL)
268  return;
269 
270  if (currentFocuser->isConnected() == false)
271  {
272  appendLogText(i18n("Error: Lost connection to Focuser."));
273  return;
274  }
275 
276  lastFocusDirection = FOCUS_OUT;
277 
278  if (ms == -1)
279  ms = stepIN->value();
280 
281  currentFocuser->focusOut();
282 
283  if (canAbsMove)
284  {
285  currentFocuser->absMoveFocuser(pulseStep-ms);
286  //qDebug() << "Focusing out to position " << pulseStep-ms << endl;
287  }
288  else
289  currentFocuser->moveFocuser(ms);
290 
291  appendLogText(i18n("Focusing outward..."));
292 
293 }
294 
295 void Focus::newFITS(IBLOB *bp)
296 {
297 
298  INDI_UNUSED(bp);
299  QString HFRText;
300 
301  // Ignore guide head if there is any.
302  if (!strcmp(bp->name, "CCD2"))
303  return;
304 
305  ISD::CCDChip *targetChip = currentCCD->getChip(ISD::CCDChip::PRIMARY_CCD);
306  FITSView *targetImage = targetChip->getImage(FITS_FOCUS);
307 
308  if (targetImage == NULL)
309  {
310  qDebug() << "Error: targetImage is NULL!" << endl;
311  return;
312  }
313 
314  FITSImage *image_data = targetImage->getImageData();
315 
316  currentCCD->disconnect(this);
317 
318  image_data->findStars();
319 
320  double currentHFR= image_data->getHFR(HFR_MAX);
321 
322  qDebug() << "curent HFR is " << currentHFR << endl;
323 
324  if (currentHFR == -1)
325  {
326  currentHFR = image_data->getHFR();
327  qDebug() << "and now hfr is " << currentHFR << endl;
328  }
329 
330  HFRText = QString("%1").arg(currentHFR, 0,'g', 3);
331 
332  if (inFocusLoop == false && focusType == FOCUS_MANUAL && HFR == -1)
333  appendLogText(i18n("FITS received. No stars detected."));
334 
335  HFROut->setText(HFRText);
336 
337  if (inFocusLoop)
338  {
339  capture();
340  return;
341  }
342 
343  if (focusType == FOCUS_MANUAL || inAutoFocus==false)
344  return;
345 
346  if (canAbsMove)
347  autoFocusAbs(currentHFR);
348  else
349  autoFocusRel(currentHFR);
350 
351 }
352 
353 
354 void Focus::autoFocusAbs(double currentHFR)
355 {
356  static int initHFRPos=0, lastHFRPos=0, minHFRPos=0, initSlopePos=0, initPulseDuration=0, focusOutLimit=0, focusInLimit=0, minPos=1e6, maxPos=0;
357  static double initHFR=0, minHFR=0, maxHFR=1,initSlopeHFR=0;
358  double targetPulse=0, delta=0;
359 
360  QString deltaTxt = QString("%1").arg(fabs(currentHFR-minHFR)*100.0, 0,'g', 2);
361  QString HFRText = QString("%1").arg(currentHFR, 0,'g', 3);
362 
363  //qDebug() << "Current HFR: " << currentHFR << " Current Position: " << pulseStep << endl;
364  //qDebug() << "minHFR: " << minHFR << " MinHFR Pos: " << minHFRPos << endl;
365  //qDebug() << "Delta: " << deltaTxt << endl;
366 
367  if (minHFR)
368  appendLogText(i18n("FITS received. HFR %1 @ %2. Delta (%3%)", HFRText, pulseStep, deltaTxt));
369  else
370  appendLogText(i18n("FITS received. HFR %1 @ %2.", HFRText, pulseStep));
371 
372  if (++absIterations > MAXIMUM_ABS_ITERATIONS)
373  {
374  appendLogText(i18n("Autofocus failed to reach proper focus. Try increasing tolerance value."));
375  stopFocus();
376  return;
377  }
378 
379  // No stars detected, try to capture again
380  if (currentHFR == -1)
381  {
382  appendLogText(i18n("No stars detected, capturing again..."));
383  capture();
384  return;
385  }
386 
387  if (currentHFR > maxHFR || HFRPoints.empty())
388  {
389  maxHFR = currentHFR;
390 
391  if (HFRPoints.empty())
392  {
393  maxPos=1;
394  minPos=1e6;
395  }
396  }
397 
398  if (pulseStep > maxPos)
399  maxPos = pulseStep;
400  if (pulseStep < minPos)
401  minPos = pulseStep;
402 
403  HFRPoint *p = new HFRPoint();
404 
405  p->HFR = currentHFR;
406  p->pos = pulseStep;
407 
408  HFRPoints.append(p);
409 
410  HFRPlot->removeAllPlotObjects();
411 
412  //HFRPlot->setLimits(pulseStep-pulseDuration*5, pulseStep+pulseDuration*5, currentHFR/1.5, currentHFR*1.5 );
413  HFRPlot->setLimits(minPos-pulseDuration, maxPos+pulseDuration, currentHFR/1.5, maxHFR );
414 
415  KPlotObject *hfrObj = new KPlotObject( Qt::red, KPlotObject::Points, 2 );
416 
417  foreach(HFRPoint *p, HFRPoints)
418  hfrObj->addPoint(p->pos, p->HFR);
419 
420  HFRPlot->addPlotObject(hfrObj);
421 
422  HFRPlot->update();
423 
424  switch (lastFocusDirection)
425  {
426  case FOCUS_NONE:
427  HFR = currentHFR;
428  initHFRPos = pulseStep;
429  initHFR=HFR;
430  minHFR=currentHFR;
431  minHFRPos=pulseStep;
432  HFRDec=0;
433  HFRInc=0;
434  focusOutLimit=0;
435  focusInLimit=0;
436  initPulseDuration=pulseDuration;
437  FocusIn(pulseDuration);
438  break;
439 
440  case FOCUS_IN:
441  case FOCUS_OUT:
442  if (reverseDir && focusInLimit && focusOutLimit && fabs(currentHFR - minHFR) < (toleranceIN->value()/100.0) && HFRInc == 0 )
443  {
444  if (absIterations <= 2)
445  appendLogText(i18n("Change in HFR is too small. Try increasing the step size or decreasing the tolerance."));
446  else
447  appendLogText(i18n("Autofocus complete."));
448  stopFocus();
449  break;
450  }
451  else if (currentHFR < HFR)
452  {
453  double slope=0;
454 
455  // Let's try to calculate slope of the V curve.
456  if (initSlopeHFR == 0 && HFRInc == 0 && HFRDec >= 1)
457  {
458  initSlopeHFR = HFR;
459  initSlopePos = lastHFRPos;
460  }
461 
462  // Let's now limit the travel distance of the focuser
463  if (lastFocusDirection == FOCUS_OUT && lastHFRPos < focusInLimit)
464  focusInLimit = lastHFRPos;
465  else if (lastFocusDirection == FOCUS_IN && lastHFRPos > focusOutLimit)
466  focusOutLimit = lastHFRPos;
467 
468  // If we have slope, get next target position
469  if (initSlopeHFR)
470  {
471  slope = (currentHFR - initSlopeHFR) / (pulseStep - initSlopePos);
472  targetPulse = pulseStep + (currentHFR*0.5 - currentHFR)/slope;
473  }
474  // Otherwise proceed iteratively
475  else
476  {
477  if (lastFocusDirection == FOCUS_IN)
478  targetPulse = pulseStep + pulseDuration;
479  else
480  targetPulse = pulseStep - pulseDuration;
481 
482  }
483 
484  HFR = currentHFR;
485 
486  // Let's keep track of the minimum HFR
487  if (HFR < minHFR)
488  {
489  minHFR = HFR;
490  minHFRPos = pulseStep;
491  }
492 
493  lastHFRPos = pulseStep;
494 
495  // HFR is decreasing, we are on the right direction
496  HFRDec++;
497  HFRInc=0;
498  }
499  else
500 
501  {
502  // HFR increased, let's deal with it.
503  HFRInc++;
504  HFRDec=0;
505  reverseDir = true;
506 
507  // Reality Check: If it's first time, let's capture again and see if it changes.
508  if (HFRInc <= 1)
509  {
510  capture();
511  return;
512  }
513  // Looks like we're going away from optimal HFR
514  else
515  {
516 
517  HFR = currentHFR;
518  lastHFRPos = pulseStep;
519  initSlopeHFR=0;
520  HFRInc=0;
521 
522  // Let's set new limits
523  if (lastFocusDirection == FOCUS_IN)
524  focusInLimit = pulseStep;
525  else
526  focusOutLimit = pulseStep;
527 
528  // Decrease pulse
529  pulseDuration = pulseDuration * 0.75;
530 
531  // Let's get close to the minimum HFR position so far detected
532  if (lastFocusDirection == FOCUS_OUT)
533  targetPulse = minHFRPos+pulseDuration/2;
534  else
535  targetPulse = minHFRPos-pulseDuration/2;
536 
537  }
538  }
539 
540  // Limit target Pulse to algorithm limits
541  if (focusInLimit != 0 && lastFocusDirection == FOCUS_IN && targetPulse > focusInLimit)
542  targetPulse = focusInLimit;
543  else if (focusOutLimit != 0 && lastFocusDirection == FOCUS_OUT && targetPulse < focusOutLimit)
544  targetPulse = focusOutLimit;
545 
546  // Limit target pulse to focuser limits
547  if (targetPulse < absMotionMin)
548  targetPulse = absMotionMin;
549  else if (targetPulse > absMotionMax)
550  targetPulse = absMotionMax;
551 
552  // Ops, we can't go any further, we're done.
553  if (targetPulse == pulseStep)
554  {
555  appendLogText(i18n("Autofocus complete."));
556  stopFocus();
557  return;
558  }
559 
560  // Ops, deadlock
561  if (focusOutLimit && focusOutLimit == focusInLimit)
562  {
563  appendLogText(i18n("Deadlock reached. Please try again with different settings."));
564  stopFocus();
565  return;
566  }
567 
568  // Get delta for next move
569  delta = (targetPulse - pulseStep);
570 
571  // Now cross your fingers and wait
572  if (delta > 0)
573  FocusIn(delta);
574  else
575  FocusOut(fabs(delta));
576 
577  break;
578 
579  }
580 
581 }
582 
583 
584 void Focus::autoFocusRel(double currentHFR)
585 {
586  QString deltaTxt = QString("%1").arg(fabs(currentHFR-HFR)*100.0, 0,'g', 2);
587  QString HFRText = QString("%1").arg(currentHFR, 0,'g', 3);
588 
589  appendLogText(i18n("FITS received. HFR %1. Delta (%2%)", HFRText, deltaTxt));
590 
591  if (pulseDuration <= 32)
592  {
593  appendLogText(i18n("Autofocus failed to reach proper focus. Try adjusting the tolerance value."));
594  stopFocus();
595  return;
596  }
597 
598  if (currentHFR == -1)
599  {
600  appendLogText(i18n("No stars detected, capturing again..."));
601  capture();
602  return;
603  }
604 
605  switch (lastFocusDirection)
606  {
607  case FOCUS_NONE:
608  HFR = currentHFR;
609  FocusIn(pulseDuration);
610  break;
611 
612  case FOCUS_IN:
613  if (fabs(currentHFR - HFR) < (toleranceIN->value()/100.0) && HFRInc == 0)
614  {
615  appendLogText(i18n("Autofocus complete."));
616  stopFocus();
617  break;
618  }
619  else if (currentHFR < HFR)
620  {
621  HFR = currentHFR;
622  FocusIn(pulseDuration);
623  HFRInc=0;
624  }
625  else
626  {
627  HFRInc++;
628 
629 
630  if (HFRInc < 1)
631  {
632  capture();
633  return;
634  }
635  else
636  {
637 
638  HFR = currentHFR;
639 
640  HFRInc=0;
641 
642  if (reverseDir)
643  pulseDuration /= 2;
644 
645  if (canAbsMove)
646  {
647  if (reverseDir)
648  FocusOut(pulseDuration*3);
649  else
650  {
651  reverseDir = true;
652  FocusOut(pulseDuration*2);
653  }
654  }
655  else
656  FocusOut(pulseDuration);
657  }
658  }
659 
660  break;
661 
662  case FOCUS_OUT:
663  if (fabs(currentHFR - HFR) < (toleranceIN->value()/100.0) && HFRInc == 0)
664  {
665  appendLogText(i18n("Autofocus complete."));
666  stopFocus();
667  break;
668  }
669  else if (currentHFR < HFR)
670  {
671  HFR = currentHFR;
672  FocusOut(pulseDuration);
673  HFRInc=0;
674  }
675  else
676  {
677  HFRInc++;
678 
679  if (HFRInc < 1)
680  capture();
681  else
682  {
683 
684  HFR = currentHFR;
685 
686  HFRInc=0;
687 
688  if (reverseDir)
689  pulseDuration /= 2;
690 
691  if (canAbsMove)
692  {
693  if (reverseDir)
694  FocusIn(pulseDuration*3);
695  else
696  {
697  reverseDir = true;
698  FocusIn(pulseDuration*2);
699  }
700  }
701  else
702  FocusIn(pulseDuration);
703  }
704  }
705 
706  break;
707 
708  }
709 
710 }
711 
712 void Focus::processFocusProperties(INumberVectorProperty *nvp)
713 {
714 
715  if (!strcmp(nvp->name, "ABS_FOCUS_POSITION"))
716  {
717  INumber *pos = IUFindNumber(nvp, "FOCUS_ABSOLUTE_POSITION");
718  if (pos)
719  pulseStep = pos->value;
720 
721  if (canAbsMove && inAutoFocus)
722  {
723  if (nvp->s == IPS_OK)
724  capture();
725  else if (nvp->s == IPS_ALERT)
726  {
727  appendLogText(i18n("Focuser error, check INDI panel."));
728  stopFocus();
729  }
730 
731  }
732 
733  return;
734  }
735 
736  if (!strcmp(nvp->name, "FOCUS_TIMER"))
737  {
738 
739  if (canAbsMove == false && inAutoFocus)
740  {
741  if (nvp->s == IPS_OK)
742  capture();
743  else if (nvp->s == IPS_ALERT)
744  {
745  appendLogText(i18n("Focuser error, check INDI panel."));
746  stopFocus();
747  }
748  }
749 
750  return;
751  }
752 
753 }
754 
755 void Focus::appendLogText(const QString &text)
756 {
757 
758  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));
759 
760  emit newLog();
761 }
762 
763 void Focus::clearLog()
764 {
765  logText.clear();
766  emit newLog();
767 }
768 
769 void Focus::startLooping()
770 {
771 
772 
773  inFocusLoop = true;
774 
775  resetButtons();
776 
777  appendLogText(i18n("Starting continuous exposure..."));
778 
779  capture();
780 }
781 
782 void Focus::resetButtons()
783 {
784 
785  if (inFocusLoop)
786  {
787  startFocusB->setEnabled(false);
788  startLoopB->setEnabled(false);
789  stopFocusB->setEnabled(true);
790 
791  captureB->setEnabled(false);
792  focusOutB->setEnabled(false);
793  focusInB->setEnabled(false);
794 
795  return;
796  }
797 
798  if (inAutoFocus)
799  {
800  stopFocusB->setEnabled(true);
801 
802  startFocusB->setEnabled(false);
803  startLoopB->setEnabled(false);
804  captureB->setEnabled(false);
805  focusOutB->setEnabled(false);
806  focusInB->setEnabled(false);
807 
808  return;
809  }
810 
811  if (focusType == FOCUS_AUTO && currentFocuser)
812  startFocusB->setEnabled(true);
813  else
814  startFocusB->setEnabled(false);
815 
816  stopFocusB->setEnabled(false);
817  startLoopB->setEnabled(true);
818 
819 
820  if (focusType == FOCUS_MANUAL)
821  {
822  if (currentFocuser)
823  {
824  focusOutB->setEnabled(true);
825  focusInB->setEnabled(true);
826  }
827 
828  captureB->setEnabled(true);
829  startLoopB->setEnabled(true);
830 
831  }
832  else
833  {
834  focusOutB->setEnabled(false);
835  focusInB->setEnabled(false);
836  }
837 }
838 
839 
840 }
841 
842 #include "focus.moc"
FITSView::getImageData
FITSImage * getImageData()
Definition: fitsview.h:98
fitstab.h
ISD::CCD::getChip
CCDChip * getChip(CCDChip::ChipType cType)
Definition: indiccd.cpp:872
FITSImage
Definition: fitsimage.h:73
FITSImage::findStars
int findStars()
Definition: fitsimage.cpp:985
ISD::CCDChip
Definition: indiccd.h:23
Ekos::Focus::addCCD
void addCCD(ISD::GDInterface *newCCD)
Definition: focus.cpp:126
Ekos::Focus::checkCCD
void checkCCD(int CCDNum)
Definition: focus.cpp:102
Ekos::Focus::~Focus
~Focus()
Definition: focus.cpp:83
Ekos::Focus::Focus
Focus()
Definition: focus.cpp:32
ISD::GDInterface::getDeviceName
virtual const char * getDeviceName()=0
FITSView
Definition: fitsview.h:81
ISD::CCDChip::getImage
FITSView * getImage(FITSMode imageType)
Definition: indiccd.cpp:51
Ekos::Focus::setFocuser
void setFocuser(ISD::GDInterface *newFocuser)
Definition: focus.cpp:109
focus.h
fitsview.h
Ekos::Focus::FOCUS_OUT
Definition: focus.h:46
ISD::Focuser
Definition: indifocuser.h:18
ISD::CCDChip::PRIMARY_CCD
Definition: indiccd.h:26
Ekos::Focus::stopFocus
void stopFocus()
Definition: focus.cpp:187
ISD::Focuser::absMoveFocuser
bool absMoveFocuser(int steps)
Definition: indifocuser.cpp:98
Ekos::Focus::capture
void capture()
Definition: focus.cpp:203
Options::focusTicks
static uint focusTicks()
Get Default Focuser step ticks.
Definition: Options.h:4692
driverinfo.h
Ekos::Focus::clearLog
void clearLog()
Definition: focus.cpp:763
Options::setFocusTolerance
static void setFocusTolerance(double v)
Set Default Focuser tolerance value.
Definition: Options.h:4701
ISD::CCDChip::capture
bool capture(double exposure)
Definition: indiccd.cpp:198
Ekos::Focus::FOCUS_IN
Definition: focus.h:46
FITSScale
FITSScale
Definition: fitscommon.h:22
ISD::CCDChip::setFrameType
bool setFrameType(CCDFrameType fType)
Definition: indiccd.cpp:299
Ekos::Focus::processFocusProperties
void processFocusProperties(INumberVectorProperty *nvp)
Definition: focus.cpp:712
Ekos::Focus::FOCUS_NONE
Definition: focus.h:46
HFR_MAX
Definition: fitscommon.h:24
FITS_FOCUS
Definition: fitscommon.h:20
i18nc
i18nc("string from libindi, used in the config dialog","100x")
Ekos::Focus::FocusOut
void FocusOut(int ms=-1)
Definition: focus.cpp:264
Options::focusExposure
static double focusExposure()
Get Default Focuser exposure value.
Definition: Options.h:4730
ISD::Focuser::focusIn
bool focusIn()
Definition: indifocuser.cpp:40
Options::setFocusTicks
static void setFocusTicks(uint v)
Set Default Focuser step ticks.
Definition: Options.h:4682
Ekos::Focus::FOCUS_MANUAL
Definition: focus.h:47
ISD::Focuser::canAbsMove
bool canAbsMove()
Definition: indifocuser.cpp:111
Ekos::Focus::FOCUS_AUTO
Definition: focus.h:47
Options.h
Ekos::Focus::appendLogText
void appendLogText(const QString &)
Definition: focus.cpp:755
Ekos::Focus::FocusIn
void FocusIn(int ms=-1)
Definition: focus.cpp:233
CCDFrameType
CCDFrameType
Definition: indicommon.h:68
Ekos::Focus::startFocus
void startFocus()
Definition: focus.cpp:152
Ekos::Focus::toggleAutofocus
void toggleAutofocus(bool enable)
Definition: focus.cpp:89
Ekos::Focus::newFITS
void newFITS(IBLOB *bp)
Definition: focus.cpp:295
ISD::CCDChip::setCaptureFilter
void setCaptureFilter(FITSScale fType)
Definition: indiccd.h:33
ISD::CCDChip::setCaptureMode
void setCaptureMode(FITSMode mode)
Definition: indiccd.h:32
MAXIMUM_ABS_ITERATIONS
#define MAXIMUM_ABS_ITERATIONS
Definition: focus.cpp:27
ISD::DeviceDecorator::isConnected
virtual bool isConnected()
Definition: indistd.cpp:718
ISD::Focuser::focusOut
bool focusOut()
Definition: indifocuser.cpp:63
FITSImage::getHFR
double getHFR(HFRType type=HFR_AVERAGE)
Definition: fitsimage.cpp:782
ISD::DeviceDecorator::getBaseDevice
virtual INDI::BaseDevice * getBaseDevice()
Definition: indistd.cpp:708
fitsviewer.h
Options::focusTolerance
static double focusTolerance()
Get Default Focuser tolerance value.
Definition: Options.h:4711
FITSViewer::filterTypes
static QStringList filterTypes
Definition: fitsviewer.h:71
Options::setFocusExposure
static void setFocusExposure(double v)
Set Default Focuser exposure value.
Definition: Options.h:4720
Ekos::Focus::startLooping
void startLooping()
Definition: focus.cpp:769
indicommon.h
ISD::Focuser::moveFocuser
bool moveFocuser(int secs)
Definition: indifocuser.cpp:85
ISD::GDInterface
Definition: indistd.h:48
FRAME_LIGHT
Definition: indicommon.h:68
Ekos::Focus::newLog
void newLog()
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