Instrument Neutral Distributed Interface INDI 2.2.5
indidetector.h
Go to the documentation of this file.
1/*******************************************************************************
2 Copyright(c) 2010, 2017 Ilia Platone, Jasem Mutlaq. All rights reserved.
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License version 2 as published by the Free Software Foundation.
7
8 This library is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 Library General Public License for more details.
12
13 You should have received a copy of the GNU Library General Public License
14 along with this library; see the file COPYING.LIB. If not, write to
15 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16 Boston, MA 02110-1301, USA.
17*******************************************************************************/
18
19#pragma once
20
21#include "indisensorinterface.h"
22#include "dsp.h"
23#include <fitsio.h>
24
25#include <fitsio.h>
26
27#include <memory>
28#include <cstring>
29#include <chrono>
30#include <stdint.h>
31#include <mutex>
32#include <thread>
33
34//JM 2019-01-17: Disabled until further notice
35//#define WITH_EXPOSURE_LOOPING
36
37
54namespace INDI
55{
56class StreamManager;
57
58struct pulse_t
59{
60 timespec start;
61 timespec duration;
62};
63
65{
66 public:
67
68 enum
69 {
72
73 Detector();
74 virtual ~Detector();
75
76 bool initProperties() override;
77 bool updateProperties() override;
78 void ISGetProperties(const char *dev) override;
79 bool ISNewNumber(const char *dev, const char *name, double values[], char *names[], int n) override;
80 bool ISNewSwitch(const char *dev, const char *name, ISState *states, char *names[], int n) override;
81 bool ISNewText(const char *dev, const char *name, char *texts[], char *names[], int n) override;
82 bool ISNewBLOB(const char *dev, const char *name, int sizes[], int blobsizes[], char *blobs[], char *formats[],
83 char *names[], int n) override;
84 bool ISSnoopDevice(XMLEle *root) override;
85
86 void addFITSKeywords(fitsfile *fptr, uint8_t* buf, int len) override;
87
88 virtual bool StartIntegration(double duration) override;
89
94 void setResolution(double res);
95
100 inline double getResolution()
101 {
102 return Resolution;
103 }
104
109 void setTriggerLevel(double level);
110
115 inline double getTriggerLevel()
116 {
117 return TriggerLevel;
118 }
119
127
131 uint32_t GetDetectorCapability() const
132 {
133 return capability;
134 }
135
140 void SetDetectorCapability(uint32_t cap);
141
152 virtual void setMinMaxStep(const char *property, const char *element, double min, double max, double step,
153 bool sendToClient = true) override;
154
161
162 private:
163 double TriggerLevel;
164 double Resolution;
165 INumber DetectorSettingsN[2];
166};
167}
Class to provide general functionality of Monodimensional Detector.
enum INDI::Detector::@437 DetectorCapability
void ISGetProperties(const char *dev) override
define the driver's properties to the client. Usually, only a minimum set of properties are defined t...
bool updateProperties() override
updateProperties is called whenever there is a change in the CONNECTION status of the driver....
double getResolution()
getResolution Get resolution of the detector in ns.
INumberVectorProperty * getDetectorSettings()
Return Vector Info Property.
bool ISNewSwitch(const char *dev, const char *name, ISState *states, char *names[], int n) override
Process the client newSwitch command.
bool initProperties() override
Initialize properties initial state and value. The child class must implement this function.
bool ISNewNumber(const char *dev, const char *name, double values[], char *names[], int n) override
Process the client newNumber command.
bool ISNewBLOB(const char *dev, const char *name, int sizes[], int blobsizes[], char *blobs[], char *formats[], char *names[], int n) override
Process the client newBLOB command.
uint32_t GetDetectorCapability() const
GetDetectorCapability returns the Sensor capabilities.
void addFITSKeywords(fitsfile *fptr, uint8_t *buf, int len) override
Add FITS keywords to a fits file.
INumberVectorProperty DetectorSettingsNP
bool ISNewText(const char *dev, const char *name, char *texts[], char *names[], int n) override
Process the client newSwitch command.
virtual bool StartIntegration(double duration) override
Start integration from the Sensor device.
bool ISSnoopDevice(XMLEle *root) override
Process a snoop event from INDI server. This function is called when a snooped property is updated in...
virtual void setMinMaxStep(const char *property, const char *element, double min, double max, double step, bool sendToClient=true) override
setMinMaxStep for a number property element
void SetDetectorCapability(uint32_t cap)
SetDetectorCapability Set the Detector capabilities. Al fields must be initialized.
void setTriggerLevel(double level)
setTriggerLevel Set Trigger voltage level used for pulse detection.
double getTriggerLevel()
getTriggerLevel Get Trigger voltage level used for pulse detection.
void setResolution(double res)
setResolution Set resolution of the detector in ns.
virtual ~Detector()
The SensorDevice class provides functionality of a Sensor Device within a Sensor.
Class to provide video streaming and recording functionality.
double max(void)
#define min(a, b)
ISState
Switch state.
Definition indiapi.h:148
Namespace to encapsulate INDI client, drivers, and mediator classes.
timespec start
timespec duration
One number descriptor.
Number vector property descriptor.
Definition indiapi.h:317