• 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
  • indi
indiccd.cpp
Go to the documentation of this file.
1 /* INDI CCD
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 <config-kstars.h>
11 
12 #include <string.h>
13 
14 #include <KMessageBox>
15 #include <KStatusBar>
16 #include <KTemporaryFile>
17 
18 #include <basedevice.h>
19 
20 #ifdef HAVE_CFITSIO_H
21 #include "fitsviewer/fitsviewer.h"
22 #include "fitsviewer/fitscommon.h"
23 #endif
24 
25 #include "clientmanager.h"
26 #include "streamwg.h"
27 #include "indiccd.h"
28 #include "kstars.h"
29 
30 #include "Options.h"
31 
32 const int MAX_FILENAME_LEN = 1024;
33 
34 namespace ISD
35 {
36 
37 CCDChip::CCDChip(INDI::BaseDevice *bDevice, ClientManager *cManager, ChipType cType)
38 {
39  baseDevice = bDevice;
40  clientManager = cManager;
41  type = cType;
42  batchMode = false;
43  displayFITS = true;
44 
45  captureMode = FITS_NORMAL;
46  captureFilter = FITS_NONE;
47 
48  normalImage = focusImage = guideImage = calibrationImage = NULL;
49 }
50 
51 FITSView * CCDChip::getImage(FITSMode imageType)
52 {
53  switch (imageType)
54  {
55  case FITS_NORMAL:
56  return normalImage;
57  break;
58 
59  case FITS_FOCUS:
60  return focusImage;
61  break;
62 
63  case FITS_GUIDE:
64  return guideImage;
65  break;
66 
67  case FITS_CALIBRATE:
68  return calibrationImage;
69  break;
70 
71  default:
72  break;
73  }
74 
75  return NULL;
76 
77 }
78 
79 void CCDChip::setImage(FITSView *image, FITSMode imageType)
80 {
81 
82  switch (imageType)
83  {
84  case FITS_NORMAL:
85  normalImage = image;
86  break;
87 
88  case FITS_FOCUS:
89  focusImage = image;
90  break;
91 
92  case FITS_GUIDE:
93  guideImage = image;
94  break;
95 
96  case FITS_CALIBRATE:
97  calibrationImage = image;
98  break;
99 
100  default:
101  break;
102  }
103 
104 }
105 
106 bool CCDChip::getFrame(int *x, int *y, int *w, int *h)
107 {
108 
109  INumberVectorProperty *frameProp = NULL;
110 
111  switch (type)
112  {
113  case PRIMARY_CCD:
114  frameProp = baseDevice->getNumber("CCD_FRAME");
115  break;
116 
117  case GUIDE_CCD:
118  frameProp = baseDevice->getNumber("GUIDER_FRAME");
119  break;
120 
121  }
122 
123  if (frameProp == NULL)
124  return false;
125 
126  INumber *arg = IUFindNumber(frameProp, "X");
127  if (arg == NULL)
128  return false;
129 
130  *x = arg->value;
131 
132 
133  arg = IUFindNumber(frameProp, "Y");
134  if (arg == NULL)
135  return false;
136 
137  *y = arg->value;
138 
139 
140  arg = IUFindNumber(frameProp, "WIDTH");
141  if (arg == NULL)
142  return false;
143 
144  *w = arg->value;
145 
146  arg = IUFindNumber(frameProp, "HEIGHT");
147  if (arg == NULL)
148  return false;
149 
150  *h = arg->value;
151 
152  return true;
153 
154 }
155 
156 bool CCDChip::setFrame(int x, int y, int w, int h)
157 {
158  INumberVectorProperty *frameProp = NULL;
159 
160  switch (type)
161  {
162  case PRIMARY_CCD:
163  frameProp = baseDevice->getNumber("CCD_FRAME");
164  break;
165 
166  case GUIDE_CCD:
167  frameProp = baseDevice->getNumber("GUIDER_FRAME");
168  break;
169 
170  }
171 
172  if (frameProp == NULL)
173  return false;
174 
175  INumber *xarg = IUFindNumber(frameProp, "X");
176  INumber *yarg = IUFindNumber(frameProp, "Y");
177  INumber *warg = IUFindNumber(frameProp, "WIDTH");
178  INumber *harg = IUFindNumber(frameProp, "HEIGHT");
179 
180  if (xarg && yarg && warg && harg)
181  {
182  if (xarg->value == x && yarg->value == y && warg->value == w && harg->value == h)
183  return true;
184 
185  xarg->value = x;
186  yarg->value = y;
187  warg->value = w;
188  harg->value = h;
189 
190  clientManager->sendNewNumber(frameProp);
191  return true;
192  }
193 
194  return false;
195 
196 }
197 
198 bool CCDChip::capture(double exposure)
199 {
200  INumberVectorProperty *expProp = NULL;
201 
202  switch (type)
203  {
204  case PRIMARY_CCD:
205  expProp = baseDevice->getNumber("CCD_EXPOSURE");
206  break;
207 
208  case GUIDE_CCD:
209  expProp = baseDevice->getNumber("GUIDER_EXPOSURE");
210  break;
211 
212  }
213 
214  if (expProp == NULL)
215  return false;
216 
217  expProp->np[0].value = exposure;
218 
219  clientManager->sendNewNumber(expProp);
220 
221  return true;
222 }
223 
224 bool CCDChip::abortExposure()
225 {
226  ISwitchVectorProperty *abortProp = NULL;
227 
228  switch (type)
229  {
230  case PRIMARY_CCD:
231  abortProp = baseDevice->getSwitch("CCD_ABORT_EXPOSURE");
232  break;
233 
234  case GUIDE_CCD:
235  abortProp = baseDevice->getSwitch("GUIDER_ABORT_EXPOSURE");
236  break;
237 
238  }
239 
240  if (abortProp == NULL)
241  return false;
242 
243  ISwitch *abort = IUFindSwitch(abortProp, "ABORT");
244 
245  if (abort == NULL)
246  return false;
247 
248  abort->s = ISS_ON;
249 
250  clientManager->sendNewSwitch(abortProp);
251 
252  return true;
253 }
254 
255 bool CCDChip::isCapturing()
256 {
257  INumberVectorProperty *expProp = NULL;
258 
259  switch (type)
260  {
261  case PRIMARY_CCD:
262  expProp = baseDevice->getNumber("CCD_EXPOSURE");
263  break;
264 
265  case GUIDE_CCD:
266  expProp = baseDevice->getNumber("GUIDER_EXPOSURE");
267  break;
268 
269  }
270 
271  if (expProp == NULL)
272  return false;
273 
274  return (expProp->s == IPS_BUSY);
275 }
276 
277 bool CCDChip::setFrameType(const QString & name)
278 {
279  CCDFrameType fType = FRAME_LIGHT;
280 
281  if (name == "FRAME_LIGHT" || name == "Light")
282  fType = FRAME_LIGHT;
283  else if (name == "FRAME_DARK" || name == "Dark")
284  fType = FRAME_DARK;
285  else if (name == "FRAME_BIAS" || name == "Bias")
286  fType = FRAME_BIAS;
287  else if (name == "FRAME_FLAT" || name == "Flat")
288  fType = FRAME_FLAT;
289  else
290  {
291  qDebug() << name << " frame type is unknown." << endl;
292  return false;
293  }
294 
295  return setFrameType(fType);
296 
297 }
298 
299 bool CCDChip::setFrameType(CCDFrameType fType)
300 {
301  if (type == GUIDE_CCD)
302  return false;
303 
304  ISwitchVectorProperty *frameProp = baseDevice->getSwitch("CCD_FRAME_TYPE");
305  if (frameProp == NULL)
306  return false;
307 
308  ISwitch *ccdFrame = NULL;
309 
310  if (fType == FRAME_LIGHT)
311  ccdFrame = IUFindSwitch(frameProp, "FRAME_LIGHT");
312  else if (fType == FRAME_DARK)
313  ccdFrame = IUFindSwitch(frameProp, "FRAME_DARK");
314  else if (fType == FRAME_BIAS)
315  ccdFrame = IUFindSwitch(frameProp, "FRAME_BIAS");
316  else if (fType == FRAME_FLAT)
317  ccdFrame = IUFindSwitch(frameProp, "FRAME_FLAT");
318 
319  if (ccdFrame == NULL)
320  return false;
321 
322  if (ccdFrame->s == ISS_ON)
323  return true;
324 
325  if (fType != FRAME_LIGHT)
326  captureMode = FITS_CALIBRATE;
327 
328  IUResetSwitch(frameProp);
329  ccdFrame->s = ISS_ON;
330 
331  clientManager->sendNewSwitch(frameProp);
332 
333  return true;
334 }
335 
336 CCDFrameType CCDChip::getFrameType()
337 {
338 
339  CCDFrameType fType = FRAME_LIGHT;
340 
341  if (type == GUIDE_CCD)
342  return fType;
343 
344  ISwitchVectorProperty *frameProp = baseDevice->getSwitch("CCD_FRAME_TYPE");
345  if (frameProp == NULL)
346  return fType;
347 
348  ISwitch *ccdFrame = NULL;
349 
350  ccdFrame = IUFindOnSwitch(frameProp);
351 
352  if (ccdFrame == NULL)
353  {
354  qDebug() << "Cannot find active frame in CCD!" << endl;
355  return fType;
356  }
357 
358 
359  if (!strcmp(ccdFrame->name, "FRAME_LIGHT"))
360  fType = FRAME_LIGHT;
361  else if (!strcmp(ccdFrame->name, "FRAME_DARK"))
362  fType = FRAME_DARK;
363  else if (!strcmp(ccdFrame->name, "FRAME_FLAT"))
364  fType = FRAME_FLAT;
365  else if (!strcmp(ccdFrame->name, "FRAME_BIAS"))
366  fType = FRAME_BIAS;
367 
368  return fType;
369 
370 }
371 
372 bool CCDChip::setBinning(CCDBinType binType)
373 {
374 
375  switch (binType)
376  {
377  case SINGLE_BIN:
378  return setBinning(1,1);
379  break;
380  case DOUBLE_BIN:
381  return setBinning(2,2);
382  break;
383  case TRIPLE_BIN:
384  return setBinning(3,3);
385  break;
386  case QUADRAPLE_BIN:
387  return setBinning(4,4);
388  break;
389  }
390 
391  return false;
392 }
393 
394 CCDBinType CCDChip::getBinning()
395 {
396  CCDBinType binType = SINGLE_BIN;
397  INumberVectorProperty *binProp;
398 
399  switch (type)
400  {
401  case PRIMARY_CCD:
402  binProp = baseDevice->getNumber("CCD_BINNING");
403  break;
404 
405  case GUIDE_CCD:
406  binProp = baseDevice->getNumber("GUIDE_BINNING");
407  break;
408  }
409 
410  if (binProp == NULL)
411  return binType;
412 
413  INumber *horBin = NULL, *verBin=NULL;
414 
415  horBin = IUFindNumber(binProp, "HOR_BIN");
416  verBin = IUFindNumber(binProp, "VER_BIN");
417 
418  if (!horBin || !verBin)
419  return binType;
420 
421  switch ( (int) horBin->value)
422  {
423  case 2:
424  binType = DOUBLE_BIN;
425  break;
426 
427  case 3:
428  binType = TRIPLE_BIN;
429  break;
430 
431  case 4:
432  binType = QUADRAPLE_BIN;
433  break;
434 
435  default:
436  break;
437 
438  }
439 
440  return binType;
441 
442 }
443 
444 bool CCDChip::getBinning(int *bin_x, int *bin_y)
445 {
446  INumberVectorProperty *binProp;
447 
448  switch (type)
449  {
450  case PRIMARY_CCD:
451  binProp = baseDevice->getNumber("CCD_BINNING");
452  break;
453 
454  case GUIDE_CCD:
455  binProp = baseDevice->getNumber("GUIDE_BINNING");
456  break;
457  }
458 
459 
460  if (binProp == NULL)
461  return false;
462 
463  INumber *horBin = NULL, *verBin=NULL;
464 
465  horBin = IUFindNumber(binProp, "HOR_BIN");
466  verBin = IUFindNumber(binProp, "VER_BIN");
467 
468  if (!horBin || !verBin)
469  return false;
470 
471  *bin_x = horBin->value;
472  *bin_y = verBin->value;
473 
474  return true;
475 }
476 
477 bool CCDChip::setBinning(int bin_x, int bin_y)
478 {
479 
480  INumberVectorProperty *binProp;
481 
482  switch (type)
483  {
484  case PRIMARY_CCD:
485  binProp = baseDevice->getNumber("CCD_BINNING");
486  break;
487 
488  case GUIDE_CCD:
489  binProp = baseDevice->getNumber("GUIDE_BINNING");
490  break;
491  }
492 
493  if (binProp == NULL)
494  return false;
495 
496  INumber *horBin = NULL, *verBin=NULL;
497 
498  horBin = IUFindNumber(binProp, "HOR_BIN");
499  verBin = IUFindNumber(binProp, "VER_BIN");
500 
501  if (!horBin || !verBin)
502  return false;
503 
504  if (horBin->value == bin_x && verBin->value == bin_y)
505  return true;
506 
507  if (bin_x > horBin->max || bin_y > verBin->max)
508  return false;
509 
510  horBin->value = bin_x;
511  verBin->value = bin_y;
512 
513  clientManager->sendNewNumber(binProp);
514 
515  return true;
516 
517 }
518 
519 
520 CCD::CCD(GDInterface *iPtr) : DeviceDecorator(iPtr)
521 {
522  dType = KSTARS_CCD;
523  ISOMode = true;
524  HasGuideHead = false;
525  fv = NULL;
526  streamWindow = NULL;
527  ST4Driver = NULL;
528  seqCount = 0 ;
529 
530  primaryChip = new CCDChip(baseDevice, clientManager, CCDChip::PRIMARY_CCD);
531 
532  normalTabID = calibrationTabID = focusTabID = guideTabID = -1;
533  guideChip = NULL;
534 
535 }
536 
537 CCD::~CCD()
538 {
539 #ifdef HAVE_CFITSIO_H
540  delete (fv);
541 #endif
542  delete (streamWindow);
543  delete (primaryChip);
544  delete (guideChip);
545 }
546 
547 void CCD::registerProperty(INDI::Property *prop)
548 {
549  if (!strcmp(prop->getName(), "GUIDER_EXPOSURE"))
550  {
551  HasGuideHead = true;
552  guideChip = new CCDChip(baseDevice, clientManager, CCDChip::GUIDE_CCD);
553  }
554  else if (!strcmp(prop->getName(), "CCD_FRAME_TYPE"))
555  {
556  ISwitchVectorProperty *ccdFrame = prop->getSwitch();
557 
558  for (int i=0; i < ccdFrame->nsp; i++)
559  primaryChip->addFrameLabel(ccdFrame->sp[i].label);
560  }
561 
562  DeviceDecorator::registerProperty(prop);
563 }
564 
565 void CCD::processLight(ILightVectorProperty *lvp)
566 {
567  DeviceDecorator::processLight(lvp);
568 }
569 
570 void CCD::processNumber(INumberVectorProperty *nvp)
571 {
572  if (!strcmp(nvp->name, "CCD_FRAME"))
573  {
574  INumber *wd = IUFindNumber(nvp, "WIDTH");
575  INumber *ht = IUFindNumber(nvp, "HEIGHT");
576 
577  if (wd && ht && streamWindow)
578  streamWindow->setSize(wd->value, ht->value);
579 
580  emit numberUpdated(nvp);
581 
582  return;
583 
584  }
585 
586  if (!strcmp(nvp->name, "CCD_EXPOSURE"))
587  {
588  if (nvp->s == IPS_BUSY)
589  {
590  INumber *np = IUFindNumber(nvp, "CCD_EXPOSURE_VALUE");
591  if (np)
592  emit newExposureValue(primaryChip, np->value);
593  }
594  }
595 
596  if (!strcmp(nvp->name, "GUIDER_EXPOSURE"))
597  {
598  if (nvp->s == IPS_BUSY)
599  {
600  INumber *np = IUFindNumber(nvp, "GUIDER_EXPOSURE_VALUE");
601  if (np)
602  emit newExposureValue(guideChip, np->value);
603  }
604  }
605 
606  DeviceDecorator::processNumber(nvp);
607 }
608 
609 void CCD::processSwitch(ISwitchVectorProperty *svp)
610 {
611  if (!strcmp(svp->name, "VIDEO_STREAM"))
612  {
613  if (streamWindow == NULL)
614  {
615  streamWindow = new StreamWG();
616 
617  INumberVectorProperty *ccdFrame = baseDevice->getNumber("CCD_FRAME");
618 
619  if (ccdFrame == NULL)
620  return;
621 
622  INumber *wd = IUFindNumber(ccdFrame, "WIDTH");
623  INumber *ht = IUFindNumber(ccdFrame, "HEIGHT");
624 
625  if (wd && ht)
626  streamWindow->setSize(wd->value, ht->value);
627 
628  connect(streamWindow, SIGNAL(destroyed()), this, SLOT(StreamWindowDestroyed()));
629  }
630 
631  if (svp->sp[0].s == ISS_ON)
632  streamWindow->enableStream(true);
633  else
634  streamWindow->enableStream(false);
635 
636 
637  emit switchUpdated(svp);
638 
639  return;
640  }
641 
642  if (!strcmp(svp->name, "CONNECTION"))
643  {
644  ISwitch *dSwitch = IUFindSwitch(svp, "DISCONNECT");
645 
646  if (dSwitch && dSwitch->s == ISS_ON && streamWindow != NULL)
647  {
648  streamWindow->enableStream(false);
649  streamWindow->close();
650  }
651 
652  emit switchUpdated(svp);
653 
654  }
655 
656  DeviceDecorator::processSwitch(svp);
657 
658 }
659 
660 void CCD::processText(ITextVectorProperty *tvp)
661 {
662  DeviceDecorator::processText(tvp);
663 }
664 
665 
666 void CCD::processBLOB(IBLOB* bp)
667 {
668 
669  // If stream, process it first
670  if (!strcmp(bp->format, ".stream") && streamWindow)
671  {
672  if (streamWindow->isStreamEnabled() == false)
673  return;
674 
675  streamWindow->show();
676  streamWindow->newFrame( (static_cast<unsigned char *> (bp->blob)), bp->size, streamWindow->getWidth(), streamWindow->getHeight());
677  return;
678  }
679 
680  // If it's not FITS, don't process it.
681  if (strcmp(bp->format, ".fits"))
682  {
683  DeviceDecorator::processBLOB(bp);
684  return;
685  }
686 
687  CCDChip *targetChip = NULL;
688 
689  if (!strcmp(bp->name, "CCD2"))
690  targetChip = guideChip;
691  else
692  targetChip = primaryChip;
693 
694  // It's either FITS or OTHER
695  QString currentDir = Options::fitsDir();
696  int nr, n=0;
697  KTemporaryFile tmpFile;
698 
699  if (currentDir.endsWith('/'))
700  currentDir.truncate(sizeof(currentDir)-1);
701 
702  QString filename(currentDir + '/');
703 
704  // Create file name for FITS to be shown in FITS Viewer
705  if (targetChip->isBatchMode() == false)
706  {
707 
708  tmpFile.setPrefix("fits");
709  tmpFile.setAutoRemove(false);
710 
711  if (!tmpFile.open())
712  {
713  qDebug() << "Error: Unable to open " << filename << endl;
714  return;
715  }
716 
717  QDataStream out(&tmpFile);
718 
719  for (nr=0; nr < (int) bp->size; nr += n)
720  n = out.writeRawData( static_cast<char *> (bp->blob) + nr, bp->size - nr);
721 
722  tmpFile.close();
723 
724  filename = tmpFile.fileName();
725 
726  }
727  // Create file name for others
728  else
729  {
730  QString ts = QDateTime::currentDateTime().toString("yyyy-MM-ddThh:mm:ss");
731 
732  if (ISOMode == false)
733  filename += seqPrefix + (seqPrefix.isEmpty() ? "" : "_") + QString("%1.fits").arg(QString().sprintf("%02d", seqCount));
734  else
735  filename += seqPrefix + (seqPrefix.isEmpty() ? "" : "_") + QString("%1_%2.fits").arg(QString().sprintf("%02d", seqCount)).arg(ts);
736 
737  QFile fits_temp_file(filename);
738  if (!fits_temp_file.open(QIODevice::WriteOnly))
739  {
740  qDebug() << "Error: Unable to open " << fits_temp_file.fileName() << endl;
741  return;
742  }
743 
744  QDataStream out(&fits_temp_file);
745 
746  for (nr=0; nr < (int) bp->size; nr += n)
747  n = out.writeRawData( static_cast<char *> (bp->blob) + nr, bp->size - nr);
748 
749  fits_temp_file.close();
750  }
751 
752  addFITSKeywords(filename);
753 
754  if (targetChip->isBatchMode())
755  KStars::Instance()->statusBar()->changeItem( i18n("FITS file saved to %1", filename ), 0);
756 
757  // Unless we have cfitsio, we're done.
758  #ifdef HAVE_CFITSIO_H
759  if (Options::showFITS() && targetChip->showFITS() == true && targetChip->getCaptureMode() != FITS_WCSM)
760  {
761  KUrl fileURL(filename);
762 
763  if (fv == NULL)
764  {
765  fv = new FITSViewer(KStars::Instance());
766  connect(fv, SIGNAL(destroyed()), this, SLOT(FITSViewerDestroyed()));
767  connect(fv, SIGNAL(destroyed()), this, SIGNAL(FITSViewerClosed()));
768  }
769 
770  FITSScale captureFilter = targetChip->getCaptureFilter();
771 
772  switch (targetChip->getCaptureMode())
773  {
774  case FITS_NORMAL:
775  normalTabID = fv->addFITS(&fileURL, FITS_NORMAL, captureFilter);
776  targetChip->setImage(fv->getImage(normalTabID), FITS_NORMAL);
777  break;
778 
779  case FITS_FOCUS:
780  if (focusTabID == -1)
781  focusTabID = fv->addFITS(&fileURL, FITS_FOCUS, captureFilter);
782  else if (fv->updateFITS(&fileURL, focusTabID, captureFilter) == false)
783  focusTabID = fv->addFITS(&fileURL, FITS_FOCUS, captureFilter);
784 
785  targetChip->setImage(fv->getImage(focusTabID), FITS_FOCUS);
786  break;
787 
788  case FITS_GUIDE:
789  if (guideTabID == -1)
790  guideTabID = fv->addFITS(&fileURL, FITS_GUIDE, captureFilter);
791  else if (fv->updateFITS(&fileURL, guideTabID, captureFilter) == false)
792  guideTabID = fv->addFITS(&fileURL, FITS_GUIDE, captureFilter);
793 
794  targetChip->setImage(fv->getImage(guideTabID), FITS_GUIDE);
795  break;
796 
797  case FITS_CALIBRATE:
798  if (calibrationTabID == -1)
799  calibrationTabID = fv->addFITS(&fileURL, FITS_CALIBRATE, captureFilter);
800  else if (fv->updateFITS(&fileURL, calibrationTabID, captureFilter) == false)
801  calibrationTabID = fv->addFITS(&fileURL, FITS_CALIBRATE, captureFilter);
802 
803  targetChip->setImage(fv->getImage(calibrationTabID), FITS_CALIBRATE);
804  break;
805 
806 
807  default:
808  break;
809 
810  }
811 
812  fv->show();
813 
814  }
815  #endif
816 
817  // store file name
818  strncpy(bp->label, filename.toLatin1(), MAXINDILABEL);
819 
820  emit BLOBUpdated(bp);
821 
822 }
823 
824 void CCD::addFITSKeywords(QString filename)
825 {
826 #ifdef HAVE_CFITSIO_H
827  int status=0;
828 
829  if (filter.isEmpty() == false)
830  {
831  QString key_comment("Filter name");
832  filter.replace(" ", "_");
833 
834  fitsfile* fptr=NULL;
835 
836  if (fits_open_image(&fptr, filename.toAscii(), READWRITE, &status))
837  {
838  fits_report_error(stderr, status);
839  return;
840  }
841 
842  if (fits_update_key_str(fptr, "FILTER", filter.toLatin1().data(), key_comment.toLatin1().data(), &status))
843  {
844  fits_report_error(stderr, status);
845  return;
846  }
847 
848  fits_close_file(fptr, &status);
849 
850  filter = "";
851  }
852 #endif
853 }
854 
855 void CCD::FITSViewerDestroyed()
856 {
857  fv = NULL;
858  normalTabID = calibrationTabID = focusTabID = guideTabID = -1;
859 }
860 
861 void CCD::StreamWindowDestroyed()
862 {
863  delete(streamWindow);
864  streamWindow = NULL;
865 }
866 
867 bool CCD::hasGuideHead()
868 {
869  return HasGuideHead;
870 }
871 
872 CCDChip * CCD::getChip(CCDChip::ChipType cType)
873 {
874  switch (cType)
875  {
876  case CCDChip::PRIMARY_CCD:
877  return primaryChip;
878  break;
879 
880  case CCDChip::GUIDE_CCD:
881  return guideChip;
882  break;
883  }
884 
885  return NULL;
886 }
887 
888 
889 
890 }
ISD::DeviceDecorator
Definition: indistd.h:152
ISD::DeviceDecorator::baseDevice
INDI::BaseDevice * baseDevice
Definition: indistd.h:189
ISD::CCDChip::getFrameType
CCDFrameType getFrameType()
Definition: indiccd.cpp:336
DOUBLE_BIN
Definition: indicommon.h:70
ISD::CCD::getChip
CCDChip * getChip(CCDChip::ChipType cType)
Definition: indiccd.cpp:872
ISD::CCD::FITSViewerClosed
void FITSViewerClosed()
ISD::CCDChip
Definition: indiccd.h:23
StreamWG
Definition: streamwg.h:33
streamwg.h
StreamWG::newFrame
void newFrame(unsigned char *buffer, int buffSiz, int w, int h)
Definition: streamwg.cpp:133
ISD::CCD::processNumber
void processNumber(INumberVectorProperty *nvp)
Definition: indiccd.cpp:570
ISD::CCDChip::isCapturing
bool isCapturing()
Definition: indiccd.cpp:255
ISD::CCDChip::setBinning
bool setBinning(int bin_x, int bin_y)
Definition: indiccd.cpp:477
ISD::DeviceDecorator::registerProperty
virtual void registerProperty(INDI::Property *prop)
Definition: indistd.cpp:671
ISD::DeviceDecorator::processNumber
virtual void processNumber(INumberVectorProperty *nvp)
Definition: indistd.cpp:653
FITS_NORMAL
Definition: fitscommon.h:20
KStars::Instance
static KStars * Instance()
Definition: kstars.h:125
FITSView
Definition: fitsview.h:81
ISD::CCD::hasGuideHead
bool hasGuideHead()
Definition: indiccd.cpp:867
clientmanager.h
ISD::CCD::StreamWindowDestroyed
void StreamWindowDestroyed()
Definition: indiccd.cpp:861
ISD::CCDChip::getImage
FITSView * getImage(FITSMode imageType)
Definition: indiccd.cpp:51
ISD::DeviceDecorator::processSwitch
virtual void processSwitch(ISwitchVectorProperty *svp)
Definition: indistd.cpp:659
ISD::GDInterface::numberUpdated
void numberUpdated(INumberVectorProperty *nvp)
ISD::CCDChip::PRIMARY_CCD
Definition: indiccd.h:26
ISD::CCD::FITSViewerDestroyed
void FITSViewerDestroyed()
Definition: indiccd.cpp:855
ISD::CCD::processLight
void processLight(ILightVectorProperty *lvp)
Definition: indiccd.cpp:565
SINGLE_BIN
Definition: indicommon.h:70
ISD::CCDChip::abortExposure
bool abortExposure()
Definition: indiccd.cpp:224
ISD::CCD::CCD
CCD(GDInterface *iPtr)
Definition: indiccd.cpp:520
ISD::CCDChip::getCaptureFilter
FITSScale getCaptureFilter()
Definition: indiccd.h:54
ISD::CCD::registerProperty
void registerProperty(INDI::Property *prop)
Definition: indiccd.cpp:547
StreamWG::getHeight
int getHeight()
Definition: streamwg.h:49
ISD::CCDChip::capture
bool capture(double exposure)
Definition: indiccd.cpp:198
ISD::CCDChip::isBatchMode
bool isBatchMode()
Definition: indiccd.h:56
FITS_WCSM
Definition: fitscommon.h:20
FITSScale
FITSScale
Definition: fitscommon.h:22
fitscommon.h
ISD::CCD::processText
void processText(ITextVectorProperty *tvp)
Definition: indiccd.cpp:660
ISD::CCDChip::GUIDE_CCD
Definition: indiccd.h:26
ISD::GDInterface::switchUpdated
void switchUpdated(ISwitchVectorProperty *svp)
Options::fitsDir
static QString fitsDir()
Get FITS Default directory.
Definition: Options.h:695
ISD::CCDChip::setFrameType
bool setFrameType(CCDFrameType fType)
Definition: indiccd.cpp:299
ISD::CCD::processBLOB
void processBLOB(IBLOB *bp)
Definition: indiccd.cpp:666
ISD::CCDChip::setImage
void setImage(FITSView *image, FITSMode imageType)
Definition: indiccd.cpp:79
ISD::CCD::~CCD
~CCD()
Definition: indiccd.cpp:537
ISD::DeviceDecorator::processBLOB
virtual void processBLOB(IBLOB *bp)
Definition: indistd.cpp:639
FITS_FOCUS
Definition: fitscommon.h:20
ISD::DeviceDecorator::processText
virtual void processText(ITextVectorProperty *tvp)
Definition: indistd.cpp:665
ISD::CCDChip::getCaptureMode
FITSMode getCaptureMode()
Definition: indiccd.h:53
Options::showFITS
static bool showFITS()
Get Display FITS automatically when an image is captured?
Definition: Options.h:562
indiccd.h
QUADRAPLE_BIN
Definition: indicommon.h:70
ISD::CCDChip::CCDChip
CCDChip(INDI::BaseDevice *bDevice, ClientManager *cManager, ChipType cType)
Definition: indiccd.cpp:37
ISD::CCDChip::getFrame
bool getFrame(int *x, int *y, int *w, int *h)
Definition: indiccd.cpp:106
KSTARS_CCD
Definition: indicommon.h:66
StreamWG::getWidth
int getWidth()
Definition: streamwg.h:48
FITSViewer::addFITS
int addFITS(const KUrl *imageName, FITSMode mode=FITS_NORMAL, FITSScale filter=FITS_NONE)
Definition: fitsviewer.cpp:196
ISD::DeviceDecorator::clientManager
ClientManager * clientManager
Definition: indistd.h:190
Options.h
ISD::CCD::newExposureValue
void newExposureValue(ISD::CCDChip *chip, double value)
FITSViewer::updateFITS
bool updateFITS(const KUrl *imageName, int fitsUID, FITSScale filter=FITS_NONE)
Definition: fitsviewer.cpp:258
StreamWG::isStreamEnabled
bool isStreamEnabled()
Definition: streamwg.h:46
ISD::CCDChip::getBinning
CCDBinType getBinning()
Definition: indiccd.cpp:394
ClientManager
Definition: clientmanager.h:22
ISD::CCDChip::showFITS
bool showFITS()
Definition: indiccd.h:48
MAX_FILENAME_LEN
const int MAX_FILENAME_LEN
Definition: indiccd.cpp:32
ISD::GDInterface::BLOBUpdated
void BLOBUpdated(IBLOB *bp)
FRAME_FLAT
Definition: indicommon.h:68
StreamWG::enableStream
void enableStream(bool enable)
Definition: streamwg.cpp:83
FITS_CALIBRATE
Definition: fitscommon.h:20
CCDFrameType
CCDFrameType
Definition: indicommon.h:68
ISD::GDInterface::dType
DeviceFamily dType
Definition: indistd.h:78
FRAME_BIAS
Definition: indicommon.h:68
ISD::DeviceDecorator::processLight
virtual void processLight(ILightVectorProperty *lvp)
Definition: indistd.cpp:646
fitsviewer.h
ISD::CCDChip::addFrameLabel
void addFrameLabel(const QString &label)
Definition: indiccd.h:59
FITS_NONE
Definition: fitscommon.h:22
TRIPLE_BIN
Definition: indicommon.h:70
StreamWG::setSize
void setSize(int wd, int ht)
Definition: streamwg.cpp:99
FITSViewer
Definition: fitsviewer.h:51
FRAME_DARK
Definition: indicommon.h:68
ISD::CCD::processSwitch
void processSwitch(ISwitchVectorProperty *svp)
Definition: indiccd.cpp:609
FITSViewer::getImage
FITSView * getImage(int fitsUID)
Definition: fitsviewer.cpp:555
kstars.h
ISD::GDInterface
Definition: indistd.h:48
FRAME_LIGHT
Definition: indicommon.h:68
ISD::CCDChip::ChipType
ChipType
Definition: indiccd.h:26
ISD::CCDChip::setFrame
bool setFrame(int x, int y, int w, int h)
Definition: indiccd.cpp:156
FITSMode
FITSMode
Definition: fitscommon.h:20
FITS_GUIDE
Definition: fitscommon.h:20
CCDBinType
CCDBinType
Definition: indicommon.h:70
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