Instrument Neutral Distributed Interface INDI 2.2.5
indispectrograph.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
58class Spectrograph : public virtual SensorInterface
59{
60 public:
61 enum
62 {
65
67 virtual ~Spectrograph();
68
69 virtual bool initProperties() override;
70 virtual bool updateProperties() override;
71 virtual void ISGetProperties(const char *dev) override;
72 virtual bool ISNewNumber(const char *dev, const char *name, double values[], char *names[], int n) override;
73 virtual bool ISNewSwitch(const char *dev, const char *name, ISState *states, char *names[], int n) override;
74 virtual bool ISNewText(const char *dev, const char *name, char *texts[], char *names[], int n) override;
75 virtual bool ISNewBLOB(const char *dev, const char *name, int sizes[], int blobsizes[], char *blobs[], char *formats[],
76 char *names[], int n) override;
77 virtual bool ISSnoopDevice(XMLEle *root) override;
78
79 virtual bool StartIntegration(double duration) override;
80 virtual void addFITSKeywords(fitsfile *fptr, uint8_t* buf, int len) override;
81
86 void setLowCutFrequency(double freq);
87
92 void setHighCutFrequency(double freq);
93
98 void setGain(double gain);
99
104 inline double getLowCutFrequency()
105 {
106 return LowCutFrequency;
107 }
108
113 inline double getHighCutFrequency()
114 {
115 return HighCutFrequency;
116 }
117
122 inline double getGain()
123 {
124 return Gain;
125 }
126
134
139 {
140 return capability;
141 }
142
147 void SetSpectrographCapability(uint32_t cap);
148
159 virtual void setMinMaxStep(const char *property, const char *element, double min, double max, double step,
160 bool sendToClient = true) override;
161
172
173 private:
174 double LowCutFrequency;
175 double HighCutFrequency;
176 double Gain;
177
178};
179}
The SensorDevice class provides functionality of a Sensor Device within a Sensor.
Class to provide general functionality of Monodimensional Spectrograph.
double getGain()
getGain Get requested integration gain for the sensor.
virtual bool StartIntegration(double duration) override
Start integration from the Sensor device.
void setLowCutFrequency(double freq)
setLowCutFrequency Set low cut frequency of Spectrograph device.
uint32_t GetSpectrographCapability() const
GetSpectrographCapability returns the Sensor capabilities.
double getHighCutFrequency()
getHighCutFrequency Get requested high cut frequency in Hz.
virtual bool ISNewText(const char *dev, const char *name, char *texts[], char *names[], int n) override
Process the client newSwitch command.
virtual bool updateProperties() override
updateProperties is called whenever there is a change in the CONNECTION status of the driver....
void SetSpectrographCapability(uint32_t cap)
SetSpectrographCapability Set the Spectrograph capabilities. Al fields must be initialized.
virtual bool ISNewNumber(const char *dev, const char *name, double values[], char *names[], int n) override
Process the client newNumber command.
virtual 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.
void setGain(double gain)
setGain Set gain of Spectrograph device.
virtual bool initProperties() override
Initialize properties initial state and value. The child class must implement this function.
INumber SpectrographSettingsN[8]
INumberVectorProperty * getSpectrographSettings()
Return Vector Info Property.
virtual void ISGetProperties(const char *dev) override
define the driver's properties to the client. Usually, only a minimum set of properties are defined t...
enum INDI::Spectrograph::@472 SpectrographCapability
virtual void addFITSKeywords(fitsfile *fptr, uint8_t *buf, int len) override
Add FITS keywords to a fits file.
virtual bool ISSnoopDevice(XMLEle *root) override
Process a snoop event from INDI server. This function is called when a snooped property is updated in...
INumberVectorProperty SpectrographSettingsNP
virtual bool ISNewSwitch(const char *dev, const char *name, ISState *states, char *names[], int n) override
Process the client newSwitch command.
void setHighCutFrequency(double freq)
setHighCutFrequency Set high cut frequency of Spectrograph device.
double getLowCutFrequency()
getLowCutFrequency Get requested low cut frequency in Hz.
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
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.
One number descriptor.
Number vector property descriptor.
Definition indiapi.h:317