Instrument Neutral Distributed Interface INDI  1.9.5
indireceiver.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 #ifdef HAVE_WEBSOCKET
26 #include "indiwsserver.h"
27 #endif
28 
29 #include <fitsio.h>
30 
31 #include <memory>
32 #include <cstring>
33 #include <chrono>
34 #include <stdint.h>
35 #include <mutex>
36 #include <thread>
37 
38 //JM 2019-01-17: Disabled until further notice
39 //#define WITH_EXPOSURE_LOOPING
40 
41 
58 namespace INDI
59 {
60 class StreamManager;
61 
62 class Receiver : public virtual SensorInterface
63 {
64  public:
65  enum
66  {
69 
70  Receiver();
71  virtual ~Receiver();
72 
73  virtual bool initProperties() override;
74  virtual bool updateProperties() override;
75  virtual void ISGetProperties(const char *dev) override;
76  virtual bool ISNewNumber(const char *dev, const char *name, double values[], char *names[], int n) override;
77  virtual bool ISNewSwitch(const char *dev, const char *name, ISState *states, char *names[], int n) override;
78  virtual bool ISNewText(const char *dev, const char *name, char *texts[], char *names[], int n) override;
79  virtual bool ISNewBLOB(const char *dev, const char *name, int sizes[], int blobsizes[], char *blobs[], char *formats[], char *names[], int n) override;
80  virtual bool ISSnoopDevice(XMLEle *root) override;
81 
82  virtual bool StartIntegration(double duration) override;
83  virtual void addFITSKeywords(fitsfile *fptr, uint8_t* buf, int len) override;
84 
89  void setSampleRate(double sr);
90 
95  void setBandwidth(double bandwidth);
96 
101  void setGain(double gain);
102 
107  void setFrequency(double freq);
108 
113  inline double getBandwidth()
114  {
115  return Bandwidth;
116  }
117 
122  inline double getGain()
123  {
124  return Gain;
125  }
126 
131  inline double getFrequency()
132  {
133  return Frequency;
134  }
135 
140  inline double getSampleRate()
141  {
142  return SampleRate;
143  }
144 
149  {
150  return &ReceiverSettingsNP;
151  }
152 
156  uint32_t GetReceiverCapability() const
157  {
158  return capability;
159  }
160 
165  void SetReceiverCapability(uint32_t cap);
166 
177  void setMinMaxStep(const char *property, const char *element, double min, double max, double step,
178  bool sendToClient = true);
179 
180  typedef enum
181  {
191 
192 private:
193  double Frequency;
194  double SampleRate;
195  double Bandwidth;
196  double Gain;
197 
198 };
199 }
INDI::Receiver::getReceiverSettings
INumberVectorProperty * getReceiverSettings()
Return Vector Info Property.
Definition: indireceiver.h:148
INDI::Receiver::RECEIVER_ANTENNA
@ RECEIVER_ANTENNA
Definition: indireceiver.h:187
INDI::Receiver::ISNewBLOB
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.
Definition: indireceiver.cpp:136
INDI::Receiver::getGain
double getGain()
getGain Get requested integration gain for the sensor.
Definition: indireceiver.h:122
dsp.h
INDI::Receiver::RECEIVER_BANDWIDTH
@ RECEIVER_BANDWIDTH
Definition: indireceiver.h:184
min
double min(void)
INDI::Receiver::setBandwidth
void setBandwidth(double bandwidth)
setBandwidth Set bandwidth of Receiver device.
Definition: indireceiver.cpp:142
INDI::Receiver::getSampleRate
double getSampleRate()
getSampleRate Get requested sample rate for the sensor in Hz.
Definition: indireceiver.h:140
INumber
One number descriptor.
INDI::Receiver::ISNewNumber
virtual bool ISNewNumber(const char *dev, const char *name, double values[], char *names[], int n) override
Process the client newNumber command.
Definition: indireceiver.cpp:120
INDI::Receiver::SPECTROGRAPH_MAX_CAPABILITY
@ SPECTROGRAPH_MAX_CAPABILITY
Definition: indireceiver.h:67
INDI::SensorInterface
The SensorDevice class provides functionality of a Sensor Device within a Sensor.
Definition: indisensorinterface.h:70
INDI::Receiver::setMinMaxStep
void setMinMaxStep(const char *property, const char *element, double min, double max, double step, bool sendToClient=true)
setMinMaxStep for a number property element
Definition: indireceiver.cpp:191
INDI::Receiver::setSampleRate
void setSampleRate(double sr)
setSampleRate Set depth of Receiver device.
Definition: indireceiver.cpp:151
INDI::SensorInterface::SENSOR_MAX_CAPABILITY
@ SENSOR_MAX_CAPABILITY
Definition: indisensorinterface.h:81
INDI::Receiver::updateProperties
virtual bool updateProperties() override
updateProperties is called whenever there is a change in the CONNECTION status of the driver....
Definition: indireceiver.cpp:91
StreamManager
Class to provide video streaming and recording functionality.
INDI::Receiver::getBandwidth
double getBandwidth()
getBandwidth Get requested integration bandwidth for the sensor in Hz.
Definition: indireceiver.h:113
max
double max(void)
INDI::Receiver::ReceiverCapability
enum INDI::Receiver::@192 ReceiverCapability
INDI::Receiver::GetReceiverCapability
uint32_t GetReceiverCapability() const
GetReceiverCapability returns the Sensor capabilities.
Definition: indireceiver.h:156
INDI::SensorInterface::capability
uint32_t capability
Definition: indisensorinterface.h:418
_INumberVectorProperty
Number vector property descriptor.
Definition: indiapi.h:317
INDI::Receiver::Receiver
Receiver()
Definition: indireceiver.cpp:62
INDI::Receiver::RECEIVER_BITSPERSAMPLE
@ RECEIVER_BITSPERSAMPLE
Definition: indireceiver.h:185
INDI::Receiver::ReceiverSettingsN
INumber ReceiverSettingsN[7]
Definition: indireceiver.h:190
xml_ele_
Definition: lilxml.c:105
INDI::Receiver::~Receiver
virtual ~Receiver()
Definition: indireceiver.cpp:66
INDI::Receiver::initProperties
virtual bool initProperties() override
Initilize properties initial state and value. The child class must implement this function.
Definition: indireceiver.cpp:70
INDI::Receiver::SetReceiverCapability
void SetReceiverCapability(uint32_t cap)
SetReceiverCapability Set the Receiver capabilities. Al fields must be initilized.
Definition: indireceiver.cpp:178
INDI::Receiver::ReceiverSettingsNP
INumberVectorProperty ReceiverSettingsNP
Definition: indireceiver.h:189
indiwsserver.h
INDI::Receiver::ISGetProperties
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...
Definition: indireceiver.cpp:86
INDI::Receiver::addFITSKeywords
virtual void addFITSKeywords(fitsfile *fptr, uint8_t *buf, int len) override
Add FITS keywords to a fits file.
Definition: indireceiver.cpp:213
INDI::Receiver::ISNewText
virtual bool ISNewText(const char *dev, const char *name, char *texts[], char *names[], int n) override
Process the client newSwitch command.
Definition: indireceiver.cpp:115
name
const char * name
Definition: indiserver.c:116
indisensorinterface.h
INDI::Receiver::setFrequency
void setFrequency(double freq)
setFrequency Set the frequency observed.
Definition: indireceiver.cpp:169
INDI::Receiver::RECEIVER_FREQUENCY
@ RECEIVER_FREQUENCY
Definition: indireceiver.h:183
INDI
Namespace to encapsulate INDI client, drivers, and mediator classes.
Definition: AlignmentSubsystemForClients.cpp:11
INDI::Receiver::RECEIVER_GAIN
@ RECEIVER_GAIN
Definition: indireceiver.h:182
INDI::Receiver::RECEIVER_SAMPLERATE
@ RECEIVER_SAMPLERATE
Definition: indireceiver.h:186
INDI::Receiver::getFrequency
double getFrequency()
getFrequency Get requested integration frequency for the sensor in Hz.
Definition: indireceiver.h:131
INDI::Receiver::setGain
void setGain(double gain)
setGain Set gain of Receiver device.
Definition: indireceiver.cpp:160
ISState
ISState
Switch state.
Definition: indiapi.h:148
INDI::Receiver::ISNewSwitch
virtual bool ISNewSwitch(const char *dev, const char *name, ISState *states, char *names[], int n) override
Process the client newSwitch command.
Definition: indireceiver.cpp:131
INDI::Receiver
Class to provide general functionality of Monodimensional Receiver.
Definition: indireceiver.h:62
INDI::Receiver::ISSnoopDevice
virtual bool ISSnoopDevice(XMLEle *root) override
Process a snoop event from INDI server. This function is called when a snooped property is updated in...
Definition: indireceiver.cpp:110
INDI::Receiver::RECEIVER_INFO_INDEX
RECEIVER_INFO_INDEX
Definition: indireceiver.h:180
INDI::Receiver::StartIntegration
virtual bool StartIntegration(double duration) override
Start integration from the Sensor device.
Definition: indireceiver.cpp:184